记一次生产环境MySQL删库经历

记一次生产环境MySQL删库经历

虽然是在几个月前发生的事情,但是还是记忆尤新,分享心得,引以为戒。

heidisql工具在备份RDS的时候正常来说是不会有问题的,但是在当时在执行此操作的时候发生了问题,在进行sql备份的时候从生产的RDS导入到另外一个RDS上,出现了权限错误,导致生产的数据库表被删除。在我们自己的数据库导来导去都不会出现问题。后面也做了测试,如果使用高权限账号是没有问题的(坑爹)。然后就开始了痛苦的恢复数据的操作。
记一次生产环境MySQL删库经历_第1张图片

MySQL数据恢复

主要还是要根据阿里云的文档来(在本地新建数据库进行备份)
1.恢复到最新的数据备份中(此处需要特别注意版本问题(敲黑板)
使用 Percona XtraBackup 2.4 进行备份恢复操作mysql5.7
使用 Percona XtraBackup 2.3(rpm安装,需要说明依赖安装说明依赖) 和(centos的版本也有关系,我是在centos7上执行的) 进行备份恢复mysql5.6

  1. 从阿里云上复制外网数据备份地址
  2. 执行 wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz
  3. 解压 tar -izxvf <数据备份文件名>.tar.gz -C /home/mysql/data
  4. 查看文件 ls -l /home/mysql/data
  5. innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
    如果出现complete ok则表示恢复成功
  6. vi /home/mysql/data/backup-my.cnf
  7. 修改目录权限 chown -R mysql:mysql /home/mysql/data
  8. 启动 mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
  9. mysql -uroot -p<数据库密码> 登陆本机数据库查看文件是否恢复成功,如果不成功,建议重装虚拟机更换版本后重试(本人愚钝,装了5次终于成功了)
# 注释参数(innodb)
#innodb_fast_checksum
#innodb_page_size
#innodb_log_block_size
#(以下是MyISAM)
#要注释的参数并添加skip-grant-tables属性
#innodb_log_checksum_algorithm=strict_crc32
#redo_log_version=1
skip-grant-tables

最重要的命令是innobackupex 版本对应上就没有问题
Percona XtraBackup 2.3 恢复mysql数据到自建数据库中

2.根据mysql的binlog文件恢复到指定时间点
恢复到了指定的数据备份后,再恢复binlog日志文件中的数据(指定时间点恢复)
从阿里云上下载binlog文件,然后再服务器上执行操作

  1. tar xvpf mysql-bin.000349.tar
  2. 分析文件并大致找到恢复的时间点(时间适当往前移,过了某个时间点数据已经被删除了)
  3. 执行 mysqlbinlog --skip-gtids=true --stop-datetime="2018-08-30 12:30:00" mysql-bin.000349 | mysql -u root
官方文档的操作
mysqlbinlog mysql-bin.000688 mysql-bin.000689 --start-position=531167  --stop-datetime="16-05-16 18:05:03" | mysql -uroot -pyour_password -P3306 -hyour_host_ip

-p 参数和 your_password 间不要有空格, your_password 请自行替换为实际密码

-h 参数后请指定非 127.0.0.1 的主机 IP

 mysqlbinlog 命令格式: 
 mysqlbinlog binlog_file1 binlog_file2 ... binlog_filen --start-position=xxxx  --stop-datetime="YY-mm-dd hh:mm:ss" | mysql -uroot -pyour_password -Pmysql_port -hyour_host_ip

mysqlbinlog 其他可以使用的参数

--database db_name 指定仅增量恢复指定数据库 db_name 的数据

--start-position 指定开始恢复的 binlog 位点,该位点应存在于指定的第一个 binlog 文件。

--stop-position 指定恢复到的 binlog 位点,该位点应存在于指定的最后一个 binlog 文件。

--start-datetime 指定开始恢复的时间点(从第一个等于或大于该时间点的 binlog 事件开始)。
以本地时间时区为准,格式为 MySQL 可以接受的时间格式,比如"2016-05-16 08:01:05" 或 "16-05-16 08:01:05"。

下载binlog文件恢复到指定时间点

虽然过程很坎坷,好在最后恢复了,建议在服务器上执行mysqldump 操作。

你可能感兴趣的:(mysql,java)