软件定制开发供应商MySQL表和表数据被删除后,紧急复原

MySQL软件定制开发供应商数据被误删?

软件定制开发供应商在开发和在生产中总会软件定制开发供应商出现各种各样的失误和意味,当MySQL软件定制开发供应商的数据或表被删除后不要慌,执行以下命令,查看mysql是否开启binlog,binlog会记录下数据库表结构的变更,因此强烈建议在部署MySQL的时候开启binlog.

  1. -- 查看是否开启binlog ON 为开启, OFF则为未开启
  2. show variables like '%log_bin%';

如果忘记自己binlog文件存放在哪里可以使用以下命令去查看,也可以到自己mysqld中去查看 。

show variables like '%datadir%';

 我们进入存储binlog的目录可能会看到多个文件,可以使用下面一行命令查看最新的binlog文件,我们最近的操作日志就存在里面。

show master status;

在找到binlog文件就需要确定我们要恢复的范围,因为每个mysql-bin可能内容很多,我们需要根据时间区间,截取出需要数据恢复的那一部分。

  1. ## mysqlbinlog 在mysql/bin路径下的工具
  2. ./mysqlbinlog --no-defaults --database=www --start-datetime='2022-08-26 00:00:00' --stop-datetime='2022-08-26 16:00:00' /www/server/data/mysql-bin.000006
  3. ## 第一条指令会有base64可用下面一条转码
  4. ./mysqlbinlog --no-defaults --database=www --base64-output=decode-rows -v --start-datetime='2022-08-27 00:36:00' --stop-datetime='2022-08-27 01:25:00' /www/server/data/mysql-bin.000008 > day.txt

使用mysqlbinlog工具截取出binlog文件由字节文件转到day.txt文件中,转成我们可以读懂的日志,打开day.txt文件可以看到截取时间段内mysql执行过的指令。

 上图我们只需要关注箭头所指的时间end_log_pos 根据这两个参数进行数据恢复,使用以下指令,在服务器中执行。

  1. ## stop-ponsition对用我们end_log_pos,该指令会恢复到2679日志片段的数据,前面删去的数据都会恢复
  2. ./mysqlbinlog --no-defaults -v --stop-position=2679 -v /www/server/data/mysql-bin.000008 |./mysql -u root -p
  3. ## 以下指令则恢复27442949 区间的数据
  4. ./mysqlbinlog --no-defaults --start-position=2744 --stop-position=2949 /www/server/data/mysql-bin.000008 |./mysql -u root -p

还有一种方式查看end_log_pos的区间,在mysql中执行以下指令 

show binlog EVENTS in 'mysql-bin.000008' ;

 mysqlbinlog恢复数据存在的问题

使用mysqlbinlog尝试了几次恢复数据,对于删除的数据是可以恢复的,然后使用对于修改过的数据测试后并没有恢复,而在服务器会报错 Can't find record in table,不能直观展示需要回退的内容,很不友好。

binlog还原小工具

binlog2sql是一个比较好用的mysql闪回工具,建议去上面的查看,有例子,基本不踩坑,步骤也很简单,使用binlog2sql有前提,必须在my.cnf进行指定配置,如果是突发删除问题,自己数据库又没有配置,那就只能回去使用mysqlbinlog。

  1. // 可能会用到的命令,自己记录一下
  2. find / -name my.cnf
  3. ​​python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p -dwww -ttbl --start-file='mysql-bin.000008' --start-datetime='2022-08-27 00:25:00' --stop-datetime='2022-08-27 13:30:00'
  4. ​​python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p -dwww -ttbl --start-file='mysql-bin.000008' --start-position=22577 --stop-position=23372 -B > rollback.sql | cat
  5. mysql -h127.0.0.1 -P3306 -uroot -p < rollback.sql

如果表被删除的话binlog2sql也是没办法恢复得,所以删除表之前一定要谨慎再谨慎,同时做好备份。

可能踩坑问题整理

  1. 使用的恢复数据的mysql用户权限要给大一些,不然会遇到权限问题,很多指令无法执行。
  2. 在恢复数据的时候尽可能确定需要恢复的时间段。

相关博文链接

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发