前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
mysql二进制日志恢复
(有很多朋友私信求帮助恢复数据库,可以加微信备注添加原因,如果能帮助解决问题,给点辛苦费就行(●'◡'●))
有一个朋友,在工作中,复制网上的代码,错误的把"delete from table"当成了 "select from table",结果删除了大量数据表内容。
那么如何避免被项目经理杀了祭天呢?
宝塔面板的mysql自动开启了binlog功能~ 也就是说我们可以直接通过binlog方式恢复宝塔误删的数据。
1、检查mysqlbinlog日志功能,图中返回 NO代表开启,OFF代表未开启
mysql> show variables like 'log_%';
+----------------------------------------+---------------------------------------+
| Variable_name | Value |
+----------------------------------------+---------------------------------------+
| log_bin | ON | ------> ON表示已经开启binlog日志
| log_bin_basename | /usr/local/mysql/data/mysql-bin |
| log_bin_index | /usr/local/mysql/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | /usr/local/mysql/data/martin.err |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_throttle_queries_not_using_indexes | 0 |
| log_warnings | 1 |
+----------------------------------------+---------------------------------------+
2、找到宝塔面板的/www/server/data文件夹,找到mysql-bin.xxxxx之类的文件
因为网站本身有定时备份,时间在2022/04/12,数据删除时间在2022/04/22 下午17点。
丢失了10天的数据,找回命令
3、在宝塔终端或者ssh中root权限下,使用命令:
/www/server/mysql/bin/mysqlbinlog --start-datetime="2022-04-12 01:30:01" --stop-datetime="2022-04-22 18:30:01" /www/server/data/mysql-bin.00* > redata.sql
如果你的网站没有数据备份可以不写开始时间,只写结束时间
/www/server/mysql/bin/mysqlbinlog --stop-datetime="2022-04-22 18:30:01" /www/server/data/mysql-bin.00* > redata.sql
运行上面的命令后进入root目录下查看是否出现了redata.sql文件,该文件大小应该远大于删掉的数据库大小,假如没有生成该文件或者该文件过小,那么尝试下面这条命令(博主用了没成功,不知原因)
/www/server/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v -d 数据库名 /www/server/data/mysql-bin.0000* > redata.sql
这条命令不再设置时间点,而是完全按照文件恢复,数据库名换成删掉的数据库名,假如不记得了,去网站文件config或者其他数据库配置文件查看,宝塔默认数据库和网站文件夹同名,点换成下横线。
运行该命令后进入root目录下查看是否出现了redata.sql文件。
4、假如有了redate.sql文件,在数据库中新建数据库,数据库名最好和删掉的数据库同名,然后执行下面的命令:
mysql -uroot -p -f 新建数据库名 < redata.sql
如果不成功,使用编辑器打开redata.sql,因为文件较大,使用vscode在处理时容易崩溃,建议使用sublime对大文件编辑处理更友好。
5、将insert命令全部复制到一个新的insert.sql文件中
快捷键ctrl+l,选中当前行,复制到insert.sql中,仔细对比新添加的数据是否正确。
同样的办法将update和delete命令分别复制到update.sql和delete.sql中。
6、将复制出的三个sql文件导入本地数据库,检查是否是错误删除的数据。
注意在命令后加分号 ;
检查数据正确后传到线上版本。