mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
mysql日志的種類
二進制日志(binary log):記錄數據更新的操作,mysqlbinlog 可查看二進制日志文件
錯誤日志(error log):記錄mysql服務進程mysqld的啟動、關閉和運行時的錯誤信息
慢查詢日志(slow query log):記錄執行時間超過指定時間(long_query_time)的查詢操作
通用查詢日志(general query log):記錄客戶端連接和執行的sql查詢操作(一般不開啟)
日志一般存放在安裝目錄下的data目錄下
?
刷新binlog操作:[root@oldboy data]# mysqladmin -uroot -poldboy flush-logs
?
binlog日志的三種模式statement、row、mixed
mysql> show variables like '%binlog_for%'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+1.statement level模式
每一條修改數據的sql都會記錄到master的bin-log中,slave在復制的時候sql進程會解析成和原來master端執行過的相同的sql來再次執行
優點:解決了row level下的缺點,不需要記錄每一條數據的變化,減少bin-log的日志量,節約IO,提高性能
缺點:必須記錄每條語句在執行時的一些上下文信息,以保證所有語句在slave端執行時能得到和在master端執行時相同的結果;涉及到復雜內容的時候,可能會出現bug,造成復制出現問題,主要是修改數據的時候使用某些特定函數或者功能,例如sleep( )函數、last_insert_id( )函數
2.row level模式
日志記錄成每一行數據被修改的形式,然后在slave端在對相同的數據進行修改
優點:不需記錄執行sql語句的上下文信息,只需記錄哪一條數據被修改了;不會出現某些特定情況下的存儲過程、函數、觸發器的調用和觸發無法被正確復制的問題
缺點:binlog日志量很大(例如update test set name=‘Jane’,test表有幾行就會記錄幾行)
3.mixed模式
statement模式和row模式的混合,mysql會根據執行的每一條具體的sql語句來確定記錄的形式,即在statemente和row之間選擇一種。新版本對row level模式做了優化,不是所有的修改都以row level來記錄,如表結構的變更會以statement模式記錄,如果是update或者delete還是會記錄所有行的變更
mysql5.5默認的binlog是statement模式,臨時修改為行模式mysql>set global? binlog_format ='ROW';(永久生效需改配置文件)
執行update oldboy.test set name=’Jane’ where id>3
查看行模式下的binlog? [root@oldboy data]# mysqlbinlog --base64-output='decode-rows' -v mysql-bin.000053
BEGIN
/*!*/;
# at 725
# at 774
#180717 20:20:55 server id 1? end_log_pos 774?? Table_map: `oldboy`.`test2` mapped to number 38
#180717 20:20:55 server id 1? end_log_pos 884?? Update_rows: table id 38 flags: STMT_END_F
### UPDATE `oldboy`.`test2`
### WHERE
###?? @1=4
###?? @2='Jane'
### SET
###?? @1=4
###?? @2='Jack'
### UPDATE `oldboy`.`test2`
### WHERE
###?? @1=5
###?? @2='Jane'
### SET
###?? @1=5
###?? @2='Jack'
### UPDATE `oldboy`.`test2`
### WHERE
###?? @1=6
###?? @2='Jane'
### SET
###?? @1=6
###?? @2='Jack'
### UPDATE `oldboy`.`test2`
### WHERE
###?? @1=7
###?? @2='Jane'
### SET
###?? @1=7
###?? @2='Jack'
# at 884
?
?
mysqlbinlog用來解析mysql的binlog日志,在mysql/data目錄下,如mysql-bin.000006(6位)
binlog用來記錄mysql內部所有增、刪、改等對數據庫內容有更新的記錄,包含所有數據庫及所有表,無法分開記
1.指定庫導出,加-d 庫名,可將指定庫的更新語句截取出來
mysqlbinlog -d oldboy mysql-bin.000011? >? all.sql
日志內容部分如下
#181201 21:43:41 server id 1 end_log_pos 177 Query thread_id=26 exec_time=0 error_code=0 SET TIMESTAMP=1543671821/*!*/; SET @@session.pseudo_thread_id=26/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=0/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; # at 177 #181201 21:43:41 server id 1 end_log_pos 287 Query thread_id=26 exec_time=0 error_code=0 use `oldboy`/*!*/; SET TIMESTAMP=1543671821/*!*/; insert into test values(8,'Alice'),(9,'Alan') /*!*/; # at 287 #181201 21:43:41 server id 1 end_log_pos 314 Xid = 531 COMMIT/*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;2.指定位置恢復,--start-position和--stop-position
Insert into test values(4,’錢六’);查看前后兩個at的位置分別為570、670,指定更新語句所在的位置
mysqlbinlog mysql-bin.000011 --start-position=570 --stop-position=670 -r /opt/position.sql將結果重定向到/opt/ position.sql文件中(-r相當于重定向>)
3.指定時間恢復, --start-datetime和--stop-datetime(指定時間恢復可能不準確,mysql不會恢復截止時間恰好等于指定時間的sql語句,但是會恢復開始時間恰好等于指定時間的sql語句)
Insert into test values(4,’錢六’);前后時間都為22:41:20,指定時間時可稍微將時間向兩個邊界擴展一點
mysqlbinlog mysql-bin.000011 --start-datetime='2018-06-22 22:41:10' --stop-datetime='2018-06-22 22:41:21'? -r /opt/datetime.sql
以上指定位置和指定時間,如果不指定結束點,表示從指定點到文件結尾,如果不指定開始點,表示從文件開頭到指定點
?
轉載于:https://www.cnblogs.com/Forever77/p/10049948.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcMap 导入 wrl_飞时达总图软
- 下一篇: 速来围观:飞时达土石方计算软件FastT