標籤:
mysql兩份日誌:binlog :serverinnodb 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
mysql 2PC二階段協義 與 日誌閃回