首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 版本升級完整指南:跨大版本升級策略、關鍵變更與操作步驟

     編輯:MySQL 資料庫相關知識

核心升級原則

  1. 順序升級:5.0 → 5.1 → 5.5 → 5.6 → 5.7 → 8.0,不可跳級
  2. 全量備份:升級前必須 mysqldump --all-databases --single-transaction --routines --triggers > backup.sql
  3. 閱讀發布說明:重點關注 Incompatible Changes(不兼容變更)章節
  4. Windows 專用流程:參考附錄「Windows 平台升級步驟」
  5. 權限表升級:跨大版本必須運行 mysql_upgrade
  6. 主從同步:先升級從庫,再升級主庫,參考「升級同步」附錄
  7. MySQL-Max 遷移:從 Max 版遷移到標準版需移除 mysqld-max 啟動參數

字符集變更後的索引修復

# 若升級過程中修改了字符集,需對每個 MyISAM 表執行
myisamchk -r -q --set-character-set=charset_name /path/to/table.MYI
# 或使用 SQL
REPAIR TABLE tbl_name QUICK;

通用升級流程

# 1. 導出數據(推薦)
mysqldump -u root -p --all-databases --routines --triggers --single-transaction > alldb.sql

# 2. 停止舊服務
service mysqld stop

# 3. 備份舊安裝目錄
mv /usr/local/mysql /usr/local/mysql.old

# 4. 安裝新版本(源碼編譯或二進制包)

# 5. 啟動新版服務(臨時跳過授權表)
mysqld_safe --skip-grant-tables &

# 6. 導入數據
mysql -u root < alldb.sql

# 7. 運行升級腳本(關鍵步驟)
mysql_upgrade -u root -p

# 8. 重啟服務正常運行
service mysqld restart

重大版本遷移關鍵變更速查

5.0 → 5.1

  • 必須運行 mysql_upgrade,否則存儲過程可能失效
  • 插件系統引入:mysql.plugin 表、plugin_dir 變量、UDF 庫遷移
  • table_cache 重命名為 table_open_cache
  • 5.1.6+ FULLTEXT 索引結構變更,需 REPAIR TABLE
  • 日志輸出可選寫入表(general_log、slow_log),--log-output 控制
  • 觸發器命名空間變更:5.0.10+ 僅需庫內唯一,升級需導出/刪除/重建觸發器
  • TYPE=engine 語法棄用(5.1.8 警告,5.2 移除),統一用 ENGINE=engine

4.1 → 5.0

  • InnoDB/MyISAM 尾隨空格索引順序變更,需 CHECK TABLE / REPAIR TABLE
  • BINARY 列填充值從空格改為 0x00,不再自動去除尾隨空格
  • DECIMAL 實現重寫(5.0.3+),嚴格模式、精確數學、舊版本 DECIMAL 列可能崩潰
  • UDF 默認不再自動加載,需 --allow-suspicious-udfs 或符號鏈接
  • 更新日志 (UPDATE LOG) 移除,改用二進制日志
  • ISAM 引擎移除,RAID 選項移除
  • 自然連接/USING 連接遵循 SQL:2003,結果列減少、順序調整
  • 鎖等待超時僅回滾當前語句(5.0.13+),非整個事務
  • CHAR() 返回二進制字符串,可用 USING charset 指定
  • SYSDATE() 返回執行點時間,非語句開始時間(5.0.13+)
  • GREATEST/LEAST 參數含 NULL 則返回 NULL(5.0.13+,與 Oracle 一致)
  • VARCHAR/VARBINARY 保留尾隨空格(5.0.3+)
  • BIT 成為獨立類型,非 TINYINT(1) 同義詞
  • SQL 模式新增嚴格控制選項(5.0.2+)
  • SCHEMA/SCHEMAS 成為 DATABASE/DATABASES 同義詞
  • 用戶變量大小寫不敏感(5.0 與 4.1 不同)

4.0 → 4.1

  • 多種情況需重建表(mysqldump 導出導入):
    • 4.1.0-4.1.3 創建的 TIMESTAMP 列 InnoDB 表
    • 4.1.0-4.1.5 對 UTF8/多字節列做前綴索引的表
    • 庫/表/列名含非 ASCII 字符(>127)的表
  • 字符串比較遵循標準 SQL:不再去除尾隨空格,'a' > 'a\t'
  • MyISAM 校驗和算法升級
  • 字符串列長度定義從字節改為字符
  • 元數據(庫/表/列名)存儲編碼從 latin1 改為 UTF8
  • 4.1.1+ UDF 接口重大變更
  • 4.1.10a+ 默認不加載 UDF
  • mysqldump 默認啟用 --opt --quote-names
  • SHOW TABLE STATUS 的 Type 列改名 Engine(4.1.2)
  • 多表 DELETE 僅能用別名
  • LIMIT 不接受負數
  • 密碼哈希算法升級(4.1+),舊客戶端需 --old-passwords 或升級客戶端庫

附錄:Windows 平台升級步驟

  1. 備份數據目錄 data/ 及 my.ini
  2. 停止服務:net stop mysql
  3. 移除舊服務:C:\mysql\bin\mysqld --remove
  4. 安裝新版(MSI 或解壓二進制包)
  5. 註冊新服務:C:\mysql\bin\mysqld --install
  6. 啟動服務:net start mysql
  7. 運行 mysql_upgrade(Windows 需手動運行 mysqlcheck + 權限表升級腳本)

附錄:權限表升級

Unix/Linux:

mysql_fix_privilege_tables --password=root_pass
# 或 MySQL 4.1+:
mysql_upgrade -u root -p

Windows:

C:\> mysql -u root -p mysql
mysql> SOURCE C:/mysql/scripts/mysql_fix_privilege_tables.sql;

附錄:mysql_upgrade 工具詳解

功能:檢查所有表兼容性、自動修復、升級系統表、記錄版本號到 mysql_upgrade.info

mysql_upgrade [options]
  --force          忽略版本標記強制檢查
  --user=root      連接用戶
  --password[=pwd] 密碼
  --basedir=path   安裝目錄
  --datadir=path   數據目錄
  --verbose        詳細輸出

內部執行:mysqlcheck --check-upgrade --all-databases --auto-repair + mysql_fix_privilege_tables

注意:mysql_upgrade 僅支持類 Unix 平台,Windows 需手動執行上述兩命令。

升級後驗證清單

  1. mysql_upgrade 無報錯
  2. CHECK TABLE 核心業務表返回 OK
  3. 應用連接測試:讀寫、事務、存儲過程、觸發器、視圖
  4. 監控錯誤日志無異常報警
  5. 性能基準對比(QPS、延遲、連接數)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved