MySQL 5.5 在多核擴展性、InnoDB 性能、半同步復制等方面有顯著提升。本文記錄生產環境從 5.1 就地升級至 5.5 的標準化流程,核心原則:備份優先、數據目錄不變、二進制兼容升級。
| 項目 | 路徑/版本 |
|---|---|
| 安裝目錄 | /usr/local/mysql |
| 配置文件 | /etc/my.cnf |
| 數據目錄 | /data/mysql |
| 啟動腳本 | /etc/init.d/mysql |
| 當前版本 | MySQL 5.1.60 |
# 1. 邏輯全量備份(含所有庫、觸發器、存儲過程)
mysqldump -u root -p --all-databases --routines --triggers --single-transaction --master-data=2 > /root/backup/mysql_5.1_full_$(date +%F).sql
# 2. 物理備份安裝目錄
tar czvf /root/backup/mysql_5.1_bin_$(date +%F).tar.gz /usr/local/mysql
# 3. 物理備份數據目錄(關鍵:保留 ibdata、ib_logfile、.frm、.ibd 等)
tar czvf /root/backup/mysql_5.1_data_$(date +%F).tar.gz /data/mysql
# 4. 備份配置文件
cp /etc/my.cnf /root/backup/my.cnf_5.1_$(date +%F)
/etc/init.d/mysql stop
# 確認進程已退出
ps aux | grep mysql
# 移除舊安裝目錄(數據目錄 /data/mysql 不動)
rm -rf /usr/local/mysql
參考《Linux 下編譯安裝 MySQL 5.5 簡單步驟》,關鍵 cmake 參數保持目錄一致:
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system
make && make install
# 複製 5.5 附帶的大內存模板
cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
# 修改 datadir 指向舊數據目錄
sed -i '/^\[mysqld\]/a datadir = /data/mysql' /etc/my.cnf
# 其他參數按業務調整(innodb_buffer_pool_size 等)
# 1. 啟動 5.5 實例(數據目錄仍為 5.1 的文件)
/etc/init.d/mysql start
# 2. 執行 mysql_upgrade(關鍵:升級系統表、檢查表兼容性、重建索引統計)
/usr/local/mysql/bin/mysql_upgrade -u root -p
# 輸出示例:
# Running 'mysqlcheck' with connection arguments...
# mysql.user OK
# ...
# Running 'mysql_fix_privilege_tables'... OK
mysql_upgrade 做了什麼?
mysqlcheck --auto-repair --all-databases)。mysql 系統庫表結構(權限表、事件、存儲過程元數據等)。/etc/init.d/mysql restart
# 登錄檢查版本、數據完整性
mysql -u root -p -e "SELECT VERSION(); SHOW DATABASES; CHECK TABLE critical_table;"
tar xzf /root/backup/mysql_5.1_bin_*.tar.gz -C /tar xzf /root/backup/mysql_5.1_data_*.tar.gz -C /cp /root/backup/my.cnf_5.1_* /etc/my.cnf| 風險點 | 應對 |
|---|---|
| 系統表結構不兼容 | 務必執行 mysql_upgrade,不可跳過 |
| InnoDB 日誌文件大小不匹配 | 升級前備份 ib_logfile*,升級後若報錯刪除重建 |
| 字符集亂碼 | 確認 my.cnf 字符集配置與 5.1 一致(utf8/gbk) |
| 存儲過程/觸發器 DEFINER 權限缺失 | 備份腳本加 --routines --triggers,升級後檢查 DEFINER 用戶是否存在 |
就地升級核心在於保持數據目錄不變,僅替換二進制文件並執行 mysql_upgrade。生產環境建議先在預發環境演練,驗證應用兼容性後再實施,並預留足夠回滾時間窗口。