標籤:

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 |