某個專案為了實現通過canal
將mysql
自動同步至redis
的目的,開啟了mysql
的log-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...