阿里云文档还是写的很好的, 但是还原数据库需要用的很多的第三放程序,在安装过程会遇到各种奇怪的问题,本文是用Docker 容器还原数据库,隔离宿主机,不会遗留任何残留且跨平台,给强迫症患者超大福利

操作简介

操作一共四步,大约10几分钟就可以还原成功。 注意设置自己Docker 镜像加速 镜像从官方下载很有点慢的 在操作之前需自行安装Docker环境

第一步: 选择合适的版本镜像

第二步: 解包

第三步: 解压解包出来的文件

第四步: 还原到数据库 (数据库密码同线上密码)

所有的命令我都执行过了的, 确保可以执行

镜像选择

  • 5.6> docker pull perconalab/percona-xtrabackup:2.4
  • 5.7> docker pull perconalab/percona-xtrabackup:2.7
  • 8.0> docker pull perconalab/percona-xtrabackup:8.0

文件解包

  • tar 压缩包
  1. docker run --rm -v [宿主机文件路径]:/opt/input_qp.xb -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'tar -izxvf /opt/input_qp.xb -C /out'
  • xbstream 压缩包 (.xb.gz 后缀)
docker run --rm -v [宿主机文件路径]:/opt/input_qp.xb -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'gzip -d -c /opt/input_qp.xb | xbstream -x -v -C /out'
  • xbstream 文件包(_qp.xb 后缀)
docker run --rm -v [宿主机文件路径]:/opt/input_qp.xb -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'cat /opt/input_qp.xb | xbstream -x -v -C /out'
  • xbstream qpress压缩包(_xb.qp后缀)
docker run --rm -v [宿主机文件路径]:/opt/input_qp.xb -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'qpress -do /opt/input_qp.xb | xbstream -x -v -C /out'

文件解压

  • 5.6/5.7
docker run --rm -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'innobackupex --decompress --remove-original /out'
  • 8.0
docker run --rm -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'xtrabackup --decompress --remove-original --target-dir=/out'

恢复到数据库

  • 恢复的数据库密码同线上
  • 如果忘记可以通过修改配置文件找回
  • my.cnf 文件 通用的文件不会输出到对应的目录的
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8

[mysqld]
server-id = 1
port = 3306
default_storage_engine=InnoDB
basedir = /
datadir = /mysql
tmpdir  = /tmp
socket  = /tmp/mysql.sock
  • 5.6
docker run --rm -v [my.cnf路径]:/opt/my.cnf -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'innobackupex --defaults-file=/opt/my.cnf --apply-log /out'
docker run -d --name "mysql" -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[随便一个密码, 实际密码是你备份数据的原密码] -v [宿主机输出目录]:/var/lib/mysql cytopia/mysql-5.6
  • 5.7
docker run --rm -v [my.cnf路径]:/opt/my.cnf -v [宿主机输出目录]:/out perconalab/percona-xtrabackup:[版本] sh -c 'innobackupex --defaults-file=/opt/my.cnf --apply-log /out'
docker run -d --name "mysql" -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[随便一个密码, 实际密码是你备份数据的原密码] -v [宿主机输出目录]:/var/lib/mysql cytopia/mysql-5.7
  • 8.0
# 暂无测试文件提供