当前位置:论坛首页 > Linux面板 > Linux面板教程

MySQL表损坏如何修复?这个教程能帮到你

发表在 Linux面板2022-3-20 23:58 [复制链接] 0 3081

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

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

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


使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表