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

MySQL 5.0 升級到 5.1 實戰手冊:二進制替換法與避坑指南

     編輯:MySQL 綜合教學

升級策略:二進制覆蓋升級

適用於小版本/大版本兼容升級,優點:快速、數據目錄不動、配置復用。風險:庫表結構不兼容、系統表缺失、權限表異常。

完整操作步驟

1. 完整備份(核心)

# 邏輯備份:結構+數據,含 Binlog 位點
mysqldump -uroot -p -A -F --master-data=2 --single-transaction --routines --triggers \
  > /backup/mysql_upgrade_$(date +%F).sql

# 物理備份:數據目錄 + 安裝目錄 + 配置文件
tar -czf /backup/mysql5.0_datadir_$(date +%F).tar.gz /data/mysql_data
tar -czf /backup/mysql5.0_basedir_$(date +%F).tar.gz /usr/local/mysql
cp /etc/my.cnf /backup/my.cnf.bak

2. 解決 mysqldump 「lock tables」報錯

# 錯誤:mysqldump: Got error: 1556: You can't use locks with log tables.
# 原因:系統 PATH 中舊版 mysqldump 優先被調用
which mysqldump  # 輸出 /usr/bin/mysqldump

# 修復:將新版 bin 目錄置於 PATH 最前
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
which mysqldump  # 應輸出 /usr/local/mysql/bin/mysqldump

3. 停止服務

mysqladmin -uroot -p shutdown
# 或
systemctl stop mysqld

4. 替換二進制文件

cd /usr/local
tar -xzf mysql-5.1.73-linux-x86_64-glibc23.tar.gz
rm -rf mysql/*  # 清空舊版文件
mv mysql-5.1.73-linux-x86_64-glibc23/* mysql/

5. 啟動並執行升級腳本(關鍵)

# 以 skip-grant-tables 啟動,避免權限表不匹配導致啟動失敗
mysqld_safe --skip-grant-tables --user=mysql &

# 執行系統表升級
mysql_upgrade -uroot -p --force

# 正常重啟
mysqladmin -uroot -p shutdown
systemctl start mysqld

6. 驗證升級結果

# 檢查版本
mysql -uroot -p -e "SELECT VERSION();"
# 檢查系統表完整性
mysql -uroot -p -e "CHECK TABLE mysql.user, mysql.db, mysql.tables_priv, mysql.columns_priv;"
# 核心業務 SQL 冒煙測試
# 監控 error log 無異常

常見遷移陷阱與對策

回滾方案(必須預案)

# 1. 停止新版服務
systemctl stop mysqld

# 2. 恢復二進制與數據目錄
rm -rf /usr/local/mysql/*
tar -xzf /backup/mysql5.0_basedir_YYYYMMDD.tar.gz -C /
tar -xzf /backup/mysql5.0_datadir_YYYYMMDD.tar.gz -C /

# 3. 啟動舊版
systemctl start mysqld

# 4. 驗證業務恢復正常

總結

MySQL 5.0 → 5.1 升級,備份 > 升級 > 驗證 > 回滾預案 四步缺一不可。關鍵在於:先升級二進制,再執行 mysql_upgrade,最後驗證 SQL_MODE 與應用兼容性。生產環境建議採用主從切換升級:升級從庫 → 驗證 → 切換主從 → 升級原主庫,實現零停機。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
問題現象解決
系統表結構變更mysql.user 列數不匹配,啟動報錯必須執行 mysql_upgrade --force
SQL_MODE 默認變化應用報錯:Data truncated, Division by zero 等my.cnf 顯式設置 sql_mode='NO_ENGINE_SUBSTITUTION' 兼容舊行為
存儲過程/函數權限DEFINER 用戶不存在,調用失敗重建或授權對應用戶
字符集排序規則utf8_general_ci vs utf8mb4_0900_ai_ci 排序不同業務驗證排序邏輯,必要時 ALTER TABLE 轉換
插件兼容舊版插件(如 auth_socket)在 5.1 無效遷移至原生認證或升級插件