本文我們介紹由於非法硬件關機,造成了MySQL數據庫的數據表損壞,數據庫不能正常運行的一個實例,接下來是作者排查錯誤的過程,讓我們來一起了解一下吧。
排查修復數據表的經過如下:
1、訪問網頁,提示錯誤,連接不到數據庫。
2、啟動mysql服務,卸載和關閉rpm安裝的mysql服務昨天安裝postfix好像yum安裝了mysql),用netstat -anp |grep mysqld 命令查看mysql服務沒有起來,用mysql -uroot -p也連接不到服務器。
3、查看錯誤提示:
- 110726 17:02:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
- 110726 17:02:23 [ERROR] /usr/local/mysql/libexec/mysqld: Table './mysql/host' is marked as crashed and last (automatic?) repair failed
- 110726 17:02:23 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/host' is marked as crashed and last (automatic?) repair failed
- 110726 17:02:23 mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended
- 110726 17:24:31 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
- 110726 17:24:31 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
發現提示數據庫表損壞。./mysql/host)
4、修復數據庫表:
- cd /var/lib/mysql/mysql
- myisamchk -of host.MYI
- - recovering (with keycache) MyISAM-table 'host.MYI'
- Data records: 0
- 表host.MYI修復成功。
5、再次啟動服務,查看服務是否啟動,登錄mysql,還是不行。所以再次查看錯誤日志。
- /usr/local/mysql/libexec/mysqld: Table './mysql/plugin' is marked as crashed and last (automatic?) repair failed
- /usr/local/mysql/libexec/mysqld: Table 'plugin' is marked as crashed and last (automatic?) repair failed
- 110726 17:24:31 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
- 110726 17:24:31 [ERROR] /usr/local/mysql/libexec/mysqld: Table './mysql/user' is marked as crashed and last (automatic?) repair failed
- 110726 17:24:31 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/user' is marked as crashed and last (automatic?) repair failed
- 110726 17:24:31 mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended
- 110726 17:27:13 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
- 110726 17:27:13 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
6、又發現./mysql/user表損壞。
- [root@localhost mysql]# myisamchk -of user.MYI
- - recovering (with keycache) MyISAM-table 'user.MYI'
- Data records: 6
7、表修復成功,但是還是啟動不了服務,繼續看錯誤日志。
- /usr/local/mysql/libexec/mysqld: Table './mysql/plugin' is marked as crashed and last (automatic?) repair failed
- /usr/local/mysql/libexec/mysqld: Table 'plugin' is marked as crashed and last (automatic?) repair failed
- 110726 17:27:13 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
- 110726 17:27:13 [ERROR] /usr/local/mysql/libexec/mysqld: Table './mysql/db' is marked as crashed and last (automatic?) repair failed
- 110726 17:27:13 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/db' is marked as crashed and last (automatic?) repair failed
- 110726 17:27:13 mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended
8、最後一個錯誤,是./mysql/db表還沒有修復好繼續修復./mysql/db表。
9、執行下面的命令修復./mysql/db表:
- [root@localhost mysql]# myisamchk -of db.MYI
- - recovering (with keycache) MyISAM-table 'db.MYI'
- Data records: 0
- Data records: 2
10、最後啟動mysql服務。
- /usr/local/mysql/bin/mysqld_safe &
11、查看服務是否在運行。
- [root@localhost ~]# netstat -anp | grep mysqld
- tcp 0 0
- 0.0.0.0:3306
- 0.0.0.0:* LISTEN
- 4360/mysqld
- unix 2 [ ACC ] STREAM LISTENING 14172
- 4360/mysqld /tmp/mysql.sock
這時發現服務已運行。
12、登錄mysql試試。
- [root@localhost ~]# mysql -uroot -p123456
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 35
- Server version: 5.1.55-log Source distribution
- Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
- This software comes with ABSOLUTELY NO WARRANTY. This is free software,
- and you are welcome to modify and redistribute it under the GPL v2 license
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql>
能登錄。
13、在打開網頁,已經能正常訪問。證明MySQL數據庫的數據表就修復成功了。
關於MySQL數據庫數據表損壞的問題就介紹到這裡了,如果您有興趣了解更多關於MySQL數據庫的知識,可以看一下這裡的文章:http://database.51cto.com/mysql/,相信一定會帶給您收獲的!