mysql全量备份恢复教程_xtrabackup增量备份恢复步骤_docker dionaea

场景说明

先决条件

在目标数据库创建用于备份数据读取的帐号

 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;

一、全量备份与恢复

只全量备份,适宜业务量比较小的业务场景

mysql全量备份恢复教程_xtrabackup增量备份恢复步骤_docker dionaea

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全量备份恢复教程_xtrabackup增量备份恢复步骤_docker dionaea

创建一个新的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天重新进行全量备份。

xtrabackup增量备份恢复步骤_docker dionaea_mysql全量备份恢复教程

假定用于储存全量和增量的文件目录如下:

/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 

docker dionaea_mysql全量备份恢复教程_xtrabackup增量备份恢复步骤

--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
  "

xtrabackup增量备份恢复步骤_mysql全量备份恢复教程_docker dionaea

注意查看--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,备份依然是有效的,但数据库在恢复时会执行一个额外的回滚操作。

参考前面使用全量备份恢复操作章节

参考官方文档:

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复