天天看點

學習mysql的binlog配置

<b>1</b><b>、基礎知識</b>

日志是把資料庫的每一個變化都記載到一個專用的檔案裡,這種檔案就叫做日志檔案。mysql預設隻開啟錯誤日志,因為過多的日志将會影響系統的處理性能。

在mysql5.0以前版本支援文本格式和二進制格式的日志,但是在mysql5.0後版本就隻支援二進制格式的日志。因為二進制日志在性能、資訊處理等方面有更多的優點。

<b>2</b><b>、啟用mysql二進制日志</b>

mysql二進制日志由配置檔案my.cnf的log-bin選項負責啟用的。

mysql伺服器預設會在資料根目錄建立兩個新檔案:xxx-bin.000001和xxx-bin.index。若配置選項沒有給出檔案名,mysql将使用mysql-bin來命名這兩個檔案,其中.index檔案包含一份完整的日志檔案清單。如下:

cat /etc/my.cnf

ll /usr/local/mysql/data/

cat /usr/local/mysql/data/mysql-bin.index

學習mysql的binlog配置
學習mysql的binlog配置

<b>mysql</b><b>會把使用者對所有資料庫的内容和結構的修改情況記入xxx-bin.n檔案,但是不會記錄select和沒有實際更新的update語句。</b>

當然我們也可以同過相關指令查詢,mysql是否已經開啟binlog日志。如下:

show variables like ‘log_%’;

學習mysql的binlog配置

<b>3</b><b>、binlog日志檔案的生成</b>

當mysql停止或重新開機時,伺服器會把日志檔案記入下一個日志檔案,mysql會在重新開機時生成一個新的日志檔案,檔案序号依次遞增。

如果日志檔案超過max_binlog_size(在my.cnf檔案中配置)系統變量配置的上限時,也會生成新的日志檔案。

除此之外,如果在mysql指令中執行flush logs指令也會生成新的日志檔案。

學習mysql的binlog配置

<b>4</b><b>、檢視系統中的binlog日志</b>

檢視系統中的binlog日志,使用show master logs指令。如下:

show master logs;

學習mysql的binlog配置

<b>5</b><b>、檢視binlog日志檔案</b>

mysql提供了mysqlbinlog指令來檢視日志檔案,在記錄每條變更日志的時候,日志檔案都會把目前時間給記錄下來,以便進行資料庫恢複。如下:

mysqlbinlog mysql-bin.000001| more

學習mysql的binlog配置

<b>6</b><b>、使用binlog日志進行資料庫恢複</b>

如果遇到災難事件,應該用最近一次制作的完整備份恢複資料庫,然後使用備份之後的binlog日志件把資料庫恢複到最接近現在的可用狀态。

使用binlog日志進行恢複時需要依次進行,即最早生成的日志檔案要最先恢複。恢複資料的指令格式如下:

mysqlbinlog xxx-bin.000001|mysql -u root –p password dataname

<b>7</b><b>、binlog指令行參數詳解</b>

log-bin [=file_name] 此參數表示啟用binlog日志功能,并可以定制路徑名稱,預設為mysql-bin。

binlog_format 此參數配置binlog的日志格式,預設為mixed。

max_binlog_size此參數配置binlog的日志最大值,最大和預設值是1gb。

max_binlog_cache_size此參數表示binlog使用最大記憶體的數。

binlog-do-db=db_name 此參數表示隻記錄指定資料庫的二進制日志。

binlog-ignore-db=db_name此參數表示不記錄指定的資料庫的二進制日志。

expire_logs_days 此參數表示binlog日志保留的時間,預設機關是天。

my.cnf配置檔案有關binlog配置如下:

cat /etc/my.cnf |grep -v ^#|grep -v ^$

學習mysql的binlog配置

<b>8</b><b>、删除binlog日志</b>

<b>8.1</b><b>删除部分binlog日志</b>

删除binlog部分日志,我們可以日志名稱和日志生成的時間來進行删除。删除指令如下:

purge {master|binary} logs to ‘log_name’;

根據日志名稱删除,隻删除log_name之前的日志,log_name本身不會被删除。

學習mysql的binlog配置

通過上圖我們可以看到,mysql-bin.000003之前的日志已經被全部删除。

purge {master|binary} logs before ‘date’;

根據日志生成的時間删除,隻删除date之前的日志,date本身不會被删除。

學習mysql的binlog配置

<b>8.2</b><b>删除全部binlog日志</b>

删除之前所有的binlog日志,并重新生成新的binlog,字尾從000001開始。使用指令:

reset master;

學習mysql的binlog配置