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 | +-----------+-----------------+
原因鏈**:
mysql_install_db 會向 mysql.plugin 註冊WITH_INNOBASE_STORAGE_ENGINE=1 編譯進二進制),無需動態加載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)
mv /var/log/mysqld.log /var/log/mysqld.log.baksystemctl restart mysqldSHOW ENGINES; 顯示 InnoDB SUPPORT YES、DEFAULTmysqldump --single-transaction mysql > mysql_system.sqlmysql_upgrade -u root -p --force,會自動處理系統表結構變更--ignore-table=mysql.plugin,或導入後手動清理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 全量校驗,讓插件衝突錯誤成為歷史。