mysql之 binlog維護詳細解析(開啟、binlog相關引數作用、mysqlbinlog解讀、binlog刪除)
binary log 相關引數:
log_bin
設定此引數表示啟用binlog功能,並指定路徑名稱
log_bin_index
設定此引數是指定二進位制索引檔案的路徑與名稱
binlog_format
此引數控制二進位制日誌三種格式:STATEMENT,ROW,MIXED
① STATEMENT模式(SBR)
每一條會修改資料的sql語句會記錄到binlog中。優點是並不需要記錄每一條sql語句和每一行的資料變化,減少了binlog日誌量,節約IO,提高效能。缺點是在某些情況(如非確定函式)下會導致master-slave中的資料不一致(如sleep()函式, last_insert_id(),以及user-defined functions(udf)等會出現問題)
② ROW模式(RBR)
不記錄每條sql語句的上下文資訊,僅需記錄哪條資料被修改了,修改成什麼樣了。而且不會出現某些特定情況下的儲存過程、或function、或trigger的呼叫和觸發無法被正確複製的問題。缺點是會產生大量的日誌,尤其是alter table的時候會讓日誌暴漲。
③ MIXED模式(MBR)
以上兩種模式的混合使用,一般的複製使用STATEMENT模式儲存binlog,對於STATEMENT模式無法複製的操作使用ROW模式儲存binlog,MySQL會根據執行的SQL語句選擇日誌儲存方式。
binlog_row_image
此引數控制二進位制日誌記錄內容,有三種選擇full、minimal、noblob,預設值是full。
full:在“before”和“after”影像中,記錄所有的列值;
minimal:在“before”和“after”影像中,僅僅記錄被更改的以及能夠唯一識別資料行的列值;
noblob:在“before”和“after”影像中,記錄所有的列值,但是BLOB 與 TEXT列除外(如未更改)。
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 |
+---------------------------------+-------+
[
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] 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)
[
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=0
error_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刪除)
binary log 作用:主要實現三個重要的功能:用於複製,用於恢復,用於審計。 binary log 相關引數: log_bin 設定此引數表示啟用binlog功能,並指定路徑名稱 log_bin_index 設定此引數是指定二進位制索引檔案的路徑與名稱 binlog_
MySQL之ORDER BY 詳細解析
1 概述 MySQL有兩種方式可以實現ORDER BY: 1.通過索引掃描生成有序的結果 2.使用檔案排序(filesort) 圍繞著這兩種排序方式,我們試著理解一下ORDER BY的執行過程以及回答一些常見的問題(下文僅討論InnoDB儲存引擎)。
Mysql 主從複製-Binlog詳細解析(Row格式)
Mysql 主從複製過程中,資料交換主要是依託於mysql的Binlog,本文將對mysql的binlog進行詳細的解析,從二進位制來分析binlog的語義。 binlog又分為3中,statement格式,row格式,mixed格式。 statement 格式就是把所有
引數化之從資料庫提取資料元件詳細解析(十)
1)“配置元件”->“JDBC Connection Configuration” 精簡版: Variable Name:連線池名稱 Database URL:jdbc:mysql://host:port/db(jdbc:mysql://ip地址:埠號/資料庫
I3C 總線協議詳細解析(第一章)
同時 ble 如果 數據 結構 一中 替換 erro 移動設備 目前隨著手機等移動設備包含的sensor越來越多,傳統應用在sensor上的I2C/SPI接口的局限性也越來越明顯,典型的缺陷如下: 1、sensor等設備的增加,對控制總線的速度和功耗提出
session 詳細解析(轉)
時間 沒有 upa 銷毀 設置 支持 str 我們 www 轉自 https://www.cnblogs.com/blueskycc/p/5524709.html?tdsourcetag=s_pcqq_aiomsg http協議是WEB服務器與客戶端(瀏覽器)
mybatis原始碼-Mapper解析之SQL 語句節點解析(一條語句對應一個MappedStatement)
一起學 mybatis 你想不想來學習 mybatis? 學習其使用和原始碼呢?那麼, 在部落格園關注我吧!! 我自己打算把這個原始碼系列更新完畢, 同時會更新相應的註釋。快去 star 吧!! mybatis最新原始碼和註釋 在 mybatis 中, 對應 CRUD 的是四種節點: <
OCJP 1Z0-808考題超詳細解析(word文件) 題1--30
題目難度分類 個人對於題目難度的分類:難度總共五星 不理解題: ★★★★★ 閱讀理解題: ★★★★ 難點題: ★★★ 套路題: ★★★ 基礎題/送分題:
OCJP 1Z0-808考題超詳細解析(word文件) 題50--60
我現在邊工作,業餘時間看看,更新的可能的比較慢,望大家諒解。 題58 Given the code fragment: if(aVar++ < 10){ System.out.println(aVar+ " Hello
JAVA多執行緒wait與notify詳細解析(由生產者和消費者案例引出)
生產者和消費者這個關係是個經典的多執行緒案例。現在我們編寫一個Demo來模擬生產者和消費者之間的關係。 假如有兩個類,一個是資料生產者類DataProvider,另一個是資料消費者類DataConsumer,這兩個類同時對資料類Data進行操作,生產者類負責生產資料,消費者類負責消費資料,下面是
MySQL單表查詢詳細解析
一、關鍵字的執行優先順序 1,from:找到表 2,where:拿著where指定的約束條件,去檔案/表中取出一條條資料 3,group by:將取出的一條條資料進行分組,如果沒有group by,則整體作為一組 4,having:將分組的結果進行having過濾 5,selec
Linux系統入門之命令學習及解析(二)
Linux常用目錄 以下是系統的一級目錄,這些目錄在Linux系統中都有著不同的用處。 / Linux系統根目錄(重要,常用) /home 包含使用者的檔案:引數設定、個性檔案、文件、資料、EMAIL、快取資料等,每增加一個使用者,系統就會在home目錄下
RelativeLayout控制元件居中詳細解析(可能是最完美的方法)
在RelativeLayout中設定控制元件全部居中,需要注意在父佈局的一些細節設定即可,現在給出完美的解決方法,先看例項: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xml
Android技能樹 — 網路小結(7)之 Retrofit原始碼詳細解析
前言: 哈哈,其實寫的還是很水,各位原諒我O(∩_∩)O。 介於自己的網路方面知識爛的一塌糊塗,所以準備寫相關網路的文章,但是考慮全部寫在一篇太長了,所以分開寫,希望大家能仔細看,最好可以指出我的錯誤,讓我也能糾正。 1.講解相關的整個網路體系結構: Android技能樹 — 網路小結(1)之網路體系
Word2Vec原始碼詳細解析(上)
相關連結: 1、Word2Vec原始碼最詳細解析(上) 2、Word2Vec原始碼最詳細解析(下) Word2Vec原始碼最詳細解析(上) 在這一部分中,主要介紹的是Word2Vec原始碼中的主要資料結構、各個變數的含義與作用,以及所有演算法之外的輔助函式,包括如何
今年暑假不AC詳細解析(貪心)
今年暑假不AC Problem Description“今年暑假不AC?”“是的。”“那你幹什麼呢?”“看世界盃呀,笨蛋!”“@#$%^&*%...”確實如此,世界盃來了,球迷的節日也來了
mysql之workbench如何只匯出(insert語句)資料
https://www.jianshu.com/p/a5cd14bc5499 1. 說明: 出發點: 由於特殊原因,我們只想匯出資料庫中的資料(insert into語句格式的),但是在網上找到的資源很少(關於linux),因此特撰此文。 2. 環境 mys
Word2Vec原始碼詳細解析(下)
相關連結: 1、Word2Vec原始碼最詳細解析(上) 2、Word2Vec原始碼最詳細解析(下) Word2Vec原始碼最詳細解析(下) 在這一部分中,重點分析的是Word2Vec原始碼中演算法部分的實現,需要一定得演算法理論基礎,如果對CBOW和
kafka系列之broker重點配置解析(三)
kafka broker 配置 對應kafka安裝目錄config/server.properties檔案的配置 broker.id 每一個Kafka的broker都有一個整數的標識。我們設定broker.id來標識它。預設這個整數是0。這
CRC32為例詳細解析(菜鳥至老鳥進階)
CRC-知識解析 cyclic redundancy check 寫在前面的話: 之前在做學校專案的時候用到了CRC 原理,但在網上查詢的過程中,發現講解CRC知識的資源很多,但是對新手比較友好的、講的十分清楚的又很少,很多博主也不求甚解,弄得讀起來心中常常不由自主地奔騰過上千個“為什麼”“為什麼”, 本