平时维护网站的时候一定会遇到数据表崩溃,这可能是MySQL
没有正常关闭或断电等原因导致。这时就需要我们手动修复表文件,通常可以通过数据库管理工具,例如:phpmyadmin
进行可视化修复。下面我讲解在Linux
下通过命令修复损坏的表文件。
以下操作以本博客使用的 WordPress
程序演示,如果部分表存在问题则可以修复或优化。
登录MariaDB数据库
$ mysql -u root -p Enter password:[输入您的mysql或管理其数据库的密码] Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 84162 Server version: 10.3-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use renwolecomdb;
查看当前所有数据表文件:
MariaDB [renwolecomdb]> show tables; +------------------------+ | Tables_in_renwolecomdb | +------------------------+ | wp_baidusubmit_sitemap | | wp_baidusubmit_urlstat | | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_usermeta | | wp_users | +------------------------+ 14 rows in set (0.00 sec)
如果感觉您的数据库某个表加载较慢,可以进行数据表优化,命令如下:
MariaDB [renwolecomdb]> OPTIMIZE TABLE wp_baidusubmit_urlstat; +------------------------------------+----------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------------------------------+----------+----------+----------+ |renwolecomdb.wp_baidusubmit_urlstat | optimize | status | OK | +------------------------------------+----------+----------+----------+ 1 row in set (0.11 sec)
上面已打印出详细的分析报告。
下面将修复被破坏的表文件,命令如下:
MariaDB [renwolecomdb]> REPAIR TABLE wp_baidusubmit_sitemap; +------------------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +------------------------------------+--------+----------+----------+ |renwolecomdb.wp_baidusubmit_sitemap | repair | status | OK | +------------------------------------+--------+----------+----------+ 1 row in set (0.00 sec)
修复成功。
修复 InnoDB 引擎的表文件,命令如下:
MariaDB [renwolecomdb]> REPAIR TABLE wp_commentmeta; +----------------------------+--------+----------+---------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +----------------------------+--------+----------+---------------------------------------------------------+ |renwolecomdb.wp_commentmeta | repair | note | The storage engine for the table doesn't support repair | +----------------------------+--------+----------+---------------------------------------------------------+ 1 row in set (0.00 sec)
提示错误报告:The storage engine for the table doesn't support repair.
上述报错说明该数据库InnoDB
引擎数据表不支持修复。
但需要说明的是:
InnoDB
损坏表的几率非常小,因为InnoDB
是先写入日志,再写入数据库,因此InnoDB
引擎比MyISAM
健壮很多,而且他有自我修复能力,一般情况一旦InnoDB
的数据文件损坏,只能找备份恢复。
所以我们平时做运维的一定要对数据备份、备份、再备份,以防万一。