1、概述

在公司业务里面,当对应的业务数据不是很重要的时候,我们一般会简单的写个脚本,每天半夜把数据库数据全量拉取下来,备份到本地磁盘。但当业务比较重要的时候,这样简单操作会存在许多问题,比如本地磁盘损坏。因此,为了保证数据的安全性和可恢复性,对于重要业务一般不会备份到本地磁盘。

下面描述一下自己在工作中用到的解决方案,总体的架构图如下:DB系统为一主一从,然后第一步每天凌晨12点去备份从机上的数据;第二步凌晨1点再将备份数据库上的数据备份到公司的磁盘上。接下来根据这个架构,给出详细的备份代码:

2、详细备份方案

2.1 slave->备份服务器

采用的是mysqldump,slave数据库为InnoDB引擎。

 #!/bin/bash

 PROGRAM_NAME="cold_backup"
LOG_FILE=$PROGRAM_NAME.log
PID_FILE=$PROGRAM_NAME.pid LOG_LEVEL=
LOG_LEVEL_STRING=("TRACE" "DEBUG" "INFO" "WARNING" "ERROR" "FATAL") function LOG()
{
if [ $ -gt $LOG_LEVEL ]; then
echo "[$(date "+%y-%m-%d %H:%M:%S")][${LOG_LEVEL_STRING[$1]}]$2" >> ${LOG_DIR}$LOG_FILE
fi
} function LOG_FATAL()
{
LOG "$1"
} function LOG_ERROR()
{
LOG "$1"
} function LOG_WARNING()
{
LOG "$1"
} function LOG_INFO()
{
LOG "$1"
} function LOG_DEBUG()
{
LOG "$1"
} function LOG_TRACE()
{
LOG "$1"
} # 其实不需要,因为每天就备份一次,log完全不会超过32M
function shrink_file()
{
local file=$
if [ ! -f $file ]; then
return
fi
local file_size=`du -b $file | awk '{print $1}'`
if [ $? -ne ]; then
return
fi
max_size= #32M
if [ $file_size -lt $max_size ]; then
return
fi
truncate_row=$(wc -l $file | awk '{print $1}')
((truncate_row=truncate_row/))
if [ $truncate_row -ge ]; then
sed -i "1,${truncate_row}d" $file
return
fi
return
} function clear_file()
{
echo "" > $
} if [ -f $PID_FILE ]; then
program_pid=`cat $PID_FILE`
if [ $? -eq ] && [ -n "$program_pid" ]; then
if ps u -p "$program_pid" | grep -wc $PROGRAM_NAME ; then
LOG_INFO "program is running, quit now"
exit
fi
fi
fi # XXX业务数据库
SLAVE_HOST="1.2.3.4:3306"
SERVER_NAME="[ShangHai_XX_YY_ZZ_Slave]" BACKUP_DIR="/data/cold_backup"
TODAY=`date '+%Y%m%d'`
BACKUP_FILE=${SLAVE_HOST}_${SERVER_NAME}_${TODAY}.sql echo "$$" > $PID_FILE
shrink_file $LOG_FILE
LOG_INFO "--------------------START BACKUP--------------------"
LOG_INFO "begindump:`date '+%y-%m-%d %H:%M:%S'`" /usr/local/services/mysql/bin/mysqldump --single-transaction --socket=/tmp/mysql_3306.sock --databases XXX数据库 > "$BACKUP_FILE"
rm -f $(find $BACKUP_DIR -name '*.sql' -mtime +) count=`ls -l | grep $TODAY | grep sql | wc -l`
if [ $count -eq ];then
# alarm, no today sql data
LOG_WARNING " NO cold backup"
fi LOG_INFO "enddump:`date '+%y-%m-%d %H:%M:%S'`" # remove pid_file
rm $PID_FILE

2.2 备份服务器->公司磁盘

采用rsync备份,需要备份服务器和公司磁盘之间可以直接rsync,可以通过ssh来设置。

重要业务MySQL冷备解决方案的更多相关文章

  1. MySQL主备模式的数据一致性解决方案

     根据阿里交易型业务的特点,以及在双十一这样业内罕有的需求推动下,我们在官方的MySQL基础上增加了非常多实用的功能.性能补丁.而在使用MySQL的过程中,数据一致性是绕不开的话题之一.本文主要从阿里 ...

  2. mysql之冷备和mysqldump、mydumper、xtrabackup备份

    1.冷备流程: 停库备份,冷备份一般用于非核心业务,这类业务一般都允许停库. 在停止数据库后,将数据文件拷贝出来,然后对原始数据文件进行备份. 流程: 1.关闭数据库备份          2.拷贝数 ...

  3. 高可用性、负载均衡的mysql集群解决方案

    高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么 ...

  4. MySQL高可用解决方案(MySQL HA Solution)

    http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...

  5. (转)MySQL高可用解决方案

    MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...

  6. MySQL主备复制原理、实现及异常处理

    复制概述 MySQL支持三种复制方式:基于行(Row)的复制.基于语句(Statement)的复制和混合类型(Mixed)的复制. 基于语句的复制早在3.23版本中就存在,而基于行的复制方式在5.1版 ...

  7. Oracle冷备迁移脚本(文件系统)

    Oracle冷备迁移脚本(文件系统) 两个脚本: 配置文件生成脚本dbinfo.sh 网络拷贝到目标服务器的脚本cpdb16.sh 1. 配置文件生成脚本 #!/bin/bash #Usage: cr ...

  8. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  9. 请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】

    本文来自:http://www.woqutech.com/?p=1116 MySQL 本身通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之 ...

随机推荐

  1. ubuntu adb devices 找不到任何东西,安装驱动

    在Android平台下做开发,adb总是需要使用到的,同时,因为linux没有windows这样操作傻瓜化,有些东西还是需要自行设置的,否则将会连接不上. 关于这些内容,google也有一定的描述,可 ...

  2. Hadoop--map/reduce实现单词计数

    import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; ...

  3. 解决windows10搜索不到内容的问题

    windows 10的搜索突然搜不到程序了, 网上查询说要重建索引,方法如下: 1.按ctr+R键,输入%LocalAppData%\Packages\windows.immersivecontrol ...

  4. HW4.25

    public class Solution { public static void main(String[] args) { double sum; for(int i = 10000; i &l ...

  5. hdoj 1564 Play a game

    Play a game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.3

    作者: hzboy192@192.com Blog: http://my.csdn.net/peng_hao1988 版本总览:http://blog.csdn.net/peng_hao1988/ar ...

  7. 使用gulp自动化配置环境变量

    使用gulp拷贝文件,可以完成开发api环境变量的配置,例如公司的线上环境有三个: 1.alpha线上测试环境 2.dev线上测试环境 3.test 本地测试环境 (4.production 正式系统 ...

  8. linux系统垃圾清理

    早上刚来,服务器出502错误了.我登上linux服务器,发现敲一个命令都提示没空间了, 用 df -h 查看了下 发现系统盘目录空间大小占用达到90%多,我觉得有些诧异, 难道是产生系统垃圾 然后用 ...

  9. 对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。

    这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关 ...

  10. chrome 全屏无法退出

    起因:chrome 按F11 全屏后,再按F11 死活无法退出全屏,关掉后,再打开chrome,自动全屏,F11无法退出全屏 系统:centos 6.3 解决:找到 chrome的用户数据存储目录,( ...