MySQL 版本升級的關鍵在於徹底清除舊版殘留,避免庫檔案衝突、配置遺留導致新版啟動異常。本文提供基於 RPM 套件管理的標準化流程,適用於 RHEL/CentOS/Fedora 等系統。
rpm -qa | grep -i mysql
# 輸出範例:
# mysql-server-3.23.54a-11
# mysql-devel-3.23.54a-11
# mysql-client-3.23.54a-11
記錄所有相關套件名稱,便於批次移除。
rpm -e --nodeps mysql-server mysql-devel mysql-client
# 或一次性移除所有匹配套件
rpm -qa | grep -i mysql | xargs rpm -e --nodeps
警告:--nodeps 會跳過相依性檢查,確保無其他套件依賴 MySQL 庫檔 (如 PHP mysql 模組) 再執行。生產環境建議先停用相關服務。
# 刪除庫檔與頭文件
rm -rf /usr/lib/mysql
rm -rf /usr/include/mysql
# 刪除資料目錄 (若不需保留舊資料)
# rm -rf /var/lib/mysql
# 刪除配置檔
rm -f /etc/my.cnf
rm -f /etc/mysql/my.cnf
# 刪除啟動腳本
rm -f /etc/init.d/mysql
rm -f /etc/rc.d/init.d/mysql
rpm -qa | grep -i mysql # 應無輸出
ls /usr/lib/mysql # 應報 No such file
ls /usr/include/mysql # 應報 No such file
which mysql # 應無輸出或指向新版路徑
# 1. 安裝官方 repo
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 2. 選擇版本 (預設最新 GA,可切換)
yum repolist enabled | grep mysql
# yum-config-manager --disable mysql80-community
# yum-config-manager --enable mysql57-community
# 3. 安裝
yum install mysql-community-server mysql-community-client mysql-community-devel
# 下載對應版本 RPM 套件組
wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.7.44-1.el7.x86_64.rpm-bundle.tar
tar xf MySQL-*.rpm-bundle.tar
# 按相依順序安裝
rpm -ivh mysql-community-common-*.rpm
rpm -ivh mysql-community-libs-*.rpm
rpm -ivh mysql-community-client-*.rpm
rpm -ivh mysql-community-server-*.rpm
rpm -ivh mysql-community-devel-*.rpm
# 初始化資料目錄 (MySQL 5.7+)
mysqld --initialize --user=mysql
# 或 --initialize-insecure (無隨機 root 密碼)
# 啟動服務
systemctl start mysqld
systemctl enable mysqld
# 取得暫時 root 密碼 (5.7+)
grep 'temporary password' /var/log/mysqld.log
# 安全強化向導
mysql_secure_installation
# 設定 root 密碼、移除匿名帳號、禁止 root 遠端登入、移除 test 資料庫
# 從舊版匯出 (若舊版仍可啟動)
mysqldump -u root -p --all-databases --routines --triggers --single-transaction > /backup/full_$(date +%F).sql
# 匯入新版
mysql -u root -p < /backup/full_2024-01-15.sql
# 升級系統表
mysql_upgrade -u root -p
| 問題 | 原因 | 解決 |
|---|---|---|
啟動失敗:libmysqlclient.so not found | 舊版庫檔殘留或路徑錯誤 | 執行 ldconfig、檢查 /etc/ld.so.conf.d/mysql.conf |
| 升級後資料表損壞 | 跨大版本直接複製 data 目錄 | 必須用 mysqldump 邏輯備份還原,不可物理複製 |
| 字符集亂碼 | 舊版 latin1、新版 utf8mb4 | 匯出時指定 --default-character-set=latin1,匯入後轉換 |
| 權限表缺失 | 未執行 mysql_upgrade | 執行 mysql_upgrade -u root -p |
mysqldump)SHOW VARIABLES),新版對應調整ANALYZE TABLE 更新統計資訊新專案建議直接使用 Docker/Podman:
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=StrongPassw0rd! \
-v /data/mysql:/var/lib/mysql \
-p 3306:3306 \
mysql:8.0
版本升級僅需修改映像標籤、重建容器,資料卷掛載分離確保資料安全,消除庫衝突與環境污染。
MySQL 版本升級核心在於乾淨移除舊版 → 官方源安裝新版 → 邏輯備份還原 → 系統表升級 → 全面驗證。RPM 系統下務必使用 --nodeps 徹底清理,避免殘留檔案干擾。生產環境嚴禁跨大版本物理複製資料目錄,容器化部署可從根本上簡化升級運維。