xtrabackup备份恢复
一、xtrabackup 安装
#解压软件包
tar zxvf percona-xtrabackup-2.4.3-Linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
#改名为xtrabackup
mv percona-xtrabackup-2.4.3-Linux-x86_64/ /usr/local/xtrabackup/
#制作软连接
ln -s /usr/local/xtrabackup/bin/* /usr/bin/
#查看版本
innobackupex -v
二、将数据恢复到新的mysql
1、环境介绍
/data/backup/192.168.4.66/ #全量备份
/data/incr/incr_2017111503.xbstream #增量备份
/etc/my.cnf #mysql 配置文件目录
/data/mysql #mysql数据目录
2、数据恢复操作
1)合并日志全量备份
[root@test ~]# innobackupex --apply-log --redo-only /data/backup/192.168.4.66/
171115 22:45:22 completed OK! #最后一行必须显示这个才是成功
2)解压增量备份,xtrabackup特有压缩工具
#解压/data/incr/incr_2017111503.xbstream, 到/data/incr/
[root@test incr]# xbstream -x -v </data/incr/incr_2017111503.xbstream -C /data/incr/
#最后再把incr_2017111503.xbstream mv到其他目录。
3)合并全量备份和增量备份(这里只有一份增量备份,如果有多份相同操作)
[root@test data]# innobackupex --apply-log --redo-only /data/backup/192.168.4.66/ --incremental-dir=/data/incr/
171115 23:24:40 completed OK! #最后一行必须显示这个才是成功
4)全量备份执行回滚未提交数据
[root@test ~]# innobackupex --apply-log /data/backup/192.168.4.66/
171115 23:50:45 completed OK! #最后一行必须显示这个才是成功
5)备份恢复
[root@test backup]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/192.168.4.66/
171116 00:03:36 completed OK! #最后一行必须显示这个才是成功
#这个是默认mysql没有设置用户和密码
--host #指定mysqlIP
--user #指定mysql用户
--password #指定mysql密码
6)启动数据库
/etc/init.d/mysqld start #启动mysql
#登录mysql,查看数据是否恢复
完成上述操作后,已经将日常做的mysql备份 全量和增量恢复到了新的mysql, 接下来需要将binlog恢复到新的mysql中
3、恢复binlog到新mysql
1)查看增量备份 xtrabackup_info
#这个描述了备份时的最后一个pos和所在的binlog文件
binlog_pos = filename 'mysql-bin.000001', position '21099318'
###以下步骤是在mysql A来操作的,mysql B是上述恢复数据的
2)找到binlog_pos这个参数指定的binlog和pos号
/data/mysql/ #binlog存放目录
#创建临时的存放目录
mkdir -p /data/binlog/
#copy一份到其他目录进行操作,安全至上
cp /data/mysql/mysql-bin.000001 /data/binlog/
#将mysql-bin.000001,pos 21099318 从这个位置开始,之后所有的Binlog导出
/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-position=21099318 mysql-bin.000001 >2.sql
#其他Binlog
其他binlog在导入完成上面的之后,依次进行导入
导入操作在mysql B完成,
mysql -u$user -h$host -p$pass < 2.sql
至于怎么将mysql A的2.sql传送到mysql B上,自行解决
3)验证数据
一般验证数据,应该由研发完成。或者项目后端直接负责人来完成。
可以通过对比表的数量(mysql A ,mysql B),还有mysql表的行数来进行对比
例如:
select count(*) from zc_baozou_world_report; #查看mysql表的行数
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'zc_baozou_battle';
table_schema = '库名'