第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

MySQL 進(jìn)階教程

首頁(yè) 慕課教程 MySQL 進(jìn)階教程 MySQL 進(jìn)階教程 MySQL 復(fù)制方式對(duì)比、復(fù)制參數(shù)

MySQL 復(fù)制方式對(duì)比、復(fù)制參數(shù)

上兩小節(jié)從實(shí)戰(zhàn)的角度介紹了如何搭建異步復(fù)制和增強(qiáng)半同步復(fù)制,我想您肯定會(huì)有疑問(wèn),都是 MySQL的主從復(fù)制,它們之間究竟有啥不同呢。本小節(jié)我們一起來(lái)學(xué)習(xí) MySQL 復(fù)制方式的對(duì)比,以及相對(duì)比較重要的復(fù)制參數(shù)。

1. 復(fù)制方式對(duì)比

除了異步復(fù)制和增強(qiáng)半同步復(fù)制之外,介于它們之間其實(shí)還有一種復(fù)制方式,叫半同步復(fù)制,只是從MySQL 5.7開(kāi)始,逐漸被增強(qiáng)半同步所替代。那么這三種復(fù)制方式之間有什么異同呢?請(qǐng)參考如下表格

異步復(fù)制 半同步復(fù)制 增強(qiáng)半同步復(fù)制
部署難度
維護(hù)難度
數(shù)據(jù)丟失 中低 極低
性能影響

1.1 異步復(fù)制

在傳統(tǒng)的復(fù)制中,binlog 的復(fù)制是異步的,啥時(shí)候復(fù)制到從庫(kù),以及是否復(fù)制成功,MySQL 是不管的,存在丟失數(shù)據(jù)的風(fēng)險(xiǎn):

1.2 半同步復(fù)制

半同步復(fù)制的執(zhí)行步驟如下:

  1. SQL 解析,會(huì)話(huà)T1(insert into t1 values(1000););
  2. 存儲(chǔ)引擎處理;
  3. 寫(xiě) binlog;
  4. 提交至存儲(chǔ);
  5. 等待從庫(kù)成功接收 binlog 的返回信號(hào);
  6. 反饋至客戶(hù)端。

這種同步方式的最大缺點(diǎn)是會(huì)出現(xiàn)丟失數(shù)據(jù)的風(fēng)險(xiǎn),在步驟 4 之后,主庫(kù)出現(xiàn)會(huì)話(huà) T2(select * from t1;),可以讀取到 1000 這個(gè)值,但如果此時(shí)步驟 5 失敗,從庫(kù)是不能成功接收到 1000 這個(gè)值的,也就意味著表 t1 的 1000 在從庫(kù)是丟失的。

1.3 增強(qiáng)半同步復(fù)制

增強(qiáng)半同步復(fù)制的執(zhí)行步驟如下:

  1. SQL 解析,會(huì)話(huà) T1(insert into t1 values(1000););
  2. 存儲(chǔ)引擎處理;
  3. 寫(xiě) binlog;
  4. 等待從庫(kù)成功接收 binlog 的返回信號(hào);
  5. 提交至存儲(chǔ);
  6. 反饋至客戶(hù)端。

增強(qiáng)半同步復(fù)制,號(hào)稱(chēng)無(wú)損半同步復(fù)制。在步驟 3 之后,如果主庫(kù)出現(xiàn)會(huì)話(huà) T2(select * from t1;),是讀取不到 1000 這個(gè)值的。如果步驟 4 失敗,主從都一樣,不能成功提交 1000 這個(gè)值,確保數(shù)據(jù)的一致性。

2. 重要的復(fù)制參數(shù)

2.1 主庫(kù)

log-bin

binlog文件名前綴,可以是全路徑,不可以動(dòng)態(tài)修改

log-bin = /mysql/3306/log

server-id

唯一區(qū)別 ID,同一個(gè)集群內(nèi)不可重復(fù),從 5.6 開(kāi)始可以動(dòng)態(tài)修改

推薦使用ip+端口號(hào),1013306

server-uuid

唯一區(qū)別 ID,同一個(gè)集群內(nèi)不可重復(fù),從 5.6 開(kāi)始可以動(dòng)態(tài)修改:

32位的GUID,文件路徑/mysql/3306/auto.cn
  • log-bin-index

binlog索引文件前綴,也可以是全路徑,不可以動(dòng)態(tài)修改

  • binlog_format

binlog日志格式:statement、row、mixed三種,可以動(dòng)態(tài)修改

  • binlog_cache_size

binlog寫(xiě)入的buffer,推薦1M-4M就足夠,可以動(dòng)態(tài)修改

  • max_binlog_size

限制每個(gè)binlog的大小,默認(rèn)是1G,推薦128M或256M,可以動(dòng)態(tài)修改

  • expire_logs_days

表示多少天后自動(dòng)刪除binlog,可以動(dòng)態(tài)修改

2.2 從庫(kù)

  • server-id:唯一區(qū)別ID,同一個(gè)集群內(nèi)不可重復(fù),從5.6開(kāi)始可以動(dòng)態(tài)修改,推薦使用ip+端口號(hào),1013306;

  • server-uuid:唯一區(qū)別ID,同一個(gè)集群內(nèi)不可重復(fù),從5.6開(kāi)始可以動(dòng)態(tài)修改;32位的GUID,文件路徑/mysql/3306/auto.cn;

  • relay-log:relaylog文件名前綴,可以是全路徑,不可以動(dòng)態(tài)修改;復(fù)制進(jìn)程io_thread讀取過(guò)來(lái)存到本地的日志;

  • relay-log-index:relaylog 索引文件前綴,也可以是全路徑,不可以動(dòng)態(tài)修改;

  • read-only:設(shè)置從庫(kù)是否只讀,但對(duì)super權(quán)限的用戶(hù)不起作用,可以動(dòng)態(tài)修改;

  • log-slave-updates:將 master 傳輸過(guò)來(lái)的變更操作,再次記錄成本地 binlog,用于做二次復(fù)制,當(dāng)做中繼分發(fā)節(jié)點(diǎn),不可以動(dòng)態(tài)修改;

  • max_relay_log_size:限制每個(gè) relaylog 的大小,推薦 128M 或 256M,可以動(dòng)態(tài)修改。

3. 小結(jié)

本小節(jié)主要介紹了三種復(fù)制方式的異同點(diǎn),以及一些比較重要的復(fù)制參數(shù)。

在實(shí)際應(yīng)用場(chǎng)景中,MySQL 復(fù)制是使用最為廣泛的,用來(lái)提高系統(tǒng)可用性、擴(kuò)展性的設(shè)計(jì)手段,也是MySQL 迅速流行的關(guān)鍵原因。一般來(lái)說(shuō),從 MySQL 5.7 開(kāi)始,都推薦使用增強(qiáng)半同步的復(fù)制方式,基本可以實(shí)現(xiàn)數(shù)據(jù) 0 丟失。