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

Shell 腳本實現遠端 MySQL 自動查詢與二進制日誌安全清理

     編輯:MySQL 綜合教學

基礎遠端查詢腳本

適用於每日自動檢查資料庫狀態、執行固定 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"

進階應用:主從同步環境下 Binlog 安全清理

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 點)
  • 執行前先備份 binlog 索引檔 (mysql-bin.index)
  • 監控從庫 Seconds_Behind_Master 確保同步正常後再清理
  • 保留至少 2-3 天的 binlog 以應對從庫暫時中斷重連
  • 使用 .my.cnf 儲存帳號密碼避免明文寫在腳本中

安全性強化

# 建立專用清理帳號,僅授予 SUPER 權限
CREATE USER 'binlog_cleaner'@'%' IDENTIFIED BY 'strong_password';
GRANT SUPER ON *.* TO 'binlog_cleaner'@'%';
FLUSH PRIVILEGES;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved