使用 mysql v8 當資料庫,某一天查看硬碟使用量赫然發現竟然用了 100 多 GB 的空間!
我就感到好奇了,我的總資料量也才 600MB,加上一些衍生計算和 index 應該也不會超過 5 GB 的使用量。所以我就開始檢查為什麼 mysql 會突然佔用了這麼多的空間。
在 /var/lib/mysql 路徑底下多了好多個 binlog.XXXXXX 的檔案,每個檔案都不小。上網查詢後才知道這些是 mysql 的更新操作所產生的語法紀錄,是用來還原資料或是叢集資料庫架構所需要的紀錄檔案,但我只是單資料庫架構的話好像就不需要一直產生這樣的 log 出來。
從網路上的資料看起來有幾種調整方式:
調整 binlog_expire_logs_seconds 值,縮短過期清除時間
默認是 2592000s => 30 天
執行 set global binlog_expire_logs_seconds = 300
便會生效,記得要設置 global 的變數
可以用 show variables like '%expire%'
查看設定
補充知識,Copilot 提供:
set binlog_expire_logs_seconds 與 set global binlog_expire_logs_seconds
之間的主要區別在於設置的範圍和持久性:
設置範圍:
- set binlog_expire_logs_seconds = 300:這個命令設置的是當前會話(session)的二-進制日誌過期時間。它只對當前連接的 MySQL 會話有效,並不會影響到其他會話或者新的連接會話。
- set global binlog_expire_logs_seconds = 300:這個命令設置的是全局範圍內的二進制日誌過期時間。它對所有新建立的連接會話有效,但不會影響到已經存在的會話。
但如果不在 MySQL 配置文件(如 my.cnf 或 my.ini)中進行相應設置,重啟 MySQL 服務後這些變更將丟失。
因此,如果您想要永久改變二進制日誌的過期時間,您應該在 MySQL 的配置文件中添加這個設置,以確保在服務重啟後設置仍然有效。
調整 log_bin 設置,關閉紀錄功能
默認是 ON
查看show variables like '%log_bin%';
執行set global log_bin = OFF;
感謝其他程式大神的文章讓我獲益良多,下面放上參考文章