MYSQL學習筆記3--mysql 2PC二階段協義 與 日志閃回


mysql兩份日志:

binlog :server
innodb redo log:engine

兩份日志順序一致性:否則主備不一致
兩份日志:原子性,同時都有,同時都無

2PC二階段協義:
  第一階段:准備界段
  第二階段:提交階段
  
買房子示例
   准備界段: 
     房產局確認:
        買方:錢是否准備好
        賣方:房子是否可賣
   提交界段:
      政務中心:
         買方: 確認按手印
         賣方:確認按手印  
 ----------------------------------------------------------------
 mysql 日志兩階段提交: 刷日志
   准備階段:
        innodb_prepare
        binlog_prepare
       
        
   提交階段
        binlog_commit
        innodb_commit
        
優化后的狀態:
   准備階段:
        innodb_prepare
        binlog_prepare   //binlog commit合並到此操作     ???
   提交階段
        innodb_commit
  
------------------------------------------------------------------- 
兩種日志異常處理:
        binlog的commit log 與innodb的commit log同時存在:不操作
        binlog的prepare log與innodb的prepare log同時存在 :innodb commit
        
        binlog的prepare log存在,innodb的prepare log 不存在 :re-play innodb
        binlog的prepare log不存在,innodb的prepare log 存在 :rollback
        
       (以binlog 為准,主備一致原則)
   
mysql日志gpoup commit
     mysql數據庫innodb 存儲引警一直有一個bug,就是當開啟binlog時,無法進行group commit,
     究其原因,是為了保證innodb 存儲引警的事務日志與binlog日志的順序一致性
     
在prepare 前需要取得mutex,直到commit 完成之后釋放,這也禁用了group commit功能

mariadb 徹底解決了這個組提交的問題
     
 
 
 
 MYSQL數據同步
      1.全量dump某個時點之前的數據,並記當全量dump完成后數據庫日志的位置
      2.將全量的備份LOAD到mysql
      3.從剛才全量完成dump后的日志開始,通過解析日志為可執行的sql,遠程LOAD到MYSQL
      4.通過不斷的應用log,使MYSQL 慢慢追上主庫
      5.將用戶的數據庫設置為只讀,繼續應用日志到MYSQL,直到完全同步 
      
mysql閃回功能
   binlog_format 必須是 row 模式
   下載專門的mysqlbinlog工具
   暫支持insert update delete 做閃回
 
MYSQL 閃回功能操作步聚:
  1. 查看binlog中的position包括start position 和 stop position確認要閃回的位置點
     mysql>show binlog events in "xxxx.log";
  2.執行閃回命令
     mysqlbinlog -B -v --start-position=120 --stop -position=8836 /home/mysql/binlog.000002|mysql test
   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM