使用物理备份恢复数据库(使用物理备份恢复数据库)

建议使用两台机器进行操作,一台安装 XtraBackup(2.4.6 及以上的版本) 工具,另一台安装MySQL server5.7。(因为两者依赖的库可能存在冲突)

确认恢复方案,找到相应的全量备份,binlog文件。

Percona XtraBackup机器上操作:

  1. 下载备份文件
1
wget 命令格式:wget -c '备份文件下载地址' -O 自定义文件名.xb
  1. 解包备份文件 使用 xbstream 命令将备份文件解包到目标目录。
mkdir /data
xbstream -x -C /data < /data/test.xb
  1. 解压备份文件 通过如下命令下载 qpress 工具。
wget http://www.quicklz.com/qpress-11-linux-x64.tar

说明:
若 wget 下载提示错误,您可至 quicklz 下载 qpress 工具到本地后,再将 qpress 工具上传至 Linux 云服务器,请参见 通过 SCP 上传文件到 Linux 云服务器。
    
通过如下命令解压出 qpress 二进制文件。


tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile


使用如下命令将目标目录下所有以.qp结尾的文件都解压出来。

xtrabackup --decompress --target-dir=/data
  1. 修改配置文件,执行如下命令打开backup-my.cnf文件。
vi /data/backup-my.cnf
说明:
本文以目标目录/data为例,您可以根据实际情况将其替换成实际路径。

由于存在的版本问题,请将解压文件backup-my.cnf中如下参数进行注释。
innodb_checksum_algorithm
innodb_log_checksum_algorithm
innodb_fast_checksum
innodb_page_size
innodb_log_block_size
redo_log_version

MySQL server上的操作:

  1. 将Percona XtraBackup机器上的/data目录下文件copy至本机上(如/data)。

  2. 修改文件属性 修改文件属性,并检查文件所属为 mysql 用户。

chown -R mysql:mysql /data  
  1. 启动 mysqld 进程。
mysqld_safe --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data &
或者
mysqld --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data
  1. 客户端登录 mysql 验证。
mysql  -uroot

此时物理备份(全量备份)恢复完成,下面为binlog的恢复过程,同样在MySQL server上操作。

注意:本机的当前时间必须对的。

  1. 根据要恢复到的时间点,确认需要恢复的binlog文件,以及是否需要在云数据库上执行flush logs命令。

    此处演示恢复连续的两个binlog文件(如要恢复的全量备份的时间点为3,第一个binlog文件的开始时间和结束时间分别为2和4,第二个binlog文件的开始时间和结束时间为4和6,现在我们要恢复到5这个时间点,假设当前时间点为7)。

    下载相应的两个binlog文件mysql-01.bin、mysql-02.bin。

wget 'https://mysql-database-backup-sh-local-1256569818.cos.ap-shanghai.myqcloud.com/mysql-0000088.bin' -O mysql-01.bin
wget 'https://mysql-database-backup-sh-local-1256569818.cos.ap-shanghai.myqcloud.com/mysql-0000089.bin' -O mysql-02.bin
  1. 找出mysql-01.bin的时间点为3(如2021-04-20 07:19:56)的后边的日志

    找出mysql-01.bin的时间点为5(如2021-04-20 07:19:56)的前边的日志(更加推荐的做法是根据相应的sql找到position,此处假设为97355093)

    然后恢复出相应的sql

mysqlbinlog mysql-01.bin --start-datetime='2021-04-20 07:19:56' > /root/mysql-01.sql
mysqlbinlog mysql-02.bin --stop-position=97355093 > /root/97355093.sql
将binlog转为可读的sql的命令为
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-01.bin > mysql-01-bin.sql
  1. 登陆数据库恢复
mysql -uroot
> source /root/mysql-01.sql
> source /root/97355093.sql