简介:
Xtrabackup是由percona开源的免费数据库热备份软件。
支持增量 和全量备份,恢复。
Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup
1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;
2)innobackupex 是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。
3)xbcrypt 加密解密备份工具
4)xbstream 流传打包传输工具,类似tar
推荐使用:
1、Xtrabackup (虽然网上的帖子大部分是基于innobackupex 这个工具,但官网已经不推荐使用了)
2、其次,Xtrabackup 是支持 innoDB + MyISAM + XtraDB 表类型备份的。
(网上的帖子可能是老版本,详情看下图。官网说明)
官方说明:
说明:
- 版本:Percona XtraBackup 2.4, 如何安装,这个还是百度吧。此处省略800字。
- mysql安装目录:/var/lib/mysql
- 备份存放目录:/mysqlbak
- mysql用户: 用户名:bakuser 密码:123456
实战:
1、全备
xtrabackup --backup --user=bakuser --password=123456 --target-dir=/mysqlbak/2019-03-30-001/
执行结果: xtrabackup: Transaction log of lsn (28619220) to (28619220) was copied. 190330 14:24:04 completed OK!
/mysqlbak/2019-03-30-001 这个目录应该生成了对应的文件。
2、修改数据。增备01
xtrabackup --backup --user=bakuser --password=123456 --target-dir=/mysqlbak/inc001 --incremental-basedir=/mysqlbak/2019-03-30-001
注意:基于全备 才能做增备。
- --target-dir:增量备份文件存放的位置
- --incremental-basedir:全备的位置,基于这个备份做的增量备份
执行结果:
xtrabackup: Transaction log of lsn (28630841) to (28630841) was copied. 190330 14:30:08 completed OK!
/mysqlbak/inc001 生成,且里面生成了对应的备份文件
3、修改数据。增备02
xtrabackup --backup --user=bakuser --password=123456 --target-dir=/mysqlbak/inc002 --incremental-basedir=/mysqlbak/inc001
注意:基于上一次增备
- --target-dir:增量备份文件存放的位置
- --incremental-basedir:上一次增备位置
执行结果:
xtrabackup: Transaction log of lsn (28635245) to (28635245) was copied. 190330 14:37:44 completed OK!
/mysqlbak/inc002 生成,且里面生成了对应的备份文件,图片就不贴,和inc01 增备第一次 一致。
lsn :日志的位置。基于这个值做恢复等。
4、恢复到 增备01
步骤如下:
1、关闭 mysql:
service mysqld stop
2、删除掉 /var/lib/mysql 全部文件
rm -rf ./* (实际操作的时候可以备份这个文件内容。尤其是日志文件)
3、准备恢复,处理掉没有提交的日志等信息。
xtrabackup --user=bakuser --password=123456 --prepare --apply-log-only --target-dir=/mysqlbak/2019-03-30-001
4、把增备01 合并到全备。
xtrabackup --prepare --apply-log-only --target-dir=/mysqlbak/2019-03-30-001 --incremental-dir=/mysqlbak/inc001
5、全备文件复制到 按照目录 /var/lib/mysql
xtrabackup --copy-back --target-dir=/mysqlbak/2019-03-30-001/
这一步可能会报错: Original data directory /var/lib/mysql is not empty! 解决方案: cp -rf ./* /var/lib/mysql/ 手动复制吧。
6、权限处理
chown -R mysql.mysql /var/lib/mysql
7、启动数据库。
service mysqld start