(一)什麼是二進制日誌html
二進制日誌(binlog)記錄了數據庫中全部的DDL和DML操做,可是不包括select語句,語句以「事件」的形式保存,記錄了數據庫的更改變化,在主從複製(replication)和數據恢復中起着重要的做用。對比來看,MySQL的二進制日誌做用至關於Oracle數據庫的redo log + archive log。mysql
(二)開啓二進制日誌及參數配置sql
二進制日誌開啓須要在配置文件裏面配置相關參數,而後重啓數據庫,或者開啓數據庫的時候添加相關參數。主要參數以下:數據庫
(2.1)log_bin工具
該參數控制binlog文件存放的位置,用法log_bin=path/file_name。若是沒有給出路徑,則默認路徑爲數據文件存放地址(datadir),若是沒有給出文件名稱,默認文件名爲「主機名-bin.num」。初始文件是hostname-bin-000001,每次啓動MySQL服務或者刷新時,自動遞增編號建立二進制日誌文件。spa
(2.1)binlog_format日誌
該參數控制二進制日誌文件的格式,可選格式有:code
(2.3)expire_logs_daysorm
該參數控制二進制日誌保留天數,過了指定的天數後,日誌將會自動刪除。server
(2.4)max_binlog_size
該參數控制二進制日誌文件的大小,當日志文件達到該參數指定的大小時,就會建立新的二進制日誌文件。不過,實際上二進制日誌文件可能會超過該值,好比當二進制日誌快要寫滿時,執行一個超大事物,因爲事物特性決定相關事件必須連續,這種狀況下,事件必須寫到同一個日誌文件,就會出現日誌大於 max_binlog_size值的現象。
(2.5)binlog_do_db
該參數控制要保存二進制日誌的數據庫,若是有多個數據庫,須要屢次使用該參數,不能使用逗號分隔。
(2.6)binlog_ignore_db
該參數控制要不保存二進制日誌的數據庫,若是有多個數據庫,須要屢次使用該參數,不能使用逗號分隔。
(2.7)sync_binlog
該參數控制二進制日誌刷新到磁盤的頻率,單位爲秒(s)。
(2.8)server_id
若是要在MySQL5.7版本中開啓binlog,必須設置該參數,不然實例沒法啓動。
一個簡單的參數配置如圖:
(三)二進制日誌的做用
(3.1)複製
MySQL Master端的二進制日誌發送到slave端,slave端根據日誌進行重作,達到主從複製的目的。
(3.2)恢復
無論是使用mysqldump仍是xtrabackup,咱們都只能將數據庫恢復到有備份的時刻,若是要將數據庫恢復到任什麼時候刻,則須要使用二進制日誌。
(四)相關命令
(4.1)binlog清理
若是業務量較大,binlog日誌增加很快,須要按期清理,有好幾種方法能夠清理日誌。
方法1:執行「reset master」命令,該命令將刪除全部的binlog日誌,新日誌編號從「000001」開始
mysql> reset master; Query OK, 0 rows affected (0.00 sec)
方法2:執行「purge master logs to ‘hostname-bin.******’ 」命令,該命令將刪除******以前的日誌
# 刪除'master-bin.000007'以前的日誌
[root@masterdb binlog]# ls -lrt total 36 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000001 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000002 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000003 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000004 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000005 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000006 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000007 -rw-r----- 1 mysql mysql 154 Feb 13 00:20 master-bin.000008 -rw-r----- 1 mysql mysql 256 Feb 13 00:20 master-bin.index [root@masterdb binlog]# mysql> purge master logs to 'master-bin.000007'; Query OK, 0 rows affected (0.00 sec) [root@masterdb binlog]# ls -lrt total 12 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000007 -rw-r----- 1 mysql mysql 154 Feb 13 00:20 master-bin.000008 -rw-r----- 1 mysql mysql 64 Feb 13 00:22 master-bin.index
方法3:執行「purge master logs before‘yyyy-mm-dd hh24:mi:ss’ 」命令,該命令將刪除指定日誌以前的日誌
# 刪除2020-02-13 00:24:00以前的日誌 mysql> system ls -lrt /mysql/binlog total 36 -rw-r----- 1 mysql mysql 202 Feb 13 00:20 master-bin.000007 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000008 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000009 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000010 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000011 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000012 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000013 -rw-r----- 1 mysql mysql 154 Feb 13 00:25 master-bin.000014 -rw-r----- 1 mysql mysql 256 Feb 13 00:25 master-bin.index
mysql> purge master logs before '2020-02-13 00:24:00'; Query OK, 0 rows affected (0.00 sec) mysql> system ls -lrt /mysql/binlog total 32 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000008 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000009 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000010 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000011 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000012 -rw-r----- 1 mysql mysql 202 Feb 13 00:25 master-bin.000013 -rw-r----- 1 mysql mysql 154 Feb 13 00:25 master-bin.000014 -rw-r----- 1 mysql mysql 224 Feb 13 00:29 master-bin.index
方法4:在配置文件中添加「expire_logs_days」參數,指定過時天數,到期會自動刪除。
(4.2)binlog切換
能夠使用flush logs或者flush binary logs切換日誌。
mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000017 | 154 | db1,db2,db3 | db4 | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql> flush logs; Query OK, 0 rows affected (0.00 sec) mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000018 | 154 | db1,db2,db3 | db4 | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql> flush binary logs; Query OK, 0 rows affected (0.00 sec) mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000019 | 154 | db1,db2,db3 | db4 | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
(4.3)查看binlog events
mysql> show binlog events in 'master-bin.000019'; +-------------------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-------------------+-----+----------------+-----------+-------------+---------------------------------------+ | master-bin.000019 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.24-log, Binlog ver: 4 | | master-bin.000019 | 123 | Previous_gtids | 1 | 154 | | +-------------------+-----+----------------+-----------+-------------+---------------------------------------+ 2 rows in set (0.00 sec)
(4.4)查看當前biblog位置
mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000019 | 154 | db1,db2,db3 | db4 | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
相關文檔集合: 1.MySQL日誌--二進制日誌(binlog) |