站点图标 IDC铺

关于宝塔MySQL表损坏如何修复,教程解决。

数据库在网站服务中是比较重要的环节,一旦出错,会导致业务中断,本文主要讲解在遇到表损坏的时候,如何进行恢复。
一、为什么会出现表损坏?
①、 服务器突然断电导致数据文件损坏。
②、 强制关机,没有先关闭MySQL服务。
③、 mysqld 进程在写表时被杀掉。
④、 使用myisamchk 的同时,mysqld 也在操作表。
⑤、 磁盘故障。
⑥、 服务器死机。
⑦、 MySQL 本身的bug 。
出现错误的图和代码如下:
图1
关于宝塔MySQL表损坏如何修复,教程解决。插图
代码1、

  1. [ERROR] /www/server/mysql/bin/mysqld: Table ‘./mysql/user’ is marked as crasshed and should be repaired

复制代码

代码2、

  1. # mysql -u root -p
  2. Enter password:
  3. mysql> use wordpress;
  4. Reading table information for completion of table and column names
  5. You can turn off this feature to get a quicker startup with -A
  6. Database changed
  7. mysql> select * from wp_posts;
  8. ERROR 145 (HY000): Table ‘./wordpress/wp_posts’ is marked as crashed and should be repaired
  9. mysql> Bye

复制代码

二、如何解决?
①、当MySQL中的mysql库的 user表出现错误的是,需要使用重新初始化的操作,重新生成mysql表的信息,这个时候要用到MySQL自带的 mysql_install_db工具进行修复,面板上这个工具目录为:

  1. /www/server/mysql/bin/mysql_install_db

复制代码

图1和代码1中的修复方式为:
首先备份下 /www/server/data 目录,能做磁盘快照的尽量做快照

  1. \cp -rp /www/server/data  /www/backup/database/data_20220320

复制代码

修复命令:

  1. /www/server/mysql/bin/mysql_install_db –user=mysql –basedir=/www/server/mysql/ –datadir=/www/server/mysql/data/

复制代码

简单解读下参数:

  1. –user :修复的时候使用的用户,堡塔面板中默认使用的是mysql
  2. –basedir:mysql数据库安装的目录
  3. –datadir:mysql数据库的数据存放目录

复制代码

②、数据库中的某张表损坏后,如代码2,解决方案如下:
找到mysqlcheck 工具,目录在
/www/server/mysql/bin/mysqlcheck
命令如下:

  1. /www/server/mysql/bin/mysqlcheck -uroot -p wordpress –auto-repair

复制代码

参数解读:

  1. -u:使用的数据库帐号,一般是 MySQL的root帐号
  2. -p:需要修复的数据库,注意 -p 和数据库之间有个空格
  3. –auto-repair:自动修复对应的表

复制代码

执行后修复成功的截图如下:

三、如何避免类似事情发生?
①、不要随意重启服务器,服务器本身就是提供长期稳定服务的
②、非必要情况下不要重启MySQL服务,如果必须重启MySQL,请不要在写数据的时候重启,建议先关闭web服务(Nginx|Apache),等5分钟左右,数据完全落盘后,重启MySQL
③、有条件的情况,可以先使用付费插件 MySQL主从复制重构版  进行主从备份,当主库有问题的时候,可以尽快切换到从库
④、平时多做备份,面板计划任务中的备份,除了本地保存外,建议将备份文件放到存储中,鸡蛋不要同时放在一个篮子里

如果有其他问题的话,可以在我们的论坛进行反馈。
FAQ:
1、案例一中的user表是什么表?
答:user表是mysql库中的系统表,记录了数据库用户的帐号信息、权限等,比较重要,损坏时数据库就无法启动,建议初始化后,修改下MySQL root帐号的密码
2、上述的解决方式支持的数据库版本?
答:由于数据库的版本不同,处理方式也不同,上述解决方式暂时支持Innodb存储引擎的mysql5.6|5.7版本的数据库,8.0的数据库的初始化暂时未验证

退出移动版