一位小伙伴不小心误删了生产环境上mysql数据下/data/mysql/ibdata1和ib_logfile0、ib_logfile1文件,并且mysql服务停止了,造成mysql重启不了,吓得小伙伴以为要“被删库跑路”了,于是赶紧帮忙”救火”。像这种误删数据或者删库的情况,不能慌,更不能病急乱投医,冷静分析下具体原因,对症下药。
恢复数据方法1-binlog日志
处理生产环境下数据库问题,最首要问题就是要保证数据不能丢,在数据完整的前提下在保证应用的服务正常。所以,第一首要问题是恢复并备份数据,不幸的是数据库没有做数据备份,但万幸的是有binlog日志文件,这样可以通过它进行数据恢复。
我把binlog文件拷贝到本地,在本地导入到新的mysql库中。binlog日志文件里存的是二进制内容,所以需要用mysqlbinlog命令转化成mysql能够执行的语句,如下:
#通过binlog日志文件恢复数据
mysqlbinlog --no-defaults --database=testdatabase /home/devops/nankai/binlog.000001 | /usr/bin/mysql -uroot -proot -v testdatabase
#通过start-position到stop-position
mysqlbinlog --no-defaults --start-position=40107 --stop-position=40489 --database=weijianwei /home/devops/binlog.000001 | /usr/bin/mysql -uroot -p123456 -v
#在执行上面脚本的时候总是报各种错误,于是我想着把转化后的内容存到一个TXT文件中,这样就能看懂
mysqlbinlog --no-defaults --database=testdatabase /home/devops/binlog.000002 >> /home/devops/testdblogs-bak.txt
#对于一些报错的语句或者不重要语句可以在TXT文件中删除了,然后再执行
cat /home/devops/nankaidblogs20210617.txt |</