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

主頁 > 知識庫 > MySQL DDL 引發的同步延遲該如何解決

MySQL DDL 引發的同步延遲該如何解決

熱門標簽:大豐地圖標注app 400電話辦理服務價格最實惠 北京金倫外呼系統 武漢電銷機器人電話 南太平洋地圖標注 400電話變更申請 催天下外呼系統 html地圖標注并導航 呂梁外呼系統

前言

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

解決方案

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

“拆解” DDL 操作一般會用到 MySQL Online DDL 的工具,比如 pt-osc,facebook-osc,oak-online-alter-table,gh-ost 等。這些工具的思路都比較類似,創建一個源表的鏡像表,先執行完表結構變更,再把源表的全量數據和增量數據都同步過去,因此可以避免單個 DDL 操作引發的同步延遲。

工具介紹

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

工作原理

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

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

_tablename_ghc 內容如下:

使用限制

  • binlog 格式必須使用 row,且binlog_row_image必須是 FULL。
  • 需求的權限為SUPER, REPLICATION CLIENT, REPLICATION SLAVE on *.* and ALL on dbname.*
    • 如果確認 binlog 的格式為 row,那么可以加上 -assume-rbr,則不再需要 super 權限。
    • 由于不支持 REPLICATION 相關的權限,TiDB 無法使用。
  • 不支持外鍵。
    • 不論源表是主表還是子表,都無法使用。
  • 不支持觸發器。
  • 不支持包含 JSON 列的主鍵。
  • 遷移表需要有顯示定義的主鍵,或者有非空的唯一索引。
  • 遷移工具不區分大小寫英文字母,如果存在同名,但是大小寫不同的表則無法遷移。
  • 遷移表的主鍵或者非空唯一索引包含枚舉類型時,遷移效率會大幅度降低。

使用注意

  • 如果源表有非常多的數據,盡量分批次刪除。
    • delete from table tablename_old limit 5000;
    • 或者在業務空閑時段用truncate table tablename_old清空表數據之后再 drop 表。
  • 單個 MySQL 實例上啟動多個 gh-ost 來進行多個表的 Online DDL 操作時要制定-replica-server-id參數
  • 務必注意可用的磁盤空間,尤其是操作大表的時候。
    • gh-ost 的鏡像表包含源表的所有數據,會額外占用一倍的磁盤。
    • gh-ost 在操作的過程中會產生大量的 binlog,且binlog_row_image必須為 FULL,會占用比較多的磁盤空間。
  • rename 列的操作可能會有問題,考慮 drop 和 add 的操作結合起來。

使用示例

github 官網有安裝包可以下載,參考 release note。

實際命令可以參考下面這個(已開啟了 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

部分參數說明

以上文的命令內容為準:

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

除了這些參數以外,gh-ost 還提供了非常多的方式來從外部暫?;蛘邚娭浦兄?Online DDL 的操作,詳細的信息可以使用gh-ost --help命令進行查看。

輸出結果示例

# 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

可以看到日志內容中輸出了詳細的進度百分比和遷移的剩余時間,在預估維護結束的時間,查看 DDL 執行進度的時候會非常方便。

騰訊云數據庫 MySQL 使用注意

  • 騰訊云數據庫 MySQL 默認的binlog_row_image為 MINIMAL,使用前需要在控制主動調整為 FULL(在線變更,即時生效)。
  • 包括騰訊云數據庫,阿里云數據庫,容器中的 MySQL 等都可能會遇到端口的問題,加上--aliyun-rds參數即可。
    • 報錯信息類似于FATAL Unexpected database port reported。
    • 相關討論參考 issues。

總結一下

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

以上就是MySQL DDL 引發的同步延遲該如何解決的詳細內容,更多關于MySQL DDL 引發的同步延遲的資料請關注腳本之家其它相關文章!

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

標簽:麗水 南充 無錫 自貢 迪慶 龍巖 徐州 西寧

巨人網絡通訊聲明:本文標題《MySQL DDL 引發的同步延遲該如何解決》,本文關鍵詞  MySQL,DDL,引發,的,同步,延遲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL DDL 引發的同步延遲該如何解決》相關的同類信息!
  • 本頁收集關于MySQL DDL 引發的同步延遲該如何解決的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品乱码一区二区三区软件| 免费高清不卡av| 国产福利不卡视频| 夜夜操天天操亚洲| 日本一区二区三区电影| 日韩欧美国产综合在线一区二区三区| 丁香啪啪综合成人亚洲小说| 日本不卡123| 亚洲一区二区三区四区五区黄| 国产亚洲精品超碰| 91精品国产综合久久精品图片 | 91麻豆视频网站| 国产在线视视频有精品| 蜜臀精品一区二区三区在线观看| 亚洲主播在线观看| 亚洲免费在线视频一区 二区| 欧美激情一区二区在线| 国产性天天综合网| 精品国产乱子伦一区| 91麻豆精品国产91久久久久久久久 | 日韩一区二区电影| 777亚洲妇女| 欧美另类久久久品| 欧美一级免费大片| 日韩久久精品一区| 久久这里都是精品| 国产人久久人人人人爽| 中日韩av电影| 亚洲美女免费在线| 丝袜美腿亚洲综合| 国产美女精品在线| 成人性生交大合| www..com久久爱| 欧美性感一区二区三区| 日韩一区二区三区高清免费看看| 精品国产伦理网| 国产精品人妖ts系列视频| 亚洲色图制服丝袜| 午夜久久福利影院| 国产一区啦啦啦在线观看| 福利一区二区在线| 色婷婷综合中文久久一本| 欧美日韩一本到| 日韩精品中文字幕一区二区三区| 久久精品一区二区三区不卡牛牛| 中文字幕在线不卡国产视频| 亚洲成人黄色影院| 国产在线精品一区二区三区不卡| 成人美女视频在线观看18| 欧美在线free| 久久久久久久精| 亚洲欧洲日韩综合一区二区| 丝袜美腿亚洲色图| 风间由美一区二区av101| 欧美性高清videossexo| 国产亚洲一区二区在线观看| 一区二区三区在线影院| 国产一区二区三区四| 欧日韩精品视频| 国产欧美一区二区精品婷婷| 一区二区三区电影在线播| 久久精品国产一区二区三| 成人综合婷婷国产精品久久蜜臀| 欧美性色aⅴ视频一区日韩精品| 精品日韩一区二区三区| 一区二区三区日韩欧美| 国产精品自拍一区| 欧美午夜精品久久久| 久久综合色8888| 午夜视频一区在线观看| 91香蕉视频黄| 欧美韩国日本不卡| 激情六月婷婷久久| 91麻豆精品国产自产在线| 亚洲免费观看高清| 成人精品视频一区二区三区| 日韩一区二区影院| 午夜欧美视频在线观看 | 国产精品婷婷午夜在线观看| 午夜精品123| 91天堂素人约啪| 国产拍揄自揄精品视频麻豆| 日本免费在线视频不卡一不卡二| 色综合天天做天天爱| 国产精品污www在线观看| 韩国成人福利片在线播放| 欧美在线free| 一级做a爱片久久| 97se亚洲国产综合自在线不卡| 国产午夜久久久久| 国产一区二区三区久久悠悠色av| 日韩免费视频一区| 美国毛片一区二区三区| 日韩亚洲欧美综合| 91视频www| 色素色在线综合| 欧美国产精品中文字幕| 精品一区二区三区在线播放| 欧美狂野另类xxxxoooo| 亚洲一区视频在线观看视频| 99久久99久久久精品齐齐| 国产欧美一区二区精品性色超碰 | 中文字幕第一区第二区| 久久66热re国产| 日韩亚洲欧美一区二区三区| 美女网站色91| 日韩三级电影网址| 免费在线观看一区| 欧美性大战久久久久久久| 午夜精品久久久| 欧美一区二区三区小说| 狠狠色狠狠色综合| 国产亚洲欧美一区在线观看| 7777精品伊人久久久大香线蕉 | 日韩理论在线观看| 色哟哟亚洲精品| 亚洲福利视频导航| 欧美一区二区三区四区在线观看 | 开心九九激情九九欧美日韩精美视频电影| 亚洲一区在线看| 91精品国产高清一区二区三区| 亚洲一卡二卡三卡四卡| 欧美日韩一区二区三区不卡| 日韩黄色在线观看| 久久亚洲综合色一区二区三区| 国产69精品久久99不卡| 最新成人av在线| 欧美精品高清视频| 精品亚洲aⅴ乱码一区二区三区| 国产精品婷婷午夜在线观看| 欧美日韩一区二区在线视频| 激情综合色播激情啊| 国产精品福利在线播放| 在线视频综合导航| 久久国产尿小便嘘嘘| 亚洲婷婷在线视频| 欧美电影免费观看高清完整版在 | 欧美性猛交xxxxxx富婆| 国产一区二区三区香蕉| 亚洲欧美日韩精品久久久久| 日韩欧美国产午夜精品| 99久久精品国产精品久久| 日本一区中文字幕| 国产欧美视频一区二区| 欧美日韩高清一区二区三区| 国产酒店精品激情| 午夜天堂影视香蕉久久| 国产精品成人在线观看| 日韩欧美成人一区二区| 色欧美片视频在线观看| 国产999精品久久久久久| 日韩av一级片| 一区二区三区影院| 国产精品素人一区二区| 欧美大度的电影原声| 欧美做爰猛烈大尺度电影无法无天| 国产成人欧美日韩在线电影| 麻豆中文一区二区| 婷婷夜色潮精品综合在线| 亚洲视频在线观看一区| 欧美激情一区在线观看| 久久老女人爱爱| 日韩精品一区在线观看| 欧美精选一区二区| 欧美天堂一区二区三区| 成人福利电影精品一区二区在线观看 | 免费观看久久久4p| 亚洲国产aⅴ成人精品无吗| 国产精品黄色在线观看| 国产亚洲成av人在线观看导航 | 日韩一区二区三区四区| 欧美综合一区二区三区| 97aⅴ精品视频一二三区| 成人精品在线视频观看| 风间由美中文字幕在线看视频国产欧美| 麻豆精品国产传媒mv男同 | 精品国产乱码久久久久久1区2区| 欧美日韩一区三区四区| 欧美在线一区二区三区| 欧洲精品在线观看| 欧美精品欧美精品系列| 日韩午夜在线影院| 欧美www视频| 久久久亚洲高清| 中文字幕欧美区| 国产精品不卡一区二区三区| 国产精品国产自产拍在线| 亚洲美女区一区| 石原莉奈在线亚洲二区| 久热成人在线视频| 国产精品77777竹菊影视小说| 极品少妇xxxx偷拍精品少妇| 国产69精品久久久久777| av在线综合网| 在线看国产一区| 91.com在线观看| 久久亚洲精品小早川怜子| 国产精品午夜在线观看| 悠悠色在线精品| 久久国产精品区|