本文我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例,接下来是作者排查错误的过程,让我们来一起了解一下吧。
排查修复数据表的经过如下:
1、访问网页,提示错误,连接不到数据库。
2、启动mysql服务,卸载和关闭rpm安装的mysql服务(昨天安装postfix好像yum安装了mysql),用netstat -anp |grep mysqld 命令查看mysql服务没有起来,用mysql -uroot -p也连接不到服务器。
3、查看错误提示:
class="dp-xml">
- 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.
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/,相信一定会带给您收获的!