
场景说明
先决条件
在目标数据库创建用于备份数据读取的帐号
CREATE USER 'xtrabackup'@'%' IDENTIFIED WITH mysql_native_password BY 'yourbackpassword';
GRANT SELECT, RELOAD, PROCESS, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `xtrabackup`@`%`;
GRANT BACKUP_ADMIN ON *.* TO `xtrabackup`@`%`;
FLUSH PRIVILEGES;
一、全量备份与恢复
只全量备份,适宜业务量比较小的业务场景

docker run --name pxb -u root --rm
--volumes-from mysql8
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --backup
--datadir=/var/lib/mysql/
--target-dir=/backup/full_backup
--host=172.17.0.1
--port=3309
--user=xtrabackup
--password=yourbackpassword;
xtrabackup --prepare
--target-dir=/backup/full_backup
"
要点说明:
使用全量备份恢复操作
假定之前你已然做完了里面的备份操作,如今开始恢复操作,就在原先的化学服务器上!

创建一个新的mysql容器恢复到一个新创建的目录下,假定打算要做恢复容器的MySQL目录地址如下:
/data/apps/xtrabackup/mysqlrecover/conf/f
/data/apps/xtrabackup/mysqlrecover/files
/data/apps/xtrabackup/mysqlrecover/data
docker run -u root
--cap-add=SYS_NICE
--network=host
--restart=always
--name mysqlrecover8
-v /data/apps/xtrabackup/mysqlrecover/conf/my.cnf:/etc/mysql/my.cnf
-v /data/apps/xtrabackup/mysqlrecover/files:/var/lib/mysql-files
-v /data/apps/xtrabackup/mysqlrecover/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=yourbackpassword
-d mysql:8.0.22
记得将原先的f复制到
/data/apps/xtrabackup/mysqlrecover/conf/f记得端口更改若果不更改端口则须要确认原先MySQL服务早已停止!
这儿不建议在原先的目标数据库目录下操作linux文件系统,便于剖析数据库受损的诱因。
docker stop mysqlrecover8
docker run
--volumes-from mysqlrecover8
-v /data/apps/xtrabackup/backup:/backup
-it --rm
--user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
rm -rf /var/lib/mysql/*
"
这儿一定要使用前面的删掉形式,确保容器内mysql数据目录是/var/lib/mysql/
docker run
--volumes-from mysqlrecover8
-v /data/apps/xtrabackup/backup:/backup
-it --rm
--user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --copy-back
--datadir=/var/lib/mysql/
--target-dir=/backup/full_backup
"
要点说明:谨记不要使用copy命令复制备份文件,一定使用xtrabackup--copy-back命令。
docker run
--volumes-from mysqlrecover8
-v /data/apps/xtrabackup/backup:/backup
-it --rm
--user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
chown -R mysql:mysql /var/lib/mysql/
"
docker start mysqlrecover8
之后顾客端联接测试一下,到此全量备份和恢复测试完毕!
三、增量备份与恢复
一次全量备份多次增量备份,可以1小时一次增量也可以三天一次备份,每隔7天重新进行全量备份。

假定用于储存全量和增量的文件目录如下:
/data/apps/xtrabackup/backup/full_backup
/data/apps/xtrabackup/backup/inc1
/data/apps/xtrabackup/backup/inc2
/data/apps/xtrabackup/backup/inc3
docker run --name pxb1 -u root --rm
--volumes-from mysql8
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --backup
--datadir=/var/lib/mysql/
--target-dir=/backup/full_backup
--host=172.17.0.1
--port=3309

--user=xtrabackup
--password=yourbackpassword
"
要点说明:谨记不要附送xtrabackup--prepare命令中国linux,由于前面要基于这个全量备份做增量备份!
docker run --name pxb2 -u root --rm
--volumes-from mysql8
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --backup
--datadir=/var/lib/mysql/
--target-dir=/backup/inc1
--incremental-basedir=/backup/full_backup
--host=172.17.0.1
--port=3309
--user=xtrabackup
--password=yourbackpassword
"
注意查看--target-dir和--incremental-basedir参数!
docker run --name pxb2 -u root --rm
--volumes-from mysql8
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --backup
--datadir=/var/lib/mysql/
--target-dir=/backup/inc2
--incremental-basedir=/backup/inc1
--host=172.17.0.1
--port=3309
--user=xtrabackup
--password=yourbackpassword
"

注意查看--target-dir和--incremental-basedir参数!
docker run --name pxb3 -u root --rm
--volumes-from mysql8
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --backup
--datadir=/var/lib/mysql/
--target-dir=/backup/inc3
--incremental-basedir=/backup/inc2
--host=172.17.0.1
--port=3309
--user=xtrabackup
--password=yourbackpassword
"
注意查看--target-dir和--incremental-basedir参数!
下边的步骤等到恢复时侯操作
docker run --name pxb4 -u root --rm
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --prepare --apply-log-only
--target-dir=/backup/full_backup
"
注意查看--target-dir和是否携带--apply-log-only参数!
docker run --name pxb5 -u root --rm
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --prepare --apply-log-only
--target-dir=/backup/full_backup
--incremental-basedir=/backup/inc1
"
注意查看--target-dir和--incremental-basedir和是否携带--apply-log-only参数!
docker run --name pxb6 -u root --rm
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --prepare --apply-log-only
--target-dir=/backup/full_backup
--incremental-basedir=/backup/inc2
"
注意查看--target-dir和--incremental-basedir和是否携带--apply-log-only参数!
docker run --name pxb7 -u root --rm
-v /data/apps/xtrabackup/backup:/backup
-it --user root
percona/percona-xtrabackup:8.0.35-34.1
/bin/bash -c "
xtrabackup --prepare
--target-dir=/backup/full_backup
--incremental-basedir=/backup/inc3
"
注意查看--target-dir和--incremental-basedir和是否携带--apply-log-only参数!,最后一次不要–apply-log-only参数!
–apply-log-only应当在合并增量备份时使用,不仅最后一个增量备份。这就是为何前一行(指合并最后一个增量备份之前的操作)不包含--apply-log-only选项。虽然在最后一步使用了--apply-log-only,备份依然会保持一致性docker dionaea,但在那个情况下,服务器将执行回滚阶段。
简单来说:
(1)在合并不仅最后一个增量备份时docker dionaea,你须要使用--apply-log-only选项。
(2)合并最后一个增量备份时,不要使用--apply-log-only。
(3)假如你在合并最后一个增量备份时也使用了--apply-log-only,备份依然是有效的,但数据库在恢复时会执行一个额外的回滚操作。
参考前面使用全量备份恢复操作章节
参考官方文档:
