什么是數(shù)據(jù)同步
我們可以通過服務器配置一個主庫和一個備庫(或多個備庫),主庫的數(shù)據(jù)可以同步到備庫上,備庫本身也可以是另外一臺服務器的主庫
同步的流程
mysql 10.52.02.png
- 主庫把數(shù)據(jù)更改記錄到二進制日志中
- 備庫將主庫的二進制日志寫入到自己的中繼日志中
- 備庫讀取中繼日志重放到備庫數(shù)據(jù)上
復制基于BinLog日志
MySQL復制是基于BinLog日志,BinLog日志有三種類型
- 基于語句 : binlog中存儲SQL語句坛缕,存儲日志量是最小的腺晾,但是使用函數(shù)的SQL語句無法正確同步到備庫
- 基于行 : 將變更的數(shù)據(jù)記錄到BinLog日志中,存儲量大子刮,而且無法看到執(zhí)行的SQL語句
- 混合:介于行和語句之間威酒,對于不確定的操作使用基于行的模式窑睁,如果每天數(shù)據(jù)量操作量大,產(chǎn)生的日志比較多葵孤,可以考慮選擇使用混合模式
控制復制內(nèi)容
Mysql復制可以對整個實例進行復制担钮,也可以對實例中的某個庫或是某個表進行復制
1.在主庫的配置
--binlog-do-db//需要同步的數(shù)據(jù)庫
--binlog-ignore-db//忽略同步的數(shù)據(jù)庫
2.在備庫的配置
--replicate-do-db//同步的數(shù)據(jù)庫
--replicate-igonre-db//不同步的數(shù)據(jù)庫
--replicate-do-table //同步的表
--replicate-igonre-table //不同步的表
--replicate-wild-do-table //同步的表(可使用匹配符)
--replicate-wild-ignore-table//不同步的表(可使用匹配符)
半同步復制
MySQL默認的復制即是異步的,主庫在執(zhí)行完客戶端提交的事務后會立即將結果返給給客戶端尤仍,并不關心從庫是否已經(jīng)接收并處理箫津,此時主上已經(jīng)提交的事務可能并沒有傳到從上,導致新主上的數(shù)據(jù)不完整宰啦。半同步復制即苏遥,主庫在執(zhí)行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端绑莺。半同步復制提高了數(shù)據(jù)的安全性暖眼,同時它也造成了一定程度的延遲。