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

MySQL 5.1 升級 5.5 完整實戰手冊:編譯安裝、配置遷移、升級驗證與故障排查

     編輯:MySQL 綜合教學

MySQL 5.1 升級 5.5 完整實戰手冊:編譯安裝、配置遷移、升級驗證與故障排查

MySQL 大版本升級涉及存儲格式、優化器、權限系統等核心變更。本文記錄從 5.1 源碼編譯升級至 5.5.36 的全流程,含依賴準備、CMake 參數、配置文件遷移、mysql_upgrade 故障排查、數據驗證等關鍵步驟。

一、 升級前準備

1. 系統依賴安裝

yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl*
yum install -y cmake

2. 關鍵備份(不可逆操作前必做)

# 1. 完整邏輯備份
mysqldump -A -R -E --single-transaction --master-data=2 > /backup/full_$(date +%F).sql

# 2. 物理備份數據目錄
systemctl stop mysqld
tar czf /backup/datadir_$(date +%F).tar.gz /usr/local/mysql/var

# 3. 配置文件備份
cp /etc/my.cnf /backup/my.cnf.bak

3. 停止服務

service mysql stop
# 或 systemctl stop mysqld

二、 源碼編譯安裝 MySQL 5.5.36

1. 下載與解壓

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.36.tar.gz
tar xf mysql-5.5.36.tar.gz
cd mysql-5.5.36

2. CMake 配置參數詳解

cmake \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DSYSCONFDIR=/etc \
  -DMYSQL_DATADIR=/usr/local/mysql/var \
  -DMYSQL_TCP_PORT=3306 \
  -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
  -DMYSQL_USER=mysql \
  -DEXTRA_CHARSETS=all \
  -DWITH_READLINE=1 \
  -DWITH_SSL=system \
  -DWITH_EMBEDDED_SERVER=1 \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

關鍵參數說明:

  • CMAKE_INSTALL_PREFIX:安裝根目錄
  • MYSQL_DATADIR:數據目錄(掛載獨立磁盤時修改)
  • WITH_SSL=system:使用系統 OpenSSL,避免 yaSSL 性能問題
  • WITH_INNOBASE_STORAGE_ENGINE=1:顯式啟用 InnoDB(5.5 默認已內建)

3. 編譯安裝

make -j$(nproc) && make install
# 編譯耗時 10-30 分鐘視 CPU 核心數而定

三、 配置文件遷移與調優

1. 移除舊配置,複製 5.5 模板

rm -f /etc/my.cnf
cp support-files/my-huge.cnf /etc/my.cnf

2. 核心參數調整(根據實例規格修改)

[mysqld]
# 基礎
datadir = /usr/local/mysql/var
socket = /tmp/mysqld.sock
port = 3306
user = mysql

# InnoDB 核心(重點調優)
innodb_buffer_pool_size = 4G        # 物理內存 50-70%
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# 連接與緩存
max_connections = 2000
thread_cache_size = 200
table_open_cache = 4000
query_cache_type = 0          # 5.5+ 建議關閉
query_cache_size = 0

# 安全與日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
expire_logs_days = 7
max_binlog_size = 500M

# 字符集
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci

四、 啟動與升級驗證

1. 初次啟動

service mysql start
# 或 /usr/local/mysql/bin/mysqld_safe --user=mysql &

2. 執行 mysql_upgrade(關鍵步驟)

/usr/local/mysql/bin/mysql_upgrade -uroot -p
# 輸入密碼,等待完成

作用:檢查/修復系統表結構、重建權限表、更新元數據兼容新版本。

3. 常見故障:mysql_upgrade 失敗排查

現象:

Running 'mysqlcheck'...
Got error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR UPGRADE' at line 1 when executing 'CHECK TABLE ... FOR UPGRADE'
FATAL ERROR: Upgrade failed

根因:舊版本密碼插件兼容性、權限表結構差異、連接參數缺失。

解決方案 A:指定 Socket 與認證

/usr/local/mysql/bin/mysql_upgrade -S /var/data/mysql.sock -uroot -p

解決方案 B:跳過權限表啟動修復(終極大招)

# 1. 跳過權限啟動
/usr/local/mysql/bin/mysqld --datadir=/usr/local/mysql/var --user=mysql --skip-grant-tables &

# 2. 另開終端執行升級
/usr/local/mysql/bin/mysql_upgrade -uroot -p

# 3. 關閉臨時實例
mysqladmin -uroot -p shutdown

# 4. 正常啟動
service mysql start

⚠️ 警告:--skip-grant-tables 期間無權限控制,務必在內網/防火牆隔離環境操作,完成後立即關閉。

4. 驗證版本

cat /usr/local/mysql/var/mysql_upgrade_info
# 輸出:5.5.36
mysql -uroot -p -e "SELECT VERSION();"

五、 升級後驗證清單

檢查項命令/方法合格標準
版本號SELECT VERSION();5.5.36
系統表結構DESC mysql.user;含 authentication_string 等新列
存儲引擎SHOW ENGINES;InnoDB 默認、Support=YES
字符集SHOW VARIABLES LIKE 'character_set%';utf8mb4 相關
業務查詢核心 SQL 抽樣跑批結果正確、耗時無明顯退化
主從同步SHOW SLAVE STATUS\GSeconds_Behind_Master=0
錯誤日志tail -100 /var/log/mysql/error.log無 ERROR/[Warning] 關鍵異常

六、 回滾方案(升級失敗時)

# 1. 停止新版本
service mysql stop

# 2. 恢復舊數據目錄
rm -rf /usr/local/mysql/var
tar xzf /backup/datadir_$(date +%F).tar.gz -C /

# 3. 恢復舊配置
cp /backup/my.cnf.bak /etc/my.cnf

# 4. 啟動舊版本(需保留舊二進制或重新安裝)
/usr/local/old_mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

七、 總結與最佳實踐

  1. 全量備份是底線:邏輯 + 物理雙備份,驗證可恢復
  2. 源碼編譯可控性最強:參數透明、優化針對性、無第三方依賴風險
  3. mysql_upgrade 必須成功:失敗時用 --skip-grant-tables 修復,不可跳過
  4. 配置文件重構而非遷移:5.5 參數變化大,基於模板重寫,針對業務調優
  5. 灰度驗證:先升級從庫、測試庫,驗證無誤再升主庫
  6. 保留回滾通道:舊二進制、舊數據目錄、舊配置至少保留 1 週

大版本升級是 DBA 能力的綜合考驗。穩紮穩打、預案先行、驗證閉環,方能實現「業務無感、數據零損、性能提升」的完美升級。

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