1. 程式人生 > >MySQL設定log-bin後伺服器重啟失敗的解決辦法和說明

MySQL設定log-bin後伺服器重啟失敗的解決辦法和說明

問題描述:

MySQL中二進位制日誌功能預設是關閉的,檢視各種開啟方式後,確定在配置檔案中加入如下配置來開啟該功能:

  1. [mysqld]  
  2. 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 變數,即在配置檔案中新增:

  1. [mysqld]  
  2. log-bin=mysql  
  3. 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是安全的,一般來說網路狀況好的時候,保留最新的那一個足以。