日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

(4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解...

發布時間:2024/9/5 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?關鍵詞:binlog模式,binlog,二進制日志,binlog日志

?

目錄概述

0、binlog概述

  查看binlog日志參數設置: show variables like '%log_bin%';

  查看binlog文件事件信息:show binlog events in 'binlog.000003';

  設計到3個參數:

  (1)binlog_format='row' -- (row,statement,mixed)

    日志記錄模式,行、語句、混合

  (2)binlog_row_image=full -- (full,minimal,noblob)

    如果是用行的話,記錄全部的記錄、最小的記錄、不記錄二進制

    (2.1)full:記錄所有的列字段新舊字段記錄(即使那一列沒有更新到) -- insert/update語句的set部分是全部的新記錄,delete/update的where部分是全部的舊記錄

?   ? (2.2)minimal:只記錄被更新到的新舊字段記錄  -- ?insert/update語句的set部分是全部的新記錄,update語句只有修改的列內容,update/delete的where部分沒有記錄(如果是主鍵或者唯一索引則會記錄)

    (2.3)noblob:二進制字段,不記錄,其余的與minimal相同

  (3)binlog_rows_query_log_events=on -- (on,off)

    為off時,binlog中的記錄,dml里面寫的是行記錄且加密,而不是SQL語句,DDL是明文。

    為on時,dml里面寫的是SQL語句+行記錄詳細信息,DDL是明文。

    

?

1、binlog_format='statement'

【1.3】總結(對主從的影響)
(1)這種方式下,使用RC、RUC隔離級別會報錯。
(2)DDL以及DML都是明文按SQL記錄存儲。
(3)對有些參數,在不同的服務器和不同的時間,執行的結果不一樣,會導致主從不一致。比如currment_date,timestamp。
  特別是一些函數:uuid(),user(),時間函數now()
(4)性能問題:比如主庫有一條慢SQL執行了,也會去從庫執行
(5)數據異常:主從數據不一致,執行也會有問題

2、binlog_format='row'

binlog_row_image=full;
binlog_rows_query_log_events=off;-- 顯示較為詳細的DML信息,明文DDL,加密DML 【2.3】總結
(1)ddl操作時明文,而dml操作時加密(dml里面寫的是行記錄,而不是SQL語句)
(2)針對加密的操作反解析加參數-v
mysqlbinlog --base64-output=decode-rows -v binlog.000004
(3)對復制的影響
  a.同步最安全
  b.不管是更新還是刪除,或者批量操作數據,都是按行記錄,依次處理所有行的記錄,而不是SQL。
(4)查看事件(ddl為sql明文,dml為加密記錄)
show binlog events in 'binlog.000004';

3、binlog_format='row'

binlog_row_image=full;
binlog_rows_query_log_events=on; --顯示SQL語句+更詳細(數據類型)的DML信息  【3.3】總結 (1)ddl操作時明文,而dml操作時加密(dml里面寫的是SQL語句+行記錄詳細信息) (2)針對加密的操作反解析加參數-v,加2個-v mysqlbinlog --base64-output=decode-rows -v -v binlog.000005 (3)對復制的影響a.同步最安全b.不管是更新還是刪除,或者批量操作數據,都是按行記錄,依次處理所有行的記錄,而不是SQL。 (4)查看事件(ddl為sql明文,dml為加密記錄) show binlog events in 'binlog.000005';

?

?4、binlog_format='mixed'

  理解了row與statement模式以后,mixed=statement和row

  大多數情況下是以statement模式記錄,如果隔離級別為RC,那么會以row模式記錄

?

?

?

0、概述

查看binlog日志參數設置: show variables like '%log_bin%';

查看binlog文件事件信息:show binlog events in 'binlog.000003';

  

?

涉及到3個參數

  (1)binlog_format='row' -- (row,statement,mixed)

    日志記錄模式,行、語句、混合

  (2)binlog_row_image=full -- (full,minimal,noblob)

    如果是用行的話,記錄全部的記錄、最小的記錄、不記錄二進制

    (2.1)full:記錄所有的列字段新舊字段記錄(即使那一列沒有更新到) -- insert/update語句的set部分是全部的新記錄,delete/update的where部分是全部的舊記錄

?   ? (2.2)minimal:只記錄被更新到的新舊字段記錄  -- ?insert/update語句的set部分是全部的新記錄,update語句只有修改的列內容,update/delete的where部分沒有記錄(如果是主鍵或者唯一索引則會記錄)

    (2.3)noblob:二進制字段,不記錄,其余的與minimal相同

  (3)binlog_rows_query_log_events=on -- (on,off)  

   ? ? 為off時,binlog中的記錄,dml里面寫的是行記錄且加密,而不是SQL語句,DDL是明文。

    為on時,dml里面寫的是SQL語句+行記錄詳細信息,DDL是明文。

?

1、binlog_format='statement'

【1.3】總結(對主從的影響)
(1)這種方式下,使用RC、RUC隔離級別會報錯。
(2)DDL以及DML都是明文按SQL記錄存儲。
(3)對有些參數,在不同的服務器和不同的時間,執行的結果不一樣,會導致主從不一致。比如currment_date,timestamp。
  特別是一些函數:uuid(),user(),時間函數now()
(4)性能問題:比如主庫有一條慢SQL執行了,也會去從庫執行
(5)數據異常:主從數據不一致,執行也會有問題 【1.1】準備工作 -- 修改binlog記錄模式 set session binlog_format='statement'; set global binlog_format='statement'; select @@global.binlog_format,@@binlog_format;-- 修改隔離級別為重復度 set global tx_isolation='repeatable-read'; -- 舊的設置方法 set global transaction_isolation='repeatable-read'; -- 新的設置方法 set session transaction_isolation='repeatable-read'; select @@global.transaction_isolation,@@transaction_isolation;-- 刷新binlog日志 show master status; flush logs; show master status;【1.2】 測試 -- 建表 create table test2(id int primary key not null auto_increment,
tablename varchar(200),UUID varchar(50),
timepoint datetime not null default current_timestamp,
currentversion timestamp not null default current_timestamp on update current_timestamp
)engine=innodb ;-- 插入數據 insert into test2(tablename,UUID) select 'test2',uuid();
-- 更新數據
update test2 set tablename='test2_update' where id = 1;
-- 提交
commit;
-- 查看狀態
show master status; -- 會發現position有了變化,之前是154,現在是2125
-- 退出mysql,進入binlog目錄,使用mysqlbinlog 查看binlog信息
mysqlbinlog --start-position=154 --stop-position=2125 binlog.000002

【1.3】總結(對主從的影響)
(1)這種方式下,使用RC、RUC隔離級別會報錯。
(2)DDL以及DML都是明文按SQL記錄存儲。
(3)對有些參數,在不同的服務器和不同的時間,執行的結果不一樣,會導致主從不一致。比如currment_date,timestamp。
  特別是一些函數:uuid(),user(),時間函數now()
(4)性能問題:比如主庫有一條慢SQL執行了,也會去從庫執行
(5)數據異常:主從數據不一致,執行也會有問題
(6)查看Binlog事件
show binlog events in 'binlog.000003';
     

?  

?

2、binlog_format='row'

binlog_row_image=full;
binlog_rows_query_log_events=off;-- 顯示較為詳細的DML信息,明文DDL 【2.3】總結
(1)ddl操作時明文,而dml操作時加密(dml里面寫的是行記錄,而不是SQL語句)
(2)針對加密的操作反解析加參數-v
mysqlbinlog --base64-output=decode-rows -v binlog.000004
(3)對復制的影響
  a.同步最安全
  b.不管是更新還是刪除,或者批量操作數據,都是按行記錄,依次處理所有行的記錄,而不是SQL。
(4)查看事件(ddl為sql明文,dml為加密記錄)
show binlog events in 'binlog.000004'; 【2.1】全部記錄+操作事件 binlog_row_image=full;
binlog_rows_query_log_events=off;?

【2.2】測試
-- 設置模式
set session binlog_format='row'; set global binlog_format='row';
set session binlog_rows_query_log_events=off; -- 默認
set global binlog_rows_query_log_events=off; -- 默認
set global binlog_row_image=full; -- 默認
set session binlog_row_image=full; -- 默認 select @@global.binlog_format,@@binlog_format,
@@global.binlog_rows_query_log_events,@@binlog_rows_query_log_events,
@@global.binlog_row_image,@@binlog_row_image\G

--設置隔離級別為可重復讀 set global tx_isolation='repeatable-read'; -- 舊的設置方法 set global transaction_isolation='repeatable-read'; -- 新的設置方法 set session transaction_isolation='repeatable-read'; select @@global.transaction_isolation,@@transaction_isolation;

-- 刷新binlog日志 show master status; flush logs;
-- mysqladmin -uroot -p flush-logs; mysql -uroot -p -e 'flush logs'; show master status;
--建表 create table test3(id int primary key not null auto_increment,
tablename varchar(200),UUID varchar(50),
timepoint datetime not null default current_timestamp,
currentversion timestamp not null default current_timestamp on update current_timestamp
)engine=innodb ;-- 增刪改數據 insert into test3(tablename,UUID) select 'test3',uuid();
insert into test3(tablename,UUID) select 'test3',uuid(); update test3 set tablename='test3_update' where id = 1;
commit;

delete from test3 where id = 1;
commit;

drop table test3;

show master status; -- 會發現position有了變化,之前是154,現在是2125

-- 退出mysql,進入binlog目錄,使用mysqlbinlog 查看binlog信息
mysqlbinlog binlog.000004
-- mysqlbinlog --start-position=154 --stop-position=2125 binlog.000004

【2.3】總結
(1)ddl操作時明文,而dml操作時加密(dml里面寫的是行記錄,而不是SQL語句)
(2)針對加密的操作反解析加參數-v
mysqlbinlog --base64-output=decode-rows -v binlog.000004
(3)對復制的影響
  a.同步最安全
  b.不管是更新還是刪除,或者批量操作數據,都是按行記錄,依次處理所有行的記錄,而不是SQL。
(4)查看事件(ddl為sql明文,dml為加密記錄)
show binlog events in 'binlog.000004'; ?   

?

?

?

3、binlog_format='row'

binlog_row_image=full;
binlog_rows_query_log_events=on; --顯示SQL語句+更詳細(數據類型)的DML信息 【3.1】全部記錄+詳細事件 binlog_row_image=full; binlog_rows_query_log_events=on; 【3.2】測試 -- 設置模式 set session binlog_format='row'; set global binlog_format='row'; set session binlog_rows_query_log_events=on; -- 手動指定 set global binlog_rows_query_log_events=on; -- 手動指定 set global binlog_row_image=full; -- 默認 set session binlog_row_image=full; -- 默認 select @@global.binlog_format,@@binlog_format, @@global.binlog_rows_query_log_events,@@binlog_rows_query_log_events, @@global.binlog_row_image,@@binlog_row_image\G--設置隔離級別為可重復讀 set global tx_isolation='repeatable-read'; -- 舊的設置方法 set global transaction_isolation='repeatable-read'; -- 新的設置方法 set session transaction_isolation='repeatable-read'; select @@global.transaction_isolation,@@transaction_isolation;-- 刷新binlog日志 show master status; flush logs; -- mysqladmin -uroot -p flush-logs; mysql -uroot -p -e 'flush logs'; show master status;--建表 create table test4(id int primary key not null auto_increment, tablename varchar(200),UUID varchar(50), timepoint datetime not null default current_timestamp, currentversion timestamp not null default current_timestamp on update current_timestamp )engine=innodb ;-- 增刪改數據 insert into test4(tablename,UUID) select 'test4',uuid(); insert into test4(tablename,UUID) select 'test4',uuid(); update test4 set tablename='test4_update' where id = 1; commit;delete from test4 where id = 1; commit;drop table test4;show master status; -- 會發現position有了變化,之前是154,現在是2125-- 退出mysql,進入binlog目錄,使用mysqlbinlog 查看binlog信息 mysqlbinlog binlog.000005 -- mysqlbinlog --start-position=154 --stop-position=2125 binlog.000005 【3.3】總結 (1)ddl操作時明文,而dml操作時加密(dml里面寫的是SQL語句+行記錄詳細信息) (2)針對加密的操作反解析加參數-v,加2個-v mysqlbinlog --base64-output=decode-rows -v -v binlog.0000053)對復制的影響a.同步最安全b.不管是更新還是刪除,或者批量操作數據,都是按行記錄,依次處理所有行的記錄,而不是SQL。 (4)查看事件(ddl為sql明文,dml為加密記錄) show binlog events in 'binlog.000005';


  (2)中:mysqlbinlog --base64-output=decode-rows -v -v binlog.000005   

  (4)中:show binlog events in 'binlog.000005';? SQL語句與操作內容全部都有

    

?

?

?4、binlog_format='mixed'

  理解了row與statement模式以后,mixed=statement和row

  大多數情況下是以statement模式記錄,如果隔離級別為RC,那么會以row模式記錄

轉載于:https://www.cnblogs.com/gered/p/10720918.html

總結

以上是生活随笔為你收集整理的(4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。