MySQL 配置二進位日誌文件
問題描述:
MySQL中二進位日誌功能默認是關閉的,查看各種開啟方式後,確定在配置文件中加入如下配置來開啟該功能:
[mysqld] log-bin=mysql
之後使用 「systemctl start mysql」 重啟伺服器,報錯「Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.」
解決方法:
在設置 log-bin 的時候同時需要設置 server-id 變數,即在配置文件中添加:
[mysqld] log-bin=mysql server-id=1
裝mysql,運行一段時間後,在mysql目錄下出現一堆類似mysql-bin.000***,從mysql-bin.000001開始一直排列下來,而且佔用了大量硬碟空間,高達幾十個G. 對於這些超大空間佔用量的文件我們應該怎麼辦呢?
那麼mysql資料庫文件夾中的mysql-bin.00001是什麼文件?
mysql-bin.000001、mysql-bin.000002等文件是資料庫的操作日誌,例如UPDATE一個表,或者DELETE一些數據,即使該語句沒有匹配的數據,這個命令也會存儲到日誌文件中,還包括每個語句執行的時間,也會記錄進去的。
這些形如mysql-bin.00001的文件主要是用來做什麼的呢?
1:數據恢復
如果你的資料庫出問題了,而你之前有過備份,那麼可以看日誌文件,找出是哪個命令導致你的資料庫出問題了,想辦法挽回損失。
2:主從伺服器之間同步數據
主伺服器上所有的操作都在記錄日誌中,從伺服器可以根據該日誌來進行,以確保兩個同步。
如果不想要這些文件應該怎麼做呢?
1:只有一個mysql伺服器,那麼可以簡單的注釋掉這個選項就行了。
vi /etc/my.cnf把裡面的 log-bin 這一行注釋掉,重啟mysql服務即可。
2:如果你的環境是主從伺服器,那麼就需要做以下操作了。
A:在每個從屬伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。
B:使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。
C:在所有的從屬伺服器中判定最早的日誌,這個是目標日誌,如果所有的從屬伺服器是更新的,就是清單上的最後一個日誌。
D:清理所有的日誌,但是不包括目標日誌,因為從伺服器還要跟它同步。
簡單地說,這些MySQL目錄下的形如mysql-bin.000***的文件時MySQL的事務日誌。
刪除複製伺服器已經拿走的binlog是安全的,一般來說網路狀況好的時候,保留最新的那一個足以。
推薦閱讀:
※有哪些比較好的在 Python 中訪問 MySQL 的類庫?
※MySQL訓練——SUM and COUNT@sqlzoo.net
※淺談如何對MySQL內核進行深度優化
※如何解決主從資料庫同步延遲問題?
※Mysql在RC隔離級別下是如何實現讀不阻塞的?
TAG:MySQL |