误删mysql8下ibdata1文件恢复数据

本文介绍了如何在误删mysql8的ibdata1和ib_logfile文件后,通过binlog日志和innodb_force_recovery参数恢复数据。首先尝试使用binlog日志恢复,接着利用innodb_force_recovery启动数据库并导出数据。最后,通过删除并初始化数据文件,重新导入备份数据来彻底恢复数据库。同时强调了定期备份和谨慎使用rm命令的重要性。
摘要由CSDN通过智能技术生成

一位小伙伴不小心误删了生产环境上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 |</
清理 `ibdata1` 数据需要谨慎操作,因为这是 MySQL 的核心数据文件,包含了所有的表结构和数据。如果清理不当,可能会导致数据丢失或 MySQL 无法启动。 以下是清理 `ibdata1` 数据的步骤: 1. 备份数据:在进行任何操作之前,请先备份 MySQL 数据。 2. 停止 MySQL 服务。 3. 进入 MySQL 数据目录,找到 `ibdata1` 文件和 `ib_logfile*` 文件,这些文件都是 MySQL 的核心数据文件。 4. 删除 `ibdata1` 文件和 `ib_logfile*` 文件。 5. 修改 MySQL 配置文件 `my.cnf`,添加以下内容: ``` innodb_file_per_table = 1 ``` 这个参数的作用是让每个 InnoDB 表的数据单独存放在一个 `.ibd` 文件中,而不是存放在 `ibdata1` 文件中。 6. 启动 MySQL 服务。 7. 对于每个 InnoDB 表,将其数据导出到一个 `.sql` 文件中,然后删除该表。导出表数据的命令如下: ``` mysqldump -u username -p dbname table_name > table_name.sql ``` 其中 `username` 是 MySQL 用户名,`dbname` 是数据库名,`table_name` 是表名。 8. 创建新的 InnoDB 表,将导出的数据导入新表中。创建表的命令如下: ``` CREATE TABLE table_name (...) ENGINE=InnoDB; ``` 其中 `...` 是表的列定义。 将数据导入新表的命令如下: ``` mysql -u username -p dbname < table_name.sql ``` 9. 重复步骤 7 和 8,直到所有的 InnoDB 表都被清理。 10. 删除备份数据。 请注意,清理 `ibdata1` 数据是一个非常危险的操作,需要谨慎操作。如果您不确定自己的操作,建议寻求专业人士的帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值