当前位置:首页 > 问答 > 正文

MySQL报错MY-010735插件表打不开,远程帮忙修复故障怎么搞

这个MY-010735错误,说白了就是MySQL服务器在启动的时候,想去一个特定的系统表里读取信息,但这个表要么不存在,要么损坏了,要么权限不对,导致MySQL“打不开”它,这个表的名字通常是plugin,里面记录着MySQL已经安装了哪些插件,比如密码验证插件、审计插件等等,服务器启动必须检查这个表来加载必要的插件,所以一旦它出问题,MySQL就很可能启动失败,下面我们就一步步来看看,怎么远程帮忙把这个问题搞定,注意,以下操作都需要在服务器上具有相应的系统权限和数据库管理員权限。

第一步:确认错误详情和MySQL状态

不能光看一个错误代码就动手,得先连上服务器,查看MySQL的错误日志文件,错误日志的位置通常在MySQL的數據目錄下,文件名一般是主机名.err,也可以在MySQL配置文件my.cnfmy.ini中查找到log-error的配置项,用tailcat命令查看日志的最后几行。

(来源:MySQL官方文档关于错误日志的说明)

你会在日志里看到类似这样的具体信息: [ERROR] [MY-010735] [Server] Could not open mysql.plugin table. Please perform the MySQL upgrade procedure. 或者 [ERROR] [MY-010735] [Server] Can't open the mysql.plugin table. Please run mysql_upgrade.

看清楚错误信息后面的提示至关重要,它直接指出了修复的方向:通常是让你执行mysql_upgrade命令或者进行“MySQL升级操作”。

第二步:尝试最直接的修复方法——运行mysql_upgrade

根据错误日志的提示,最首选的修复方法就是运行mysql_upgrade工具,这个工具专门用来检查并更新系统表的结构,使其与当前MySQL服务器的版本保持一致。

(来源:MySQL官方文档关于mysql_upgrade工具的说明)

操作步骤如下:

  1. 确保MySQL服务已停止:在修复系统表之前,必须先停止MySQL服务,使用命令 systemctl stop mysqld(适用于Systemd系统)或 service mysql stop(适用于SysVinit系统)。
  2. 以安全模式启动MySQL(可选但推荐):有时候表损坏可能导致正常启动失败,但可以尝试跳过权限检查和某些系统表的加载来启动,使用命令 mysqld --skip-grant-tables --skip-networking &,这样启动后,可以无需密码连接MySQL,但为了安全会关闭网络连接,仅限本地操作。
  3. 运行mysql_upgrade:连接上MySQL之后(如果是以安全模式启动,使用mysql -u root直接连接),但实际上更常见的做法是在停止MySQL服务后,直接以命令行方式运行升级工具,命令是: mysql_upgrade -u root -p 然后输入root用户的密码,这个命令会检查所有系统表,并自动修复mysql.plugin表以及其他可能需要更新的表。
  4. 正常重启MySQL服务:升级完成后,务必正常停止MySQL服务(如果之前用了安全模式,需要先杀掉进程),然后使用 systemctl start mysqld 这样的命令正常启动。

第三步:如果mysql_upgrade失败或问题依旧

如果上面的方法不奏效,mysql_upgrade本身也报错,或者运行后MySQL还是启动失败,那说明mysql.plugin表可能损坏得比较严重,这时候就需要更深入的手动干预。

  1. 备份!备份!备份!:在进行任何危险操作前,务必备份整个MySQL數據目錄(通常是/var/lib/mysql/usr/local/mysql/data),这是最后的救命稻草。
  2. 手动重建mysql.plugin表
    • 再次以--skip-grant-tables安全模式启动MySQL。
    • 连接MySQL后,选择mysql系统数据库:USE mysql;
    • 删除损坏的plugin表:DROP TABLE IF EXISTS plugin;
    • 我们需要重新创建这个表,表结构可以在MySQL的官方文档中找到,或者更简单的方法是从一个同版本、正常运行的MySQL实例中导出plugin表的创建语句,标准的结构大致如下: (来源:MySQL源码或相同版本实例的SHOW CREATE TABLE mysql.plugin;命令)
      CREATE TABLE plugin (
        name varchar(64) NOT NULL DEFAULT '',
        dl varchar(128) NOT NULL DEFAULT '',
        PRIMARY KEY (name)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='MySQL plugins';
    • 执行上面的CREATE TABLE语句来重建空表。
    • 重建后,正常的插件记录可能需要重新初始化,一个最简化的方法是,退出MySQL,停止服务,然后再次运行mysql_upgrade,这次因为它找到了一个结构正确的空表,它会尝试重新填充必要的插件信息。
    • 最后正常重启MySQL服务。

第四步:检查文件权限和完整性

如果手动重建表都解决不了,就要怀疑是不是整个MySQL數據目錄的权限问题,或者是磁盘故障导致的文件系统损坏。

  1. 检查目录和文件权限:确保MySQL數據目錄及其下的所有文件和子目录的所有者和组都是MySQL运行用户(通常是mysql:mysql),可以使用命令 chown -R mysql:mysql /var/lib/mysql 来递归修改所有者(请替换为你的实际數據目錄路径)。
  2. 检查磁盘空间和文件系统:使用df -h检查磁盘是否已满,使用fsck命令(需卸载磁盘)检查文件系统是否有错误,磁盘满或文件系统错误会导致任何文件操作失败。

第五步:最后的恢复手段

如果所有方法都失败了,而你又有可用的备份,那么从备份中恢复mysql系统数据库(或者整个數據目錄)就是最终方案,恢复后,再运行mysql_upgrade来确保系统表与当前MySQL版本兼容。

修复MY-010735错误是一个从简到繁的过程,核心思路就是围绕“让mysql.plugin这个系统表恢复正常”来展开,远程协助时,关键是通过查看详细的错误日志定位问题,然后按照上述步骤谨慎操作,并时刻牢记备份的重要性。

MySQL报错MY-010735插件表打不开,远程帮忙修复故障怎么搞