mysql 5.5 主從同步問題_MySQL 5.5 主從復制異步、半同步以及注意事項詳解

大綱

一、前言

二、Mysql 基礎知識

三、Mysql 復制(Replication)

四、Mysql 復制(Replication)類型

五、Mysql 主從復制基本步驟

六、Mysql 主從復制(異步)

七、Mysql 主從復制(半同步)

八、Mysql 復制工具

九、Mysql 復制注意事項

十、Mysql 復制過濾

一、前言

從這一篇博客開始我們就來學習mysql的高級課程,在前面的幾篇博客我們講解了mysql基礎知識、mysql日志類型、mysql配置文件、mysql備份策略,這一篇博客中我們來講解mysql的復制。

二、mysql基礎知識

1.mysql日志類型

二進制日志

事務日志

錯誤日志

一般查詢日志

中繼日志

慢查詢日志

2.mysql二進制日志詳解

說明:默認開啟,精確的記錄了用戶對數據庫中的數據進行操作的命令和操作的數據對象。

二進制日志文件的作用:

提供了增量備份的功能

提供了數據基于時間點的恢復,這個恢復的時間點可以由用戶控制

為mysql的復制架構提供基礎,將這主服務器的二進制日志復制到從服務器上并執行同樣的操作,就可將數據進行同步

實現數據的高可用

分擔負載

二進制日志默認存放位置:

數據目錄下,以mysql-bin.XXXXXX命名的日志

二進制日志格式:

基于語句 statement

基于行 row

混合方式 mixed

二進制日志滾動方式:

重啟服務

日志達到最大上限

執行flush logs

二進制日志事件:

position 基于位置,也就是offset(偏移量)

datetime 基于時間

timestamp

二進制日志的查看與刪除方式:

文件系統中查看二進制日志的命令:

配置mysql的主配置文件:

注:一般建議將binlog日志與數據文件分開存放,不但可以提高mysql性能,還可以增加安全性!

三、Mysql 復制(Replication)

1.Mysql 復制作用

負載平衡(load balancing)

備份

高可用性(high availability)和容錯

2.Mysql 復制如何工作

主要有三步(如下圖):

master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);

slave將master的binary log events拷貝到它的中繼日志(relay log);

slave重做中繼日志中的事件,將改變反映它自己的數據。

2033581_1377406980xKx2.jpg

具體說明:

該過程的第一部分就是master記錄二進制日志。在每個事務更新數據完成之前,master在二日志記錄這些改變。MySQL將事務串行的寫入二進制日志,即使事務中的語句都是交叉執行的。在事件寫入二進制日志完成后,master通知存儲引擎提交事務。

下一步就是slave將master的binary log拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然后開始binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經跟上master,它會睡眠并等待master產生新的事件。I/O線程將這些事件寫入中繼日志。

SQL slave thread處理該過程的最后一步。SQL線程從中繼日志讀取事件,更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。

此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。復制過程有一個很重要的限制——復制在slave上是串行化的,也就是說master上的并行更新操作不能在slave上并行操作。所以slave上數據一般要慢于master上數據。即master與slave之間的數據在一定時間內會不同步。

四、Mysql 復制(Replication)類型

1.mysql復制類型有以下一些基本原則

每個slave只能有一個master;

每個slave只能有一個唯一的服務器ID;

每個master可以有很多slave;

如果你設置log_slave_updates,slave可以是其它slave的master,從而擴散master的更新。

注,MySQL不支持多主服務器復制(Multimaster Replication)——即一個slave可以有多個master。但是,通過一些簡單的組合,我們卻可以建立靈活而強大的復制體系結構。

2.mysql復制類型

(1).一主多從模式

注,由一個master和一個slave組成復制系統是最簡單的情況。Slave之間并不相互通信,只能與master進行通信。

556d3dc557ea64de0c73abbc51c5b1ff.png

具體說明:

如果寫操作較少,而讀操作很時,可以采取這種結構。你可以將讀操作分布到其它的slave,從而減小master的壓力。但是,當slave增加到一定數量時,slave對master的負載以及網絡帶寬都會成為一個嚴重的問題。這種結構雖然簡單,但是,它卻非常靈活,足夠滿足大多數應用需求。一些建議:

不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存儲引擎)

用一個slave作為備用master,只進行復制

用一個遠程的slave,用于災難恢復

發送復制事件到其它slave,當設置log_slave_updates時,你可以讓slave扮演其它slave的master。此時,slave把SQL線程執行的事件寫進行自己的二進制日志(binary log),然后,它的slave可以獲取這些事件并執行它

3515c53fb20e80c459edf8dfbd7281b7.png

(2).雙主模式

注,Master-Master復制的兩臺服務器,既是master,又是另一臺服務器的slave。

4b343587453c83914f474b69427810c6.png

具體說明:

主動的Master-Master復制有一些特殊的用處。例如,地理上分布的兩個部分都需要自己的可寫的數據副本。這種結構最大的問題就是更新沖突。假設一個表只有一行(一列)的數據,其值為1,如果兩個服務器分別同時執行如下語句:

在第一個服務器上執行:

那么結果是多少呢?一臺服務器是4,另一個服務器是3,但是,這并不會產生錯誤。

實際上,MySQL并不支持其它一些DBMS支持的多主服務器復制(Multimaster Replication),這是MySQL的復制功能很大的一個限制(多主服務器的難點在于解決更新沖突),但是,如果你實在有這種需求,你可以采用MySQL Cluster,以及將Cluster和Replication結合起來,可以建立強大的高性能的數據庫平臺。但是,可以通過其它一些方式來模擬這種多主服務器的復制。

(3).主從模式

注,這是master-master結構變化而來的,它避免了M-M的缺點,實際上,這是一種具有容錯和高可用性的系統。它的不同點在于其中一個服務只能進行只讀操作。

5f30de50a92aeb7a33596a87da5415e4.png

(4).帶從服務器的Master-Master結構(Master-Master with Slaves)

注,這種結構的優點就是提供了冗余。在地理上分布的復制結構,它不存在單一節點故障問題,而且還可以將讀密集型的請求放到slave上。

85a21aaf120f232d48bf19552b299e30.png

總結:一般常用的兩種復制類型一種是主從模式,另一種是一主多從模式。在這一篇博客中我們主要講解主從模式復制。

五、Mysql 主從復制基本步驟

1.master 配置

啟用二進制日志

配置一個唯一的server-id

創建具有復制權限的用戶

2.slave 配置

啟用中繼日志

配置一個唯一的server-id

連接主服務器,并開始復制數據

啟動數據復制

注,基本步驟我們就說到這里,下面我們來具體演示一下主從復制。

六、Mysql 主從復制(異步)

1.mysql異步復制

異步復制:MySQL本身支持單向的、異步的復制。異步復制意味著在把數據從一臺機器拷貝到另一臺機器時有一個延時,最重要的是這意味著當應用系統的事務在主服務器上提交并確認時數據并不能在同一時刻拷貝或應用到從服務器上。通常這個延時是由網絡帶寬、資源可用性和系統負載決定的。然而,使用正確的組件并且調優,復制能做到接近瞬時完成。

當主庫有更新的時候,主庫會把更新操作的SQL寫入二進制日志(Bin log),并維護一個二進制日志文件的索引,以便于日志文件輪回(Rotate)。在從庫啟動異步復制的時候,從庫會開啟兩個I/O線程,其中一個線程連接主庫,要求主庫把二進制日志的變化部分傳給從庫,并把傳回的日志寫入本地磁盤。另一個線程則負責讀取本地寫入的二進制日志,并在本地執行,以反映出這種變化。較老的版本在復制的時候只啟用一個I/O線程,實現這兩部分的功能。下面我們來具體演示一下mysql的異步復制。

2.實驗拓撲

5f30de50a92aeb7a33596a87da5415e4.png

注,Active (master,node1) 192.168.1.201 , Passive (slave,node2)192.168.1.202

3.環境配置

時間同步

4.操作系統

CentOS 6.4 X86_64

5.軟件版本

Mysql 5.5.33 (注,這里用的是mysql 5.5.33二進制通用安裝包,解壓就能用)

6.安裝并配置mysql

master:

(1).解壓并鏈接

(2).新建mysql用戶

(3).修改mysql安裝目錄所有者與所屬組

(4).為mysql提供配置文件并修改

(5).為mysql提供啟動腳本

(6).初始化mysql數據庫

(7).啟動并測試

好了,到這里master的mysql配置完成,下面我們進行slave的mysql配置。

slave:

(1).解壓并鏈接

(2).新建mysql用戶

(3).修改mysql安裝目錄所有者與所屬組

(4).為mysql提供配置文件并修改

(5).為mysql提供啟動腳本

(6).初始化mysql數據庫

(7).啟動并測試

好了,slave的mysql也配置完成了,下面我們來配置主從復制。

7.配置master

(1).修改配置文件

(2).授權復制用戶

(3).重啟一下mysql服務

8.配置slave

(1).修改配置文件

(2).重啟mysql服務

(3).連接主服務器并復制

9.主從復制測試

master:

slave:

好了,到這里異步的主從復制到這里配置完成。下面我們來說一下什么是半同步復制(或說是同步也行)。

七、Mysql 主從復制(半同步)

1.半同步復制

在說明半同步復制之前我們先來了解一下,什么是同步復制?同步復制:同步復制可以定義為數據在同一時刻被提交到一臺或多臺機器,通常這是通過眾所周知的“兩階段提交”做到的。雖然這確實給你在多系統中保持一致性,但也由于增加了額外的消息交換而造成性能下降。使用MyISAM或者InnoDB存儲引擎的MySQL本身并不支持同步復制,然而有些技術,例如分布式復制塊設備(簡稱DRBD),可以在下層的文件系統提供同步復制,允許第二個MySQL服務器在主服務器丟失的情況下接管(使用第二服務器的復本)。了解了同步復制我們正下面來說一下,什么是半同步復制?

MYSQL 5.5開始,支持半自動復制。之前版本的MySQL Replication都是異步(asynchronous)的,主庫在執行完一些事務后,是不會管備庫的進度的。如果備庫不幸落后,而更不幸的是主庫此時又出現Crash(例如宕機),這時備庫中的數據就是不完整的。簡而言之,在主庫發生故障的時候,我們無法使用備庫來繼續提供數據一致的服務了。Semisynchronous Replication(半同步復制)則一定程度上保證提交的事務已經傳給了至少一個備庫。Semi synchronous中,僅僅保證事務的已經傳遞到備庫上,但是并不確保已經在備庫上執行完成了。

此外,還有一種情況會導致主備數據不一致。在某個session中,主庫上提交一個事務后,會等待事務傳遞給至少一個備庫,如果在這個等待過程中主庫Crash,那么也可能備庫和主庫不一致,這是很致命的。如果主備網絡故障或者備庫掛了,主庫在事務提交后等待10秒(rpl_semi_sync_master_timeout的默認值)后,就會繼續。這時,主庫就會變回原來的異步狀態。

MySQL在加載并開啟Semi-sync插件后,每一個事務需等待備庫接收日志后才返回給客戶端。如果做的是小事務,兩臺主機的延遲又較小,則Semi-sync可以實現在性能很小損失的情況下的零數據丟失。

2.異步與半同步異同

默認情況下MySQL的復制是異步的,Master上所有的更新操作寫入Binlog之后并不確保所有的更新都被復制到Slave之上。異步操作雖然效率高,但是在Master/Slave出現問題的時候,存在很高數據不同步的風險,甚至可能丟失數據。

MySQL5.5引入半同步復制功能的目的是為了保證在master出問題的時候,至少有一臺Slave的數據是完整的。在超時的情況下也可以臨時轉入異步復制,保障業務的正常使用,直到一臺salve追趕上之后,繼續切換到半同步模式。

3.具體配置

注,mysql5.5半同步插件是由谷歌提供,具體位置/usr/local/mysql/lib/plugin/下,一個是master用的semisync_master.so,一個是slave用的semisync_slave.so,下面我們就來具體配置一下。

master:

(1).安裝插件

(2).修改配置文件

(3).重新啟動服務

slave:

(1).安裝插件

(2).修改配置文件

(3).重新啟動服務

4.查看一下狀態

master:

slave:

5.測試一下

master:

注,大家可以看到創建一個表的插入一個數據的時間都很長,說明半同步配置完成。

6.模擬一下故障

slave:

注,大家可以看到主服務器會卡1s,我們超時時間設置的為1s。

7.查看一下狀態

好了,到這里我們就配置完成了半同步復制。希望大家有所收獲。下面我們來簡單說一下mysql復制的工具。

八、Mysql 復制工具

1.percona-toolkit簡介

percona-toolkit是一組高級命令行工具的集合,用來執行各種通過手工執行非常復雜和麻煩的mysql和系統任務,這些任務包括:

檢查master和slave數據的一致性

有效地對記錄進行歸檔

查找重復的索引

對服務器信息進行匯總

分析來自日志和tcpdump的查詢

當系統出問題的時候收集重要的系統信息

percona-toolkit源自Maatkit 和Aspersa工具,這兩個工具是管理mysql的最有名的工具,現在Maatkit工具已經不維護了,請大家還是使用percona-toolkit吧!這些工具主要包括開發、性能、配置、監控、復制、系統、實用六大類,作為一個優秀的DBA,里面有的工具非常有用,如果能掌握并加以靈活應用,將能極大的提高工作效率。

2.安裝percona-toolkit

3.簡單使用

常用工具:

(1).服務器摘要

(2).服務器磁盤監測

(3).mysql服務狀態摘要

(4).慢查詢日志分析統計

(5).主從狀態監測,提供給它一臺mysql服務器的IP用戶名密碼,就可以分析出整個主從架構中每臺服務器的信息,包括但不限于mysql版本,IP地址,server ID,mysql服務的啟動時間,角色(主/從),Slave Status(落后于主服務器多少秒,有沒有錯誤,slave有沒有在運行)。

(6).mysql死鎖監測

(7).監測從庫的復制延遲

注,簡單說明就到這里,想學習更詳細的內容,命令的使用可以通過--help獲知

九、Mysql 復制注意事項

注,在主-從架構上建議使用的配置

master:

十、Mysql 復制過濾

master:

測試一下:

在從服務器上只復制testdb一個數據庫

slave:

master:

slave:

注,大家可以看到沒有同步mydb1,再測試一下。

master:

注,大家可以看到同步了testdb,好了到這里所有演示全部完成,希望大家有所收獲。^_^……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533386.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源內容管理系統 php mysql_十大免費PHP+MySql平臺內容管理系統推薦

最近,朋友要建站讓我幫著推薦個好的CMS(內容管理系統),個人認為其實選擇哪個CMS并不重要,除了對搜索引擎的親好外,個人的使用操作習慣和對所選CMS系統的熟悉程度有很大關系。這里為需要建站但又徘徊的朋友介紹10個免費PHPMySql平臺…

mysql導入xml 工具下載_XML導入Mysql工具下載|XmlToMysql 最新版v2.1 下載_當游網

XmlToMysql是一款十分不錯的XML導入Mysql工具,它可以幫助用戶們將XML中的數據快速的導入到MySQL數據庫中,可以直接跳過解析環節,因此可以有效的提升程序員傳輸數據的效率,讓程序員可以擁有更多的時間去處理其他環節的事宜。所以喜…

mysql忽略表名大小寫_Mysql 表名忽略大小寫-連接字符集隨筆記錄

1.參數說明:lower_case_table_names0表名存儲為給定的大小和比較是區分大小寫的lower_case_table_names 1表名存儲在磁盤是小寫的,但是比較的時候是不區分大小寫lower_case_table_names2表名存儲為給定的大小寫但是比較的時候是小寫的unix,linux下lower_…

mysql與orancl_清晰講解SQL語句中的外連接,通用于Mysql和Oracle,全是干貨哦

清晰講解SQL語句中的外連接,通用于Mysql和Oracle,全是干貨哦直入主題:我們做一個操作,將員工SCOTT的部門去掉,再次通過內連接查看數據,看看會產生什么現象?使用內連接,查詢數據問題&…

.net mysql查詢數據庫連接_asp.net連接查詢SQL數據庫并把結果顯示在網頁上(2種方法)...

在ASP.NET中,使用C#連接SQL數據庫,并使用SQL語句查詢,以前從來沒有接觸過C#,最近用到了,摸索了兩天終于運行起來了,Mark一下,不喜勿噴有兩種方法:(說的是第一種方法不安全&#xff0…

mysql異常恢復工具_[MySQL異常恢復]mysql ibd文件恢復

在mysql中由于某種原因保存有ibd文件,但是表已經被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下,通過mysql自身技術即可完成ibd文件恢復.測試環境mysql版本mysql> select version();-----------| version() |-----------| …

ddl是什么意思網絡語_DDL(數據定義語言)

DDL,是對數據庫內部的對象進行創建,刪除,修改等的操作語言。它和DML語言最大的區別是DML只是對表內部數據的操作,而不涉及到表的定義,結構的修改,更不會涉及到其它對象。1.連接數據庫:注:1.mysql代表客戶端…

jsp mysql優點_asp、php、asp.net、jsp的介紹和各自的優缺點

現在主流的網站開發語言無外乎asp、php、asp.net、jsp等。主流網站開發語言之ASP:ASP是微軟(Microsoft)所開發的一種后臺,它的語法和Visual BASIC類似,可以像SSI(Server Side Include)那樣把后臺腳本代碼內嵌到HTML頁面中。雖然ASP簡單易用,但…

測試網絡的帶寬指令_單機千萬級MQTT服務器測試報告

目標:測試創建1000萬客戶端連接到Coolpy7 MQTT服務器端,服務器操作系統 Linux(任意一款發行版服務器版本)。分別在兩臺硬件一樣的服務器,其中一臺用于服務器端運行,另一臺用于創建千萬客戶端連接客戶端機器。在硬件一致的情況下請…

python郵箱爆破_Python在線爆破郵箱賬號密碼測試代碼(親測可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此類推,切記保存成utf-8編碼格式。放置在當前腳本目錄,也可自己定義修改。支持ssl https /imap協議。# version 3.4.0# codingUTF-8# ti…

查看redis aof內存_Redis持久化問題定位與優化技巧

今天主要分享繼Redis持久化方式RDB、AOF之后的一些常用的Redis問題定位于優化方式。這里主要CPU、內存、磁盤在三個維度去分析問題!Fork操作當Redis做RDB或AOF重寫時,一個必不可少的操作就是執行fork操作創建子進程,對于大多數操作系統來說fo…

mysql新增陣列df_DF學Mysql(三)——索引操作

概要:數據庫對象索引其實與書的目錄非常相似,主要是為了提高從表中檢索數據的速度。由于數據存儲在數據庫表中,所以索引是創建在數據庫表對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構(B-樹或…

python本地瀏覽器注入js_PyQt5內嵌瀏覽器注入JavaScript腳本實現自動化操作的代碼實例...

概要應同學邀請,演示如何使用 PyQt5 內嵌瀏覽器瀏覽網頁,并注入 Javascript 腳本實現自動化操作。下面測試的是一個廉價機票預訂網站(http://www.flyscoot.com/),關鍵點如下使用 QWebEngineView 加載網頁,并顯示進度。在默認配置(…

python裝好了怎么啟動車_【填空題】Python安裝好后,可以直接在CMD命令行下輸入( )命令, 可啟動交互式編程,提示窗口如下:...

傾斜巖層的產狀要素是用巖層層面的()。A.傾角B.走向C.范圍D.傾向E.表面積采用深層攪拌法進行地基加固處理,其適用條件為()。A.砂礫石松軟地基B.松散砂地基C.黏土軟弱地基根據《建筑工程建筑面積計算規則》,下列關于建筑物雨篷結構的建筑面積計算&#xf…

windows設置mysql使用率_Windows下配置Mysql

這里說的配置Mysql,是在安裝時進行的,請先查看:Windows平臺下安裝Mysql緊接上文,安裝完成后將配置選項打上對勾,按下“Finish”,出現下面的界面,這里有一個很好的功能,mysql配置向導…

mysql 云無憂ps教程_華為云數據庫MySQL一鍵開通讀寫分離,無憂應對企業業務高峰情景...

業務大促,訂單暴增,網站流量暴漲幾倍,數據庫服務器容量又要扛不住了,眼睜睜看著生意白白溜走,再苦逼也無法解決,“腫”么辦?別擔心,一鍵開通讀寫分離,而且只需一個連接地…

mysql實體監聽器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog監聽器

mysql binlog監聽器前置操作1.查看mysql是否開啟binlogshow variables like log_bin;2.查看是否使用row格式的binlogshow variables like binlog_format;3.如果以上都不是請修改mysql的配置文件添加或者修改如下內容#配置binlog存放路徑log-binE://mysql//binlog//mysql-bin#bi…

python 基因序列提取_科學網—簡單的Python腳本提取對應位置基因序列(fasta文件) - 王彬忠的博文...

最近,用Python腳本提取,在基因號已知,位置已知條件下,相對應位置的基因序列時發現,這樣很簡單但是很實用的腳本,在網上卻比較難找。而且,能被找到的腳本,相對于具有初級編程能力的人…

python不能安裝在中文_無法在Python上安裝表

我一直收到錯誤Command "python setup.py egg_info" failed with error code 1 in C:\Users\HP\AppData\Local\Temp\pip-install-sv33cp8y\tables\當嘗試使用^{pr2}$我試過了pip install --upgrade setuptools還有很多其他的東西,但還是不能讓它發揮作用。…

python是強定義語言嗎_python是強類型語言嗎

強弱是對類型而言的。強類型,你有一個值之后這個值是什么類型是確定,比如n1,n的類型是確定的(字符串),因此你不能在Python做n3 mn1運算。而弱類型就不是這樣的,值的類型可以在需要的時候再去確定,比如PHP里…