根据实际情况选择相应版本的xtrabackup,我的mysql是5.7.24对应的xtrabackup版本为2.4.*
查看xtrabackup版本(支持最低mysql版本)
接下来开始备份
一、备份
1、全备
xtrabackup --backup --target-dir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
--backup:表示该操作为备份操作
--target-dir:指定备份文件的路径
--user:备份的用户
--password:该用户的密码
--socket:指定socket启动文件路径
下图表示备份完成(lsn从....37到....46)
2、基于全备进行增量备份
xtrabackup --backup --target-dir=/mnt/data/v1/ --incremental-basedir=/mnt/data/all/ --user=root --password=123456 --socket=/tmp/mysqld.sock
--incremental-basedir:表示在某个备份的基础上进行增备
下图表示备份完成
3、在第1次增备的基础上进行增量备
xtrabackup --backup --target-dir=/mnt/data/v2/ --incremental-basedir=/mnt/data/v1/ --user=root --password=123456 --socket=/tmp/mysqld.sock
二、准备恢复
在预恢复阶段先不要进行回滚操作,只有在最后一次预恢复才需要进行回滚操作
1、预恢复全量备份
xtrabackup --prepare --apply-log-only --target-dir=/mnt/data/all/
--prepare:表示还原,即恢复
--apply-log-only:表示不回滚事务,因为后面有基于全备的增量备份,所以不需要回滚,如果没有则去掉该参数
下图表示预恢复成功
2、将第一次增备加载至全备中
xtrabackup --prepare --apply-log-only --target-dir=/mnt/data/all/ --incremental-dir=/mnt/data/v1/
下图表示增备加载到全备中成功
3、将第二次增备份同样加载至全备中
xtrabackup --prepare --target-dir=/mnt/data/all/ --incremental-dir=/mnt/data/v2/
因为这是最后一次恢复,所以需要回滚,即将未结束的事务回滚,去掉--apply-log-only参数
恢复阶段:可以将全备理解成一个集合,所有的增备都需要汇总到这个集合(全备)里,才能进行完整的恢复操作
三、恢复
1、首先停掉mysql
2、情况mysql的数据目录
3、恢复
xtrabackup --copy-back --target-dir=/mnt/data/all/
--copy-back:将备份的数据copy至数据目录下(数据目录请查看my.cnf)
4、恢复后,需要将数据目录下恢复的文件重新赋予权限
chown -R mysql.mysql /data/mysqldata/
5、启动,并查看是否恢复成功
ok,恢复成功
附:
单表/单库备份
单表:xtrabackup --backup --tables='jssdb.a' --target-dir=/mnt/data/2 --user=root --password=123456 --socket=/tmp/mysqld.sock
--tables:单引号中填写databases.tables
单库:trabackup --backup --databases=jssdb --target-dir=/mnt/data/2 --user=root --password=123456 --socket=/tmp/mysqld.sock
--databases:库名(database)