日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL DDL 引發(fā)的同步延遲該如何解決

瀏覽:203日期:2023-10-03 13:22:24
前言

寫作案例分析,主要是工具介紹&推薦。MySQL 的同步機(jī)制比較單純,主庫(kù)上執(zhí)行過的 DML 和 DDL 會(huì)在從庫(kù)上再執(zhí)行一次,那么主庫(kù)上需要 10min 才能執(zhí)行完的 DDL 理論上在從庫(kù)至少也要花費(fèi) 10min 才能執(zhí)行完,這意味著從庫(kù)的同步會(huì)延遲 10min 以上,等 DDL 執(zhí)行完之后才會(huì)繼續(xù)追同步。

解決方案

從 MySQL 的同步原理來看,主要是 DDL 這個(gè)單獨(dú)的操作會(huì)花費(fèi)太久的時(shí)間,導(dǎo)致從庫(kù)也會(huì)被卡主。那么解決這個(gè)問題的辦法就很容易想到:“拆解” DDL 的操作,把一個(gè)大操作(大事務(wù)同理)拆分成多個(gè)小操作,減少單次操作的時(shí)間。

“拆解” DDL 操作一般會(huì)用到 MySQL Online DDL 的工具,比如 pt-osc,facebook-osc,oak-online-alter-table,gh-ost 等。這些工具的思路都比較類似,創(chuàng)建一個(gè)源表的鏡像表,先執(zhí)行完表結(jié)構(gòu)變更,再把源表的全量數(shù)據(jù)和增量數(shù)據(jù)都同步過去,因此可以避免單個(gè) DDL 操作引發(fā)的同步延遲。

工具介紹

本文會(huì)介紹 gh-ost,由 Github 維護(hù)的 MySQL online DDL 工具,同樣使用了鏡像表的形式,但是放棄了使用低效的 trigger,而是從 binlog 中提取需要的增量數(shù)據(jù)來保持鏡像表與源表的數(shù)據(jù)一致性。整個(gè) Online DDL 操作僅在最終 rename 源表與鏡像表時(shí)會(huì)阻塞幾秒鐘的讀寫。

工作原理

go-ost 的操作流程大致如下:

在 Master 中創(chuàng)建鏡像表(_tablename_gho)和心跳表(_tablename_ghc)。 向心跳表中寫入 Online-DDL 的進(jìn)度以及時(shí)間。 在鏡像表上執(zhí)行 ALTER 操作。 偽裝成 slave 連接到 Master 的某個(gè) Slave 實(shí)例上獲取 binlog 的信息(默認(rèn)連接 Slave,也可以連 Master)。 在 Master 中完成鏡像表的數(shù)據(jù)同步: 從源表中拷貝數(shù)據(jù)到鏡像表;依據(jù) Binlog 信息完成增量數(shù)據(jù)的變更; 在源表上加鎖; 確認(rèn)心跳表中的時(shí)間,確保數(shù)據(jù)是完全同步的; 用鏡像表替換源表。 Online DDL 完成。 未來考慮會(huì)支持的功能或特性: 支持外鍵。gh-ost 進(jìn)程意外中斷以后,可以新啟動(dòng)一個(gè)進(jìn)程繼續(xù)進(jìn)行 Online DDL。

_tablename_ghc 內(nèi)容如下:

MySQL DDL 引發(fā)的同步延遲該如何解決

使用限制 binlog 格式必須使用 row,且binlog_row_image必須是 FULL。 需求的權(quán)限為SUPER, REPLICATION CLIENT, REPLICATION SLAVE on *.* and ALL on dbname.* 如果確認(rèn) binlog 的格式為 row,那么可以加上 -assume-rbr,則不再需要 super 權(quán)限。由于不支持 REPLICATION 相關(guān)的權(quán)限,TiDB 無法使用。 不支持外鍵。 不論源表是主表還是子表,都無法使用。 不支持觸發(fā)器。 不支持包含 JSON 列的主鍵。 遷移表需要有顯示定義的主鍵,或者有非空的唯一索引。 遷移工具不區(qū)分大小寫英文字母,如果存在同名,但是大小寫不同的表則無法遷移。 遷移表的主鍵或者非空唯一索引包含枚舉類型時(shí),遷移效率會(huì)大幅度降低。使用注意 如果源表有非常多的數(shù)據(jù),盡量分批次刪除。 delete from table tablename_old limit 5000;或者在業(yè)務(wù)空閑時(shí)段用truncate table tablename_old清空表數(shù)據(jù)之后再 drop 表。 單個(gè) MySQL 實(shí)例上啟動(dòng)多個(gè) gh-ost 來進(jìn)行多個(gè)表的 Online DDL 操作時(shí)要制定-replica-server-id參數(shù) 務(wù)必注意可用的磁盤空間,尤其是操作大表的時(shí)候。 gh-ost 的鏡像表包含源表的所有數(shù)據(jù),會(huì)額外占用一倍的磁盤。gh-ost 在操作的過程中會(huì)產(chǎn)生大量的 binlog,且binlog_row_image必須為 FULL,會(huì)占用比較多的磁盤空間。 rename 列的操作可能會(huì)有問題,考慮 drop 和 add 的操作結(jié)合起來。使用示例

github 官網(wǎng)有安裝包可以下載,參考 release note。

實(shí)際命令可以參考下面這個(gè)(已開啟了 row 模式):

gh-ost --max-load=Threads_running=50 --critical-load=Threads_running=100 --chunk-size=3000 --user='temp' --password='test' --host=10.10.1.10 --allow-on-master --database='sbtest' --table='sbtest1' --alter='engine=innodb' --cut-over=default --exact-rowcount --concurrent-rowcount --default-retries=120 --timestamp-old-table -assume-rbr --panic-flag-file=/tmp/ghost.panic.flag --execute部分參數(shù)說明

以上文的命令內(nèi)容為準(zhǔn):

max-load=Threads_running=50 超過50個(gè)client在執(zhí)行SQL查詢時(shí),暫停Online DDL操作critical-load=Threads_running=100 超過100個(gè)client在執(zhí)行SQL查詢時(shí),中斷Online DDL操作chunk-size=3000 每一次同步操作處理3000行數(shù)據(jù)allow-on-master 允許在主庫(kù)執(zhí)行Online DDL相關(guān)的所有操作alter Online DDL的操作,僅需要部分alter語句(方括號(hào)部分) 例:alter table sbtest.sbtest1 [add column t int not NULL]cut-over=default 數(shù)據(jù)同步完成后自動(dòng)進(jìn)行鏡像表與源表的切換exact-rowcount 精確計(jì)算行數(shù),提供更準(zhǔn)確的進(jìn)度timestamp-old-table 使用時(shí)間戳來命名舊表assume-rbr 跳過重啟slave線程與row format檢查,設(shè)置后無需super權(quán)限panic-flag-file 創(chuàng)建該文件后,會(huì)強(qiáng)制中斷Online DDL操作

除了這些參數(shù)以外,gh-ost 還提供了非常多的方式來從外部暫停或者強(qiáng)制中止 Online DDL 的操作,詳細(xì)的信息可以使用gh-ost --help命令進(jìn)行查看。

輸出結(jié)果示例

# Migrating `sbtest`.`sbtest1`; Ghost table is `sbtest`.`_sbtest1_gho`# Migrating 10.10.1.10:3306; inspecting10.10.1.10:3306; executing on localhost-debian# Migration started at Thu Jul 30 11:30:17 +0800 2020# chunk-size: 3000; max-lag-millis: 1500ms; dml-batch-size: 10; max-load: Threads_running=50; critical-load: Threads_running=100; nice-ratio: 0.000000# throttle-additional-flag-file: /tmp/gh-ost.throttle# panic-flag-file: /tmp/ghost.panic.flag# Serving on unix socket: /tmp/gh-ost.sbtest.sbtest1.sockCopy: 0/9863066 0.0%; Applied: 0; Backlog: 0/1000; Time: 0s(total), 0s(copy); streamer: mysql-bin.000050:31635038; Lag: 0.03s, State: migrating; ETA: N/ACopy: 0/9863066 0.0%; Applied: 0; Backlog: 0/1000; Time: 1s(total), 1s(copy); streamer: mysql-bin.000050:31639503; Lag: 0.03s, State: migrating; ETA: N/ACopy: 69000/9999998 0.7%; Applied: 0; Backlog: 0/1000; Time: 2s(total), 2s(copy); streamer: mysql-bin.000050:44815698; Lag: 0.03s, State: migrating; ETA: 4m49sCopy: 135000/9999998 1.4%; Applied: 0; Backlog: 0/1000; Time: 3s(total), 3s(copy); streamer: mysql-bin.000050:57419220; Lag: 0.03s, State: migrating; ETA: 3m39sCopy: 195000/9999998 2.0%; Applied: 0; Backlog: 0/1000; Time: 4s(total), 4s(copy); streamer: mysql-bin.000050:68877374; Lag: 0.03s, State: migrating; ETA: 3m21s......(省略)Copy: 9729000/9999998 97.3%; Applied: 0; Backlog: 0/1000; Time: 3m16s(total), 3m16s(copy); streamer: mysql-bin.000057:8595335; Lag: 0.04s, State: migrating; ETA: 5s[2020/07/30 11:33:32] [info] binlogsyncer.go:723 rotate to (mysql-bin.000057, 4)Copy: 9774000/9999998 97.7%; Applied: 0; Backlog: 0/1000; Time: 3m17s(total), 3m17s(copy); streamer: mysql-bin.000057:17190073; Lag: 0.03s, State: migrating; ETA: 4s[2020/07/30 11:33:32] [info] binlogsyncer.go:723 rotate to (mysql-bin.000057, 4)Copy: 9822000/9999998 98.2%; Applied: 0; Backlog: 0/1000; Time: 3m18s(total), 3m18s(copy); streamer: mysql-bin.000057:26357495; Lag: 0.04s, State: migrating; ETA: 3sCopy: 9861000/9999998 98.6%; Applied: 0; Backlog: 0/1000; Time: 3m19s(total), 3m19s(copy); streamer: mysql-bin.000057:33806865; Lag: 0.03s, State: migrating; ETA: 2sCopy: 9903000/9999998 99.0%; Applied: 0; Backlog: 0/1000; Time: 3m20s(total), 3m20s(copy); streamer: mysql-bin.000057:41828922; Lag: 0.03s, State: migrating; ETA: 1sCopy: 9951000/9999998 99.5%; Applied: 0; Backlog: 0/1000; Time: 3m21s(total), 3m21s(copy); streamer: mysql-bin.000057:50996347; Lag: 0.03s, State: migrating; ETA: 0sCopy: 9999998/9999998 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m22s(total), 3m21s(copy); streamer: mysql-bin.000057:60354465; Lag: 0.03s, State: migrating; ETA: due# Migrating `sbtest`.`sbtest1`; Ghost table is `sbtest`.`_sbtest1_gho`# Migrating 10.10.1.10:3306; inspecting 10.10.1.10:3306; executing onlocalhost-debian# Migration started at Thu Jul 30 11:30:17 +0800 2020# chunk-size: 3000; max-lag-millis: 1500ms; dml-batch-size: 10; max-load: Threads_running=50; critical-load: Threads_running=100; nice-ratio: 0.000000# throttle-additional-flag-file: /tmp/gh-ost.throttle# panic-flag-file: /tmp/ghost.panic.flag# Serving on unix socket: /tmp/gh-ost.sbtest.sbtest1.sockCopy: 9999998/9999998 100.0%; Applied: 0; Backlog: 0/1000; Time: 3m23s(total), 3m21s(copy); streamer: mysql-bin.000057:60359997; Lag: 0.03s, State: migrating; ETA: due[2020/07/30 11:33:41] [info] binlogsyncer.go:164 syncer is closing...[2020/07/30 11:33:41] [error] binlogstreamer.go:77 close sync with err: sync is been closing...[2020/07/30 11:33:41] [info] binlogsyncer.go:179 syncer is closed

可以看到日志內(nèi)容中輸出了詳細(xì)的進(jìn)度百分比和遷移的剩余時(shí)間,在預(yù)估維護(hù)結(jié)束的時(shí)間,查看 DDL 執(zhí)行進(jìn)度的時(shí)候會(huì)非常方便。

騰訊云數(shù)據(jù)庫(kù) MySQL 使用注意 騰訊云數(shù)據(jù)庫(kù) MySQL 默認(rèn)的binlog_row_image為 MINIMAL,使用前需要在控制主動(dòng)調(diào)整為 FULL(在線變更,即時(shí)生效)。 包括騰訊云數(shù)據(jù)庫(kù),阿里云數(shù)據(jù)庫(kù),容器中的 MySQL 等都可能會(huì)遇到端口的問題,加上--aliyun-rds參數(shù)即可。 報(bào)錯(cuò)信息類似于FATAL Unexpected database port reported。相關(guān)討論參考 issues。總結(jié)一下

gh-ost 輸出的信息,遷移數(shù)據(jù)的效率,以及支持的功能都比 pt-osc 等工具要優(yōu)秀,而 gh-ost 工具的問題(例如磁盤空間)在其他工具也會(huì)遇到,因此在 DDL 操作又想避免延遲等問題時(shí),推薦優(yōu)先考慮 gh-ost。

以上就是MySQL DDL 引發(fā)的同步延遲該如何解決的詳細(xì)內(nèi)容,更多關(guān)于MySQL DDL 引發(fā)的同步延遲的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品一二| 久久中文在线| 99久久久久久中文字幕一区| 麻豆精品一区二区综合av| 国产精品99久久免费| 国产欧美日本| 国产激情一区| 精品国产一区二区三区2021| 电影91久久久| 波多野结衣久久精品| 日韩欧美看国产| 日韩在线综合| 精品一区欧美| 老鸭窝亚洲一区二区三区| 免费在线观看一区二区三区| 首页亚洲欧美制服丝腿| 日韩中出av| 麻豆精品一区二区综合av| 日韩在线第七页| 在线一区欧美| 日韩高清不卡在线| 国产精品久久久网站| 国产一区二区久久久久| 日韩成人亚洲| 模特精品在线| 欧美日韩一区二区国产| 麻豆成人在线观看| 亚洲精品一级二级| 欧美综合国产| 国产精品成人一区二区网站软件| 粉嫩av一区二区三区四区五区 | 高清一区二区三区| 麻豆视频久久| 99精品美女| 亚洲精品观看| 麻豆免费精品视频| 欧美日韩激情在线一区二区三区| 亚洲影视一区二区三区| 欧美啪啪一区| 国产aa精品| 欧美成人综合| 日韩不卡手机在线v区| 国产aⅴ精品一区二区三区久久| 激情综合网站| 国产日韩欧美高清免费| 国产va在线视频| 男女性色大片免费观看一区二区| 国产精品视频一区二区三区 | 日欧美一区二区| 色爱综合网欧美| 六月丁香综合| 精品视频国内| 爽好久久久欧美精品| 国产精品99精品一区二区三区∴| 国产精品av久久久久久麻豆网| 中文字幕日韩亚洲| 成人在线黄色| 午夜电影一区| 91tv亚洲精品香蕉国产一区| 日韩欧乱色一区二区三区在线| 午夜久久中文| 日韩和欧美的一区| 久久精品国产www456c0m| 日韩三级精品| 日韩精品首页| 国产视频一区二区在线播放| 国产韩日影视精品| 久久久久伊人| 视频一区中文字幕精品| 久久激情一区| 麻豆一区二区三| 亚洲日产国产精品| 亚洲精品成人图区| 欧美亚洲色图校园春色| 亚洲电影在线一区二区三区| 欧美国产视频| 亚洲伊人精品酒店| 婷婷综合六月| 国产精品地址| 久久aⅴ国产紧身牛仔裤| 久久电影tv| 国产欧美日韩一级| 在线看片一区| 美女网站一区| 国产高潮在线| 国产精品一国产精品k频道56| 先锋亚洲精品| 亚洲第一区色| 在线中文字幕播放| 欧美久久香蕉| 四虎在线精品| 老司机久久99久久精品播放免费| 婷婷综合六月| 精品国产一区二区三区2021| 日本在线不卡视频一二三区| 国产一区二区精品| 91精品一区二区三区综合在线爱| 欧美国产精品| 欧美一级二区| 少妇精品久久久一区二区| 国产一区二区高清| 久久久夜精品| 午夜久久中文| 91亚洲人成网污www| 国产精品久久777777毛茸茸| 婷婷久久免费视频| 亚洲一区二区小说| 亚洲欧美激情诱惑| 欧美精品一卡| 色吊丝一区二区| 国产资源在线观看入口av| 久久久精品国产**网站| 欧美视频精品全部免费观看| 日本亚州欧洲精品不卡| 亚洲三级视频| 亚洲区第一页| 日本欧美韩国一区三区| 日韩精品欧美大片| 亚洲人成高清| 日本免费一区二区视频| 中文视频一区| 亚洲精品国产精品粉嫩| 亚洲一区有码| 深夜福利亚洲| 在线精品亚洲| 日韩精选在线| 国产亚洲高清在线观看| 国产三级一区| 国产精品xvideos88| 欧美1区二区| 久久精品亚洲| 91亚洲国产| 91精品国产乱码久久久久久久| 91精品一区国产高清在线gif| 亚洲天堂久久| 国产精品毛片| 午夜精品影视国产一区在线麻豆| 日韩欧美精品一区二区综合视频| 日韩精品一区二区三区中文在线 | 国产日韩中文在线中文字幕| 国产日产高清欧美一区二区三区| 欧美亚洲免费| 久久97久久97精品免视看秋霞| 国产 日韩 欧美 综合 一区| 偷拍精品精品一区二区三区| 国产字幕视频一区二区| 日韩专区欧美专区| 国产欧美日韩一级| 国产传媒在线| 国产综合视频| 亚洲精品日韩久久| 欧美激情一区| 深夜福利视频一区二区| 美女网站一区| 日本在线视频一区二区| 精品视频黄色| 亚洲香蕉网站| 日韩在线网址| 成人国产精品久久| 国产色综合网| 国产精品2区| 99久精品视频在线观看视频| 国产精品美女| 国产精品久久久久77777丨| www.九色在线| aa亚洲婷婷| 国产精品密蕾丝视频下载| 久久精品1区| 日本不卡在线视频| 国产高潮在线| 免费黄网站欧美| 久久精品伊人| 在线亚洲自拍| 久久久国产精品网站| 蜜桃成人av| 欧美色综合网| 欧美 日韩 国产一区二区在线视频 | 日日夜夜免费精品视频| 精品美女久久| 999在线观看精品免费不卡网站| 国产毛片精品久久| 亚洲成人二区| 欧美欧美黄在线二区| 成人在线网站| 日韩高清成人在线| 成人羞羞在线观看网站| 亚洲欧美网站在线观看| 日本黄色精品| 一区二区高清| 深夜视频一区二区| 91成人在线网站| 一区二区小说| 美女久久精品| 亚洲精品自拍| 久久裸体视频| 欧美日韩中文| 91精品99| 国产成人在线中文字幕| 免费在线观看一区二区三区| 91亚洲人成网污www|