MySQL数据库使用xtrabackup备份实现小例子
关于MySQL数据库的备份的工具和方式也比较多,本文只简单介绍一些我司一个平台的备份方案。Xtrabackup是由percona开源的免费数据库热备份软件,但是只能对InnoDB数据库和XtraDB存储引擎的数据库进行非阻塞的备份,但是对于MyISAM(比如MySQL)的备份同样在备份过程中会锁表。更多的关于Xtrabackup介绍请度娘之。
1,安装Xtrabackup
到官网https://www.percona.com下载tar进行安装,由于我司服务器部分可连公网,直接在服务商下载并传到目标主机即可
[root@host1 tmp]#wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@host1 tmp]#tar -xvf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar
[root@host1 tmp]#rpm -ivh percona-xtrabackup-24-debuginfo-2.4.9-1.el6.x86_64.rpm
安装后会生成几个工具,其中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 ];then
echo "This is not the master DB, no need to backup." >> $HOMEDIR/logs/$logfile
exit
fi #检查mysql是否运行正常
/usr/sbin/lsof -i: | grep LISTEN
if [ $? -ne ];then
echo "MySQL may not working correctly, can not find LISTEN for mysql." >> $HOMEDIR/logs/$logfile
exit
fi ps -ef | grep /home/mysql/bin/mysqld
if [ $? -ne ];then
echo "MySQL may not working correctly, can not find pid for mysql." >> $HOMEDIR/logs/$logfile
exit
fi #执行全量备份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password="abc@123" /opt/DB_backup/full_bakcup/ &>> $HOMEDIR/logs/$logfile
[ $? -eq ] && echo "Full backup successful." >> $HOMEDIR/logs/$logfile #将前一周的增量备份转移到/home的临时保存目录
tmp_back_name="`date -d "- days" +"%Y%m%d"`-`date -d "- days" +"%Y%m%d"`"
tar -zcvf /home/old_DB_backup/$tmp_back_name.tar.gz /opt/DB_backup/incremental_backup/* &>> $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 ];then
echo "This is not the master DB, no need to backup." >> $HOMEDIR/logs/$logfile
exit
fi #检查mysql是否运行正常
/usr/sbin/lsof -i: | grep LISTEN
if [ $? -ne ];then
echo "MySQL may not working correctly, can not find LISTEN for mysql." >> $HOMEDIR/logs/$logfile
exit
fi ps -ef | grep /home/mysql/bin/mysqld
if [ $? -ne ];then
echo "MySQL may not working correctly, can not find pid for mysql." >>$HOMEDIR/logs/$logfile
exit
fi #确认增量备份所依赖的全量备份最新的目录
basedir=`ls -lrt /opt/DB_backup/full_bakcup | tail - | awk '{print $9}'`
#判定如果该主机未执行过全灵备份,则执行全量备份,取消增量备份
if [ "$basedir" == "" ];then
echo "This DB dosen't has a full backup before, cannot execute incremental backup." >>$HOMEDIR/logs/$logfile
echo "Begin to execute full backup." >>$HOMEDIR/logs/$logfile
sh /opt/DB_backup/shell/full_backup.sh
if [ $? -eq ];then
echo "The first full backup on this server is successful, the incremental backup will begin at tomorrow.">>$HOMEDIR/logs/$logfile
exit
fi
exit
fi #确认该主机已存在的全量备份是否早于7天,如果不是7天内的全量备份,则执行全量备份.
T1=`date +"%Y-%m-%d"`
T2=`echo "$basedir" |awk -F_ '{print $1}'`
Day1=`date +%s -d "$T1"`
Day2=`date +%s -d "$T2"`
Day3=$((($Day1-$Day2)/))
if [ $Day3 -gt ];then
echo "The lastest full backup is 7 days ago, begin to execute full backup." >>$HOMEDIR/logs/$logfile
sh /opt/DB_backup/shell/full_backup.sh
if [ $? -eq ];then
echo "exec full backup successful, pls check full backup logs.">>$HOMEDIR/logs/$logfile
exit
fi
exit
fi #将全量备份的目录打印到日志
echo "The basedir is $basedir" >> $HOMEDIR/logs/$logfile #执行增量备份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password="abc@123" --incremental --incremental-basedir=/opt/DB_backup/full_bakcup/$basedir /opt/DB_backup/incremental_backup >> $HOMEDIR/logs/$logfile [ $? -eq ] && echo "Incremental backup successful." >> $HOMEDIR/logs/$logfile
3,恢复方案
数据的恢复操作是比较简单的
全量恢复
#先prepare,利用--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
innobackupex --apply-log /opt/DB_backup/full_bakcup/--09_10-- #还原操作需要清空源库的所有数据,并删除原始数据目录下的数据文件
mysql> drop database xxx; rm -rf ib_logfile0 ib_logfile1 ibdata1 #恢复命令
innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /opt/DB_backup/full_bakcup/--09_10--
增量恢复
#如果是数据只是部分数据有损,在确定有损数据范围后,可直接还原增量即可
innobackupex --apply-log /opt/DB_backup/full_bakcup/--09_10-- --incremental-dir=/home/DB_backup/incremental_backup/--11_03-- #如果是数据全部损毁,执行如下操作
#1,先还原全量
innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /opt/DB_backup/full_bakcup/--09_10--
#2,在还原增量
innobackupex --apply-log /opt/DB_backup/full_bakcup/--09_10-- --incremental-dir=/home/DB_backup/incremental_backup/--11_03--
MySQL数据库使用xtrabackup备份实现小例子的更多相关文章
- MySQL数据库的定时备份
1. 创建shell脚本 vim backupdb.sh 创建脚本内容如下: #!/bin/sh db_user="root" db_passwd=" db_name=& ...
- Mysql数据库如何自动备份
Mysql数据库如何自动备份 一.总结 一句话总结:用navicat配合windows的批处理即可 navicat windows批处理 二.Mysql数据库自动备份 参考:Mysql数据库自动备份 ...
- 知识点:Navicet Mysql数据库电脑本地备份
Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击“计划”,再点击“新建批处理作业”. 2.双击上面的可用任务,它就 ...
- Navicet Mysql数据库电脑本地备份
Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业" ...
- 实现MySQL数据库的实时备份
实现MySQL数据库的实时备份 使用MySQL Replication 吴剑 2018-08-03 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 ht ...
- linux下应用crontab对mysql数据库进行定时备份
linux下应用crontab对mysql数据库进行定时备份 @(编程) mysql数据库提供了备份命令mysqldump,可以结合crontab命令进行定时备份. 我写了一个mysqlbackup. ...
- Mysql数据库自动定时备份软件推荐--MySqlBackupFTP(免费,亲测可用,附使用图示)
MySqlBackupFTP是一款Mysql数据库自动定时备份软件,免费版本就基本上可以满足我们的需求,不需要什么破解版,可直接官网下载安装使用. 先看结果(日志): 软件界面: 可以设定计划任务,每 ...
- 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份
RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...
- Linux下实现mysql数据库每天自动备份
Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...
随机推荐
- Java中Comparable接口和Comparator接口的简单用法
对象比较器 1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序,这种排序成为类的自然排序,类的compareTo方法称为类的自然比较方法. 代码示例 import java.u ...
- java int整数相乘溢出
int整数相乘溢出 我们计算一天中的微秒数: * * * * ;// 正确结果应为:86400000000 System.out.println(microsPerDay);// 实际上为:50065 ...
- 【HbuilerX-Bug】终端无法显示打印信息,也无法输入
经过调试HbuilderX“终端”插件,最终定位问题,问题是插件在打开终端时,无法定位具体的窗口程序,如“cmd.exe”.“powershell.exe”等.可能产生原因:1.可能是电脑系统升级产生 ...
- u盘被占用,无法弹出解决办法
方法1.把鼠标放到电脑屏幕最底部的中央,点击右键,点击 任务管理器 方法2.按:CTRL+ALT+ENTER(回车) 打开任务管理器,点击 进入性能后点击下方的:资源管理器 回到桌面,查看 ...
- AI 一体机,满足新时代的新需求
AI 变革带来哪些 IT 的新要求? 深度学习的突破和硬件的突飞猛进,使得人工智能“第n春”焕发蓬勃生机.这是历史上第一次,机器可以在如人脸识别等‘人类’工作上做得比我们人类更好. 人工神经网络有许多 ...
- 人脸对比微信小程序
https://cloud.tencent.com/document/product/867/17584 测试数据: 图片1: 图片2:
- 解决 canvas 在高清屏中绘制模糊的问题
主要代码部分: <canvas id="my_canvas" width="540" heihgt="180"></can ...
- java文件转码
完整项目带lib 参考 http://toyota2006.iteye.com/blog/540316 判断编码 package change; import info.monitorenter.cp ...
- FCC 成都社区·前端周刊 第 10 期
1. Node.js 10 正式发布 在过去的一周,Node.js 10.0.0 正式发布,带来大量改进和修复.这是自 Node.js Foundation 开展以来的第七个主要版本,并将在 2018 ...
- HDU 6121 Build a tree(k叉树的子树大小相异)
http://acm.hdu.edu.cn/showproblem.php?pid=6121 题目大意: 给你一颗 n 个节点的完全 k 叉树,问你这棵树中所有子树结点个数的总异或值. 分析: 我们很 ...