網(wǎng)上有很多關(guān)于pos機(jī)文檔申請(qǐng),終于學(xué)完了阿里高級(jí)架構(gòu)師整理MySQL復(fù)制技術(shù)與生產(chǎn)實(shí)踐文檔的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)文檔申請(qǐng)的問題,今天pos機(jī)之家(www.dsth100338.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
pos機(jī)文檔申請(qǐng)
前言MySQL在其3.23版本時(shí)就頗具前瞻性地推出主從復(fù)制(replication)特性,距今約有20年了。正是這一舉措,使得MySQL趕上了互聯(lián)網(wǎng)1.0時(shí)代的發(fā)展大勢(shì)。利用復(fù)制特性可以很方便地實(shí)現(xiàn)數(shù)據(jù)庫(kù)架構(gòu)的擴(kuò)展及讀寫分離功能,以提升架構(gòu)承載的容量。
我想,從這個(gè)角度來說,復(fù)制是MySQL最主要的特性一點(diǎn)都不為過。
熟悉MySQL的人都知道,MySQL的復(fù)制技術(shù)是其核心技術(shù)之一,是靈活運(yùn)用MySQL的基礎(chǔ)。從3.23版本開始,MySQL推出了異步復(fù)制功能,之后不斷進(jìn)化,推出半同步復(fù)制、無(wú)損半同步復(fù)制,以及目前最新的組復(fù)制功能。其基本原理幾乎是一致的——利用二進(jìn)制日志文件在數(shù)據(jù)庫(kù)服務(wù)器之間的傳播和數(shù)據(jù)回放,實(shí)現(xiàn)多臺(tái)數(shù)據(jù)庫(kù)服務(wù)器之間的數(shù)據(jù)同步。一個(gè)合格的MySQL從業(yè)人員,必須掌握復(fù)制技術(shù)的基礎(chǔ)知識(shí),熟悉復(fù)制技術(shù)的各種解決方案,并靈活利用它們?nèi)M足生產(chǎn)系統(tǒng)中的各種需求。
MySQL能夠成為“最流行的開源數(shù)據(jù)庫(kù)”,其復(fù)制技術(shù)起了巨大的作用。Sharing Nothing架構(gòu)、橫向擴(kuò)展、高可用、容災(zāi)、數(shù)據(jù)集成與聚合,這一系列名詞所代表的架構(gòu)和應(yīng)用場(chǎng)景都與復(fù)制技術(shù)有關(guān)。多應(yīng)用場(chǎng)景意味著與復(fù)制相關(guān)的技術(shù)靈活而復(fù)雜:異步復(fù)制、增強(qiáng)半同步復(fù)制、語(yǔ)句級(jí)復(fù)制、行級(jí)復(fù)制、按位點(diǎn)復(fù)制、GTID復(fù)制、多源復(fù)制、級(jí)聯(lián)復(fù)制、多線程復(fù)制、雙主架構(gòu)、一主多從架構(gòu)、延遲復(fù)制、讀寫分離等。不同的業(yè)務(wù)場(chǎng)景,使用不同的復(fù)制架構(gòu),該如何正確地構(gòu)建MySQL復(fù)制拓?fù)洹⑷绾斡行У乇O(jiān)控和正確地維護(hù),這些都是架構(gòu)師和DBA要解決的問題。
隨著國(guó)家加強(qiáng)對(duì)數(shù)據(jù)庫(kù)技術(shù)安全可控的要求,使用開源的MySQL數(shù)據(jù)庫(kù)已經(jīng)成為一種趨勢(shì),開源代表著代碼安全、數(shù)據(jù)庫(kù)可控。各行各業(yè)不斷地推進(jìn)MySQL的部署,MySQL從業(yè)人員也由互聯(lián)網(wǎng)行業(yè)擴(kuò)散到傳統(tǒng)行業(yè)。利用復(fù)制技術(shù)可以實(shí)現(xiàn)MySQL的高可用性及高擴(kuò)展性,是保障MySQL數(shù)據(jù)安全和進(jìn)行數(shù)據(jù)庫(kù)擴(kuò)展的必要技術(shù)。安全可控對(duì)于傳統(tǒng)行業(yè)至關(guān)重要,因此極力推薦MySQL從業(yè)者,特別是傳統(tǒng)行業(yè)的DBA閱讀此文 。
目錄主要內(nèi)容全文共分為3篇:基礎(chǔ)篇、方案篇和參考篇,總共38章的內(nèi)容。
按照“基本原理”→“生產(chǎn)實(shí)踐”→“更多參考”的邏輯順序講述,文中配了大量的原理與方案示意圖,力求用通俗易懂的語(yǔ)言、直觀明了的示意圖、完整的知識(shí)涵蓋面將MySQL復(fù)制技術(shù)講透。
其中,基礎(chǔ)篇側(cè)重介紹主從復(fù)制的原理和復(fù)制技術(shù)的演進(jìn),方案篇側(cè)重介紹主從復(fù)制技術(shù)在生產(chǎn)環(huán)境中的應(yīng)用方案,參考篇側(cè)重介紹二進(jìn)制日志的基本組成及主從復(fù)制中常見對(duì)象復(fù)制的安全性等。
本文適用初、中、高級(jí)MySQL DBA、數(shù)據(jù)庫(kù)架構(gòu)師及相關(guān)開發(fā)人員閱讀。
基礎(chǔ)篇第1章復(fù)制的概述;簡(jiǎn)單來說,“復(fù)制”就是將來自一個(gè)MySQL Server(這里指master角色,即主庫(kù))的數(shù)據(jù)變更,通過其邏輯的二進(jìn)制日志(binlog)傳輸?shù)狡渌囊粋€(gè)或多個(gè)MySQL Server(這里指slave角色,即從庫(kù))中,其他MySQL Server通過應(yīng)用(回放)這些邏輯的二進(jìn)制日志來完成數(shù)據(jù)的同步。這些MySQL Server之間的邏輯關(guān)系,我們稱為“復(fù)制拓?fù)洹保ㄒ部梢苑Q為“復(fù)制架構(gòu)”)。
默認(rèn)情況下,復(fù)制是異步的,即主庫(kù)將二進(jìn)制日志傳輸?shù)綇膸?kù)之后,并不關(guān)心從庫(kù)是否成功收到。從庫(kù)是否收到這些二進(jìn)制日志,不影響主庫(kù)的任何讀/寫訪問;而從庫(kù)的復(fù)制線程也可以隨意暫?;蛲V?,并不影響主庫(kù)的讀/寫訪問。通常,異步模式能夠發(fā)揮數(shù)據(jù)庫(kù)的最高性能,但數(shù)據(jù)安全性卻得不到很好的保證,如果對(duì)數(shù)據(jù)安全性的要求較高,可以考慮使用半同步復(fù)制。
另外,默認(rèn)情況下,復(fù)制的數(shù)據(jù)是針對(duì)整個(gè)實(shí)例的(排除部分系統(tǒng)表),你可以根據(jù)自身需求選擇是否需要復(fù)制整個(gè)實(shí)例的數(shù)據(jù),是只復(fù)制某些庫(kù),還是只復(fù)制某些表的數(shù)據(jù)等。接下來將簡(jiǎn)要介紹MySQL中復(fù)制拓?fù)涞囊恍┻m用場(chǎng)景,以及與復(fù)制相關(guān)的概念。
第2章復(fù)制的基本原理;第1章簡(jiǎn)單介紹了MySQL復(fù)制(技術(shù))相關(guān)的基本概念,本章將詳細(xì)介紹其基本原理。MySQL的復(fù)制技術(shù)自誕生以來,隨著各種各樣的應(yīng)用場(chǎng)景對(duì)數(shù)據(jù)安全性及復(fù)制性能的要求不斷提高,也在不斷迭代與優(yōu)化。要深刻理解MySQL的復(fù)制技術(shù),就要從它的基本原理說起,下面將對(duì)此展開介紹。
第3章復(fù)制格式詳解;通過前面的兩章,我們了解了復(fù)制技術(shù)的使用場(chǎng)景及其基本原理與實(shí)現(xiàn),知道復(fù)制是通過二進(jìn)制日志記錄在主從庫(kù)之間的流轉(zhuǎn)來實(shí)現(xiàn)的。第1章對(duì)二進(jìn)制日志的記錄格式做了簡(jiǎn)要的介紹,本章將詳細(xì)闡述復(fù)制格式。
第4章傳統(tǒng)復(fù)制與GTID復(fù)制;MySQL 5.6之前的版本只支持傳統(tǒng)復(fù)制,即“基于二進(jìn)制日志文件(binlog file)和位置(binlog pos)的復(fù)制”。在該復(fù)制模式中,復(fù)制拓?fù)涞某跏蓟渲煤妥兏?、?fù)制的高可用切換等操作都需要找到正確的二進(jìn)制日志文件和位置,否則就無(wú)法正確復(fù)制。然而,尋找該位置信息的過程所涉及的操作步驟較為繁瑣,于是在MySQL 5.6及其之后的版本中,出現(xiàn)了基于GTID的復(fù)制(為了表述上的方便,文中也簡(jiǎn)稱為GTID復(fù)制)模式。它利用GTID自動(dòng)定位的特性,不再需要二進(jìn)制日志的位置信息,也就省去了尋找這些信息所需的繁瑣步驟,極大地簡(jiǎn)化了復(fù)制拓?fù)涞某跏蓟渲煤妥兏约皬?fù)制的高可用切換等操作。本章將對(duì)這兩種復(fù)制模式做基本的介紹。
第5章半同步復(fù)制;除了內(nèi)置的異步復(fù)制,MySQL 5.7還支持通過插件方式實(shí)現(xiàn)半同步復(fù)制接口。相對(duì)于MySQL 5.5和MySQL 5.6中的半同步復(fù)制,通常我們將MySQL 5.7中的半同步復(fù)制稱為“增強(qiáng)半同步復(fù)制”,也稱為“無(wú)損復(fù)制”(MySQL 5.5和MySQL 5.6雖然也支持半同步復(fù)制,但不能保證“無(wú)損復(fù)制”,詳見5.4節(jié)“半同步復(fù)制的注意要點(diǎn)”)。本章將詳細(xì)介紹MySQL 5.7中的半同步復(fù)制。
第6章多線程復(fù)制;MySQL 5.6之前的版本不支持從庫(kù)并行重放主庫(kù)的二進(jìn)制日志,所以一旦主庫(kù)的寫壓力稍微大一點(diǎn),從庫(kù)就容易出現(xiàn)延遲。當(dāng)然,目前最新的MySQL版本已經(jīng)能夠很好地支持多線程復(fù)制。為了便于理解復(fù)制是如何一步一步演進(jìn)為多線程復(fù)制的,本章將從單線程復(fù)制說起。在開始學(xué)習(xí)本章內(nèi)容之前,也許你需要回顧一下復(fù)制的基本原理,詳見第2章“復(fù)制的基本原理”。
第7章多源復(fù)制;一些業(yè)務(wù)數(shù)據(jù)被打散到多個(gè)數(shù)據(jù)庫(kù)實(shí)例上之后,數(shù)據(jù)庫(kù)的備份和恢復(fù)就比較煩瑣,有沒有什么簡(jiǎn)單的方案能夠解決這個(gè)問題呢?MySQL5.7.6引入了復(fù)制通道的概念,使得同一個(gè)從庫(kù)可以同時(shí)接收多個(gè)主庫(kù)的數(shù)據(jù),一個(gè)復(fù)制通道邏輯上就對(duì)應(yīng)一個(gè)主庫(kù)。本章將簡(jiǎn)要介紹如何在復(fù)制拓?fù)渲惺褂猛ǖ馈⑼ǖ老嚓P(guān)的概念,以及相關(guān)系統(tǒng)的設(shè)置對(duì)單源(單個(gè)復(fù)制通道)復(fù)制的影響。
第8章從庫(kù)中繼日志和狀態(tài)日志;從庫(kù)I/O線程從主庫(kù)讀取的二進(jìn)制日志需要暫時(shí)存放在從庫(kù)的磁盤文件中,這個(gè)磁盤文件就是中繼日志(relay log)。I/O線程并不負(fù)責(zé)解析與重放二進(jìn)制日志,而是由SQL線程負(fù)責(zé)。當(dāng)復(fù)制線程正常運(yùn)行時(shí),我們對(duì)復(fù)制線程的工作位置(這里指的是I/O線程讀取主庫(kù)二進(jìn)制日志的位置和SQL線程重放的位置)不是很敏感,但當(dāng)從庫(kù)的數(shù)據(jù)庫(kù)進(jìn)程或者主機(jī)發(fā)生崩潰(crash)時(shí),從庫(kù)重新啟動(dòng)之后,需要知道上一次復(fù)制線程進(jìn)行到的正確位置,也就是說對(duì)復(fù)制線程的工作位置需要持久化,否則一旦丟失將無(wú)法知道上一次復(fù)制進(jìn)行到哪里了。狀態(tài)日志被用來對(duì)復(fù)制線程的工作位置進(jìn)行持久化(狀態(tài)日志包括relay loginfo和master info兩種類型,具體用途詳見下文),本章將詳細(xì)介紹中繼日志和狀態(tài)日志。
第9章通過PERFORMANCE_SCHEMA庫(kù)檢查復(fù)制信息;通常,我們?cè)诓榭磁c復(fù)制相關(guān)的狀態(tài)信息時(shí),都習(xí)慣性地使用SHOW SLAVE STATUS語(yǔ)句。也許你會(huì)說,“我也會(huì)用PERFORMANCE_SCHEMA庫(kù)的表查看一些在復(fù)制時(shí)的報(bào)錯(cuò)信息”,但是,你知道SHOW SLAVE STATUS語(yǔ)句輸出的信息和PERFORMANCE_ SCHEMA庫(kù)中的復(fù)制信息記錄表之間有什么異同嗎?本章將詳細(xì)介紹二者的異同。
第10章通過其他方式檢查復(fù)制信息;第8章詳細(xì)介紹了如何通過mysql.slave_master_info和mysql.slave_relay_log_info表來檢查復(fù)制信息,第9章詳細(xì)介紹了如何通過PERFORMANCE_SCHEMA庫(kù)下的復(fù)制記錄表來檢查復(fù)制信息,本章將對(duì)前面章節(jié)中未提及的與復(fù)制相關(guān)的小細(xì)節(jié)進(jìn)行補(bǔ)充說明。例如,通過SHOW PROCESSLIST語(yǔ)句來查看I/O線程和SQL線程的狀態(tài)信息、通過PERFORMANCE_SCHEMA庫(kù)中的user_variables_by_thread表來查看I/O線程向主庫(kù)注冊(cè)的自定義變量信息等。
第11章MySQL復(fù)制延遲Seconds_Behind_Master究竟是如何計(jì)算的;在主從復(fù)制拓?fù)渲?,監(jiān)控復(fù)制延遲是必不可少的工作。如果應(yīng)用場(chǎng)景對(duì)復(fù)制延遲并不敏感,那么大多數(shù)時(shí)候通過采集SHOW SLAVESTATUS語(yǔ)句輸出信息中Seconds_Behind_Master字段的值監(jiān)控復(fù)制延遲就已經(jīng)足夠了。相信有MySQL使用經(jīng)驗(yàn)的人對(duì)這種方法并不陌生,我們都知道Seconds_Behind_Master的值在某些場(chǎng)景下并不是那么可靠,也或多或少都知道一些計(jì)算這個(gè)值的方法。但這些計(jì)算方法真的正確嗎?接下來,本章將對(duì)此進(jìn)行討論并確認(rèn)正確的計(jì)算方法。
第12章如何保證從庫(kù)在意外中止后安全恢復(fù);為了保證復(fù)制線程能夠在從庫(kù)意外中止之后正確恢復(fù)到中止之前的狀態(tài)(有時(shí)稱為crash-safe),需要對(duì)從庫(kù)中的某些系統(tǒng)變量與復(fù)制選項(xiàng)設(shè)置合適的值。本章將詳細(xì)介紹如何設(shè)置這些系統(tǒng)變量與復(fù)制選項(xiàng)及其對(duì)應(yīng)的不同影響。
第13章MySQL Server復(fù)制過濾;MySQL Server的復(fù)制過濾功能,雖然通常在標(biāo)準(zhǔn)的生產(chǎn)環(huán)境中不建議使用(因?yàn)槿绻褂貌划?dāng),可能導(dǎo)致各種各樣的主從庫(kù)數(shù)據(jù)不一致的問題),但在某些場(chǎng)合下,為了區(qū)分業(yè)務(wù)數(shù)據(jù)或保證數(shù)據(jù)安全性(例如,對(duì)業(yè)務(wù)數(shù)據(jù)所有的寫操作都統(tǒng)一寫入主庫(kù),但是對(duì)業(yè)務(wù)數(shù)據(jù)的讀取則需要按照業(yè)務(wù)模塊來劃分,因?yàn)椴煌瑯I(yè)務(wù)系統(tǒng)之間有數(shù)據(jù)安全隔離的需求),MySQL Server的復(fù)制過濾功能可能是一個(gè)簡(jiǎn)單、快捷的實(shí)現(xiàn)方案。在有足夠的了解,而且通過縝密的規(guī)劃來規(guī)避其缺點(diǎn)的前提下,也可以將其列為能解決此類需求的可選方案之一。本章將簡(jiǎn)單梳理一遍MySQL Server復(fù)制過濾功能的實(shí)現(xiàn)邏輯。
方案篇第14章搭建異步復(fù)制;異步復(fù)制是相對(duì)于同步復(fù)制和半同步復(fù)制而言的,這三者之間的區(qū)別,可參考第1章“復(fù)制的概述”和第5章“半同步復(fù)制”。相比于其他兩種復(fù)制,異步復(fù)制的速度最快,且主庫(kù)性能不受從庫(kù)復(fù)制性能的影響,它也是MySQL中最早出現(xiàn)的復(fù)制技術(shù)。在MySQL 5.6之前,無(wú)論是同步復(fù)制、半同步復(fù)制,還是異步復(fù)制,都是傳統(tǒng)復(fù)制(基于二進(jìn)制日志文件和位置),維護(hù)復(fù)制拓?fù)鋾r(shí)比較麻煩。MySQL 5.6及其之后的版本支持GTID復(fù)制模式,使得對(duì)復(fù)制拓?fù)涞木S護(hù)變得非常方便快捷。本章將詳細(xì)介紹在傳統(tǒng)復(fù)制和GTID復(fù)制的兩種復(fù)制模式下,搭建異步復(fù)制的過程,關(guān)于傳統(tǒng)復(fù)制和GTID復(fù)制的原理,可參考第4章。
第15章搭建半同步復(fù)制;本章將介紹性價(jià)比最高、實(shí)現(xiàn)方式最簡(jiǎn)單、最容易安裝及部署的半同步復(fù)制解決方案。
第16章通過擴(kuò)展從庫(kù)以提高復(fù)制性能;在大多數(shù)OLTP或OLAP業(yè)務(wù)系統(tǒng)中,對(duì)數(shù)據(jù)庫(kù)的操作通常讀多寫少(特殊場(chǎng)景除外。例如,數(shù)據(jù)采集、數(shù)據(jù)恢復(fù)等是寫多讀少的場(chǎng)景),所以,隨著業(yè)務(wù)的增長(zhǎng),原有復(fù)制拓?fù)渲械臄?shù)據(jù)庫(kù)實(shí)例漸漸難以支撐讀訪問流量(假定復(fù)制拓?fù)渲械闹鲙?kù)提供寫服務(wù),所有從庫(kù)提供讀服務(wù)),迫切需要提高數(shù)據(jù)庫(kù)的讀訪問能力。那么,我們就需要一個(gè)方便、快捷、輕量的讀訪問能力擴(kuò)展方案。本章以橫向擴(kuò)展為例,介紹整個(gè)方案的實(shí)施過程。
第17章復(fù)制模式的切換;MySQL 5.5及其之前的版本,由于不支持GTID機(jī)制,所以它們使用的都是傳統(tǒng)復(fù)制(即基于二進(jìn)制日志文件和位置的復(fù)制)。MySQL 5.6中引入了GTID機(jī)制,該機(jī)制有眾多優(yōu)點(diǎn)(詳情可參考第4章、第12章等章節(jié),以及下文中將要演示的復(fù)制模式切換過程,這里先不展開介紹),為MySQL管理者的維護(hù)工作帶來了極大便利,所以大多數(shù)用戶都會(huì)選擇切換到GTID復(fù)制模式(即基于GTID的復(fù)制,下文統(tǒng)一稱為“GTID復(fù)制”)。而除了一些特殊的應(yīng)用場(chǎng)景之外,通常很少需要從GTID復(fù)制切換到傳統(tǒng)復(fù)制。
在第1章中,我們將傳統(tǒng)復(fù)制和GTID復(fù)制稱為“數(shù)據(jù)同步方法”,但通常我們更喜歡將其稱為“復(fù)制模式”。本章將對(duì)這兩種復(fù)制模式中的一些概念以及它們的相互切換過程進(jìn)行詳細(xì)介紹。
第18章復(fù)制拓?fù)涞脑诰€調(diào)整;如果MySQL數(shù)據(jù)庫(kù)的訪問量并不大,那么可以使用一主一從的復(fù)制拓?fù)洌鲙?kù)提供寫服務(wù),從庫(kù)提供讀服務(wù),采用MySQL 5.7的半同步復(fù)制配合高可用軟件,即可實(shí)現(xiàn)數(shù)據(jù)的高可用、零丟失。在讀訪問量較大的場(chǎng)景中,可能需要將復(fù)制拓?fù)鋽U(kuò)展為一主多從,甚至雙主多從,緩解單個(gè)從庫(kù)的讀訪問壓力(關(guān)于從庫(kù)的擴(kuò)展,可參考第16章“通過擴(kuò)展從庫(kù)以提高復(fù)制性能”)。但擴(kuò)展復(fù)制拓?fù)湟簿鸵馕吨黾庸芾黼y度。例如,在主庫(kù)發(fā)生故障或者在線切換到新主庫(kù)之后,連接原主庫(kù)的從庫(kù)需要進(jìn)行調(diào)整以連接到新主庫(kù);或者為了提高復(fù)制性能,可能會(huì)增加一個(gè)中間庫(kù),并將復(fù)制拓?fù)湔{(diào)整為級(jí)聯(lián)復(fù)制,這時(shí)就涉及復(fù)制拓?fù)涞脑诰€調(diào)整。本章將詳細(xì)介紹復(fù)制拓?fù)涞脑诰€調(diào)整步驟。
第19章主從實(shí)例的例行切換;主從實(shí)例的例行切換,在這里指的是根據(jù)業(yè)務(wù)變更或者運(yùn)維管理的需要,主動(dòng)將主庫(kù)的寫訪問請(qǐng)求轉(zhuǎn)移到其他數(shù)據(jù)庫(kù)實(shí)例,這個(gè)切換不是由故障觸發(fā)的。那么,在什么場(chǎng)景下需要進(jìn)行例行切換呢?
第20章數(shù)據(jù)庫(kù)故障轉(zhuǎn)移;數(shù)據(jù)庫(kù)故障轉(zhuǎn)移,在這里指的是由于主庫(kù)故障而觸發(fā)的,將主庫(kù)讀/寫業(yè)務(wù)轉(zhuǎn)移到其他數(shù)據(jù)庫(kù)實(shí)例繼續(xù)對(duì)外提供讀/寫服務(wù)的過程。例如,當(dāng)探測(cè)到主庫(kù)主機(jī)宕機(jī)、主庫(kù)數(shù)據(jù)庫(kù)進(jìn)程不存在、主庫(kù)數(shù)據(jù)庫(kù)無(wú)法登錄、主庫(kù)數(shù)據(jù)庫(kù)無(wú)法執(zhí)行查詢或更新操作時(shí),為盡量減小主庫(kù)故障對(duì)業(yè)務(wù)造成的影響,需要盡快將讀/寫訪問入口轉(zhuǎn)移到處于正常狀態(tài)的數(shù)據(jù)庫(kù)實(shí)例上。
在實(shí)際場(chǎng)景中,造成主庫(kù)無(wú)法提供讀/寫服務(wù)的原因多種多樣。對(duì)于數(shù)據(jù)庫(kù)管理系統(tǒng)來說,考慮的因素越多,就會(huì)越復(fù)雜,可靠性就會(huì)越差。所以,通常建議將問題分為可確定故障原因和不可確定故障原因的場(chǎng)景,然后分別采用不同的方式解決。如果混為一談,可能經(jīng)常導(dǎo)致誤操作轉(zhuǎn)移。
對(duì)于可確定故障原因且通過自動(dòng)故障轉(zhuǎn)移能夠恢復(fù)業(yè)務(wù)訪問的場(chǎng)景,可以使用數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)進(jìn)行故障轉(zhuǎn)移。
第21章搭建多源復(fù)制;MySQL的多源復(fù)制(也可以稱為“多主復(fù)制”),指的是復(fù)制拓?fù)渲械膹膸?kù)同時(shí)從多個(gè)源Server(主庫(kù))接收二進(jìn)制日志進(jìn)行重放。多源復(fù)制可用于將多個(gè)Server的數(shù)據(jù)備份到單個(gè)Server中(從庫(kù)),以及在分庫(kù)分表場(chǎng)景中,將來自多個(gè)Server的分片表數(shù)據(jù)合并。從庫(kù)在應(yīng)用來自多個(gè)主庫(kù)的二進(jìn)制日志時(shí),不會(huì)執(zhí)行任何沖突檢測(cè)或解決沖突,如有需要,則靠應(yīng)用程序來解決這些問題。在多源復(fù)制拓?fù)渲?,從?kù)會(huì)為每個(gè)主庫(kù)建立一個(gè)單獨(dú)的復(fù)制通道(單獨(dú)的I/O線程、協(xié)調(diào)器線程、Worker線程),各自重放各自的二進(jìn)制日志,互不依賴。
關(guān)于多源復(fù)制的原理與使用場(chǎng)景,詳情可參考第7章“多源復(fù)制”。本章將詳細(xì)介紹多源復(fù)制的搭建步驟。
第22章MySQL版本升級(jí);MySQL的版本并不需要常升級(jí),但如果要使用新版本的某個(gè)新特性,或者為了修復(fù)舊版本的某個(gè)bug,就不得不進(jìn)行版本升級(jí)。在生產(chǎn)環(huán)境中,為避免單點(diǎn)故障,通常都會(huì)用多個(gè)MySQL實(shí)例構(gòu)建一個(gè)復(fù)制拓?fù)?。為了使升?jí)操作對(duì)業(yè)務(wù)的影響盡可能小,可以先升級(jí)復(fù)制拓?fù)渲械闹蛔x實(shí)例(從庫(kù)),然后再執(zhí)行一次主從角色切換(會(huì)造成應(yīng)用短暫中斷),最后將主庫(kù)當(dāng)作從庫(kù)再做一次升級(jí)即可。
本章只闡述在復(fù)制拓?fù)渲猩?jí)MySQL版本的一些注意事項(xiàng),關(guān)于復(fù)制拓?fù)渲械腗ySQL版本升級(jí)步驟,可參考19.2節(jié)“在線切換”。
第23章將不同數(shù)據(jù)庫(kù)的數(shù)據(jù)復(fù)制到不同實(shí)例;將不同數(shù)據(jù)庫(kù)中的數(shù)據(jù)復(fù)制到不同的實(shí)例(MySQL Server),在實(shí)現(xiàn)上具體指的就是從庫(kù)將主庫(kù)的全量二進(jìn)制日志拉取到本地的中繼日志之后,從庫(kù)SQL線程在重放這些二進(jìn)制日志時(shí),根據(jù)自身配置的復(fù)制過濾規(guī)則,選擇需要應(yīng)用哪些庫(kù)與表,以及需要忽略哪些庫(kù)與表。
當(dāng)然,在主庫(kù)端也支持復(fù)制過濾,雖然在主庫(kù)端配置復(fù)制過濾后能夠減少二進(jìn)制日志的傳輸量,但主庫(kù)端只支持庫(kù)級(jí)別的過濾規(guī)則,而且容易導(dǎo)致主從庫(kù)數(shù)據(jù)不一致。通常不建議在主庫(kù)端配置復(fù)制過濾規(guī)則,可靠的復(fù)制過濾都是在從庫(kù)端實(shí)現(xiàn)的,因?yàn)檫@樣才更合理,每個(gè)從庫(kù)根據(jù)自己的需要來靈活配置復(fù)制過濾規(guī)則。
關(guān)于復(fù)制過濾的原理與流程,本章不做過多闡述,可參考第13章“MySQL Server 復(fù)制過濾”。本章將以在從庫(kù)端配置復(fù)制過濾規(guī)則為例,詳細(xì)介紹其操作步驟。
第24章發(fā)生數(shù)據(jù)誤操作之后的處理方案;在當(dāng)今信息大爆炸的時(shí)代,數(shù)據(jù)與信息是一家技術(shù)型公司賴以生存的基石。然而,在日常維護(hù)存放數(shù)據(jù)與信息的服務(wù)器過程中,對(duì)于技術(shù)人員來說,難免會(huì)有誤操作(例如,誤修改、誤刪除、誤寫入等)。不過,我們可以盡量減少誤操作帶來的損失。發(fā)生誤操作之后,可以通過一些方法盡量恢復(fù)被誤操作的數(shù)據(jù)。本章將詳解介紹MySQL中幾種常見的簡(jiǎn)單有效的恢復(fù)誤刪除數(shù)據(jù)的方法。
第25章常用復(fù)制故障排除方案;作為MySQL數(shù)據(jù)庫(kù)管理人員,我們?cè)谌粘5墓ぷ髦谢蚨嗷蛏俣紩?huì)碰到MySQL復(fù)制相關(guān)的問題,有些問題可能很快就解決了,有些問題具有一定的迷惑性,可能需要排查很久才能找到具體的原因。對(duì)于后者,我們大概率會(huì)在日后的工作中再次遭遇它們。再次遇到的時(shí)候,你是否有似曾相識(shí)但怎么也想不起來具體細(xì)節(jié)的感覺呢?
為了避免這種尷尬,建議在處理完故障之后,立即以文檔形式總結(jié)故障現(xiàn)象、其復(fù)現(xiàn)與排查過程、解決方案和規(guī)避方法,予以留存。
另外,故障雖然多種多樣,但其處理思路與流程是具有共性的。本章以處理MySQL復(fù)制相關(guān)的故障為主題,詳細(xì)介紹一個(gè)排除復(fù)制故障的通用方案(注意,本章只講解思路與流程,不介紹細(xì)節(jié))。
參考篇第26章二進(jìn)制日志文件的基本組成;在使用MySQL數(shù)據(jù)庫(kù)的平臺(tái)上,很多關(guān)鍵的應(yīng)用場(chǎng)景都是基于二進(jìn)制日志實(shí)現(xiàn)的,例如主從復(fù)制(這也是本書的主題,前面用大量的篇幅介紹了復(fù)制的原理與使用案例)、基于時(shí)間點(diǎn)的備份與恢復(fù)、誤操作數(shù)據(jù)的回滾、供數(shù)(解析二進(jìn)制日志文件,并將得到的文本數(shù)據(jù)傳輸?shù)搅硪粋€(gè)平臺(tái),如數(shù)據(jù)倉(cāng)庫(kù)、Kafka等)等,但是很少有人詳細(xì)了解過二進(jìn)制日志。本章將從二進(jìn)制日志事件類型的角度對(duì)二進(jìn)制日志文件中的內(nèi)容進(jìn)行詳細(xì)的介紹。
第27章常規(guī)DDL操作解析;
第28章為何二進(jìn)制日志中同—個(gè)事務(wù)的事件時(shí)間點(diǎn)會(huì)亂序;對(duì)于這個(gè)問題,相信很多人都只是大概知道其中的原理,并沒有做過具體的案例分析。本章將以一個(gè)常見的UPDATE語(yǔ)句更新數(shù)據(jù)的事務(wù)作為案例,詳細(xì)分析其中的過程。
第29章復(fù)制AUTO_INCREMENT字段;設(shè)計(jì)MySQL的表結(jié)構(gòu)時(shí),一般建議使用AUTO_INCREMENT字段作為表的主鍵,而不是使用UUID作為主鍵,原因是使用前者作為主鍵能保證數(shù)據(jù)行是按順序?qū)懭氲?。如果采用隨機(jī)寫入的方式,InnoDB在寫入數(shù)據(jù)時(shí)會(huì)產(chǎn)生大量的隨機(jī)I/O操作,并且會(huì)頻繁做數(shù)據(jù)頁(yè)的分裂操作。
AUTO_INCREMENT字段主鍵在插入性能以及抑制碎片空間的產(chǎn)生方面都比較有優(yōu)勢(shì)。但是它的值是由MySQL Server產(chǎn)生的,那么在復(fù)制拓?fù)渲?,MySQL是如何保證主從庫(kù)之間AUTO_INCREMENT字段數(shù)據(jù)的一致性的呢?本章討論在MySQL中是如何保證AUTO_INCREMENT字段被正確復(fù)制的。
第30章復(fù)制CREATE ...IF NOT EXISTS語(yǔ)句;MySQL中有CREATE ... IF NOT EXISTS語(yǔ)句,對(duì)于程序創(chuàng)建庫(kù)或者表很方便:如果庫(kù)或者表不存在,則創(chuàng)建;反之,則不創(chuàng)建。無(wú)論主庫(kù)中是否存在某個(gè)庫(kù),使用CREATE DATABASE IF NOT EXISTS語(yǔ)句創(chuàng)建庫(kù)的時(shí)候,該語(yǔ)句都能被正確地復(fù)制到從庫(kù)。同樣,無(wú)論主庫(kù)中是否存在某張表,CREATE TABLE IF NOT EXISTS語(yǔ)句(除CREATE TABLE IFNOT EXISTS ... SELECT外)都能被正確復(fù)制到從庫(kù)。本章我們就來看看CREATE DATABASE IF NOT EXISTS和CREATE TABLE IF NOT EXISTS語(yǔ)句是如何被正確復(fù)制到從庫(kù)的。
第31章復(fù)制CREATE TABLE ...SELECT語(yǔ)句;第30章解釋了CREATE ... IF NOT EXISTS語(yǔ)句(除CREATE TABLEIF NOT EXISTS ... SELECT之外)是如何被正確復(fù)制的,本章我們來看第30章未涉及的CREATE TABLE IF NOT EXISTS ... SELECT以及CREATE TABLE ... SELECT語(yǔ)句是如何被正確復(fù)制的。
第32章在主從復(fù)制中使用不同的表定義;正常情況下,我們使用MySQL主從復(fù)制時(shí),都是為了保證主從庫(kù)數(shù)據(jù)的一致性,但有時(shí)可能會(huì)遇到一些需求。比如,出于安全的考慮,上游數(shù)據(jù)庫(kù)同步到下游數(shù)據(jù)庫(kù)時(shí)需要過濾某些字段,或者中間庫(kù)需要對(duì)字段類型進(jìn)行調(diào)整,那么在MySQL中如果不同步表(結(jié)構(gòu))定義,人為地分別在主庫(kù)和從庫(kù)上創(chuàng)建不同的表定義,MySQL復(fù)制時(shí)只負(fù)責(zé)數(shù)據(jù)同步,這樣可行嗎?本章就來介紹一下在主從復(fù)制中使用不同的表定義進(jìn)行復(fù)制。
第33章復(fù)制中的調(diào)用功能;日常工作中,DBA不可避免會(huì)遇到使用存儲(chǔ)過程、觸發(fā)器、自定義函數(shù)等的場(chǎng)景,因此,本章我們來講一講在MySQL的復(fù)制中是如何保證存儲(chǔ)過程、觸發(fā)器、自定義函數(shù)等的正確性的。
第34章復(fù)制LIMIT子句;DBA一般會(huì)建議開發(fā)人員在使用MySQL時(shí)不要使用大事務(wù),比如在對(duì)某一張表清理上百萬(wàn)行數(shù)據(jù)時(shí),不建議直接用一條DELETE語(yǔ)句清理完所有數(shù)據(jù),而是建議使用LIMIT子句,小批量、多次清理。LIMIT子句對(duì)符合條件的結(jié)果集限定返回的行數(shù),但是無(wú)法明確是哪幾行。在MySQL的復(fù)制中,對(duì)于LIMIT子句這種具有不確定性的子句如何保證復(fù)制的一致性呢?本章我們就來看看LIMIT子句是如何被正確復(fù)制的。
第35章復(fù)制LOAD DATA語(yǔ)句;LOAD DATA語(yǔ)句能很方便地將文件中的數(shù)據(jù)導(dǎo)入MySQL,是開發(fā)人員平時(shí)習(xí)慣使用的一種導(dǎo)入數(shù)據(jù)的方式。本章我們就來看一看,在MySQL主從復(fù)制架構(gòu)中是如何保證LOAD DATA語(yǔ)句正確地從主庫(kù)復(fù)制到從庫(kù)的。
第36章系統(tǒng)變量max_allowed_packet對(duì)復(fù)制的影響;熟悉MySQL的人都知道,MySQL有許多可設(shè)置的系統(tǒng)變量,用于控制其行為或者性能,比如系統(tǒng)變量max_allowed_packet可以控制客戶端與服務(wù)端連接后,傳輸?shù)臄?shù)據(jù)包的最大尺寸。本章我們講一講系統(tǒng)變量max_allowed_packet對(duì)復(fù)制的影響,再介紹一些其他類似的系統(tǒng)變量。
第37章復(fù)制臨時(shí)表;與普通的表相比,相信許多讀者對(duì)于臨時(shí)表應(yīng)該既陌生又熟悉,本文講的是MySQL的復(fù)制,那么本章就來講一講臨時(shí)表在MySQL中是如何復(fù)制的,以及在復(fù)制中遇到臨時(shí)表該怎么辦。
第38章復(fù)制中的事務(wù)不—致問題;在MySQL復(fù)制中,我們都會(huì)擔(dān)心主從庫(kù)數(shù)據(jù)一致性的問題。有些情況下,主從庫(kù)數(shù)據(jù)不一致是由于主從庫(kù)事務(wù)不一致而導(dǎo)致的。本章我們就來講一講MySQL復(fù)制中事務(wù)不一致的類型、原因以及結(jié)果。
這份【MySQL復(fù)制技術(shù)與生產(chǎn)實(shí)踐】文檔共有575頁(yè),需要完整版的小伙伴,可以轉(zhuǎn)發(fā)此文關(guān)注小編,私信小編【技能】來獲取?。。?/strong>
以上就是關(guān)于pos機(jī)文檔申請(qǐng),終于學(xué)完了阿里高級(jí)架構(gòu)師整理MySQL復(fù)制技術(shù)與生產(chǎn)實(shí)踐文檔的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)文檔申請(qǐng)的知識(shí),希望能夠幫助到大家!
