自動化運維是 DBA 核心技能之一。本文提供一支經實測可用於生產環境的 MySQL 5.6.25 二進制自動安裝腳本,支援自訂目錄規劃、參數優化、安全性初始化,並記錄完整安裝日誌,適合納入自動化部署流程。
| 項目 | 預設值 | 說明 |
|---|---|---|
| 安裝方式 | 二進制包解壓 | 非編譯安裝,部署快速 |
| 程式目錄 | /usr/local/mysql | |
| 資料目錄 | /data/mysql | 建議掛載獨立磁碟 |
| 日誌目錄 | /log/mysql | |
| 預設埠號 | 3306 | |
| Root 密碼 | MANAGER | 腳本執行時可互動修改 |
| 啟用 5.6 新特性 | Buffer Pool Dump/Load | 重啟後快速預熱熱資料 |
# 關鍵參數(腳本會寫入 /etc/my.cnf) innodb_buffer_pool_size = 512M # 建議設為實體記憶體 50%-80% innodb_buffer_pool_dump_at_shutdown = 1 # 正常關機時傾印熱頁面 ID innodb_buffer_pool_load_at_startup = 1 # 啟動時載入熱頁面,加速預熱
注意: 僅正常關機(shutdown)會觸發 dump,
kill -9或宕機不會。生產環境請依記憶體大小調整innodb_buffer_pool_size。
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin:~/bin
export PATH
# ========== 基本檢查 ==========
if [ $(id -u) != "0" ]; then
echo "Error: 請使用 root 權限執行"
exit 1
fi
# ========== 互動式設定 Root 密碼 ==========
mysqlrootpwd="MANAGER"
read -p "請輸入 MySQL root 密碼 (預設 MANAGER): " mysqlrootpwd
[ -z "$mysqlrootpwd" ] && mysqlrootpwd="MANAGER"
echo "MySQL root 密碼設為: $mysqlrootpwd"
# ========== 確認安裝版本 ==========
read -p "安裝 MySQL 5.6.25 請輸入 y: " isinstall
[ "$isinstall" != "y" ] && [ "$isinstall" != "Y" ] && { echo "取消安裝"; exit; }
# ========== 初始化環境 ==========
function InitInstall() {
# 設定時區
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 移除舊版 MySQL
rpm -qa | grep mysql | xargs rpm -e --nodeps 2>/dev/null
# 關閉 SELinux
[ -s /etc/selinux/config ] && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
}
# ========== 安裝相依套件與核心參數優化 ==========
function InstallDependsAndOpt() {
cat >> /etc/security/limits.conf <<EOF
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
EOF
cat >> /etc/sysctl.conf <<EOF
vm.swappiness = 1
net.core.somaxconn = 65535
EOF
}
# ========== 安裝 MySQL 主程式 ==========
function InstallMySQL56() {
cd /root
# 備份舊 my.cnf
[ -f /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.$(date +%Y%m%d%H%M%S).bak
# 建立使用者與目錄
groupadd -g 512 mysql
useradd -u 512 -g mysql -s /sbin/nologin -d /home/mysql mysql
tar xvf mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.25-linux-glibc2.5-x86_64 /usr/local/mysql
mkdir -p /data/mysql /log/mysql
chown -R mysql:mysql /data/mysql /usr/local/mysql /log/mysql
# 產生 server-id(最後一段 IP + 3306)
SERVERID=$(ifconfig eth0 | grep "inet addr" | awk '{print $2}' | awk -F. '{print $4"3306"}')
# 寫入 /etc/my.cnf
cat > /etc/my.cnf <<EOF
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
no-auto-rehash
default-character-set = utf8mb4
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
log-error = /log/mysql/mysql_error.log
pid-file = /data/mysql/mysql.pid
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-name-resolve
server-id = $SERVERID
# InnoDB 核心設定
innodb_buffer_pool_size = 512M
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
# 複寫相關
log-bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1
# 其他
max_connections = 2000
open_files_limit = 65535
table_open_cache = 4000
tmp_table_size = 64M
max_heap_table_size = 64M
EOF
# 設定動態連結庫與環境變數
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql-x86_64.conf
ldconfig
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
# 初始化資料庫
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 啟動服務並執行安全性初始化
/usr/local/mysql/bin/mysqld_safe --user=mysql &
sleep 5
/usr/local/mysql/bin/mysql_secure_installation < /tmp/mysql_sec_script
}
# ========== 驗證安裝 ==========
function CheckInstall() {
/usr/local/mysql/bin/mysql -uroot -p$mysqlrootpwd -e "SELECT VERSION(); SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
}
# ========== 主流程 ==========
InitInstall
InstallDependsAndOpt
InstallMySQL56
CheckInstall 2>&1 | tee /root/mysql-install.log
# mysql_secure_installation 非互動式輸入 MANAGER Y NEWPASS NEWPASS Y Y Y Y
chmod +x mysql_auto_install.sh ./mysql_auto_install.sh 2>&1 | tee /root/mysql-install.log
安裝完成後,使用設定的密碼登入驗證:
mysql -uroot -pMANAGER -e "SHOW DATABASES; SELECT @@version;"

此腳本已在多個生產環境驗證,可根據公司儲存規劃調整目錄路徑、記憶體參數與安全策略,納入 Ansible、SaltStack 或 CI/CD 流程中實現全自動化部署。