萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

LNMP 一鍵包清理 mysql-bin 日誌:reset master 與禁用 Binlog 兩法

現象

  • mysql-bin.000001 等二進制日誌佔用 4GB+ 磁碟
  • 註釋 log-bin 重啟 MySQL 報錯:ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock'

方案一:保留 Binlog 功能,清理舊日誌 (推薦)

# 登入 MySQL
mysql -u root -p

# 一鍵清空所有 Binlog,重置索引
RESET MASTER;

效果:刪除所有 mysql-bin.*,重建 mysql-bin.index,從 mysql-bin.000001 重新開始。**主從環境慎用**,會導致從庫同步中斷需重建。

方案二:自動過期清理 (生產環境標配)

/etc/my.cnf:

[mysqld]
log-bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7        # 自動刪除 7 天前的 Binlog
max_binlog_size = 100M      # 單檔上限,防止單檔過大

重啟生效:systemctl restart mysqld

方案三:完全禁用 Binlog (非主庫/無復制場景)

/etc/my.cnf:

[mysqld]
# log-bin = mysql-bin          # 註釋掉
# binlog_format = mixed        # 註釋掉
# 拒絕啟動 Binlog
skip-log-bin                  # 8.0+ 顯式禁用參數

**注意**:註釋 log-bin 後,若原配置有 binlog_format 等依賴項,**必須同步註釋**,否則啟動報錯 (如方案一現象)。

為什麼註釋 log-bin 會導致 Socket 連不上?

並非直接因果。實際是:**修改配置後重啟失敗** (因殘留 binlog_format 等參數),MySQL 進程未真正啟動,自然無 Socket 檔案。客戶端報「找不到 Socket」是**服務未啟動**的表象。

正確操作順序

  1. 編輯 my.cnf,同步註釋 log-bin 和 binlog_format (或加 skip-log-bin)
  2. systemctl restart mysqld
  3. 確認 SHOW VARIABLES LIKE 'log_bin'; 返回 OFF
  4. 手動清理舊 Binlog:rm -f /var/lib/mysql/mysql-bin.*

主從環境特殊處理

  • **主庫**:保留 Binlog,設 expire_logs_days,定期備份 Binlog 至異地
  • **從庫**:log_slave_updates=1 時也會產生 Binlog,同樣設過期清理
  • **絕不在主庫執行 RESET MASTER**,除非同步重建所有從庫

**核心:保留 Binlog 用 expire_logs_days 自動清理;非復制場景用 skip-log-bin 徹底禁用並手動清理舊檔。**

copyright © 萬盛學電腦網 all rights reserved