mysql之 binlog維護詳細解析(開啟、binlog相關參數作用、mysqlbinlog解讀、binlog刪除)

來源:互聯網
上載者:User

標籤:exe   esc   add   show   協助   system   base   0.00   添加   

binary log 作用:主要實現三個重要的功能:用於複製,用於恢複,用於審計。
binary log 相關參數:
log_bin
設定此參數表示啟用binlog功能,並指定路徑名稱
log_bin_index
設定此參數是指定二進位索引檔案的路徑與名稱
binlog_do_db
此參數表示只記錄指定資料庫的二進位日誌
binlog_ignore_db
此參數表示不記錄指定的資料庫的二進位日誌
max_binlog_cache_size
此參數表示binlog使用的記憶體最大的尺寸
binlog_cache_size
此參數表示binlog使用的記憶體大小,可以通過狀態變數binlog_cache_use和binlog_cache_disk_use來協助測試。
       binlog_cache_use:使用二進位日誌緩衝的事務數量
       binlog_cache_disk_use:使用二進位日誌緩衝但超過binlog_cache_size值並使用臨時檔案來儲存事務中的語句的事務數量
max_binlog_size
Binlog最大值,最大和預設值是1GB,該設定並不能嚴格控制Binlog的大小,尤其是Binlog比較靠近最大值而又遇到一個比較大事務時,為了保證事務的完整性,不可能做切換日誌的動作,只能將該事務的所有SQL都記錄進當前日誌,直到事務結束
sync_binlog
這個參數直接影響mysql的效能和完整性
sync_binlog=0:
當事務提交後,Mysql僅僅是將binlog_cache中的資料寫入Binlog檔案,但不執行fsync之類的磁碟        同步指令通知檔案系統將緩衝重新整理到磁碟,而讓Filesystem自行決定什麼時候來做同步,這個是效能最好的。
sync_binlog=n,在進行n次事務提交以後,Mysql將執行一次fsync之類的磁碟同步指令,同志檔案系統將Binlog檔案快取重新整理到磁碟。
Mysql中預設的設定是sync_binlog=0,即不作任何強制性的磁碟排清指令,這時效能是最好的,但風險也是最大的。一旦系統繃Crash,在檔案系統快取中的所有Binlog資訊都會丟失

1.開啟二進位日誌  
mysql>show variables like ‘%log_bin%‘;  
+---------------------------------+-------+  
| Variable_name                   | Value |  
+---------------------------------+-------+  
| log_bin                         | OFF   | --該參數用於設定是否啟用二進位日誌  
| log_bin_trust_function_creators | OFF   |  
| sql_log_bin                     | ON    |  
+---------------------------------+-------+  
[[email protected] ~]# service mysql stop
Shutting down MySQL....                                    [  OK  ]
[[email protected] ~]# cp /etc/my.cnf /etc/my.cnf.bak
[[email protected] ~]# vi /etc/my.cnf
說明: 在/etc/my.cnf 檔案中添加 log_bin=/var/lib/mysql/binarylog/binlog 
[[email protected] ~]#  mkdir -p /var/lib/mysql/binarylog
[[email protected] ~]# chown -R mysql:mysql /var/lib/mysql/binarylog 
[[email protected] mysql]# service mysql start
Starting MySQL.                                            [  OK  ]
mysql> show variables like ‘%log_bin%‘;
+---------------------------------+---------------------------------------+
| Variable_name                   | Value                                 |
+---------------------------------+---------------------------------------+
| log_bin                         | ON                                    |
| log_bin_basename                | /var/lib/mysql/binarylog/binlog       |
| log_bin_index                   | /var/lib/mysql/binarylog/binlog.index |
| log_bin_trust_function_creators | OFF                                   |
| log_bin_use_v1_row_events       | OFF                                   |
| sql_log_bin                     | ON                                    |
+---------------------------------+---------------------------------------+
6 rows in set (0.00 sec)
[[email protected] mysql]# ll /var/lib/mysql/binarylog/
total 8
-rw-rw---- 1 mysql mysql 120 May 30 16:57 binlog.000001
-rw-rw---- 1 mysql mysql  39 May 30 16:57 binlog.index
2. 切換二進位日誌
mysql> flush logs;  
Query OK, 0 rows affected (0.05 sec)
[[email protected] mysql]# ll /var/lib/mysql/binarylog/
total 12
-rw-rw---- 1 mysql mysql 164 May 30 17:09 binlog.000001
-rw-rw---- 1 mysql mysql 120 May 30 17:09 binlog.000002
-rw-rw---- 1 mysql mysql  78 May 30 17:09 binlog.index
3.查看 binary log 個數
mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       164 |
| binlog.000002 |       164 |
4. 查看正在使用的 binary log
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000010 |      120 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
5.查看二進位日誌事件
5.1 
mysql> show binlog events in ‘binlog.000010‘;
+---------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name      | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+---------------+-----+-------------+-----------+-------------+---------------------------------------+
| binlog.000010 |   4 | Format_desc |         1 |         120 | Server ver: 5.6.25-log, Binlog ver: 4 |
| binlog.000010 | 120 | Query       |         1 |         219 | use `test`; create table andy(id int) |
+---------------+-----+-------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec) 
5.2
mysql>  show binlog events in ‘binlog.000010‘ from 120 limit 2; 
+---------------+-----+------------+-----------+-------------+---------------------------------------+
| Log_name      | Pos | Event_type | Server_id | End_log_pos | Info                                  |
+---------------+-----+------------+-----------+-------------+---------------------------------------+
| binlog.000010 | 120 | Query      |         1 |         219 | use `test`; create table andy(id int) |
| binlog.000010 | 219 | Query      |         1 |         298 | BEGIN                                 |
+---------------+-----+------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)
6. 用 mysqlbinlog 工具查看 二進位日誌
6.1
[[email protected] ~]# mysqlbinlog /var/lib/mysql/binarylog/binlog.000016
# at 199
#170530 19:42:52 server id 1  end_log_pos 306 CRC32 0x64d982e4 Query thread_id= exec_time=0error_code=0
use `test`/*!*/;
SET TIMESTAMP=1496144572/*!*/;
insert into name values(‘陶葉‘)
/*!*/;
# at 306
#170530 19:42:52 server id 1  end_log_pos 337 CRC32 0xf75d46d1 Xid = 36
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email protected]_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
內容解析:
位置>          位於檔案中的位置,“at 199”說明“事件”的起點,是以第199位元組開始;“end_log_pos 306”說明以第306位元組結束,下一個事件將以上一個事件結束位置為起點,周而復始。
時間戳記>        事件發生的時間戳記:“170530 19:42:52”
事件執行時間>  事件執行花費的時間:"exec_time=0"
錯誤碼>        錯誤碼為:“error_code=0”
伺服器的標識>  伺服器的標識id:“server id 1”
6.2 用 mysqlbinlog 工具查看 指定時間戳記 binlog
[[email protected] ~]# mysqlbinlog --start-datetime="2017-05-30 19:42:52"  /var/lib/mysql/binarylog/binlog.000016
6.3 用 mysqlbinlog 工具查看 指定position 的binlog
[[email protected] ~]# mysqlbinlog --start-position=199  --stop-position=306  /var/lib/mysql/binarylog/binlog.000016
7. 刪除 binary log
7.1 自動刪除 , my.cnf中 添加 expire_logs_days
expire_logs_days = X     # X為指定天數
7.2 手動刪除( 自動在作業系統層面把 os file 刪除了)
mysql> reset master;   //刪除master的binlog
mysql> reset slave;    //刪除slave的中繼日誌
mysql> purge master logs before ‘2017-05-30 18:27:00‘;  //刪除指定日期以前的日誌索引中binlog記錄檔
mysql> purge master logs to ‘binlog.000011‘; //刪除binlog.000011之前的,不包含binlog.000011

mysql之 binlog維護詳細解析(開啟、binlog相關參數作用、mysqlbinlog解讀、binlog刪除)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.