1、概述

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

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

2、详细备份方案

2.1 slave->备份服务器

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

  1. #!/bin/bash
  2.  
  3. PROGRAM_NAME="cold_backup"
  4. LOG_FILE=$PROGRAM_NAME.log
  5. PID_FILE=$PROGRAM_NAME.pid
  6.  
  7. LOG_LEVEL=
  8. LOG_LEVEL_STRING=("TRACE" "DEBUG" "INFO" "WARNING" "ERROR" "FATAL")
  9.  
  10. function LOG()
  11. {
  12. if [ $ -gt $LOG_LEVEL ]; then
  13. echo "[$(date "+%y-%m-%d %H:%M:%S")][${LOG_LEVEL_STRING[$1]}]$2" >> ${LOG_DIR}$LOG_FILE
  14. fi
  15. }
  16.  
  17. function LOG_FATAL()
  18. {
  19. LOG "$1"
  20. }
  21.  
  22. function LOG_ERROR()
  23. {
  24. LOG "$1"
  25. }
  26.  
  27. function LOG_WARNING()
  28. {
  29. LOG "$1"
  30. }
  31.  
  32. function LOG_INFO()
  33. {
  34. LOG "$1"
  35. }
  36.  
  37. function LOG_DEBUG()
  38. {
  39. LOG "$1"
  40. }
  41.  
  42. function LOG_TRACE()
  43. {
  44. LOG "$1"
  45. }
  46.  
  47. # 其实不需要,因为每天就备份一次,log完全不会超过32M
  48. function shrink_file()
  49. {
  50. local file=$
  51. if [ ! -f $file ]; then
  52. return
  53. fi
  54. local file_size=`du -b $file | awk '{print $1}'`
  55. if [ $? -ne ]; then
  56. return
  57. fi
  58. max_size= #32M
  59. if [ $file_size -lt $max_size ]; then
  60. return
  61. fi
  62. truncate_row=$(wc -l $file | awk '{print $1}')
  63. ((truncate_row=truncate_row/))
  64. if [ $truncate_row -ge ]; then
  65. sed -i "1,${truncate_row}d" $file
  66. return
  67. fi
  68. return
  69. }
  70.  
  71. function clear_file()
  72. {
  73. echo "" > $
  74. }
  75.  
  76. if [ -f $PID_FILE ]; then
  77. program_pid=`cat $PID_FILE`
  78. if [ $? -eq ] && [ -n "$program_pid" ]; then
  79. if ps u -p "$program_pid" | grep -wc $PROGRAM_NAME ; then
  80. LOG_INFO "program is running, quit now"
  81. exit
  82. fi
  83. fi
  84. fi
  85.  
  86. # XXX业务数据库
  87. SLAVE_HOST="1.2.3.4:3306"
  88. SERVER_NAME="[ShangHai_XX_YY_ZZ_Slave]"
  89.  
  90. BACKUP_DIR="/data/cold_backup"
  91. TODAY=`date '+%Y%m%d'`
  92. BACKUP_FILE=${SLAVE_HOST}_${SERVER_NAME}_${TODAY}.sql
  93.  
  94. echo "$$" > $PID_FILE
  95. shrink_file $LOG_FILE
  96. LOG_INFO "--------------------START BACKUP--------------------"
  97. LOG_INFO "begindump:`date '+%y-%m-%d %H:%M:%S'`"
  98.  
  99. /usr/local/services/mysql/bin/mysqldump --single-transaction --socket=/tmp/mysql_3306.sock --databases XXX数据库 > "$BACKUP_FILE"
  100. rm -f $(find $BACKUP_DIR -name '*.sql' -mtime +)
  101.  
  102. count=`ls -l | grep $TODAY | grep sql | wc -l`
  103. if [ $count -eq ];then
  104. # alarm, no today sql data
  105. LOG_WARNING " NO cold backup"
  106. fi
  107.  
  108. LOG_INFO "enddump:`date '+%y-%m-%d %H:%M:%S'`"
  109.  
  110. # remove pid_file
  111. 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. HW4.15

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. usaco 打扫食槽

    Description 从前奶牛是不挑食的,但现在世道变了,她们变得非常挑剔.牧场里有N头奶牛,约翰 要向她们提供M种食物,第i头奶牛只会吃Pi号食物. 约翰每天都要打扫食槽,这件事非常累.奶牛沿着食 ...

  3. mongoDB文件太大查错纪录

    日志系统,突然从24号之后的都断层了,交易看不见.查了一下问题是MongoDB把硬盘撑爆了,看了下情况: -bash-3.2$ du -h 82M ./log .1G ./db/journal .0K ...

  4. 【BZOJ-1901】Dynamic Rankings 带修主席树

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7292  Solved: 3038[Su ...

  5. Java对象的强、软、弱和虚引用详解

    1.对象的强.软.弱和虚引用 转自:http://zhangjunhd.blog.51cto.com/113473/53092/ 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...

  6. careercup-链表 2.1

    2.1 编写代码,移除未排序链表中的重复节点. 不使用临时缓存: 如果不允许使用临时的缓存(即不能使用额外的存储空间),那需要两个指针, 当第一个指针指向某个元素时,第二个指针把该元素后面与它相同的元 ...

  7. Cocos2d-x中获取设备语言的方法

    1.cocos2dx获取设备语言的方法:CCApplication::sharedApplication()->getCurrentLanguage() 2.cocos2dx 2.1.4支持识别 ...

  8. ASI进行POST网络请求

    第一步,导入文件 //ASI进行GET数据请求 需要导入的头文件是 ASIHTTPRequest.h //ASI进行POST数据请求 需要导入的头文件是 ASIFormDataRequest.h // ...

  9. Vim程序编辑器

    Vim的三种模式: 1) 一般模式 以 vi 打开一个档案就直接进入一般模式了(这是默认的模式).在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内 ...

  10. 异步DNS解析的实现

    在高性能爬虫为什么使用定制DNS客户端一文中阐述了DNS解析是网络爬虫的瓶颈. 目前主要有两种方法来提高DNS解析效率: 1. 基于多线程的DNS 解析 2. 基于NIO的DNS解析 dnsjava中 ...