MySql自動清除binary logs日誌

2021-08-15 06:50:49 字數 1757 閱讀 9657

某個專案為了實現通過canalmysql自動同步至redis的目的,開啟了mysqllog-bin模式(binary-log,二進位制日誌)。開啟方式很簡單,這裡只是給出初步介紹:

//關閉mysql服務

//vi /etc/my.cnf

[mysqld]

...log-bin=mysql-bin

...//開啟mysql服務

開啟了二進位制日誌後,我們確實實現了redis的自動同步。但是後來發現伺服器磁碟空間暴減,通過分析發現是mysql產生了大量二進位制檔案,如下:

[root@localhost mysql]# ls -1

ibdata1

ib_logfile0

ib_logfile1

ib_logfile0

mysql-bin.000001

mysql-bin.000002

mysql-bin.000003

mysql-bin.000004

...mysql-bin.index

...

我分配給mysql的磁碟空間只有20g,經常會一兩天就產生mysql磁碟爆滿導致mysql服務不可用的問題。

然後我就開始了悲催的mysql日誌清理之旅。

剛開始都是通過手動進行清理。

通常這麼做:

#將指定時間之前的日誌清理

purge binary logs before '2018-02-01 12:00:00';

#將指定日誌檔案之前的日誌清除

purge binary logs to

'mysql-bin.000003';

這麼做一直都能達到清理的目的,就是過幾天就需要清理一次,很是繁瑣。

但是因為工期緊,任務重,我也沒花時間了解別的方式,直到有一天…

有一天,開啟了mysql的主從模式,然後照例通過purge進行日誌清理。

剛開始也是沒有問題的,然後,有一次執行了purge之後就沒有然後了:mysql直接被玩壞了…

後來分析,應該是我們清理日誌的時刻,正巧與主從複製衝突了,然後就出錯了。

衝突的原因我沒有深究,但是大概有可能如下:

最後,經過一番研究,通過flush logs + restart解決了問題。

考慮到purge的不穩定性以及天天清理日誌的煩惱,後來採取了自動清理策略。實現方法如下:

一次性的(不推薦:因為服務重啟,配置失效):

sql > set

global expire_logs_days = 3;

//關閉mysql服務

//vi /etc/my.cnf

[mysqld]

...#開啟binary log

log-bin=mysql-bin

#日誌超過3天自動過期

expire_logs_days = 3

...//開啟mysql服務

ClnOSGarbage 自動清除系統垃圾檔案

echo off echo cleanning system garbage,please wait a moment.del f s q systemdrive tmp del f s q systemdrive mp del f s q systemdrive log del f s q sys...

視窗物件的自動清除

乙個mfc視窗物件包括兩方面的內容 一是視窗物件封裝的視窗,即存放在m hwnd成員中的hwnd 視窗控制代碼 二是視窗物件本身是乙個c 物件。要刪除乙個mfc視窗物件,應該先刪除視窗物件封裝的視窗,然後刪除視窗物件本身。刪除視窗最直接方法是呼叫cwnd destroywindow或 destroy...

Linux清除MySql密碼

1.停止服務 service mysqld stop 2.開啟乙個不驗證密碼的服務 mysqld safe skip grant tables skip networking 服務正在執行,下面另外開控制台 3.無密碼登入 mysql uroot p 4.修改密碼 mysql update mysq...