色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個操作把MySQL主從復制整崩了

jf_78858299 ? 來源:小牛呼嚕嚕 ? 作者:小牛呼嚕嚕 ? 2023-05-11 11:14 ? 次閱讀

前言

最近公司某項目上反饋mysql主從復制失敗,被運維部門記了一次大過,影響到了項目的驗收推進,那么究竟是什么原因導致的呢?而主從復制的原理又是什么呢?本文就對排查分析的過程做一個記錄。

主從復制原理

我們先來簡單了解下MySQL主從復制的原理。

圖片

  1. 主庫master 服務器會將 SQL 記錄通過 dump 線程寫入到 二進制日志binary log 中;
  2. 從庫slave 服務器開啟一個 io thread 線程向服務器發送請求,向 主庫master 請求 binary log。主庫master 服務器在接收到請求之后,根據偏移量將新的 binary log 發送給 slave 服務器。
  3. 從庫slave 服務器收到新的 binary log 之后,寫入到自身的 relay log 中,這就是所謂的中繼日志。
  4. 從庫slave 服務器,單獨開啟一個 sql thread 讀取 relay log 之后,寫入到自身數據中,從而保證主從的數據一致。

以上是MySQL主從復制的簡要原理,更多細節不展開討論了,根據運維反饋,主從復制失敗主要在IO線程獲取二進制日志bin log超時,一看主數據庫的binlog日志竟達到了4個G,正常情況下根據配置應該是不超過300M。

圖片

binlog寫入機制

想要了解binlog為什么達到4個G,我們來看下binlog的寫入機制。

binlog的寫入時機也非常簡單,事務執行過程中,先把日志寫到 binlog cache ,事務提交的時候,再把binlog cache寫到binlog文件中。因為一個事務的binlog不能被拆開,無論這個事務多大,也要確保一次性寫入,所以系統會給每個線程分配一個塊內存作為binlog cache

圖片

  1. 上圖的write,是指把日志寫入到文件系統的page cache,并沒有把數據持久化到磁盤,所以速度比較快
  2. 上圖的fsync,才是將數據持久化到磁盤的操作, 生成binlog日志中

生產上MySQL中binlog中的配置max_binlog_size為250M, 而max_binlog_size是用來控制單個二進制日志大小,當前日志文件大小超過此變量時,執行切換動作。,該設置并不能嚴格控制Binlog的大小,尤其是binlog比較靠近最大值而又遇到一個比較大事務時,為了保證事務的完整性,可能不做切換日志的動作,只能將該事務的所有$QL都記錄進當前日志,直到事務結束。一般情況下可采取默認值。

所以說懷疑是不是遇到了大事務,因而我們需要看看binlog中的內容具體是哪個事務導致的。

查看binlog日志

我們可以使用mysqlbinlog這個工具來查看下binlog中的內容,具體用法參考官網:https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html

  1. 查看binlog日志
./mysqlbinlog --no-defaults --base64-output=decode-rows -vv /mysqldata/mysql/binlog/mysql-bin.004816|more
  1. 以事務為單位統計binlog日志文件中占用的字節大小
./mysqlbinlog --no-defaults --base64-output=decode-rows -vv /mysqldata/mysql/binlog/mysql-bin.004816|grep GTID -B1|grep '^# at' | awk '{print $3}' | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp, tmp, $1); tmp=$1}'|sort -n -r|more

圖片

生產中某個事務竟然占用4個G。

  1. 通過start-positionstop-position統計這個事務各個SQL占用字節大小
./mysqlbinlog --no-defaults --base64-output=decode-rows --start-position='xxxx' --stop-position='xxxxx' -vv /mysqldata/mysql/binlog/mysql-bin.004816 |grep '^# at'| awk '{print $3}' | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp, tmp, $1); tmp=$1}'|sort -n -r|more

圖片

發現最大的一個SQL竟然占用了32M的大小,那超過10M的大概有多少個呢?

  1. 通過超過10M大小的數量
./mysqlbinlog --no-defaults --base64-output=decode-rows --start-position='xxxx' --stop-position='xxxxx' -vv /mysqldata/mysql/binlog/mysql-bin.004816|grep '^# at' | awk '{print $3}' | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp, tmp, $1); tmp=$1}'|awk '$1>10000000 {print $0}'|wc -l

圖片

統計結果顯示竟然有200多個,毛估一下,也有近4個G了

  1. 根據pos, 我們看下究竟是什么SQL導致的
./mysqlbinlog --no-defaults --base64-output=decode-rows --start-position='xxxx' --stop-position='xxxxx' -vv /mysqldata/mysql/binlog/mysql-bin.004816|grep '^# atxxxx' -C5| grep -v '###' | more

圖片

根據sql,分析了下,這個表正好有個blob字段,統計了下blob字段總合大概有3個G大小,然后我們業務上有個導入操作,這是一個非常 大的事務 ,會頻繁更新這表中記錄的更新時間,導致生成binlog非常大。

問題: 明明只是簡單的修改更新時間的語句,壓根沒有動blob字段,為什么生產的binlog這么大?因為生產的binlog采用的是row模式。

binlog的模式

binlog日志記錄存在3種模式,而生產使用的是row模式,它最大的特點,是很精確,你更新表中某行的任何一個字段,會記錄下整行的內容,這也就是為什么blob字段都被記錄到binlog中,導致binlog非常大。此外,binlog還有statementmixed兩種模式。

  1. STATEMENT模式 ,基于SQL語句的復制
  • 優點: 不需要記錄每一行數據的變化,減少binlog日志量,節約IO,提高性能。
  • 缺點: 由于只記錄語句,所以,在statement level下 已經發現了有不少情況會造成MySQL的復制出現問題,主要是修改數據的時候使用了某些定的函數或者功能的時候會出現。
  1. ROW模式,基于行的復制

5.1.5版本的MySQL才開始支持,不記錄每條sql語句的上下文信息,僅記錄哪條數據被修改了,修改成什么樣了。

  • 優點: binlog中可以不記錄執行的sql語句的上下文相關的信息,僅僅只需要記錄那一條被修改。所以rowlevel的日志內容會非常清楚的記錄下每一行數據修改的細節。不會出現某些特定的情況下的存儲過程或function,以及trigger的調用和觸發無法被正確復制的問題
  • 缺點: 所有的執行的語句當記錄到日志中的時候,都將以每行記錄的修改來記錄,會產生大量的日志內容。
  1. MIXED模式

從5.1.8版本開始,MySQL提供了Mixed格式,實際上就是StatementRow的結合。

Mixed模式下,一般的語句修改使用statment格式保存binlog。如一些函數,statement無法完成主從復制的操作,則采用row格式保存binlog

總結

最終分析下來,我們定位到原來是由于大事務+blob字段大致binlog非常大,最終我們采用了修改業務代碼,將blob字段單獨拆到一張表中解決。所以,在設計開發過程中,要盡量避免大事務,同時在數據庫建模的時候特別考慮將blob字段獨立成表。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IO
    IO
    +關注

    關注

    0

    文章

    448

    瀏覽量

    39132
  • 服務器
    +關注

    關注

    12

    文章

    9123

    瀏覽量

    85329
  • MySQL
    +關注

    關注

    1

    文章

    804

    瀏覽量

    26531
收藏 人收藏

    評論

    相關推薦

    Mysql如何實現雙向互為主從復制

    雙向互為主從步驟:1 兩臺機器添加叢機訪問的賬戶賦予 replication slave權限mysql>grant replication slave on *.* to 'rep
    發表于 06-22 17:48

    基于二進制安裝MySQL主從復制

    二進制安裝MySQL實現主從復制
    發表于 03-10 09:43

    mysql主從復制

    mysql 主從復制
    發表于 04-28 14:30

    基于mycat的Mysql主從復制讀寫分離全攻略

    基于mycat的Mysql主從復制讀寫分離全攻略
    發表于 09-08 10:10 ?4次下載
    基于mycat的<b class='flag-5'>Mysql</b><b class='flag-5'>主從復制</b>讀寫分離全攻略

    利用MySQL進行從的主從復制

    本文講述了如何使用MyBatisPlus+ShardingSphereJDBC進行讀寫分離,以及利用MySQL進行從的主從復制
    的頭像 發表于 07-28 09:47 ?1031次閱讀

    MySQL主從復制原理詳解

    簡單講,MySQL主從復制就是數據寫入臺服務器(主服務器)后,同時還會額外寫入另外的服務器(從服務器)。也就是說數據會寫多份,這樣做的目的主要有兩
    的頭像 發表于 02-06 10:27 ?1084次閱讀

    聊聊RocketMQ的主從復制

    RocketMQ 主從復制是 RocketMQ 高可用機制之,數據可以從主節點復制或多個從節點。
    的頭像 發表于 07-04 09:42 ?611次閱讀
    聊聊RocketMQ的<b class='flag-5'>主從復制</b>

    什么是Redis主從復制

    Redis主從復制 來自靈魂的拷問:什么是Redis主從復制? 簡言之就是: 主對外從對內,主可寫從不可寫 主掛了,從不可為主 看下面的圖加深下理解: 對,你沒看錯,Redis主從復制沒有動態選舉
    的頭像 發表于 10-09 15:09 ?415次閱讀
    什么是Redis<b class='flag-5'>主從復制</b>

    mysql主從復制三種模式

    MySQL主從復制種常見的數據同步方式,它可以實現將數據庫的更改同步到其他多個數據庫的功能。主從
    的頭像 發表于 11-16 14:04 ?1522次閱讀

    mysql如何實現主從復制的具體流程

    主從復制MySQL數據庫中常用的數據復制技術之,它的主要目的是將數據庫服務器上的數據
    的頭像 發表于 11-16 14:10 ?778次閱讀

    mysql主從復制主要有幾種模式

    MySQL主從復制MySQL數據庫中常用的種數據復制方式,用于實現數據的備份、負載均衡、故障恢復等目的。
    的頭像 發表于 11-16 14:15 ?1160次閱讀

    mysql主從復制的原理

    MySQL主從復制種數據庫復制技術,它允許將MySQ
    的頭像 發表于 11-16 14:18 ?483次閱讀

    mysql主從復制 混合類型的復制

    MySQL主從復制種常用的數據復制技術,可以實現數據從
    的頭像 發表于 11-16 14:20 ?550次閱讀

    mysql主從復制數據不致怎么辦

    致的原因和解決方法。 MySQL主從復制數據不致的原因 網絡延遲:主從之間的網絡延遲導
    的頭像 發表于 11-16 14:35 ?2376次閱讀

    配置MySQL主從復制和讀寫分離

    配置MySQL主從復制和讀寫分離
    的頭像 發表于 10-23 11:44 ?410次閱讀
    配置<b class='flag-5'>MySQL</b><b class='flag-5'>主從復制</b>和讀寫分離
    主站蜘蛛池模板: 国产曰韩无码亚洲视频| 一个人看www| 百度影音第四色| 美女也烦恼主题曲| 97se se| 翘臀少妇被扒开屁股日出水爆乳| 浴室里强摁做开腿呻吟的漫画| 久久精品亚洲精品国产欧美| 一本道高清码| 欧美多人群p刺激交换电影| xiao776唯美清纯| 消息称老熟妇乱视频一区二区| 国产又黄又硬又粗| 最新国产三级在线不卡视频| 男同志china免费视频| 古代荡乳尤物H妓女调教| 息与子在线交尾中文字幕| 九九99热久久精品在线6| 76人遣返航班上71人呈阳性| 全黄h全肉细节文在线观看| 国产婷婷午夜无码A片| 最新2017年韩国伦理片在线| 上原结衣快播| 老熟女重囗味GRANNYBBW| 出轨的妻子在线观看| 亚洲色图p| 十八禁久久成人一区二区| 国产午夜视频在永久在线观看| 天美传媒在线观看免费完整版| 久久这里只有精品视频e| www.久久久| 男男h开荤粗肉h文1v1| 国产精品99re6热在线播放| 在线亚洲色拍偷拍在线视频| 神马电影我不卡国语版| 久久免费精品国产72精品剧情| 国产3级在线观看| 99久久做夜夜爱天天做精品| 一级毛片免费播放| 亚洲精品AV无码喷奶水糖心| 日韩在线视频www色|