腾讯云Mysql物理备份恢复数据库
使用物理备份恢复数据库(使用物理备份恢复数据库)
建议使用两台机器进行操作,一台安装 XtraBackup(2.4.6 及以上的版本) 工具,另一台安装MySQL server5.7。(因为两者依赖的库可能存在冲突)
确认恢复方案,找到相应的全量备份,binlog文件。
Percona XtraBackup机器上操作:
- 下载备份文件
|
|
- 解包备份文件 使用 xbstream 命令将备份文件解包到目标目录。
mkdir /data
xbstream -x -C /data < /data/test.xb
- 解压备份文件 通过如下命令下载 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
- 修改配置文件,执行如下命令打开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上的操作:
-
将Percona XtraBackup机器上的/data目录下文件copy至本机上(如/data)。
-
修改文件属性 修改文件属性,并检查文件所属为 mysql 用户。
chown -R mysql:mysql /data
- 启动 mysqld 进程。
mysqld_safe --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data &
或者
mysqld --defaults-file=/data/backup-my.cnf --user=mysql --datadir=/data
- 客户端登录 mysql 验证。
mysql -uroot
此时物理备份(全量备份)恢复完成,下面为binlog的恢复过程,同样在MySQL server上操作。
注意:本机的当前时间必须对的。
-
根据要恢复到的时间点,确认需要恢复的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
-
找出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
- 登陆数据库恢复
mysql -uroot
> source /root/mysql-01.sql
> source /root/97355093.sql