生產環境 MySQL 運維離不開自動化腳本。本文分享三個實戰驗證的 Shell 腳本:Memcached 服務管理、Binlog 自動清理、主從同步自動修復,涵蓋高可用架構核心運維場景。
start|stop|restart|condrestart|reload|status 標準服務命令eth1)chkconfig 開機自啟IPADDR=`/sbin/ifconfig eth1 | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`
PORT="11211"
USER="root"
SIZE="2048" # 記憶體 2GB
CONNNUM="51200" # 最大連接數
BINFILE="/usr/local/memcached/bin/memcached"
PIDFILE="/var/run/memcached.pid"
LOCKFILE="/var/lock/subsys/memcached"
chmod +x /etc/init.d/memcached
chkconfig --add memcached
chkconfig --level 235 memcached on
service memcached start
Slave_IO_Running=Yes 且 Slave_SQL_Running=Yes)Seconds_Behind_Master=0)# 三種同步場景判斷邏輯
if [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
CURR_BINLOG="${MASTER_BINLOG}" # 主從完全同步
elif [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" != "${MASTER_BINLOG}" ]]; then
CURR_BINLOG="${SLAVE_BINLOG1}" # 從庫追趕中
elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
CURR_BINLOG="${SLAVE_BINLOG2}" # Relay log 尚未追上
else
exit 1 # 異常狀態
fiPURGE BINARY LOGS TO 'CURR_BINLOG' 安全清理# 每天凌晨 5:30 執行
30 05 * * * /data/scripts/delete_mysql_binlog.sh >/dev/null 2>&1
relay-log 路徑與 master.info 文件REPLI_BINLOG_FILE, REPLI_IPADDR, REPLI_USER, REPLI_PWD)rm -rf ${RELAY_BINLOG_PATH}/*-relay-bin.*CHANGE MASTER TO
MASTER_HOST='${REPLI_IPADDR}',
MASTER_USER='${REPLI_USER}',
MASTER_PASSWORD='${REPLI_PWD}',
MASTER_LOG_FILE='${REPLI_BINLOG_FILE}',
MASTER_LOG_POS=0;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 跳過錯誤 → 重試IO/SQL=Yes 且 Seconds_Behind_Master=0) → 記錄成功 → 退出check_binlog),僅授予 REPLICATION CLIENT、SUPER 權限/data/logs/,便於事後追蹤這三個腳本覆蓋了緩存服務管理、存儲空間回收、高可用自愈三大核心運維場景。實際部署時請根據架構拓撲(如多從庫、GTID 模式)調整判斷邏輯,並建立完善的變更管理流程。