首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 啟動報錯 "Table mysql.plugin doesn't exist" 根因與修復方案

     編輯:MySQL 資料庫相關知識

MySQL 服務啟動時日誌報錯 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 或 Table 'mysql.plugin' doesn't exist,導致服務無法正常提供服務。本文解析根因、提供標準修復步驟與預防措施。

根因分析

  • 系統表缺失:mysql 系統庫(含 plugin、user、db、tables_priv 等權限表)未正確初始化或被誤刪/遷移丟失。
  • 典型觸發場景:
    1. 手動修改 my.cnf 中 datadir 路徑,但未將原 datadir 下的 mysql 系統庫目錄遷移至新路徑。
    2. 直接刪除/重命名 datadir/mysql 目錄。
    3. 主從遷移/備份恢復時漏掉系統庫。
    4. 版本升級未執行 mysql_upgrade(5.7→8.0 必須)。

標準修復流程

方案一:遷移缺失的系統庫目錄(最快、適用於誤改 datadir)

# 1. 停止服務
systemctl stop mysqld

# 2. 找到舊 datadir 路徑(含 mysql 目錄)
# 假設舊路徑 /var/lib/mysql_old,新路徑 /data/mysql
cp -rp /var/lib/mysql_old/mysql /data/mysql/

# 3. 確保權限
chown -R mysql:mysql /data/mysql/mysql
chmod -R 750 /data/mysql/mysql

# 4. 啟動服務
systemctl start mysqld

方案二:重新初始化數據目錄(適用於全新實例/系統庫損壞無備份)

# 1. 停止服務
systemctl stop mysqld

# 2. 清空/備份新 datadir
mv /data/mysql /data/mysql.bak.$(date +%s)
mkdir -p /data/mysql
chown mysql:mysql /data/mysql

# 3. 初始化系統表(MySQL 5.7+)
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
# --initialize-insecure:生成隨機 root 密碼寫入 ~/.mysql_secret
# --initialize:生成臨時密碼寫入 error log

# 4. 啟動服務
systemctl start mysqld

# 5. 登錄修改密碼(若用 initialize-insecure)
mysql -u root --skip-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
FLUSH PRIVILEGES;

方案三:版本升級場景執行 mysql_upgrade

# 5.7 → 8.0 升級後,服務啟動前必須執行
mysql_upgrade --user=root --password --force
# 檢查並修復系統表結構、重建索引、更新權限表
# 完成後重啟服務
systemctl restart mysqld

驗證修復

# 1. 檢查錯誤日誌無 plugin 相關報錯
tail -f /var/log/mysqld.log

# 2. 登錄檢查系統表
mysql -u root -p -e "SHOW TABLES FROM mysql LIKE 'plugin';"
# 應輸出:+----------------+ | Tables_in_mysql (plugin) | +----------------+ | plugin | +----------------+

# 3. 檢查插件系統正常
mysql -u root -p -e "SHOW PLUGINS;"

預防措施

  1. 修改 datadir 必須同步遷移 mysql 系統庫目錄,不可僅遷移用戶庫。
  2. 版本升級強制執行 mysql_upgrade,不可跳過。
  3. 備份策略包含系統庫:mysqldump --all-databases --routines --events --triggers 或物理備份 xtrabackup 全量備份 datadir。
  4. 文件系統權限鎖定:chattr +i /data/mysql/mysql 防誤刪(謹慎使用,升級時需解除)。

總結

Table mysql.plugin doesn't exist 本質是系統庫缺失。核心修復:遷移舊系統庫目錄 或 重新初始化 + mysql_upgrade。操作前務必備份現有數據目錄。規範運維流程(datadir 遷移清單、升級清單)可徹底杜絕此類故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved