字段偏移值:
創新互聯是網站建設技術企業,為成都企業提供專業的網站建設、成都網站制作,網站設計,網站制作,網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制適合企業的網站。10年品質,值得信賴!
先試試把結果全部輸出,字段逐個數,從0開始
通過以下參數來進行時區設置:
1. an absolute offset--絕對偏移量 例: alter session set time_zone = '-05:00'
2. database time zone--數據庫時區 例:alter session set time_zone = dbtimezone 這是數據庫默認的時區
3. os local time zone--操作系統本地時區 例:alter session set time_zone = local 獲得系統本地時區
4. a named region--直接用名字指定時區 例:alter session set time_zone = 'america/new_york'
MySQL 主備的基本原理主備流程切換
在狀態 1 中,客戶端的讀寫都直接訪問節點 A,而節點 B 是 A 的備庫,只是將 A 的更新都同步過來,到本地執行。這樣可以保持節點 B 和 A 的數據是相同的
當需要切換的時候,就切成狀態 2。這時候客戶端讀寫訪問的都是節點 B,而節點 A 是 B 的備庫。
M-S模式中, 為什么建議把備庫設為readonly? 有時候一些運營類的查詢語句會被放到備庫上去查,設置為只讀可以防止誤操作; 防止切換邏輯有 bug,比如切換過程中出現雙寫,造成主備不一致 可以用 readonly 狀態,來判斷節點的角色。 把備庫設置成只讀了,還怎么跟主庫保持同步更新呢?
因為 readonly 設置對超級 (super) 權限用戶是無效的,而用于同步更新的線程,就擁有超級權限。
節點 A 到 B 這條線的內部流程是什么樣的
下圖畫出的就是一個 update 語句在節點 A 執行,然后同步到節點 B 的完整流程圖
備庫 B 跟主庫 A 之間維持了一個長連接。主庫 A 內部有一個線程,專門用于服務備庫 B 的這個長連接
一個事務日志同步的完整過程是這樣的: 在備庫 B 上通過 change master 命令,設置主庫 A 的 IP、端口、用戶名、密碼,以及要從哪個位置開始請求 binlog,這個位置包含文件名和日志偏移量。 在備庫 B 上執行 start slave 命令,這時候備庫會啟動兩個線程,就是圖中的 io_thread 和 sql_thread。其中 io_thread 負責與主庫建立連接。 主庫 A 校驗完用戶名、密碼后,開始按照備庫 B 傳過來的位置,從本地讀取 binlog,發給 B。 備庫 B 拿到 binlog 后,寫到本地文件,稱為中轉日志(relay log)。 sql_thread 讀取中轉日志,解析出日志里的命令,并執行。 binlog 的三種格式對比
三種格式分別是: statement row mixed
為了便于描述 binlog 的這三種格式間的區別, 創建并初始化一個表
mysql CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `a` (`a`), KEY `t_modified`(`t_modified`) ) ENGINE=InnoDB; insert into t values(1,1,'2018-11-13'); insert into t values(2,2,'2018-11-12'); insert into t values(3,3,'2018-11-11'); insert into t values(4,4,'2018-11-10'); insert into t values(5,5,'2018-11-09');
刪除一行, 分析binlog
mysql delete from t /*comment*/ where a=4 and t_modified='2018-11-10' limit 1; 查詢binlog命令: mysql show binlog events in 'master.000001'; 當 binlog_format=statement 時
binlog 里面記錄的就是 SQL 語句的原文:
分析一下上圖輸出的結果: 第一行可以先忽略. 第二行是一個 BEGIN,跟第四行的 commit 對應,表示中間是一個事務; 第三行是真實的執行語句, 在delete命令前,還有一個use test命令, 是mysql自動添加的. 最后一行是一個 COMMIT, 包含一個xid. 如果使用statement格式, 記錄到binlog 的是語句原文. 會有什么問題出現呢?
如果delete 帶有 limit, 很可能出出現住主備數據庫不一致的情況
在主庫執行這條 SQL 語句的時候,用的是索引 a;而在備庫執行這條 SQL 語句的時候,卻使用了索引 t_modified
當 binlog_format= row 時:
與statement相比, begin 與 commit 是一致的, 但是row格式沒有記錄原文, 而是替換成了兩個event, 粉筆是table_map 與 delete_rows
Table_map event,用于說明接下來要操作的表是 test 庫的表 t; Delete_rows event,用于定義刪除的行為。 使用mysqlbinlog工具分析解析binlog中內容 mysqlbinlog -vv data/master.000001 --start-position=8900;
解析結果:
server id 1,表示這個事務是在 server_id=1 的這個庫上執行的。 每個 event 都有 CRC32 的值,這是因為參數 binlog_checksum 設置成了 CRC32。 Table_map event 顯示了接下來要打開的表,map 到數字 226。現在我們這條 SQL 語句只操作了一張表,如果要操作多張表呢?每個表都有一個對應的 Table_map event、都會 map 到一個單獨的數字,用于區分對不同表的操作。 在 mysqlbinlog 的命令中,使用了 -vv 參數是為了把內容都解析出來,所以從結果里面可以看到各個字段的值(比如,@1=4、 @2=4 這些值)。 binlog_row_image 的默認配置是 FULL,因此 Delete_event 里面,包含了刪掉的行的所有字段的值。如果把 binlog_row_image 設置為 MINIMAL,則只會記錄必要的信息,在這個例子里,就是只會記錄 id=4 這個信息。 最后的 Xid event,用于表示事務被正確地提交了。 為什么會有 mixed 格式的 binlog?為什么會有 mixed 這種 binlog 格式的存在場景? 因為有些 statement 格式的 binlog 可能會導致主備不一致,所以要使用 row 格式。 但 row 格式的缺點是,很占空間。比如你用一個 delete 語句刪掉 10 萬行數據,用 statement 的話就是一個 SQL 語句被記錄到 binlog 中,占用幾十個字節的空間。但如果用 row 格式的 binlog,就要把這 10 萬條記錄都寫到 binlog 中。這樣做,不僅會占用更大的空間,同時寫 binlog 也要耗費 IO 資源,影響執行速度。 所以,MySQL 就取了個折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己會判斷這條 SQL 語句是否可能引起主備不一致,如果有可能,就用 row 格式,否則就用 statement 格式。 如何解決雙M結構的循環復制問題解決兩個節點間的循環復制的問題的邏輯 規定兩個庫的 server id 必須不同,如果相同,則它們之間不能設定為主備關系; 一個備庫接到 binlog 并在重放的過程中,生成與原 binlog 的 server id 相同的新的 binlog; 每個庫在收到從自己的主庫發過來的日志后,先判斷 server id,如果跟自己的相同,表示這個日志是自己生成的,就直接丟棄這個日志。 按照這個邏輯,如果我們設置了雙 M 結構,日志的執行流就會變成這樣: 從節點 A 更新的事務,binlog 里面記的都是 A 的 server id; 傳到節點 B 執行一次以后,節點 B 生成的 binlog 的 server id 也是 A 的 server id; 再傳回給節點 A,A 判斷到這個 server id 與自己的相同,就不會再處理這個日志。所以,死循環在這里就斷掉了。
LSN實際上對應日志文件的偏移量,新的LSN=舊的LSN + 寫入的日志大小。舉例如下:
LSN=1G,日志文件大小總共為600M,本次寫入512字節,則實際寫入操作為:
l 求出偏移量:由于LSN數值遠大于日志文件大小,因此通過取余方式,得到偏移量為400M;
l 寫入日志:找到偏移400M的位置,寫入512字節日志內容,下一個事務的LSN就是1000000512;
文章名稱:mysql偏移量怎么切換,mysql左移右移
URL網址:http://vcdvsql.cn/article24/hshjce.html
成都網站建設公司_創新互聯,為您提供微信小程序、企業建站、微信公眾號、App設計、自適應網站、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯