国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

讀高性能MySQL(第4版)筆記17_復(fù)制(下)

這篇具有很好參考價值的文章主要介紹了讀高性能MySQL(第4版)筆記17_復(fù)制(下)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

讀高性能MySQL(第4版)筆記17_復(fù)制(下)文章來源地址http://www.zghlxwxcb.cn/news/detail-710236.html

1.?復(fù)制切換

1.1.?復(fù)制是高可用性的基礎(chǔ)

1.1.1.?總是保留一份持續(xù)更新的副本數(shù)據(jù),會讓災(zāi)難恢復(fù)更簡單

1.2.?“切換副本”(promoting a replica)和“故障切換”(failing over)是同義詞

1.2.1.?意味著源服務(wù)器不再接收寫入,并將副本提升為新的源服務(wù)器

1.3.?計劃內(nèi)切換

1.3.1.?常見原因

1.3.1.1.?安全補丁

1.3.1.2.?內(nèi)核更新

1.3.1.3.?一些配置選項更改后需要重新啟動才能生效

1.3.2.?步驟

1.3.2.1.?確定將哪個副本切換為新的源

1.3.2.1.1.?一個包含所有數(shù)據(jù)的副本

1.3.2.2.?檢查延時,確保延時在秒級別

1.3.2.3.?通過設(shè)置super_read_only停止數(shù)據(jù)寫入源服務(wù)器

1.3.2.4.?等待副本與目標(biāo)完全同步

1.3.2.4.1.?通過比較GTID來確定

1.3.2.5.?在目標(biāo)(需要切換為源的副本)上取消read_only設(shè)置

1.3.2.6.?將應(yīng)用流量切換到目標(biāo)上

1.3.2.7.?將所有副本重新指向新的源,包括剛剛被降級為副本的服務(wù)器

1.3.2.7.1.?配置了GTID和AUTO_POSITION=1

1.4.?計劃外切換

1.4.1.?只要時間夠長,每個系統(tǒng)都會因軟件或硬件而出現(xiàn)故障

1.4.2.?當(dāng)故障發(fā)生在承擔(dān)寫入的源服務(wù)器上時,會對用戶體驗產(chǎn)生重大影響

1.4.3.?這時候不再存在一個實時運行的源服務(wù)器了

1.4.4.?步驟

1.4.4.1.?確定需要切換的副本

1.4.4.1.1.?擇數(shù)據(jù)最完整的副本

1.4.4.2.?在目標(biāo)上關(guān)閉read_only設(shè)置

1.4.4.3.?將應(yīng)用流量切換到目標(biāo)上

1.4.4.4.?將所有副本重新指向新源(目標(biāo)服務(wù)器),包括恢復(fù)后的原來提供服務(wù)的源服務(wù)器

1.4.4.4.1.?切換前的源服務(wù)器再次啟動時,需要默認(rèn)啟用super_read_only
1.4.4.4.1.1.?防止任何意外的寫入

1.5.?切換時的權(quán)衡

1.5.1.?很難知道切換后的目標(biāo)(新的源服務(wù)器)可能丟失了多少數(shù)據(jù)

1.5.2.?有時不進行故障切換可能是更好的策略

1.5.3.?等待恢復(fù)的好處不會丟失任何數(shù)據(jù),并且所有副本將繼續(xù)從中斷的地方工作

2.?復(fù)制拓?fù)?/h2>

2.1.?幾乎任何一個源和副本都可以配置MySQL復(fù)制

2.2.?主動/被動模式

2.2.1.?應(yīng)用將所有讀取和寫入都指向單個源服務(wù)器

2.2.2.?不用擔(dān)心復(fù)制延遲的問題

2.2.3.?可以防止應(yīng)用程序不接受讀取延遲數(shù)據(jù)的問題

2.2.4.?配置

2.2.4.1.?應(yīng)該盡量讓源和副本在CPU、內(nèi)存等方面具有相同的配置

2.2.4.2.?副本上使用相同的硬件和軟件配置就可以確保能夠支持切換之前的應(yīng)用流量容量和吞吐量

2.2.5.?冗余

2.2.5.1.?在物理硬件環(huán)境中,推薦使用至少三臺服務(wù)器的n+2冗余

2.2.5.2.?如果數(shù)據(jù)足夠少,或者可以輕松復(fù)制數(shù)據(jù),也可以使用至少兩臺服務(wù)器的n+1冗余,否則還是建議n+2

2.2.5.3.?如果無法在源服務(wù)器上進行備份操作,可以使用其中一個副本作為備份服務(wù)器

2.2.6.?注意事項

2.2.6.1.?實際上是將讀擴展綁定到單臺服務(wù)器的容量上

2.2.6.2.?如果達到讀擴展上限

2.2.6.2.1.?則必須演進到更復(fù)雜的拓?fù)?/h5>
2.2.6.2.1.1.?主動/只讀池配置
2.2.6.2.2.?否則就不得不利用分片來減少源上的讀取壓力

2.3.?主動/只讀池配置

2.3.1.?將所有寫入指向源服務(wù)器

2.3.2.?根據(jù)應(yīng)用程序的需要,讀取則可以被發(fā)送到源服務(wù)器或只讀池

2.3.3.?只讀池可以實現(xiàn)讀取密集型應(yīng)用程序的讀水平擴展

2.3.4.?由于源上的復(fù)制請求,水平擴展能力會受到限制

2.3.5.?配置

2.3.5.1.?如果隨著時間的推移,只讀池在持續(xù)增長,則可以讓副本用不同的硬件配置來優(yōu)化成本

2.3.5.2.?將流量進行加權(quán),運行在更好的硬件配置的副本上可以承擔(dān)更多的流量

2.3.6.?冗余

2.3.6.1.?應(yīng)滿足先前提出的要求,還需要至少一臺服務(wù)器可以充當(dāng)故障切換的目標(biāo)

2.3.7.?注意事項

2.3.7.1.?只讀池的大小會決定管理的復(fù)雜度,以及何時應(yīng)該考慮自動化

2.4.?不推薦的拓?fù)浼軜?gòu)

2.4.1.?雙源主動-主動架構(gòu)

2.4.1.1.?雙向復(fù)制

2.4.1.2.?涉及兩臺服務(wù)器,每臺服務(wù)器都配置為源和另一臺的副本

2.4.1.3.?一對協(xié)同源

2.4.2.?雙源主動-被動模式

2.4.2.1.?主動-主動模式下的雙源服務(wù)器有一個變種

2.4.2.2.?其中一臺服務(wù)器是只讀的“被動”服務(wù)器

2.4.3.?帶有副本的雙源模式

2.4.3.1.?兩個可寫的源只會帶來麻煩

2.4.4.?環(huán)形復(fù)制

2.4.4.1.?具有三個或更多個源,其中每臺服務(wù)器都在環(huán)中,它之前的服務(wù)器是它的副本,它之后的服務(wù)器作為它的源

2.4.4.2.?循環(huán)復(fù)制

2.4.5.?多源復(fù)制

3.?復(fù)制管理和維護

3.1.?在數(shù)據(jù)量很小而且寫入負(fù)載一致的時候,通常不太需要經(jīng)常查看復(fù)制延遲或者復(fù)制中斷相關(guān)的問題

3.2.?復(fù)制監(jiān)控

3.2.1.?復(fù)制同時需要源和副本上的磁盤空間

3.2.2.?監(jiān)控復(fù)制的狀態(tài)和錯誤

3.2.2.1.?如果復(fù)制線程沒有正常運行,那么可以查看報錯信息,以確定下一步應(yīng)該做什么來修復(fù)錯誤

3.2.3.?延遲復(fù)制的實際延遲

3.2.3.1.?太長的延遲可能會使其使用起來更加耗時

3.3.?觀測復(fù)制延遲

3.3.1.?副本與源之間的復(fù)制延遲是多少

3.3.2.?最好的解決方案是心跳記錄,它需要在源上每秒更新一次時間戳

3.3.2.1.?創(chuàng)建了一個方便的時間戳,展示副本中的數(shù)據(jù)在什么時間點是最新的

3.3.2.2.?Percona Toolkit中包含的pt-heartbeat腳本是當(dāng)前最流行的復(fù)制心跳實現(xiàn)方案

3.3.2.3.?二進制日志中的復(fù)制心跳記錄可用于許多目的

3.4.?確定副本數(shù)據(jù)的一致性

3.4.1.?副本始終是其源的精確復(fù)制減去其復(fù)制延遲的部分

3.4.2.?副本與源不一致的原因

3.4.2.1.?意外寫入副本

3.4.2.2.?使用雙源復(fù)制,雙方都寫入了數(shù)據(jù)

3.4.2.3.?非確定性語句和基于語句的復(fù)制

3.4.2.4.?當(dāng)運行在弱持久化模式時MySQL崩潰

3.4.2.5.?MySQL中的Bug

3.4.3.?建議遵循的規(guī)則或配置

3.4.3.1.?在副本上,始終啟用super_read_only

3.4.3.1.1.?使用read_only可以防止沒有SUPER權(quán)限的用戶寫入,但這不會阻止DBA在沒有意識到他們在副本上的情況下運行DELETE或ALTER
3.4.3.1.2.?super_read_only設(shè)置只允許復(fù)制寫入,是運行副本的最安全方式

3.4.3.2.?使用基于行的復(fù)制或確定性語句

3.4.3.2.1.?基于行的復(fù)制是復(fù)制數(shù)據(jù)的最一致的方式
3.4.3.2.2.?使用ORDER BY,使行順序具有確定性

3.4.3.3.?不要嘗試同時寫入復(fù)制拓?fù)渲械亩嗯_服務(wù)器

3.4.3.3.1.?最實用的復(fù)制拓?fù)涫鞘褂靡粋€源,執(zhí)行所有寫入操作,以及一個或多個副本,可選擇地執(zhí)行讀取操作

4.?復(fù)制問題和解決方案

4.1.?使用副本擴展讀取操作,使用分片技術(shù)擴展寫入操作

4.2.?源端二進制日志損壞

4.2.1.?如果源上的二進制日志已被損壞,那么別無選擇,只能重建副本

4.3.?非唯一的服務(wù)器ID

4.3.1.?如果你不小心配置了具有相同服務(wù)器ID的兩個副本,不仔細(xì)觀察的話,它們似乎可以正常工作

4.3.2.?在源服務(wù)器上,任何時候都只能看到兩個副本中的一個

4.3.3.?解決此問題的唯一方法是在設(shè)置副本時要小心

4.3.3.1.?創(chuàng)建副本到服務(wù)器ID映射的規(guī)范列表很有幫助

4.3.3.2.?如果副本完全位于一個子網(wǎng)中,則可以使用每臺機器IP地址的最后一個八位字節(jié)來作為唯一ID

4.4.?未配置服務(wù)器ID

4.4.1.?MySQL將顯示為使用CHANGEREPLICATION SOURCE TO配置了復(fù)制,但不會允許啟動副本

4.4.2.?你可能會從SELECT@@server_id中獲得一個值,但這只是一個默認(rèn)值

4.4.2.1.?必須顯式設(shè)置該值

4.5.?臨時表丟失

4.5.1.?臨時表在某些場景中使用起來很方便,但不幸的是,它們與基于語句的復(fù)制不兼容

4.5.2.?如果副本崩潰或?qū)⑵潢P(guān)閉,則副本線程正在使用的任何臨時表都會消失

4.5.3.?當(dāng)重新啟動副本時,引用丟失的臨時表的任何相關(guān)語句都將失敗

4.5.4.?最好的方法是使用基于行的復(fù)制

4.5.4.1.?其次是統(tǒng)一命名臨時表(例如,以temporary_為前綴),然后使用復(fù)制規(guī)則完全跳過復(fù)制臨時表

4.6.?沒有復(fù)制所有變更

4.6.1.?如果誤用SET SQL_LOG_BIN=0或不了解復(fù)制過濾規(guī)則,可能會導(dǎo)致副本不會執(zhí)行源上發(fā)生的某些變更

4.7.?復(fù)制延遲過大

4.7.1.?多線程復(fù)制

4.7.2.?使用分片技術(shù)

4.7.2.1.?使用分片技術(shù)將寫入分散到多個源也是一種非常有效的策略

4.7.3.?臨時降低持久化要求

4.7.3.1.?如果復(fù)制延遲主要是由于寫入操作導(dǎo)致的,則可以臨時設(shè)置sync_binlog=0和innodb_flush_log_at_trx_commit=0以提高復(fù)制速度

4.7.3.2.?最好只在副本上執(zhí)行此操作,如果此副本也用于執(zhí)行備份操作,則更改這些設(shè)置可能會使你無法從備份中恢復(fù)完整的數(shù)據(jù)

4.7.3.3.?一種可能的策略是監(jiān)控SHOW REPLICA STATUS命令中的Seconds_behind_source值,當(dāng)它超過某個閾值時

4.7.3.3.1.?驗證是否啟用了super_read_only,以確保服務(wù)器是不可寫副本
4.7.3.3.2.?更改sync_binlog和innodb_flush_log_at_trx_commit的配置以減少寫操作
4.7.3.3.3.?定期檢查SHOW REPLICA STATUS以獲取Seconds_behind_source的值
4.7.3.3.4.?當(dāng)延遲低于可接受的閾值時,將持久性相關(guān)參數(shù)恢復(fù)到正常值

4.8.?來自源服務(wù)器的超大數(shù)據(jù)包

4.8.1.?當(dāng)源服務(wù)器的max_allowed_packet大小與副本不匹配時,可能會出現(xiàn)另一個難以跟蹤的復(fù)制問題

4.8.2.?源服務(wù)器可以記錄副本認(rèn)為過大的數(shù)據(jù)包,當(dāng)副本檢索該二進制日志事件時,它可能會遇到各種問題,其中包括無休止的錯誤循環(huán)、重試或中繼日志中的損壞

4.9.?磁盤空間耗盡

4.9.1.?當(dāng)源服務(wù)器執(zhí)行大量LOAD DATA INFILE語句并在副本上啟用log_replica_updates時

4.9.2.?復(fù)制延遲越大,用于已從源端獲取但尚未執(zhí)行的中繼日志占用的磁盤空間就越多

4.9.3.?可以通過監(jiān)控磁盤使用情況并設(shè)置relay_log_space參數(shù)來防止這些錯誤出現(xiàn)

4.10.?復(fù)制的限制

4.10.1.?因為MySQL自身固有的一些限制,無論有沒有出現(xiàn)明確的報錯,MySQL復(fù)制都可能失敗或不同步

4.10.2.?服務(wù)器中的bug

4.10.2.1.?MySQL服務(wù)器的許多大版本歷史上都有復(fù)制方面的bug

4.10.2.1.1.?尤其是在大版本的第一個版本中

到了這里,關(guān)于讀高性能MySQL(第4版)筆記17_復(fù)制(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    2.4.2.1.?按照索引列中的數(shù)據(jù)大小順序存儲的 2.4.3.1.?鍵前綴查找只適用于根據(jù)最左前綴的查找 2.4.4.1.?在查詢某些條件的數(shù)據(jù)時,存儲引擎不再需要進行全表掃描 2.4.4.2.?通過比較節(jié)點頁的值和要查找的值可以找到合適的指針進入下層子節(jié)點,這些指針實際上定義了子節(jié)點頁中

    2024年02月08日
    瀏覽(97)
  • 讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    1.4.4.1.?InnoDB的二級索引在葉子節(jié)點中保存了記錄的主鍵值,所以如果二級索引能夠覆蓋查詢,則可以避免對主鍵索引的二次查詢 7.1.5.1.?常見的類似錯誤通常是由于嘗試使用rsync備份InnoDB導(dǎo)致的 7.3.3.1.?否則,對于范圍查詢、索引覆蓋掃描等操作來說,速度可能會降低很多 7

    2024年02月08日
    瀏覽(101)
  • 讀高性能MySQL(第4版)筆記10_查詢性能優(yōu)化(上)

    讀高性能MySQL(第4版)筆記10_查詢性能優(yōu)化(上)

    4.11.1.1.?在存儲引擎層完成的 4.11.2.1.?直接從索引中過濾不需要的記錄并返回命中的結(jié) 4.11.2.2.?在MySQL服務(wù)器層完成的,但無須再回表查詢記錄 4.11.3.1.?在MySQL服務(wù)器層完成 4.11.3.2.?需要先從數(shù)據(jù)表中讀出記錄然后過濾 4.13.2.1.?使用單獨的匯總表 5.5.1.1.?定期清除大量數(shù)據(jù)時,

    2024年02月08日
    瀏覽(33)
  • 讀高性能MySQL(第4版)筆記11_查詢性能優(yōu)化(中)
  • 讀高性能MySQL(第4版)筆記12_查詢性能優(yōu)化(下)

    讀高性能MySQL(第4版)筆記12_查詢性能優(yōu)化(下)

    2.3.1.1.?讀取行指針和需要排序的字段,對其進行排序,然后再根據(jù)排序結(jié)果讀取所需要的數(shù)據(jù)行 2.3.1.2.?即需要從數(shù)據(jù)表中讀取兩次數(shù)據(jù),第二次讀取數(shù)據(jù)的時候,因為是讀取排序列進行排序后的所有記錄,這會產(chǎn)生大量的隨機I/O,所以兩次傳輸排序的成本非常高 2.3.2.1.?先

    2024年02月08日
    瀏覽(21)
  • 讀高性能MySQL(第4版)筆記18_擴展MySQL

    讀高性能MySQL(第4版)筆記18_擴展MySQL

    4.2.2.1.?增加更多應(yīng)用節(jié)點可以擴展服務(wù)用戶請求的客戶端數(shù) 4.2.2.2.?最終會被單源數(shù)據(jù)庫主機的能力所限制,該數(shù)據(jù)庫主機將要負(fù)責(zé)響應(yīng)所有的讀取請求 4.2.2.3.?高CPU使用率意味著服務(wù)器正花費所有的時間處理查詢 4.2.2.4.?CPU的使用率越高,查詢的延遲也會越長 6.9.1.1.?負(fù)載均

    2024年02月08日
    瀏覽(22)
  • 讀高性能MySQL(第4版)筆記03_監(jiān)控

    讀高性能MySQL(第4版)筆記03_監(jiān)控

    7.1.1.1.?200響應(yīng)代碼 7.1.2.1.?202已接受 10.3.2.1.?連接的線程數(shù)(threads_connected)很高,但運行的線程數(shù)(threads_running)仍然很低 10.3.3.1.?連接的線程數(shù)(threads_connected)和運行的線程數(shù)(threads_running)都處于高值并持續(xù)增加 10.5.1.1.?數(shù)據(jù)庫工程師不斷努力的目標(biāo)之一

    2024年02月12日
    瀏覽(29)
  • 讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)

    讀高性能MySQL(第4版)筆記02_MySQL架構(gòu)(下)

    2.6.4.1.?失敗的事務(wù)可能導(dǎo)致不一致的結(jié)果,因為某些部分可以回滾,而其他部分不能回滾 5.1.1.1.?在表的.ibd文件中 5.1.1.2.?減少了I/O,非常高效 5.2.1.1.?分區(qū)定義 5.2.1.2.?表定義 5.2.1.3.?存儲程序定義 5.2.1.4.?字符集 5.2.1.5.?排序信息 5.2.2.1.?每個表的.ibd和.frm文件被替換為已經(jīng)

    2024年02月12日
    瀏覽(19)
  • 讀高性能MySQL(第4版)筆記01_MySQL架構(gòu)(上)

    讀高性能MySQL(第4版)筆記01_MySQL架構(gòu)(上)

    1.2.2.1.?存儲過程 1.2.2.2.?觸發(fā)器 1.2.2.3.?視圖 3.3.2.1.?共享鎖(shared lock) 3.3.2.2.?資源上的讀鎖是共享的,或者說是相互不阻塞的 3.3.3.1.?排他鎖(exclusive lock) 3.3.3.2.?寫鎖則是排他的,也就是說,一個寫鎖既會阻塞讀鎖也會阻塞其他的寫鎖 3.3.3.3.?只有這樣才能確保在特定的

    2024年02月13日
    瀏覽(83)
  • 讀高性能MySQL(第4版)筆記14_備份與恢復(fù)(中)

    讀高性能MySQL(第4版)筆記14_備份與恢復(fù)(中)

    7.3.6.1.?消除了底層數(shù)據(jù)存儲引擎的差異 7.3.7.1.?如果MySQL在內(nèi)存中的數(shù)據(jù)還沒有損壞,當(dāng)不能得到一個正常的裸文件備份時,或許可以得到一個可以信賴的邏輯備份 7.4.1.1.?某些場景下比數(shù)據(jù)庫文件本身更大 7.4.2.1.?浮點表示的問題、軟件Bug等都會導(dǎo)致問題 7.4.3.1.?MySQL中導(dǎo)出數(shù)

    2024年02月08日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包