MySQL 5.0 → 5.1 升級屬大版本跨越,涉及系統表結構變更、優化器行為差異、備份恢復驗證。本文記錄「二進制覆蓋安裝 + 邏輯備份還原」實戰流程,含常見坑點 (mysqldump 鎖表錯誤、mysql_upgrade 缺失、權限表不匹配) 解決方案。
mysqldump) + 物理備份 (資料目錄打包) + 配置檔備份。mysqlcheck --all-databases --check-upgrade (5.1 提供)。mysqldump -uroot -p --all-databases --flush-logs --single-transaction --master-data=2 --routines --triggers --events > /backup/mysql_5.0_full_$(date +%F).sql
--flush-logs (-F):切換 Binlog,便於時間點恢復。--single-transaction:InnoDB 一致性備份無鎖表。--master-data=2:輸出 CHANGE MASTER TO 註釋,含 Binlog 位置。mysqldump: Got error: 1556: You can't use locks with log tables原因:系統 mysqldump (如 /usr/bin/mysqldump) 版本舊,不支援新版 log tables 鎖定語法。
解決:確保使用新版 MySQL 安裝目錄下的 mysqldump:
# 檢查當前路徑
which mysqldump
# 調整 PATH 讓新版優先
export PATH=/usr/local/mysql/bin:$PATH
# 驗證
mysqldump --version
# 停止服務
mysqladmin -uroot -p shutdown
# 打包資料目錄
tar -czf /backup/mysql_5.0_data_$(date +%F).tar.gz /data/mysql_data/mysql
# 打包安裝目錄
tar -czf /backup/mysql_5.0_bin_$(date +%F).tar.gz /usr/local/mysql
# 備份配置
cp /etc/my.cnf /backup/my.cnf_$(date +%F)
wget https://downloads.mysql.com/archives/get/file/mysql-5.1.73-linux-x86_64-glibc23.tar.gz
tar xzf mysql-5.1.73-linux-x86_64-glibc23.tar.gz
rm -rf /usr/local/mysql/*
mv mysql-5.1.73-linux-x86_64-glibc23/* /usr/local/mysql/
/data/mysql_data/mysql 和 /etc/my.cnf。
# 啟動 (跳過授權表可選,但正常啟動即可)
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
# 等待啟動完成,執行升級腳本
/usr/local/mysql/bin/mysql_upgrade -uroot -p --force
mysql_upgrade 會:
CHECK TABLE ... FOR UPGRADE)。REPAIR TABLE)。mysql 系統表結構 (權限、事件、插件等)。FLUSH PRIVILEGES)。sysbench / tpcc-mysql 對比升級前後 QPS、延遲。tail -f /var/log/mysqld.log 關注 [ERROR]、[Warning]。ANALYZE TABLE 核心表,或啟用 innodb_stats_auto_recalc。mysqldump 從 5.0 導出。優勢:原生重建表結構、索引統計、避免系統表殘留問題、可異構遷移 (32→64位、不同 OS)。
| 現象 | 原因 | 解決 |
|---|---|---|
啟動報 Table 'mysql.proc' doesn't exist | 系統表結構未升級 | 執行 mysql_upgrade --force |
| 存儲過程/函數報錯 | 定義者權限/字符集不匹配 | 重新建立或 mysql_upgrade 修復 |
| 複寫中斷 | Binlog 格式/系統表差異 | 從庫重做、確認 binlog_format 一致 |
| 查詢計劃變差 | 優化器新特性/統計信息舊 | ANALYZE TABLE、檢查 optimizer_switch |
| 字符集亂碼 | 預設字符集變更 (5.1 預設 latin1) | 配置 character-set-server=utf8mb4 |
MySQL 5.0 → 5.1 升級,邏輯備份 + mysql_upgrade 是核心保障。二進制覆蓋安裝雖快但風險較高 (系統表不匹配、殘留舊結構),生產環境強烈建議 邏輯遷移到新實例。無論哪種方式,mysql_upgrade --force 必須執行並驗證無錯誤,才算升級完成。