mysql数据库恢复
今天登录博客网站的时候发现页面打不开了,刚开始不以为意,认为就是一个简单的服务崩了,登录上服务器重启服务的时候发现一直在那边打印错误日志,看了下错误的内容是数据库表不存在了,这时候开始慌了,因为突然想起来前段时间在升级网站的时候数据库要加几个字段,我为了图个方便直接把数据库的端口直接暴露到公网上面,这样我本地开发就可以直接连到服务器上面的数据库进行调试了,但是升级完网站忘记把端口给屏蔽起来了。
登录到数据库,果不其然数据库里面的数据都被删除光了,只留下来简简单单的几句话:

To recover your lost Database and avoid leaking it: Send us 0.06 Bitcoin (BTC) to our Bitcoin address 1DqRz2B9cBizPaajy4EAR3Vhj74b3rQ7NB and contact us by Email with your Server IP or Domain name and a Proof of Payment. If you are unsure if we have your data, contact us and we will send you a proof. Your Database is downloaded and backed up on our servers. Backups that we have right now: . If we dont receive your payment in the next 10 Days, we will make your database public or use them otherwise. | 1DqRz2B9cBizPaajy4EAR3Vhj74b3rQ7NB | help@mysqlbackups.net
大致的意思就是给钱不然撕票
我愣了下,然后马上登录云服务平台,看戏有没有近期的快照可以恢复,但是事与愿违,并没有近期的快照,因为定期快照是需要钱的,当初并没有去弄这个东西,没办法有问题找度娘,有网友说mysql数据库会存在binlog日志,mysql在进行增删改都会有记录,有这个东西就能进行恢复,但是前提是有开启这个功能,二话不说马上操作起来
查看有没有开启binlog日志
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-----------------------------+
6 rows in set (0.00 sec)
因为我这边数据库是用docker构建的,是有默认开启的
查看日志是否存在
mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000005 | 37518091 | No |
| binlog.000006 | 178 | No |
| binlog.000007 | 178 | No |
| binlog.000008 | 35476612 | No |
+---------------+-----------+-----------+
4 rows in set (0.00 sec)
松了一口气,日志有在,那就有恢复的可能
那就马上进行恢复操作
//找到存放地址的地方 执行命令
mysqlbinlog --database=dblog --start-datetime='2020-09-19 2:33:50' --stop-datetime='2021-11-01 00:00:00' binlog.000005 | mysql -uroot -pxxxxxx -v
#mysqlbinlog 是mysql自带的工具,因为binlog是以二进制的文件存在,需要这个工具进行解析
//--database 要恢复的库
//--start-datetime 开始时间
//--stop-datetime 结束时间
//binlog.000005 是我的日志的名称
//记得最后要加 -v 官方的解释是从行事件中重构伪sql语句 不加这个的话是不能恢复的
等执行完了数据库就恢复了,原理也很简单 就是把之前的增删改再执行一遍