首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 升級完整指南:原地升級與邏輯升級實戰、版本路徑規則與風險控制

     編輯:MySQL 綜合教學

MySQL 升級完整指南:原地升級與邏輯升級實戰、版本路徑規則與風險控制

MySQL 升級分為原地升級(替換二進制、保留數據目錄)與邏輯升級(導出導入)。本文詳述官方支援的升級路徑、原地升級步驟實錄、mysql_upgrade 作用、常見坑點與回滾預案。

一、官方支援升級路徑

類型支援範例說明
小版本升級5.6.25 → 5.6.31同大版本,風險最低
跨大版本(單級)5.5 → 5.6、5.6 → 5.7需逐級升級,不可跳級
跨多級5.1 → 5.6不支援,必須 5.1→5.5→5.6
非 GA 版本5.6.9 → 5.6.10不支援,僅 GA 版本間升級

版本資訊查詢:MySQL 官方歸檔

二、原地升級實戰:5.5.30 → 5.6.32

1. 升級前準備

-- 1. 關閉快速關閉,確保 change buffer 合併、purge 完成
SET GLOBAL innodb_fast_shutdown = 0;
-- 值說明:0=慢關閉(執行 purge+merge),1=快關閉(預設,跳過),2=僅 flush log(恢復慢)

-- 2. 完整備份(邏輯/物理均可)
mysqldump -uroot -p --single-transaction -A -B | gzip > backup_$(date +%F).sql.gz

2. 停止舊實例並替換二進制

# 啟動新版 mysqld
./bin/mysqld_safe --defaults-file=/usr/test/mysql-5.6.32/my.cnf --user=mysql --ledir=/usr/test/mysql-5.6.32/bin &

# 執行升級腳本(必須)
./bin/mysql_upgrade -uroot -p --socket=/data/mysql.sock

mysql_upgrade 做什麼?

  • 檢查所有表與當前版本相容性
  • 升級系統表(mysql.user、mysql.db 等)以支援新權限/功能
  • 發現不兼容表自動 CHECK TABLE + REPAIR TABLE

4. 驗證升級結果

# 邏輯升級流程
mysqldump -uroot -p --single-transaction -A -B --routines --triggers --events | gzip > full.sql.gz
# 安裝新版 MySQL,初始化數據目錄
# 導入
gunzip < full.sql.gz | mysql -uroot -p
# 執行 mysql_upgrade

四、常見坑點與應對

問題原因解決
系統表結構不匹配未執行 mysql_upgrade務必執行,若報錯檢查權限、表損壞
保留字衝突新版新增保留字(如 RANK、GROUPS)升級前用 mysqlcheck --check-upgrade 掃描
預設值變更如 5.7 sql_mode 預設含 ONLY_FULL_GROUP_BY測試應用相容性,或調整 sql_mode
InnoDB 頁面格式5.7 預設 Barracuda,5.5 可能 Antelopeinnodb_file_format=Barracuda,或重建表
GTID 模式升級5.6→5.7 GTID 實現有差異升級前關閉 GTID,升級後重新配置

五、回滾預案

  1. 保留舊版二進制目錄與 my.cnf 備份。
  2. 物理備份數據目錄(或 LVM/ZFS 快照)。
  3. 升級失敗:停止新版實例,還原數據目錄,啟動舊版實例。
  4. 驗證應用連線正常後,再規劃下次升級窗口。

總結:原地升級適合小版本、單級大版本,操作快、風險可控;邏輯升級通用性強、適合大跨度或架構變更。核心鐵律:升級前全量備份、升級後必跑 mysql_upgrade、生產前必在測試環境全流程演練。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved