婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > MySQL DDL 引發(fā)的同步延遲該如何解決

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

熱門標(biāo)簽:大豐地圖標(biāo)注app 400電話辦理服務(wù)價(jià)格最實(shí)惠 北京金倫外呼系統(tǒng) 武漢電銷機(jī)器人電話 南太平洋地圖標(biāo)注 400電話變更申請(qǐng) 催天下外呼系統(tǒng) html地圖標(biāo)注并導(dǎo)航 呂梁外呼系統(tǒng)

前言

寫作案例分析,主要是工具介紹推薦。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)容如下:

使用限制

  • 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語(yǔ)句(方括號(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.sock
Copy: 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/A
Copy: 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/A
Copy: 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: 4m49s
Copy: 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: 3m39s
Copy: 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: 3s
Copy: 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: 2s
Copy: 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: 1s
Copy: 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: 0s
Copy: 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.sock
Copy: 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)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解MySQL的Seconds_Behind_Master
  • MySQL主從同步延遲的原因及解決辦法
  • MYSQL主從不同步延遲原理分析及解決方案
  • 減少mysql主從數(shù)據(jù)同步延遲問題的詳解
  • MySQL 發(fā)生同步延遲時(shí)Seconds_Behind_Master還為0的原因

標(biāo)簽:麗水 南充 無錫 自貢 迪慶 龍巖 徐州 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL DDL 引發(fā)的同步延遲該如何解決》,本文關(guān)鍵詞  MySQL,DDL,引發(fā),的,同步,延遲,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL DDL 引發(fā)的同步延遲該如何解決》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL DDL 引發(fā)的同步延遲該如何解決的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久超级碰视频| 欧美日韩综合在线| 在线看不卡av| 久久久亚洲综合| 日韩中文字幕91| 在线免费观看视频一区| 久久免费国产精品| 蜜臀av一区二区在线免费观看| 99国产精品久久| 国产精品私人影院| 国产剧情在线观看一区二区| 制服丝袜激情欧洲亚洲| 亚洲精品欧美在线| 成人深夜视频在线观看| 精品久久久久99| 日韩精品电影在线观看| 欧美日韩成人在线| 亚洲国产精品久久艾草纯爱| 99视频精品全部免费在线| 久久综合丝袜日本网| 美洲天堂一区二卡三卡四卡视频| 欧美日韩亚洲丝袜制服| 亚洲国产综合91精品麻豆| 色播五月激情综合网| 17c精品麻豆一区二区免费| 成人综合激情网| 国产女主播在线一区二区| 国产精品一二三四五| 国产婷婷色一区二区三区四区| 美女精品自拍一二三四| 亚洲成年人网站在线观看| 精品国免费一区二区三区| 亚洲国产日韩一级| 在线视频综合导航| 艳妇臀荡乳欲伦亚洲一区| 99re热视频精品| 亚洲美女视频在线观看| 91碰在线视频| 亚洲地区一二三色| 欧美日韩国产一级| 日韩激情中文字幕| 精品国产乱码久久| 成人av资源站| 亚洲免费在线播放| 欧美老女人第四色| 美国精品在线观看| 久久久久久9999| 成人综合婷婷国产精品久久免费| 专区另类欧美日韩| 欧美日韩国产美| 极品美女销魂一区二区三区| 国产精品美女视频| 欧美日韩在线综合| 国产一区91精品张津瑜| 中文字幕va一区二区三区| 色欧美日韩亚洲| 久久电影国产免费久久电影| 久久美女艺术照精彩视频福利播放| 从欧美一区二区三区| 一二三区精品福利视频| 日韩视频不卡中文| 成人免费视频一区| 性欧美疯狂xxxxbbbb| 久久嫩草精品久久久精品| 色综合久久综合网97色综合| 日本v片在线高清不卡在线观看| 久久色在线观看| 一本到高清视频免费精品| 麻豆成人在线观看| 亚洲日穴在线视频| 久久综合99re88久久爱| 欧美综合一区二区| 国产激情精品久久久第一区二区| 亚洲一二三四在线观看| 欧美国产丝袜视频| 日韩午夜电影av| 色婷婷综合激情| 国产一区二区三区蝌蚪| 亚洲高清中文字幕| 国产精品成人一区二区三区夜夜夜| 这里只有精品视频在线观看| 91网站在线播放| 成人妖精视频yjsp地址| 美国毛片一区二区| 亚洲v中文字幕| 亚洲人成人一区二区在线观看| 欧美xxxx在线观看| 欧美日本一区二区三区| 一本大道久久a久久精二百| 国产高清在线精品| 毛片不卡一区二区| 亚洲国产精品久久久久秋霞影院 | 99视频精品全部免费在线| 另类小说一区二区三区| 亚洲成人激情av| 亚洲精品久久久蜜桃| 中文字幕永久在线不卡| 国产清纯白嫩初高生在线观看91 | 欧美性色黄大片| eeuss鲁一区二区三区| 国产成人精品aa毛片| 久久精品噜噜噜成人88aⅴ| 日本亚洲天堂网| 日韩高清在线不卡| 日韩精品久久久久久| 亚洲国产wwwccc36天堂| 亚洲一卡二卡三卡四卡无卡久久| 亚洲青青青在线视频| 亚洲免费高清视频在线| 国产精品久久久久一区二区三区共 | 日韩电影一区二区三区四区| 亚洲福中文字幕伊人影院| 亚洲欧美一区二区三区极速播放 | 肉肉av福利一精品导航| 亚洲成人免费电影| 日本成人在线不卡视频| 免费在线视频一区| 久热成人在线视频| 国产成人自拍在线| jvid福利写真一区二区三区| 色婷婷精品大在线视频| 欧美亚洲丝袜传媒另类| 欧美日韩一区二区欧美激情| 欧美精品99久久久**| 精品日产卡一卡二卡麻豆| 久久久久久97三级| 亚洲欧美一区二区在线观看| 一区二区三区国产精品| 日韩不卡一区二区三区 | 免费日本视频一区| 麻豆成人在线观看| 成人免费视频caoporn| 99精品视频一区二区| 欧洲色大大久久| 日韩精品中文字幕在线一区| 久久精品在线观看| 亚洲免费观看高清完整版在线观看 | 久久久噜噜噜久噜久久综合| 专区另类欧美日韩| 日韩精品欧美精品| 国产不卡在线一区| 欧美丝袜第三区| 久久久国产精品不卡| 亚洲精品高清在线观看| 久久国产三级精品| 91色porny在线视频| 欧美老肥妇做.爰bbww视频| 久久久久亚洲综合| 一区二区日韩av| 国产成人精品亚洲777人妖| 欧美性猛交xxxx乱大交退制版| 欧美mv和日韩mv的网站| 亚洲精品少妇30p| 国产精品白丝jk黑袜喷水| 欧美亚日韩国产aⅴ精品中极品| 精品欧美一区二区久久| 一区二区三区日韩在线观看| 久久电影网站中文字幕| 欧美午夜不卡在线观看免费| 久久久精品免费网站| 日韩精品一区第一页| 91在线小视频| 欧美成人一区二区三区在线观看 | 日韩一区二区在线观看视频播放| 国产精品丝袜在线| 国产在线精品不卡| 欧美午夜电影网| 亚洲丝袜美腿综合| 国产精品 日产精品 欧美精品| 欧美伦理影视网| 一区二区三区91| av资源站一区| 中文一区在线播放| 狠狠狠色丁香婷婷综合激情| 91精品国产综合久久久久久| 一区二区三区在线观看国产| 大尺度一区二区| 久久久91精品国产一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美调教femdomvk| 亚洲国产成人精品视频| 在线精品视频一区二区三四 | 中文字幕中文字幕一区| 国产美女av一区二区三区| 日韩精品影音先锋| 蜜臀av国产精品久久久久| 欧美日本在线一区| 亚洲第一精品在线| 欧美老肥妇做.爰bbww视频| 图片区日韩欧美亚洲| 欧美剧情片在线观看| 午夜影视日本亚洲欧洲精品| 色爱区综合激月婷婷| 亚洲女与黑人做爰| 欧美在线免费播放| 日韩主播视频在线| 精品久久久久香蕉网| 国产精品亚洲一区二区三区在线| 国产亚洲精品bt天堂精选| 福利视频网站一区二区三区|