阿里云mysql数据备份恢复数据到本地mysql(备份+binlog)

参考:https://help.aliyun.com/knowledge_detail/41817.html?spm=a2c4g.11186623.4.3.49bf4292RNNrSC

起因:生产环境由于定时任务没有关闭。本不该执行的定时任务被执行。导致重要业务数据丢失!

一、检查备份情况

由于事发时间为1月5日1点30分(定时任务执行时间)。

查看阿里云备份,最近的一次备份是1月2日7点43分的(1月5日的备份不能用):

所以要找1月2日7点43分至1月5日1点30分的binlog日志

现在锁定需要下载的binlog为:mysql-bin.000667-000678,同时还需要把上面的完整备份下载下来,如图

二、开始恢复数据

准备:需要找一个linux环境,并装有mysql服务及Percona XtraBackup软件

安装mysql步骤:https://blog.csdn.net/sumengnan/article/details/108736935

安装Percona XtraBackup步骤:

1、yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

  • MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3。
  • MySQL 5.7版本需要安装 Percona XtraBackup 2.4

2、yum install percona-xtrabackup-24

若rpm安装则依赖包为:yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf \ bison libtool ncurses-devel libgcrypt-devel libev-devel libcurl-devel \ vim-common

(1)先恢复完整备份

 1、把完整备份上传到linux环境

2、解包:cat hins14138181_data_20210102074244_qp.xb | xbstream -x -v -C /home/sumengnan/data2

3、解压:innobackupex --decompress --remove-original /home/sumengnan/data2

4、恢复:innobackupex --defaults-file=/home/sumengnan/data2/backup-my.cnf --apply-log /home/sumengnan/data2

5、修改/home/sumengnan/data2/backup-my.cnf文件

添加如下参数:

lower_case_table_names=1
skip-grant-tables

注释如下参数:

 
#innodb_log_checksum_algorithm
#innodb_fast_checksum
#innodb_log_block_size
#innodb_doublewrite_file
#innodb_encrypt_algorithm
#rds_encrypt_data
#redo_log_version
#master_key_id
#server_uuid

6、启动mysql进程:mysqld --defaults-file=/home/sumengnan/data2/backup-my.cnf --user=mysql --datadir=/home/sumengnan/data2

7、使用mysql -uroot (免密码)连接数据库,检查结果,或者用navicat连接:

问题:如果navicat连接mysql服务时报错:Table ‘performance_schema.session_variables’ doesn’t exist

需要在my.cnf添加配置并重启mysql:

[mysqld]
show_compatibility_56 = ON
performance_schema
 

(2)再恢复binlog备份

1、先在本地把binlog转换成sql文件(本地需要有mysql命令,或者放到linux环境上执行也一样)

由于本人使用mac,所以直接写一个脚本recover_data.sh。

选择000667的binlog设置开始时间,并创建recover_data.sql。其他的binlog都是附加写入recover_data.sql。最后一个000678的binlog选择结束时间

mysqlbinlog mysql-bin.000667 --start-datetime='2021-01-02 07:43:36' > recover_data.sql
mysqlbinlog mysql-bin.000668 >> recover_data.sql
mysqlbinlog mysql-bin.000669 >> recover_data.sql
mysqlbinlog mysql-bin.000670 >> recover_data.sql
mysqlbinlog mysql-bin.000671 >> recover_data.sql
mysqlbinlog mysql-bin.000672 >> recover_data.sql
mysqlbinlog mysql-bin.000673 >> recover_data.sql
mysqlbinlog mysql-bin.000674 >> recover_data.sql
mysqlbinlog mysql-bin.000675 >> recover_data.sql
mysqlbinlog mysql-bin.000676 >> recover_data.sql
mysqlbinlog mysql-bin.000677 >> recover_data.sql
mysqlbinlog mysql-bin.000678 --stop-datetime='2021-01-05 01:30:00' >> recover_data.sql
gzip recover_data.sql

执行脚本完成后结果

2、上传到linux环境后解压

  • 执行mysql -uroot登录mysql
  • 执行set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE
  • 执行source  recover_data.sql导入sql文件

3、验证结果

 

完毕

猜你喜欢

转载自blog.csdn.net/sumengnan/article/details/112241306