一、升級前的準備工作
mysqldump
工具備份所有數據庫(包括mysql
系統庫,存儲用戶權限),確保數據可恢復。示例命令:mysqldump -u root -p --all-databases > /path/to/full_backup.sql
。也可選擇物理備份(直接復制數據目錄,如/var/lib/mysql/
),但需停止MySQL服務以保證數據一致性。mysql -V
或登錄MySQL執行SELECT VERSION();
確認當前版本;確認操作系統(如Ubuntu 22.04/CentOS 7)、架構(x86_64)與新版本兼容;查閱MySQL官方升級文檔,確認升級路徑(如5.7→8.0需先升級至5.7的最新小版本,再升級至8.0,禁止跨多代大版本直接升級)。/etc/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
),對比新版本默認配置(如my-default.cnf
),調整廢棄參數(如query_cache_size
在8.0中已移除)或新增參數(如innodb_buffer_pool_size
建議設置為物理內存的70%-80%)。二、常見安裝方式的升級步驟
sudo systemctl stop mysql
,確認狀態:sudo systemctl status mysql
(需顯示“inactive”)。wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
,然后sudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm
;APT源類似),再執行sudo apt update
(Ubuntu)或sudo yum update
(CentOS)。sudo apt upgrade mysql-server
(Ubuntu)或sudo yum update mysql-server
(CentOS),包管理器會自動處理依賴與文件替換。sudo systemctl start mysql
;登錄MySQL執行mysql_upgrade -u root -p
(自動檢查并修復系統表結構,如mysql.user
表的權限字段)。sudo systemctl stop mysql
。mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
),解壓至目標目錄(如/usr/local/mysql
):tar -xf mysql-*.tar.xz -C /usr/local/
,重命名:mv /usr/local/mysql-* /usr/local/mysql
。/var/lib/mysql/
)和配置文件;將新版本的bin
、lib
等目錄復制到舊版本路徑(保留數據目錄與配置文件):cp -r /usr/local/mysql/bin/* /usr/bin/
(可選,更新命令路徑);cp -r /usr/local/mysql/support-files/* /etc/
(可選,更新配置模板)。sudo systemctl start mysql
;登錄MySQL執行mysql_upgrade -u root -p
,完成后重啟服務:sudo systemctl restart mysql
。docker stop mysql_old
(容器名需替換為實際名稱)。docker pull mysql:8.0.37
(替換為目標版本)。docker run -d --name mysql_new -v /path/to/old/data:/var/lib/mysql -v /path/to/old/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=your_password mysql:8.0.37
(掛載舊數據卷與配置卷,確保數據不丟失)。docker exec -it mysql_new mysql -uroot -p
,執行SELECT VERSION();
確認版本,檢查表結構是否兼容。三、升級后的關鍵操作
mysql_upgrade -u root -p
(部分包管理器會自動執行,但手動執行更可靠),該工具會檢查mysql
系統表的兼容性并修復問題。sudo systemctl restart mysql
,確保所有升級后的配置與表結構生效。/var/log/mysql/error.log
或journalctl -u mysql
),確認無報錯;登錄MySQL執行常用查詢(如SHOW DATABASES;
、SELECT * FROM table_name LIMIT 1;
),驗證功能正常。full_backup.sql
),釋放磁盤空間。四、注意事項
sql_mode
中的NO_AUTO_CREATE_USER
),需修改配置文件(my.cnf
)移除或替換為兼容參數,避免啟動失敗。auth_socket
)或存儲引擎(如MyISAM
在8.0中的限制)可能在新版本中變更,需提前檢查并調整(如將MyISAM
表轉換為InnoDB
)。mysql -u root -p < full_backup.sql
),并重啟舊版本服務(sudo systemctl start mysql
),確保業務連續性。