设为首页 加入收藏

TOP

MySQL数据库使用XtraBackup备份实现示例(一)
2019-08-13 05:35:31 】 浏览:26
Tags:MySQL 数据库 使用 XtraBackup 备份 实现 示例

  关于MySQL数据库的备份的工具和方式也比较多,本文只简单介绍一些我司一个平台的备份方案。Xtrabackup是由percona开源的免费数据库热备份软件,但是只能对InnoDB数据库和XtraDB存储引擎的数据库进行非阻塞的备份,但是对于MyISAM(比如MySQL)的备份同样在备份过程中会锁表。更多的关于Xtrabackup介绍请度娘之。


1,安装Xtrabackup


  到官网https://www.percona.com下载tar进行安装,由于我司服务器部分可连公网,直接在服务商下载并传到目标主机即可


  安装后会生成几个工具,其中innobackupex就可以用来对MySQL进行备份的。


2,我司平台数据库备份策略


  平台MySQL数据当前部署在A和B两台服务器上,两台互为主备实时同步数据,目前主用库是A。备份脚本和定时任务在两台服务上都有部署,定时任务在两台服务商每天都会执行,但是脚本策略只会对主用库进行备份,判断的主要依据是MySQL数据的浮动IP在那个主机上。


  全量备份


#全量备份脚本
#!/bin/bash
HOMEDIR=/opt/DB_backup


#判断全量备份的保存目录,日志目录是否存在,不存在的话新建
[ -d /opt/DB_backup/full_bakcup ] || mkdir -p /opt/DB_backup/full_bakcup
[ -d /opt/DB_backup/logs ] || mkdir -p /opt/DB_backup/logs


#设置备份日志
logfile=`date "+%Y%m%d"`_fullbackup.log
touch $HOMEDIR/logs/$logfile


#判断浮动IP是否启动在此主机上
/sbin/ip addr | grep 192.168.1.10
if [ $? -ne 0 ];then
        echo "This is not the master DB, no need to backup." >> $HOMEDIR/logs/$logfile
        exit 3
fi


#检查mysql是否运行正常
/usr/sbin/lsof -i:3306 | grep LISTEN
if [ $? -ne 0 ];then
        echo "MySQL may not working correctly, can not find LISTEN for mysql." >> $HOMEDIR/logs/$logfile
        exit 5
fi


ps -ef | grep /home/mysql/bin/mysqld
if [ $? -ne 0 ];then
        echo "MySQL may not working correctly, can not find pid for mysql." >> $HOMEDIR/logs/$logfile
        exit 7
fi


#执行全量备份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password="abc@123" /opt/DB_backup/full_bakcup/  &>> $HOMEDIR/logs/$logfile
[ $? -eq 0 ] && echo "Full backup successful." >> $HOMEDIR/logs/$logfile


#将前一周的增量备份转移到/home的临时保存目录
tmp_back_name="`date -d "-7 days" +"%Y%m%d"`-`date -d "-1 days" +"%Y%m%d"`"
tar -zcvf /home/old_DB_backup/$tmp_back_name.tar.gz /opt/DB_backup/incremental_backup/201* &>> $HOMEDIR/logs/$logfile && rm -rf /opt/DB_backup/incremental_backup/* &>> $HOMEDIR/logs/$logfile && echo "$tmp_back_name 的增量备份转移到/home的临时保存目录成功." >> $HOMEDIR/logs/$logfile


  增量备份


  增量备份同样通过MySQL浮动IP判断该主机是不是主用库,然后再判定MySQL的运行状态是否正常。上述判定通过会再对依赖的全量备份目录进行判定,如果该主机没有进行过全量备份,或者最近的一次全量备份是7天前的,则不会进行增量备份,转而进行全量备份。每天增量备份均使用周一的全量备份为base, 这样虽然会多占用一些磁盘空间,但是恢复时则只需要执行两次恢复动作即可。


#增量备份脚本
#!/bin/bash
#本脚本目的用于每天一次MySQL增量备份


HOMEDIR=/opt/DB_backup


#判断增量备份的保存目录,日志目录是否存在,不存在的话新建
[ -d /opt/DB_backup/incremental_backup ] || mkdir -p /opt/DB_backup/incremental_backup
[ -d /opt/DB_backup/logs ] || mkdir -p /opt/DB_backup/logs


#设置备份日志
logfile=`date "+%Y%m%d"`_incremental_backup.log


touch $HOMEDIR/logs/$logfile


#判断主机是不是mysql的主用库,如果不是主库则退出脚本的运行.
/sbin/ip addr | grep 192.168.1.10
if [ $? -ne 0 ];then
        echo "This is not the master DB, no need to backup." >> $HOMEDIR/logs/$logfile
        exit 3
fi


#检查mysql是否运行正常
/usr/sbin/lsof -i:3306 | grep LISTEN
if [ $? -ne 0 ];then
        echo "MySQL may not working correctly, can not find LISTEN for mysql." >> $HOMEDIR/logs/$logfile
        exit 5
fi


ps -ef | grep /home/mysql/bin/mysqld
if [ $? -ne 0 ];then
       
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL定时任务(event事件) 下一篇SQL 复制表到另一个表