mysqldump --all-databases --single-transaction --routines --triggers > backup.sqlmysql_upgrademysqld-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
mysql_upgrade,否則存儲過程可能失效mysql.plugin 表、plugin_dir 變量、UDF 庫遷移table_cache 重命名為 table_open_cacheREPAIR TABLEgeneral_log、slow_log),--log-output 控制TYPE=engine 語法棄用(5.1.8 警告,5.2 移除),統一用 ENGINE=engineCHECK TABLE / REPAIR TABLEBINARY 列填充值從空格改為 0x00,不再自動去除尾隨空格DECIMAL 實現重寫(5.0.3+),嚴格模式、精確數學、舊版本 DECIMAL 列可能崩潰--allow-suspicious-udfs 或符號鏈接UPDATE LOG) 移除,改用二進制日志CHAR() 返回二進制字符串,可用 USING charset 指定SYSDATE() 返回執行點時間,非語句開始時間(5.0.13+)GREATEST/LEAST 參數含 NULL 則返回 NULL(5.0.13+,與 Oracle 一致)VARCHAR/VARBINARY 保留尾隨空格(5.0.3+)BIT 成為獨立類型,非 TINYINT(1) 同義詞SCHEMA/SCHEMAS 成為 DATABASE/DATABASES 同義詞mysqldump 導出導入):
'a' > 'a\t'mysqldump 默認啟用 --opt --quote-namesSHOW TABLE STATUS 的 Type 列改名 Engine(4.1.2)LIMIT 不接受負數--old-passwords 或升級客戶端庫data/ 及 my.ininet stop mysqlC:\mysql\bin\mysqld --removeC:\mysql\bin\mysqld --installnet start mysqlmysql_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.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 需手動執行上述兩命令。
mysql_upgrade 無報錯CHECK TABLE 核心業務表返回 OK