xtrabackup是基于binlog和文件的mysql备份工具, 支持innodb引擎的全量和增量备份, 支持热备份.
对于大批量数据迁移, 通过mysqldump备份需要消耗的时间非常长, 需要长时间停止服务. 使用xtrabackup增量备份可以大大缩短数据迁移的时间.
数据迁移
对于生产环境的数据迁移, 迁移流程如下:
- 全量备份
- 备份文件迁移(scp)
- 全量恢复
- 生产环境暂停服务
- 增量备份
- 备份文件迁移
- 增量恢复
其中增量备份和恢复部分由于数据有限, 因此服务暂停的时间会比较短, 可以暂时满足业务要求.
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