mysql备份工具--xtrabackup恢复

时间:2022-08-31 17:13:16

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 = '库名'