使用percona xtrabackup对两个数据库实例进行备份,备份的脚本如下所示:

  1. #!/bin/bash
  2. BASEDIR="/usr/local/mysql"
  3. BIN="$BASEDIR/bin"
  4. MYDUMPE="/usr/local/bin/mydumper"
  5. XTRABACKUP="/usr/bin/xtrabackup"
  6. DATA1_HOME="$BASEDIR/mysqldata/data1"
  7. DATA1_MYCNF="$DATA1_HOME/my.cnf"
  8. DATA1_SOCK=`grep socket $DATA1_MYCNF|awk '{print $3}'`
  9. DATA1_PORT=`grep port $DATA1_MYCNF|awk '{print $3}'`
  10. DATA1_IP=`grep bind-address $DATA1_MYCNF|awk '{print $3}'`
  11.  
  12. DATA2_HOME="$BASEDIR/mysqldata/data2"
  13. DATA2_MYCNF="$DATA2_HOME/my.cnf"
  14. DATA2_SOCK=`grep socket $DATA2_MYCNF|awk '{print $3}'`
  15. DATA2_PORT=`grep port $DATA2_MYCNF|awk '{print $3}'`
  16. DATA2_IP=`grep bind-address $DATA2_MYCNF|awk '{print $3}'`
  17.  
  18. USER="root"
  19. PASSWORD=""
  20. BACKUPPATH_LOCAL="/usr/local/mysql/mysqldata/databak"
  21. BACKUPPATH_REMOTE="/usr/local/mysql/databak"
  22. #get the first day of one week,all backup directory is named by date,the incremental-basedir is the first day of the week
  23. DATE="`date +%F`"
  24. # get the day number of today in this week,monday is ,sunday is as the first day of this week
  25. WEEKDAY="`date +%u`"
  26. AGO="$WEEKDAY days ago"
  27. WEEKNUM=`date +%U`
  28. #get the first day of one week,as the incremental_back_base
  29. WEEK_FIRST_DAY=`date -d "$AGO" +%F`
  30. TODAY_DIR="$BACKUPPATH_LOCAL/today"
  31.  
  32. # the full backup function
  33. full_backup(){
  34. local DEFAULTS_FILE=$
  35. local USER=$
  36. local PASSWORD=$
  37. local SOCKET=$
  38. local TARGET_DIR=$
  39. local LOG_FILE=$
  40. $BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "stop slave;"
  41. $XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --target-dir=$TARGET_DIR >$LOG_FILE >&
  42. $BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "start slave;"
  43.  
  44. }
  45. # the incremental backup function
  46. incremental_backup(){
  47. local DEFAULTS_FILE=$
  48. local USER=$
  49. local PASSWORD=$
  50. local SOCKET=$
  51. local TARGET_DIR=$
  52. local LOG_FILE=$
  53. local BASE_DIR=$
  54. local NAME=$
  55. $BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "stop slave;"
  56. $XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --incremental-basedir=$BASE_DIR --target-dir=$TARGET_DIR >$LOG_FILE >&
  57. #$XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --compression --stream=xbstream --incremental-basedir=$BASE_DIR --target-dir=$TARGET_DIR >$DATE-$NAME.tar
  58. $BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "start slave;"
  59. }
  60. # check the mysql is running or not,if mysql is not running ,the backup will cancel
  61. mysql_check(){
  62. local SOCKET=$
  63. local IP=$
  64. local PORT=$
  65. local NAME=$
  66. if [ `ps -ef|grep $SOCKET|grep -Ev grep|wc -l` -ge ] && [ `netstat -ltnp|grep $IP:$PORT|grep -Ev grep|wc -l` -eq ]
  67. then
  68. echo " THE MYSQL SERVER $NAME IS RUNNING"
  69. return
  70. else
  71. echo "THE MYSQL SERVER $NAME IS NOT RUNNING"
  72. return
  73. fi
  74. }
  75.  
  76. # main
  77. # delete yesterday backup in TODAY directory
  78. /bin/mv $TODAY_DIR/* $BACKUPPATH_LOCAL
  79.  
  80. [ -e $TODAY_DIR ] || mkdir -p $TODAY_DIR
  81. [ -e "$BACKUPPATH_LOCAL/$DATE" ] || mkdir -p "$BACKUPPATH_LOCAL/$DATE"
  82. cd "$BACKUPPATH_LOCAL/$DATE"
  83.  
  84. TARGET_DIR="$BACKUPPATH_LOCAL/$DATE"
  85.  
  86. # if today is sunday,the backup type is full_backup,else the backup type is delta backup on the sunday full backup
  87. if [ $WEEKDAY -eq 7 ]
  88. then
  89. mysql_check $DATA1_SOCK $DATA1_IP $DATA1_PORT "DATA1"
  90. [ $? -eq 1 ] && full_backup $DATA1_MYCNF $USER $PASSWORD $DATA1_SOCK $TARGET_DIR/data1 "$TARGET_DIR/data1.log"
  91. mysql_check $DATA2_SOCK $DATA2_IP $DATA2_PORT "DATA2"
  92. #echo $TARGET_DIR
  93. [ $? -eq 1 ] && full_backup $DATA2_MYCNF $USER $PASSWORD $DATA2_SOCK $TARGET_DIR/data2 "$TARGET_DIR/data2.log"
  94. else
  95. BASE_DIR=$BACKUPPATH_LOCAL/$WEEK_FIRST_DAY
  96. mysql_check $DATA1_SOCK $DATA1_IP $DATA1_PORT "DATA1"
  97. [ $? -eq 1 ] && incremental_backup $DATA1_MYCNF $USER $PASSWORD $DATA1_SOCK $TARGET_DIR/data1 $TARGET_DIR/data1.log $BASE_DIR/data1 data1
  98. mysql_check $DATA2_SOCK $DATA2_IP $DATA2_PORT "DATA2"
  99. [ $? -eq 1 ] && incremental_backup $DATA2_MYCNF $USER $PASSWORD $DATA2_SOCK $TARGET_DIR/data2 $TARGET_DIR/data2.log $BASE_DIR/data2 data2
  100. fi
  101. # copy today backup to TODAY directory,the NBU server will catch TODAY directory
  102. #/bin/mv -ar $TARGET_DIR $TODAY_DIR
  103.  
  104. /bin/mv $TARGET_DIR $TODAY_DIR

  主要实现的功能是,每周日早上进行一次全备份操作,然后周内的每天,基于周日的全备,做一个增量备份的操作,每个实例备份的结果,放在以实例命名的目录下,每天忙备份的结果,放在以当前日期命名的目录下。

  备份脚本对应的删除脚本,实现的功能是这样的,每周日,也就是全备的时候,去删除上上周的所有备份,保留上周的所有备份,这个时候要判断上上周的日期,并且找到所有这些目录,实现的脚本如下:

  

  1. # delete the backup ,delete days ago full backup and the incremental backup based on that full backup
  2.  
  3. BACKUPPATH=/usr/local/mysql/mysqldata/databak
  4. DATE=`date +%F`
  5.  
  6. DELETE_DATE_SUNDAY=`date -d "14 days ago" +%F`
  7. for index in {-,-,-,-,-,-}
  8. do
  9. DELETE_DATE_WEEKDAY=`date -d "$index days ago $DELETE_DATE_SUNDAY" +%F`
  10. DELETE_DATE_DIR=$BACKUPPATH/$DELETE_DATE_WEEKDAY
  11. [ -e $DELETE_DATE_DIR ] && rm -rf $DELETE_DATE_DIR
  12. done
  13.  
  14. [ -e $BACKUPPATH/$DELETE_DATE_SUNDAY ] && rm -rf $BACKUPPATH/$DELETE_DATE_SUNDAY

  在做主从备份的同时,需要对主服务器上面的binlog进行实时同步到从服务器上,因为主服务器上的binlog会被覆盖掉,所以需要在备份的从服务器上保留完整的binlog信息。具体的操作命令是

  1. /usr/local/mysql/bin/mysqlbinlog --raw --read-from-remote-server --stop-never --host=*.*.*.* --port=**** --user=replication --password=**** mysql-bin. --result-file=/usr/local/mysql/mysqldata/master_binlog_bak/data1/back- &

  这行命令的主要功能是从远方的服务器上同步binlog,-raw是指binlog 的格式,stop-never是指不中断的去同步,host和port、user和passeord是有replication权限的用户,后面要跟一个binlog 名称,也就是master主机上的binlog.index中存在的binlog文件名,result-file是要写一个目录名,如果除了目录名,还有其他的字段,那就是定义了目标文件的命名规则。比如/usr/local/mysql/mysqldata/databak/back-,则文件名称为back-mysql-bin.0000*.

使用perconna xtrabackup备份脚本的更多相关文章

  1. MySQL XtraBackup备份脚本

     #backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...

  2. xtrabackup备份脚本

    背景:现网环境全备份脚本:基于xtrabackup命令 #!/bin/sh # MySQL端口 PORT=' # 备份用户 USER='bkpuser' PAWD='bkpuser' Time=`da ...

  3. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  4. Xtrabackup每周增量备份脚本程序

    Xtrabackup每周增量备份脚本程序(含附件)   程序描述 本程序是一个对percona xtrabackup使用的脚本,它完成了MySQL每周的备份. 程序结构 此程序包含了4个目录(bin. ...

  5. xtrabackup备份和恢复数据脚本

    该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...

  6. Percona XtraBackup 备份原理说明【转】

    本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...

  7. XtraBackup备份笔记

    安装 rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm yum in ...

  8. Python 生产环境MySQL数据库增量备份脚本

    MySQL数据库常用的办法是通过MySQLdump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍文章介绍xtrabackup的热备工具,见 http://w ...

  9. Percona Xtrabackup备份mysql(转)

    add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...

随机推荐

  1. fastjson与各类型的转换

    参考:https://www.cnblogs.com/ceshi2016/p/7381478.html http://www.cnblogs.com/goody9807/p/4244862.html ...

  2. linux按时间查询日志

    在系统应用集中部署的时候,很多日志因为太多难以定位,获取某段时间的日志是对运维人员非常关键的事情. 一.sed查看某时间段到现在的系统日志: sed  -n  '/May 20 17/,$p'   / ...

  3. com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1035079 -- APPARENT DEADLOCK!!! Complete Status:

    com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1035079 -- APPARENT DEADLOCK!!! C ...

  4. codeforces158D

    Ice Sculptures CodeForces - 158D The Berland University is preparing to celebrate the 256-th anniver ...

  5. 牛客网-2018年湘潭大学程序设计竞赛-F

    题目链接:https://www.nowcoder.com/acm/contest/105/F 解题思路:这道题第一眼直接思路就是搜索,但想了半天没想到有什么好办法搜,然后就转成最短路写了, 因为多入 ...

  6. Promise实现队列

    有时候我不希望所有动作一起发生,而是按照一定顺序,逐个进行 var promise=doSomething(); promise=promise.then(doSomethingElse); prom ...

  7. Linux大学实验

    一. 准备工作(预防抄袭,此步必做) 1. 请将提示符设为:学号加波浪号.输入PS1=学号~,如PS1=110015~, 回车执行 2. 如发现提示符.学号不匹配, 视为抄袭或无效 二.操作题(每题5 ...

  8. 非阻赛IO模型

    实例一: 只能在waitdata 阶段找到IO的解决方案 from concurrent.futures import ThreadPoolExecutor import socket server ...

  9. Unnitest测试框架总结

    Unnitest总结 第一点,setUp和tearDown方法 l  每次执行test开头的用例都会执行setUp和tearDown方法 l  如:  import unittest class M ...

  10. 华为TaiShan 2280 ARM 服务器

    华为TaiShan 2280 ARM 服务器 华为TaiShan 2280 ARM 服务器  https://e.huawei.com/cn/products/cloud-computing-dc/s ...