因 WordPress 4.2+ 要求 MySQL 5.5+,需將 CentOS 6 上的 MySQL 5.1 升級至 5.5。本文記錄生產環境無故障升級全流程:備份、停服務、清理舊包、配置 Remi 源安裝、升級系統表、驗證啟動。
# 1. 備份所有資料庫 (含存儲過程、觸發器、事件)
mysqldump -u root -p --single-transaction --master-data=2 --routines --triggers --events --all-databases > /backup/mysql_full_$(date +%F).sql
# 2. 備份配置文件
cp /etc/my.cnf /etc/my.cnf.bak.$(date +%F)
# 3. 備份網站代碼目錄
tar czf /backup/web_$(date +%F).tar.gz /var/www/html
service mysqld stop
yum remove mysql mysql-server mysql-libs mysql-devel
# 檢查殘留
rpm -qa | grep -i mysql
# 若有殘留 (如 mysql-libs-5.1.x) 強制移除
yum remove mysql-libs
注意: 移除 mysql-libs 可能連帶移除依賴它的套件 (如 postfix、cronie),升級後重新安裝即可。
# 1. 安裝 EPEL & Remi 源 (CentOS 6 x86_64)
rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh https://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# 2. 查看可用版本
yum --enablerepo=remi,remi-test info mysql mysql-server
# 3. 安裝 (remi 預設提供 5.5/5.6/5.7,此處安裝 5.5)
yum --enablerepo=remi install mysql mysql-server
# 若需指定 5.5:yum --enablerepo=remi install mysql55-mysql mysql55-mysql-server
MySQL 5.5 配置參數與 5.1 大多相容,直接沿用舊 my.cnf 即可。重點檢查:
innodb_buffer_pool_size 依記憶體調整 (建議 50-70%)innodb_file_per_table = ONmax_connections 視應用並發調整skip-locking)
service mysqld start
# 首次啟動會自動建立系統表,隨後必須執行升級腳本
mysql_upgrade -u root -p
# 輸入 root 密碼,腳本會檢查/修復所有表、重建權限表、刷新權限
若報錯「Table 'mysql.proc' doesn't exist」:說明系統表未建立完全,重新執行 mysql_install_db --user=mysql 後再跑 mysql_upgrade。
mysql -V
# mysql Ver 14.14 Distrib 5.5.xx, for Linux (x86_64) using readline 5.1
mysql -u root -p -e "SELECT VERSION();"
# 5.5.xx-log
# 測試 WordPress 連線
cd /var/www/html && php -r "require 'wp-load.php'; echo 'WP DB Version: ' . \$wpdb->db_version();"
| 現象 | 原因 | 解決 |
|---|---|---|
啟動失敗 InnoDB: Error: log file size mismatch | 舊 ib_logfile 殘留 | 停服務,移除 /var/lib/mysql/ib_logfile* 重啟 |
PHP 連線報 mysqlnd cannot connect to MySQL 4.1+ using old authentication | 密碼雜湊格式舊版 | UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES; |
| 中文亂碼 | 字符集配置遺失 | 確認 my.cnf 含 character-set-server=utf8mb4,連線執行 SET NAMES utf8mb4 |