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

MySQL 3.23 升級到 4.1/5.x 完整遷移攻略

     編輯:MySQL 資料庫相關知識

版本跨度關鍵變更

版本核心新特性不兼容風險點
4.0查詢緩存、UNION、多表 DELETE/UPDATE、SSL舊密碼插件、系統表結構變更
4.1子查詢、衍生表、字符集支持 (每列級)、預處理語句、GIS、新密碼哈希 (41 字節)密碼哈希算法變更、字符集配置重構、SQL_MODE 默認變化
5.0存儲過程/函數、觸發器、視圖、信息架構、XA 事務保留字增加、嚴格模式默認開啟
5.1分區表、事件調度器、插件式存儲引擎、行級復制插件接口變更、系統表再次調整

升級核心原則

  1. 不可直接拷貝數據目錄:系統表結構、日志格式、表空間格式均可能不兼容。
  2. 必須使用邏輯備份:mysqldump 導出 SQL,新版本導入重建。
  3. 分階段驗證:開發→測試→預發→生產,每階段跑全量回歸測試。
  4. 應用適配同步:JDBC 驅動升級、連接參數調整 (如 useUnicode=true&characterEncoding=utf8)、SQL 語法兼容性檢查。

標準升級流程 (以 3.23 → 4.1 為例)

階段 1:停服務與備份

# 停止舊服務
/www/mysql/bin/mysqladmin -u root -p shutdown

# 物理備份 (回滾用)
cp -R /www/mysql /www/mysql_backup_323

# 邏輯備份 (升級用)
/www/mysql/bin/mysqldump -u root -p --all-databases --routines --triggers --single-transaction --master-data=2 > /backup/full_323.sql

# 重要庫單獨導出 (加速導入)
/www/mysql/bin/mysqldump -u root -p business_db > /backup/business.sql

階段 2:安裝新版本

# 創建用戶組
groupadd -g 201 mysql
useradd -u 1001 -g mysql -d /www/mysql -m -s /bin/bash -c "MySQL Admin" mysql
passwd mysql  # 設置密碼

# 解壓安裝
tar zxvf mysql-standard-4.1.xx-linux-x86_64.tar.gz
mv mysql-standard-4.1.xx /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

# 初始化數據目錄 (4.1 仍用 mysql_install_db)
su - mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/data/mysql
exit

# 配置 my.cnf (關鍵參數參考生產模板)
# 啟動測試
/usr/local/mysql/bin/mysqld_safe --user=mysql &

階段 3:權限系統重構 (關鍵差異點)

MySQL 4.1 user 表新增列:max_questions、max_updates、max_connections、max_user_connections、ssl_cipher、x509_issuer、x509_subject 等。

# 登錄新版本
/usr/local/mysql/bin/mysql -u root -p

-- 1. 根用戶本地/遠程全權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'StrongRootPass#2024' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.98.2' IDENTIFIED BY 'StrongRootPass#2024' WITH GRANT OPTION;

-- 2. 備份專用用戶 (高配額)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'BackupPass#2024';
UPDATE mysql.user SET max_questions=3000000, max_updates=3000000 WHERE User='backup_user';

-- 3. 應用只讀用戶
GRANT SELECT ON business_db.* TO 'app_read'@'%' IDENTIFIED BY 'AppReadPass#2024';

FLUSH PRIVILEGES;

階段 4:數據導入與驗證

# 創建業務庫
mysql -u root -p -e "CREATE DATABASE business_db DEFAULT CHARSET utf8mb4;"

# 導入數據 (使用備份用戶)
/usr/local/mysql/bin/mysql -u backup_user -p business_db < /backup/business.sql

# 驗證
mysql -u root -p -e "USE business_db; SHOW TABLES; SELECT COUNT(*) FROM core_table;"

# 運行應用集成測試
# 重點檢查:字符集、日期時間、JOIN 語法、子查詢、預處理語句

階段 5:密碼哈希遷移 (4.1+ 必須)

# 停止新服務
/usr/local/mysql/bin/mysqladmin -u root -p shutdown

# 恢復舊安裝
rm -rf /usr/local/mysql /data/mysql
mv /www/mysql_backup_323 /www/mysql
service mysql start

# 應用切回舊配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved