前面分享十一主要谈到oracle数据库迁移,本分享十二集中谈谈mysql迁移解决方案。
Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表。
xtrabackup 全量备份恢复:
1. 完全备份
创建用于备份恢复的用户 wuzy 并赋予权限
mysql> create user wuzy@'localhost' identified by '123456'; mysql> grant reload,process,lock tables,replication client on *.* to wuzy@localhost;
创建存放目录
[root@centos6 mysql]# mkdir -pv /data/wuzy mkdir: 已创建目录 "/data" mkdir: 已创建目录 "/data/wuzy"
进行数据库全备
[root@centos6 wuzy]# innobackupex --defaults-file=/etc/my.cnf --user=wuzy --password=123456 --socket=/tmp/mysql.sock /data/wuzy
可以看到整个备份过程:连接数据库,开始拷贝redo log,拷贝innodb表文件,锁表、拷贝非innodb表文件,停止拷贝redo log,解锁。
查看生成的文件:
[root@centos6 wuzy]# ll
-rw-r----- 1 root root 427 4月 24 02:46 backup-my.cnf -rw-r----- 1 root root 358 4月 24 02:46 ib_buffer_pool -rw-r----- 1 root root 12582912 4月 24 02:46 ibdata1 drwxr-x--- 2 root root 4096 4月 24 02:46 mysql drwxr-x--- 2 root root 4096 4月 24 02:46 performance_schema drwxr-x--- 2 root root 12288 4月 24 02:46 sys drwxr-x--- 2 root root 4096 4月 24 02:46 test drwxr-x--- 2 root root 4096 4月 24 02:46 test1 -rw-r----- 1 root root 22 4月 24 02:46 xtrabackup_binlog_info -rw-r----- 1 root root 113 4月 24 02:46 xtrabackup_checkpoints -rw-r----- 1 root root 518 4月 24 02:46 xtrabackup_info -rw-r----- 1 root root 2560 4月 24 02:46 xtrabackup_logfile
其中,mysql/, performance_schema/, sys/ ,test/ ,test1/ 下存放的是数据库文件。
backup-my.cnf,备份命令用到的配置选项信息;
xtrabackup_binlog_info,mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;
xtrabackup_checkpoints,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
xtrabackup_info,记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。
xtrabackup_logfile,备份的重做日志文件。
2. 全备恢复
关闭数据库并删除数据文件
[root@centos6 data]# /etc/init.d/mysqld stop Shutting down MySQL.. [确定] [root@centos6 mysql]# cd /home/mysql [root@centos6 mysql]# mv data/ data_bak/ [root@centos6 mysql]# mkdir data
准备(prepare)一个完全备份: --apply-log ( /data/pxb/2017-04-24_02-46-11/ 为备份目录,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )
[root@centos6 mysql]# innobackupex --apply-log /data/wuzy/2017-04-24_02-46-11/
执行恢复操作:
[root@centos6 2017-04-24_02-46-11]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/wuzy/2017-04-24_02-46-11/
更改 data/ 目录权限并启动mysql:
[root@centos6 mysql]# chown -R mysql.mysql data/ [root@centos6 data]# /etc/init.d/mysqld start Starting MySQL. [确定]
可以看到数据库和表均已恢复:
mysql> show databases;
xtrabackup 增量备份恢复:
我们以之前做的全备为基准,在其基础上做增量备份:
增量备份1:( 以全备为基准:/data/wuzy/2017-04-24_02-46-11/ )
[root@centos6 wuzy]# innobackupex --defaults-file=/etc/my.cnf --user=wuzy --password=123456 --socket=/tmp/mysql.sock --incremental /data/wuzy/inc --incremental-basedir=/data/wuzy/2017-04-24_02-46-11/ --parallel=2
增量备份2:( 以增量1为基准:/data/wuzy/inc/2017-04-28_01-09-40/ )
innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --socket=/tmp/mysql.sock --incremental /data/pxb/inc --incremental-basedir=/data/pxb/inc/2017-04-28_01-09-40/ --parallel=2
增量备份的恢复
增量备份的恢复需要有3个步骤
- 恢复完全备份
- 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)
- 对整体的完全备份进行恢复,回滚未提交的数据
##准备一个全备##
[root@centos6 wuzy]# innobackupex --apply-log --redo-only /data/wuzy/2017-04-24_02-46-11/
##将增量1应用到完全备份##
[root@centos6 wuzy]# innobackupex --apply-log --redo-only /data/wuzy/2017-04-24_02-46-11/ --incremental-dir=/data/pxb/inc/2017-04-28_01-09-40/
##将增量2应用到完全备份,注意不加 --redo-only 参数了## [root@centos6 wuzy]# innobackupex --apply-log /data/wuzy/2017-04-24_02-46-11/ --incremental-dir=/data/pxb/inc/2017-04-28_01-27-46/
##把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据## [root@centos6 wuzy]# innobackupex --apply-log /data/wuzy/2017-04-24_02-46-11/ xtrabackup: Log applied to lsn 2628145 xtrabackup: The intended lsn is 2643563