29.7MySQL灾难恢复
在MySQL运行的过程中难免会遇到各种各样的问题。例如,数据库机房断网、网络抖动、断电、内存溢出、服务器磁盘老化等,这都会对MySQL的正常运行造成一定的影响。其中,断电、内存溢出和服务器磁盘老化等问题可能会给MySQL造成灾难性的后果。
一个常见的场景是会损坏数据库的表数据文件而导致MySQL数据库无法正常启动。本节简单介绍如何解决由于数据库的表数据文件损坏而无法正常启动MySQL数据库的问题。
29.7.1问题重现
如果是由于数据库的表数据文件被损坏而无法正常启动MySQL数据库,往往会在MySQL的错误日志文件中输出如下错误信息:
-01-22 14:18:05 4122 [Note] InnoDB: Database was not shutdown normally!-01-22 14:18:05 4122 [Note] InnoDB: Starting crash recovery.-01-22 14:18:05 4122 [Note] InnoDB: Reading tablespace information from the .ibd files...-01-22 14:18:05 4122 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace dev/tb_test uses space ID: 1 at filepath: ./dev/tb_test.ibd. Cannot open tablespace mysql/innodb_table_stats which uses space ID: 1 at filepath: ./mysql/innodb_table_stats.ibd