xtrabackup是基于binlog和文件的mysql备份工具, 支持innodb引擎的全量和增量备份, 支持热备份.
对于大批量数据迁移, 通过mysqldump备份需要消耗的时间非常长, 需要长时间停止服务. 使用xtrabackup增量备份可以大大缩短数据迁移的时间.

数据迁移

对于生产环境的数据迁移, 迁移流程如下:

  1. 全量备份
  2. 备份文件迁移(scp)
  3. 全量恢复
  4. 生产环境暂停服务
  5. 增量备份
  6. 备份文件迁移
  7. 增量恢复
    其中增量备份和恢复部分由于数据有限, 因此服务暂停的时间会比较短, 可以暂时满足业务要求.

1. 全量备份

全量备份数据, 并压缩结果 (生产环境处于安全考虑, 最好不要把密码写到命令中, 而是应该通过创建备份账户进行操作. 此处出于示范不做此操作)
方法如下:
xtrabackup —backup —compress —target-dir=/root/backup/20190122_full —user=root —password=xxxx

2. 文件迁移

注意要把所有文件和目录完整的拷贝到待导入的服务器中
scp -r source:/source/dir target:/target/dir

3. 全量恢复

3.1 解压

xtrabackup —decompress —target-dir=/root/backup/20190122/20190122_full/

3.2 准备数据

后续可能会增量备份是, 需要增加apply-log-only参数, 以保证回滚未提交的事务.
xtrabackup —prepare —apply-log-only —target-dir=/root/backup/20190122/20190122_full/

3.3 停mysql, 删原始文件

systemctl stop mysqld
rm -rf /var/lib/mysql

3.4 恢复数据

xtrabackup —copy-back —target-dir=/root/backup/20190122/20190122_full/

3.5 设置权限并启动服务

chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

4. 生产环境服务暂停

停服务, 以保证数据不丢失.

5. 增量备份

命令类似, 只不过增加了增量的基准路径, 具体基准点在每个备份数据目录的xtrabackup_checkpoints文件下有记录
xtrabackup —backup —compress —target-dir=/root/backup/20190122_inc1 —incremental-basedir=/root/backup/20190122_full —user=root —password=xxxx

6. 备份文件迁移

同2

7. 增量恢复

7.1 解压

xtrabackup —decompress —target-dir=/root/backup/20190122/20190122_inc1/

7.2 准备数据

操作实际是将增量应用到全量中.
xtrabackup —prepare —apply-log-only —target-dir=/root/backup/20190122/20190122_full/ —incremental-dir=/root/backup/20190122/20190122_inc1/

7.3 停sql等后续操作

systemctl stop mysqld
rm -rf /var/lib/mysql
xtrabackup —copy-back —target-dir=/root/backup/20190122/20190122_full/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

数据备份