二進制日誌:(多個線程會爭用,能夠首先寫到緩衝區中)
mysql
記錄了當前服務器的數據修改和有潛在可能性影響數據修改的語句sql
默認在數據目錄下,一般狀況下爲mysql-binvim
[root@redhat7 data]# file mysql-bin.000001 mysql-bin.000001: MySQL replication log 複製日誌
能夠經過mysqlbinlog命令來查看緩存
時間記錄 timebash
偏移位置 position服務器
MySQL > show master status 顯示主服務器狀態 查看當前使用的二進制日誌和下一個事件開始時的基於的位置 MySQL [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 107 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
日誌滾動:ide
一、能夠按照大小定義函數
二、能夠按照時間定義spa
三、重啓mysql服務器線程
四、執行flush logs(手動滾動)
查看當前正在使用的二進制日誌
MariaDB [(none)]> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1043 | | mysql-bin.000002 | 245 | | ...............3 | 245 | +------------------+-----------+ 2 rows in set (0.00 sec)
二進制日誌的功用
即時點(時間點)恢復:
複製:
[root@redhat7 data]# file mysql-bin.index mysql-bin.index: ASCII text [root@redhat7 data]# cat mysql-bin.index ./mysql-bin.000001 ./mysql-bin.000002 ./mysql-bin.000003 ./mysql-bin.000004
清除二進制日誌
Mysql > help purge PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr(某個時間以前) }
查看MySQL的二進制日誌
mysql > help SHOW BINLOG EVENTS; mysql > SHOW BINLOG EVENTS; MariaDB [(none)]> show binlog events\G *************************** 1. row *************************** Log_name: mysql-bin.000001 Pos: 4 Event_type: Format_desc Server_id: 1 End_log_pos: 245 Info: Server ver: 5.5.36-MariaDB-log, Binlog ver: 4
service-id:服務器身份標識
(避免重複執行mysql二進制日誌中'修改'類的語句)
MySQL 記錄二進制日誌的格式
MariaDB [(none)]> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec)
基於語句:statement
基於行(數據):row
update tb1 set salary=salary+1000; --> 數據量很大
混合模式:mixed
指定從那個位置開始讀取
MariaDB [(none)]> show binlog events in 'mysql-bin.000001' from 591\G
也能夠使用
[root@redhat7 data]# mysqlbinlog --start-position=24223 mysql-bin.000001
mysqlbinlog命令(客戶端命令)
--start-time --stop-time --start-position --stop-position
二進制日誌文件內容格式
事件發生的日期和時間
服務器ID
事件結束位置
事件的類型
原服務器生成此事件時的線程ID號 MySQL [(none)]> show processlist;
語句時間戳和寫入二進制文件的時間差,單位爲秒
錯誤代碼,0表示正常執行
事件內容
事件位置(至關於下一事件的開始位置)
MySQL [(none)]> show global variables like '%log%'; +-------------------------------------------------------------------------------+ | log_bin = {ON|OFF};還能夠是一個文件路徑 | | log_bin_trust_function_creators 是否阻止任何存儲函數 | | sql_log_bin = {ON|OFF} 當前會話是否將二進制文件錄入進二進制文件 | | sql_log_off 是否將通常查詢日誌記入查詢日誌 | | sync_binlog 同步緩衝中的二進制到硬盤的時間,0不基於時間同步,只在事件提交時同步 | | binlog_format = {|statement|row|mixed} | | max_binlog_cache_size mysql二進制日誌的緩衝區大小,僅用於緩存事務類的語句 | | max_binlog_stmt_cache_size 語句緩衝區大小,即事務類和非事務類公用的大小 | | max_binlog_size 二進制日誌文件的上限,單位爲字節 (超過上限會滾動) | | +-------------------------------------------------------------------------------+ 建議:切勿將二進制日誌與數據文件放在同一設備
事先作好規劃
[root@redhat7 data]# mkdir /mysql/binlog [root@redhat7 data]# vim /etc/my.cnf log-bin=/mysql/binlog/master-bin [root@redhat7 data]# chown -R mysql:mysql /mysql/binlog/ 重啓mysqld 服務器 [root@redhat7 data]# cd /mysql/binlog/ [root@redhat7 binlog]# ls master-bin.000001 master-bin.index
能夠臨時經過sql_log_bin來控制二進制的寫入
中繼日誌:(跟主從複製相關)
對於非從服務器,中繼日誌沒有啓用
relay_log 指明一個文件路徑
relay_log_index
relay_log_purge = {ON|OFF} 是否自動清理不在須要的中繼日誌
relay_log_space_limit 中繼大小是否限制