使用MYISAM存储引擎,当创建一个表时,会出现三个文件:数据文件MYD,索引文件MYI,格式文件frm。当索引文件损坏时或者丢失时,可以用如下的方法进行修复。下面是实验过程。
| [mysql@testapp74 notify]$ mv message_ignore.MYI message_ignore.MYI.bak [mysql@testapp74 notify]$ [mysql@testapp74 notify]$ mysqld_safe & [1] 26267 [mysql@testapp74 notify]$ 080630 14:19:03 mysqld_safe Logging to '/usr/mysql_data/log/alert.log'. 080630 14:19:03 mysqld_safe Starting mysqld daemon with databases from /usr/mysql_data/data [mysql@testapp74 notify]$ [mysql@testapp74 notify]$ [mysql@testapp74 notify]$ [mysql@testapp74 notify]$ vi /usr/mysql_data/log/alert.log 080630 14:18:14 [Note] /usr/sbin/mysqld: Normal shutdown 080630 14:18:14 [Note] Event Scheduler: Purging the queue. 0 events 080630 14:18:16 InnoDB: Starting shutdown... 080630 14:18:19 InnoDB: Shutdown completed; log sequence number 162 783173592 080630 14:18:19 [Note] /usr/sbin/mysqld: Shutdown complete 080630 14:18:19 mysqld_safe mysqld from pid file /usr/mysql_data/data/testapp74.pid ended 080630 14:19:03 mysqld_safe Starting mysqld daemon with databases from /usr/mysql_data/data 080630 14:19:03 InnoDB: Started; log sequence number 162 783173592 080630 14:19:03 [Note] Event Scheduler: Loaded 0 events 080630 14:19:03 [Note] /usr/sbin/mysqld: ready for connections. Version: '5.1.23-rc-community' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Edition (GPL) |
从上面可以看出,当一个表出现问题,mysql的警告日志并没有任何的错误出现。
| [mysql@testapp74 notify]$ mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.23-rc-community MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use notify Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> mysql> mysql> mysql> mysql> select * from message_ignore limit 1; --当查询表时,会报错 ERROR 1017 (HY000): Can't find file: 'message_ignore' (errno: 2) mysql> check table message_ignore; +-----------------------+-------+----------+----------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------------------+-------+----------+----------------------------------------------+ | notify.message_ignore | check | Error | Can't find file: 'message_ignore' (errno: 2) | | notify.message_ignore | check | error | Corrupt | +-----------------------+-------+----------+----------------------------------------------+ 2 rows in set (0.03 sec) mysql> mysql> repair table message_ignore; +-----------------------+--------+----------+----------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-----------------------+--------+----------+----------------------------------------------+ | notify.message_ignore | repair | Error | Can't find file: 'message_ignore' (errno: 2) | | notify.message_ignore | repair | error | Corrupt | +-----------------------+--------+----------+----------------------------------------------+ 2 rows in set (0.00 sec) |

