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

生產級 MySQL 5.6 自動化安裝部署 Shell 腳本詳解

     編輯:MySQL 綜合教學

生產級 MySQL 5.6 自動化安裝部署 Shell 腳本詳解

自動化運維是 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。

三、腳本完整內容(mysql_auto_install.sh)

#!/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

四、安全性初始化腳本(/tmp/mysql_sec_script)

# 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 流程中實現全自動化部署。

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