MySQL 次版本升級 (如 5.6.19 → 5.6.21) 採用就地升級方式:保留原資料目錄,安裝新版本二進制,執行 mysql_upgrade 完成系統表更新。本文記錄生產環境實操全過程。
mysqldump --all-databases --single-transaction --master-data=2 > backup_$(date +%F).sqlSHOW VARIABLES LIKE 'datadir'; (例:/usr/local/mysql01/data/)yum -y install gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel* make cmake bison bison-devel libaiogroupadd mysql
useradd -g mysql mysql
# /etc/security/limits.conf
mysql soft nproc 2047
mysql hard nproc 16384
mysql soft nofile 1024
mysql hard nofile 65536
tar xvf mysql-5.6.21.tar.gz
cd mysql-5.6.21
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql02 \
-DMYSQL_DATADIR=/usr/local/mysql02/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql02/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install
service mysqld stop
mkdir -p /usr/local/mysql02/{innodb_data,data,tmp}
mkdir -p /usr/local/mysql02/mysql_logs/{binary_log,innodb_log,query_log,slow_query_log,error_log}
cd /usr/local/mysql02
chown -R mysql:mysql .
# /etc/my.cnf 關鍵修改
basedir = /usr/local/mysql02 # 指向新版本安裝目錄
datadir = /usr/local/mysql01/data # 保持原資料目錄不變
skip-grant-tables # 升級期間跳過權限驗證
sql_mode = NO_ENGINE_SUBSTITUTION # 移除 STRICT_TRANS_TABLES 避免嚴格模式報錯
cp /usr/local/mysql02/support-files/mysql.server /etc/init.d/mysqld
service mysqld start # 以新版本啟動
/usr/local/mysql02/bin/mysql_upgrade # 升級系統表、修復權限表
/usr/local/mysql02/bin/mysqlcheck --all-databases -uroot -p123456 # 檢查所有表
# 升級完成後移除 skip-grant-tables 並重啟
vi /etc/my.cnf # 註釋掉 skip-grant-tables
service mysqld restart
SELECT VERSION(); 確認版本號SHOW ENGINES; 確認 InnoDB 等引擎正常tail -f /var/log/mysqld.logmysql_upgrade 會重建系統表索引,大量資料庫時耗時較久,請預留維護窗口。