適用於每日自動檢查資料庫狀態、執行固定 SQL 語句的場景:
#!/bin/sh
HOST=192.168.5.40
USER=abc
PASS=123456
QUERY=$(mysql -h$HOST -u$USER -p$PASS << EOF
use testdb;
select * from person where name='LiMing';
exit
EOF
)
echo "$QUERY"
MySQL 主從架構中,二進制日誌 (binlog) 會持續增長,直接刪除檔案極不安全(可能導致從庫同步中斷)。正確做法是使用 PURGE MASTER LOGS 並搭配 SHOW MASTER STATUS 確認當前從庫同步位置。
#!/bin/sh
Host=192.168.5.30
User=abc
PW=123456
# 1. 取得主庫目前 binlog 檔案名稱
MSG=$(mysql -h$Host -u$User -p$PW << EOF
show master status;
exit
EOF
)
# 提取 File 欄位(第 5 欄)
LOG=$(echo "$MSG" | awk '{print $5}')
# 2. 安全清理:僅保留當前使用中的 binlog 及之後
mysql -h$Host -u$User -p$PW << EOF
purge master logs to "$LOG";
exit
EOF
| 指令 | 說明 |
|---|---|
show master status; | 顯示主庫目前 binlog 檔案名與位置 |
purge master logs to 'binlog.000123'; | 刪除指定檔案之前的所有 binlog(含指定檔) |
purge master logs before '2023-01-01 00:00:00'; | 刪除指定時間點之前的 binlog |
crontab 定時執行(如每天凌晨 3 點)mysql-bin.index)Seconds_Behind_Master 確保同步正常後再清理.my.cnf 儲存帳號密碼避免明文寫在腳本中# 建立專用清理帳號,僅授予 SUPER 權限
CREATE USER 'binlog_cleaner'@'%' IDENTIFIED BY 'strong_password';
GRANT SUPER ON *.* TO 'binlog_cleaner'@'%';
FLUSH PRIVILEGES;