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

Linux 下 MySQL 5.1 升級 5.7 完整實戰:RPM 卸載、二進制安裝、配置遷移、數據驗證

     編輯:MySQL 綜合教學

Linux 下 MySQL 5.1 升級 5.7 完整實戰:RPM 卸載、二進制安裝、配置遷移、數據驗證

跨大版本升級(5.1 → 5.7)涉及存儲格式、優化器、權限表、SQL 模式等核心變更。本文提供生產級標準化流程:OS 版本確認、RPM 徹底清理、官方二進制包部署、mysql_upgrade 元數據遷移、配置參數對齊、驗證清單與回滾預案。

前置檢查清單


# 1. OS 版本
cat /etc/redhat-release   # CentOS 6/7
uname -m                  # x86_64

# 2. 當前 MySQL 版本與安裝方式
mysql -V
rpm -qa | grep -i mysql   # RPM 包列表

# 3. 數據目錄大小與引擎分布
du -sh /var/lib/mysql
mysql -e "SELECT ENGINE, COUNT(*) FROM information_schema.TABLES GROUP BY ENGINE"

# 4. 備份(必須)
mysqldump --all-databases --single-transaction --master-data=2 --flush-logs > /backup/full_$(date +%F).sql
# 或物理備份:xtrabackup --backup --target-dir=/backup/xtra_$(date +%F)

階段一:徹底卸載舊版 RPM


# 1. 停止服務
service mysqld stop

# 2. 卸載所有 mysql 相關包(--nodeps 強制忽略依賴)
rpm -qa | grep mysql | xargs rpm -e --nodeps

# 3. 清理殘留 libs
rpm -qa | grep mysql-libs | xargs rpm -e --nodeps

# 4. 刪除數據目錄(備份後可選,升級建議保留)
# mv /var/lib/mysql /var/lib/mysql_5.1_bak

階段二:官方二進制包部署 5.7


# 1. 下載(針對 OS 版本選擇 Generic Linux Glibc 2.12+ x86_64)
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

# 2. 解壓並鏈接
tar zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql

# 3. 創建用戶與目錄
groupadd mysql; useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /data/mysql/{data,logs,tmp}
chown -R mysql:mysql /usr/local/mysql /data/mysql

# 4. 初始化數據目錄(5.7.6+)
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
# 生成隨機 root 密碼在 error log 中,或用 --initialize-insecure 免密

# 5. 配置文件 /etc/my.cnf 關鍵段
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
port=3306
pid-file=/data/mysql/logs/mysqld.pid
log-error=/data/mysql/logs/error.log
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
innodb_buffer_pool_size=4G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=1
sync_binlog=1
gtid_mode=ON
enforce_gtid_consistency=ON

階段三:啟動、升級系統表、密碼重置


# 1. 啟動服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
service mysqld start

# 2. 升級系統表(關鍵步驟,修復權限表、help 表、時區表結構)
/usr/local/mysql/bin/mysql_upgrade -uroot -p --force
# --force 強制檢查所有表,即使版本號一致

# 3. 重置 root 密碼(若用 initialize-insecure)
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!'; FLUSH PRIVILEGES;"

階段四:配置遷移與參數對齊

5.1 參數5.7 對應/建議備註
default-character-setcharacter-set-server=utf8mb45.1 無 utf8mb4
table_cachetable_open_cache重命名
query_cache_size建議關閉 query_cache_type=05.7 已棄用,8.0 移除
innodb_additional_mem_pool_size移除5.7 不再需要
log_slow_queriesslow_query_log=1 + slow_query_log_file重命名
max_connections保持或調大配合 thread_cache_size

階段五:驗證清單與回滾預案

  1. 版本確認: mysql -V 顯示 5.7.x
  2. 系統表完整: SELECT * FROM mysql.user 含 authentication_string 列
  3. 業務驗證: 應用連接測試、核心 SQL 回歸、慢查詢對比
  4. 複製檢查: SHOW REPLICA STATUS\G Seconds_Behind_Master=0
  5. 回滾觸發條件: 業務核心報錯 > 5% / 複製延遲 > 1h / 關鍵功能不可用
  6. 回滾步驟: 停新實例 → 掛載舊數據目錄 → 啟舊 RPM 服務 → 修改 VIP/域名解析 → 通知業務驗證

CentOS 6 專項:5.1 → 5.5 過渡方案

若直接跳 5.7 風險過大,可先升 5.5(RPM 源安裝),穩定運行一周後再升 5.7:


# 添加 Remi/EPEL 源
rpm -Uvh https://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# 安裝 5.5
yum --enablerepo=remi,remi-test install mysql mysql-server

# 升級系統表
mysql_upgrade -uroot -p

# 重啟驗證
service mysqld restart

大版本升級是系統工程,而非命令堆砌。標準化流程 = 完整備份 + 環境隔離 + 參數對齊 + 系統表升級 + 多維驗證 + 秒級回滾,才能在業務零感知下完成核心基礎設施換心手術。

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