首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

解決 MySQL 5.6 啟動報錯:Function 'innodb' already exists 插件衝突清理指南

     編輯:MySQL 綜合教學

解決 MySQL 5.6 啟動報錯:Function 'innodb' already exists 插件衝突清理指南

MySQL 5.6 升級或遷移後,錯誤日誌頻現 Function 'innodb' already exists、Couldn't load plugin named 'innodb' with soname 'ha_innodb.so' 等警告。本文剖析根因:mysql.plugin 系統表殘留舊版插件註冊,而 5.6 核心已內建 InnoDB/Federated/Blackhole/Archive,無需外部插件加載。提供一條 SQL 徹底清理,並驗證修復效果。

一、錯誤現象與影響

2015-10-28 13:27:05 25054 [ERROR] Function 'innodb' already exists
2015-10-28 13:27:05 25054 [Warning] Couldn't load plugin named 'innodb' with soname 'ha_innodb.so'.
2015-10-28 13:27:05 25054 [ERROR] Function 'federated' already exists
2015-10-28 13:27:05 25054 [Warning] Couldn't load plugin named 'federated' with soname 'ha_federated.so'.
2015-10-28 13:27:05 25054 [ERROR] Function 'blackhole' already exists
2015-10-28 13:27:05 25054 [Warning] Couldn't load plugin named 'blackhole' with soname 'ha_blackhole.so'.
2015-10-28 13:27:05 25054 [ERROR] Function 'archive' already exists
2015-10-28 13:27:05 25054 [Warning] Couldn't load plugin named 'archive' with soname 'ha_archive.so'.

影響**:雖不阻礙服務啟動,但污染錯誤日誌、干擾告警系統、掩蓋真實錯誤,且啟動過程嘗試加載不存在的 .so 文件增加開銷。

二、根因深度剖析

mysql> SELECT * FROM mysql.plugin;
+-----------+-----------------+
| name      | dl              |
+-----------+-----------------+
| innodb    | ha_innodb.so    |
| federated | ha_federated.so |
| blackhole | ha_blackhole.so |
| archive   | ha_archive.so   |
+-----------+-----------------+

原因鏈**:

  1. MySQL 5.1/5.5 時代,InnoDB 等為可選插件,安裝腳本 mysql_install_db 會向 mysql.plugin 註冊
  2. 5.6 起,InnoDB 成為內建核心引擎(WITH_INNOBASE_STORAGE_ENGINE=1 編譯進二進制),無需動態加載
  3. 升級/遷移時,mysql.plugin 表數據被保留(邏輯備份恢復、數據目錄複用),導致啟動器嘗試重複加載

三、一鍵修復:清理殘留插件註冊

mysql> DELETE FROM mysql.plugin;
Query OK, 4 rows affected (0.00 sec)

mysql> SELECT * FROM mysql.plugin;
Empty set (0.00 sec)

四、驗證修復效果

  1. 清理錯誤日誌:mv /var/log/mysqld.log /var/log/mysqld.log.bak
  2. 重啟服務:systemctl restart mysqld
  3. 檢查新日誌:不再出現上述 ERROR/WARNING,僅保留正常啟動資訊
  4. 確認引擎可用:SHOW ENGINES; 顯示 InnoDB SUPPORT YES、DEFAULT

五、預防與最佳實踐

  1. 升級前備份 mysql 系統庫**:mysqldump --single-transaction mysql > mysql_system.sql
  2. 原地升級執行 mysql_upgrade**:mysql_upgrade -u root -p --force,會自動處理系統表結構變更
  3. 邏輯遷移排除 mysql.plugin**:導出時 --ignore-table=mysql.plugin,或導入後手動清理
  4. 物理遷移重新初始化**:新實例 mysqld --initialize 生成乾淨系統表,再導入業務數據

六、延伸:插件管理常用命令

操作SQL
查看已安裝插件SHOW PLUGINS;
安裝插件INSTALL PLUGIN plugin_name SONAME 'ha_plugin.so';
卸載插件UNINSTALL PLUGIN plugin_name;
查看插件狀態SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_STATUS='ACTIVE';

「乾淨的系統表是穩定運行的基石」。將 DELETE FROM mysql.plugin 納入 MySQL 5.6+ 升級/遷移 SOP 標準動作,配合 mysql_upgrade 全量校驗,讓插件衝突錯誤成為歷史。

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