26.MySQL数据库宕机恢复

1.破坏数据库
一般数据库的损耗是系统使用过程中无意被破坏的,这里破坏只是为了模拟数据库的修复思路。
删除分区表数据文件第一行,进行破坏。让数据库无法启动。
[root@mysql1 test]# sed -i '1d' itpux_rh1#P#p2014#SP#p2014sp0.ibd
[root@mysql1 test]# 
2.重启数据库
[root@mysql1 binlog]# systemctl restart mysql
Job for mysql.service failed because the control process exited with error code. 
See "systemctl status mysql.service" and "journalctl -xe" for details.
发现重启失败。我们查看后台的日志。
tail mysql3306.log  
2023-02-11T07:13:15.968426Z 0 [ERROR] InnoDB: Tried to read 16384 bytes at offset 0, but was only able to read 0
2023-02-11T07:13:15.968434Z 0 [ERROR] InnoDB: File (unknown): 'read' returned OS error 0. Cannot continue operation
2023-02-11T07:13:15.968435Z 0 [ERROR] InnoDB: Cannot continue operation.
2023-02-11T07:13:20.968340Z 0 [Note] InnoDB: FTS optimize thread exiting.
2023-02-11T07:14:56.310313Z 0 [Warning] InnoDB: 3 threads created by InnoDB had not exited at shutdown!
读取数据失败。

3.加入参数强制启动
[root@mysql1 test]# cat /etc/my.cnf
[mysqld]
datadir=/mysql/mysql3306
socket=/mysql/mysql3306.sock
default-time-zone= '+8:00'
symbolic-links=0
user=mysql
server_id=1311
expire_logs_days = 7
log_bin=/mysql/data/binlog/mysql-binlog
log_bin_index=/mysql/data/binlog/mysql-binlog.index
binlog_format=row
binlog_rows_query_log_events=on
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = 1
binlog_gtid_simple_recovery=1
secure_file_priv=/mysql/backup
innodb_force_recovery = 1    --这个参数。
[mysqld_safe]
log-error=/mysql/mysql3306.log
pid-file=/mysql/mysql3306.pid

经过测试发现:
innodb_force_recovery = 1 /2/3 均未能启动数据库。

innodb_force_recovery=4 成功启动数据库。
systemctl start mysql 
5.验证数据。
发现这个表不存在。
mysql> select * from itpux_rh1;
ERROR 1146 (42S02): Table 'test.itpux_rh1' doesn''t exist


[root@mysql1 test]# ll
total 1096
-rw-r-----. 1 mysql mysql    65 Aug 23 21:44 db.opt
-rw-r-----. 1 mysql mysql  8892 Feb 11 15:11 itpux_rh1.frm
-rw-r-----. 1 mysql mysql     0 Feb 11 15:13 itpux_rh1#P#p2014#SP#p2014sp0.ibd   --发现这个文件变空。
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2014#SP#p2014sp1.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2015#SP#p2015sp0.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2015#SP#p2015sp1.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2016#SP#p2016sp0.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2016#SP#p2016sp1.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:15 itpux_rh1#P#p2017#SP#p2017sp0.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:23 itpux_rh1#P#p2017#SP#p2017sp1.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:19 itpux_rh1#P#p2018#SP#p2018sp0.ibd
-rw-r-----. 1 mysql mysql 98304 Feb  3 18:22 itpux_rh1#P#p2018#SP#p2018sp1.ibd

6.innodb_force_recovery=4

阻止插入缓冲区合并操作。如果它们会导致崩溃,则不会这样做。不计算表 统计信息。此值可
能会永久损坏数据文件。使用此值后,请准备删除并重新创建所有二级索引。设置 InnoDB为只读。

7.删除损耗的表。
drop table itpux_rh1;
如果有备份,则需要从备份中恢复。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当MySQL 8.0宕机导致数据文件损坏时,可以通过以下步骤进行数据文件恢复: 1. 停止MySQL服务:首先,停止MySQL数据库服务,以确保在恢复过程中没有新的写入操作。 2. 备份数据文件:在通过文件恢复之前,应该先备份损坏的数据文件,以防止进一步的数据丢失。 3. 检查错误日志:查看MySQL错误日志,它会记录关于宕机和数据文件损坏的信息。根据错误日志中的提示,了解具体的数据文件损坏情况。 4. 使用数据文件恢复工具:MySQL提供了一些内置工具来恢复损坏的数据文件,如"mysqlcheck"和"myisamchk"。根据错误日志的提示,选择合适的工具对损坏文件进行修复。 5. 修复数据文件:根据提示使用相应的工具对损坏的数据文件进行修复。这些工具会尝试自动修复损坏的数据文件,并恢复它们的完整性。在修复之前,建议先进行数据文件备份。 6. 启动MySQL服务:完成数据文件修复后,重新启动MySQL数据库服务。 7. 数据一致性检查:在启动MySQL服务之后,建议对数据库中的数据进行一致性检查,确保数据的完整性和正确性。 8. 数据恢复验证:通过执行一些测试语句或查询来验证数据文件恢复的结果,确保数据库的功能正常并且数据已经正确恢复。 在进行MySQL 8.0宕机数据文件恢复时,要小心操作,确保对数据进行适当的备份,并参考MySQL官方文档和手册以获得更详细的指导和建议。同时,为了避免宕机和数据文件损坏的情况发生,建议定期备份数据库、使用可靠的硬件设备和监控系统性能。 ### 回答2: MySQL 8.0 宕机后,进行数据文件恢复的步骤如下: 首先,需要确定数据文件的完整性。可以使用MySQL内置的工具如MySQLcheck或者InnoDB crash recovery检查数据文件是否完整。如果数据文件有损坏,需要修复损坏的文件。 其次,为了减少数据丢失的可能性,在宕机恢复之前,需要进行数据备份。可以使用MySQL的备份工具如mysqldump或者MySQL Enterprise Backup。 接下来,根据宕机原因来决定具体的恢复方法。如果是由于崩溃引起的宕机,可以使用InnoDB crash recovery工具进行自动恢复。如果宕机是由于硬件故障或者其他原因引起的,则需要使用冷备份或者热备份进行恢复。 在进行恢复过程中,可以使用MySQL内置的日志文件来回滚未完成的事务,并恢复宕机前的状态。如果没有进行事务日志的备份,可以参考binlog来进行数据恢复。 最后,当数据库恢复完成后,需要进行一些额外的步骤,如更新MySQL的配置文件,重启MySQL服务等。 总结起来,MySQL 8.0 宕机数据文件的恢复过程包括确定数据文件完整性、数据备份、根据宕机原因选择恢复方法、使用日志文件回滚事务、进行数据恢复、完成后的一些额外操作。有时候可能需要专业人士的帮助来处理复杂的情况。 ### 回答3: 当MySQL 8.0宕机时,进行数据文件恢复主要包括几个步骤。 首先,需要通过查看数据库的错误日志文件来确定宕机的原因。错误日志通常位于MySQL的数据目录下,其命名通常为hostname.err。通过查看错误日志可以了解到宕机原因,并进一步确定后续操作。 接下来,需要进行MySQL实例的恢复。可以通过运行MySQL提供的备份工具mysqldump进行备份数据,或者使用复制功能(如主从复制)来实现数据的冗余。恢复时,可以运行启动命令"mysqld --skip-slave-start"来跳过启动slave线程。 在MySQL宕机后,将其重启到恢复模式下(也称为恢复状态)。 1. 首先,运行启动命令"mysqld --skip-grant-tables",此时MySQL不会验证用户登录信息,可以直接以超级用户(root)身份登录。 2. 接着,登录到MySQL服务器,运行以下命令:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';来修改root用户的密码。 3. 运行FLUSH PRIVILEGES;来刷新权限。 4. 最后,再次重新启动MySQL服务器。 接下来,可以通过使用mysqldump等工具将备份的数据重新导入到MySQL中,或者使用复制功能来重建冗余数据。当恢复完成后,可以正常启动MySQL服务器,用户可以继续使用数据库服务。 需要注意的是,在MySQL宕机后,及时与数据库管理员或专业人员联系,以便获得更准确和专业的恢复指导和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值