萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL/MariaDB/Percona 同大版本升級自動化腳本解析

生產環境數據庫升級風險極高,本文解析一款支援 MySQL、MariaDB、Percona Server 同大版本小版本升級的自動化 Shell 腳本,適用於 5.6.25 → 5.6.26、10.0.20 → 10.0.21 等場景,嚴禁跨大版本或跨分支使用。

腳本核心邏輯流程

  1. 環境檢測:識別當前數據庫類型、版本、架構(x86_64/i686)、glibc 版本
  2. 密碼驗證:交互式驗證 root 密碼,支援密碼更新持久化
  3. 全量備份:mysqldump --all-databases 導出 SQL,文件名含日期戳
  4. 版本確認:強制輸入同大版本號(如 5.6.xx),自動構建下載 URL
  5. 下載與編譯/解包:區分三大分支的獲取與安裝方式
  6. 停服遷移:停庫、備份舊目錄、初始化新數據目錄
  7. 數據導入:導入備份 SQL、重置 Binlog、清理 test 庫
  8. 驗證升級:檢查版本號、服務狀態

三大分支差異化處理

MariaDB(二進制包直裝)

  • 自動檢測國內/國外源(阿里雲/官方)
  • 根據 glibc 版本選擇 linux 或 linux-glibc_214 包
  • 支援 jemalloc/tcmalloc 注入 mysqld_safe

Percona Server(源碼編譯)

  • 從官網下載源碼包
  • CMake 參數區分 5.5/5.6+(WITH_READLINE、WITH_EMBEDDED_SERVER 差異)
  • 並行編譯 make -j $(nproc)

MySQL 官方版(源碼編譯)

  • CMake 參數與 Percona 類似,額外啟用 WITH_EMBEDDED_SERVER=1
  • 下載源:cdn.mysql.com

關鍵代碼片段解析

版本號解析與下載 URL 構建

Old_DB_version=`$db_install_dir/bin/mysql -V | awk '{print $5}' | awk -F, '{print $1}'`
# 輸出示例:5.6.25 或 10.0.20-MariaDB

# 強制同大版本
if [ `echo $DB_version | awk -F. '{print $1"."$2}'` == `echo $Old_DB_version | awk -F. '{print $1"."$2}'` ]; then
  # 構建下載鏈接...
fi

備份與密碼驗證循環

while :; do
  $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "quit" >/dev/null 2>&1
  [ $? -eq 0 ] && break
  read -p "密碼錯誤,重新輸入: " NEW_dbrootpwd
  # 驗證並持久化到 options.conf
done

mysqldump -uroot -p${dbrootpwd} --opt --all-databases > DB_all_backup_$(date +%Y%m%d).sql

升級後驗證

$db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;"
$db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;"
[ $? -eq 0 ] && echo "升級成功: $Old_DB_version → $DB_version"

生產環境使用建議

⚠️ 風險提示:
  • 此腳本僅適用於「同大版本、同分支」小版本升級
  • 升級前必須在測試環境全流程演練
  • 備份文件需驗證可恢復性(mysql < backup.sql 試導入)
  • 生產建議採用藍綠部署或主從切換升級,避免原地升級停機風險
  • 升級後務必執行 mysql_upgrade 系統表檢查(腳本未包含,需手動補充)

自動化腳本能標準化升級流程、減少人為錯誤,但數據庫升級無小事,嚴謹的測試驗證與回滾預案才是核心保障。

copyright © 萬盛學電腦網 all rights reserved