事故原因:
- 修改数据库中不确定的数据之前没对数据库进行备份。
- 修改后也没有进行备份。
- 又蜜汁自信升级了Handsome的7.0版本,又是没备份。
- 升级后发现好像有bug,打算回滚,但是想到我忘记备份配置文件了,于是配置文件丢失。
- 该数据库的时候登错数据库,锅++
为了恢复数据,开始了一波的学习。
经过一番抢救,终于复活了。
!> 不要忘记,sql命令要加分号!
具体过程如下:
找到出错位置
登入数据库
$ mysql -u root -p databaseA |
看一下bin log是否打开
mysql > SHOW VARIABLES LIKE 'log_bin'; |
显示如下结果,就可以开始操作了。
+---------------+-------+ |
查看日志列表
mysql > show master logs; |
显示如下信息,不同的人可能显示的结果不一样,我们找最大的那个mysql-bin.000008
。
+------------------+-----------+ |
接下来使用mysqlbinlog
如果可以正常使用mysqlbinlog命令请忽略这部分。
需要确定mysqlbinlog的位置,使用find命令查找
find / -name mysqlbinlog -print |
找到如下路径
/usr/bin/mysqlbinlog |
根据自己的情况确定你的位置。然后软链接
ln -fs /www/server/mysql/bin/mysqlbinlog /usr/bin |
接下来就可以使用mysqlbinlog命令了。
由于我们并不清楚出错的时间范围,只能输入一个大致的起始时间,如果确定的话,可以在start-datetime
后边跟上相同参数的stop-datetime
。跟上result-file
导出文件便于我们分析错误位置。
mysqlbinlog --start-datetime='2020-07-09 19:00:00' /www/server/data/mysql-bin.000008 --result-file=extra.sql |
在一波分析后,发现最后一次(这个根据自身情况,不一定是最后一次)配置正确的position 39876作为stop,然后再向前找比较早的的一个position 2000作为start。
比如我找到我的position分别是start 2000 stop39876
执行下列命令,重新执行这部分sql操作,使数据库恢复。
mysqlbinlog --start-position="2000" --stop-position="39876" mysql-bin.000008 > /yourpath/backup.sql |
开始恢复
进入数据库databaseA,将这部分sql导入进去
mysql -u root -p databaseA |
使用source命令(也有其他命令,可以自行搜索)
mysql > source /yourpath/backup.sql; |
之后等待执行就可以了。