19.1 主從復(fù)制介紹
19.1.1 主從存在的意義
數(shù)據(jù)備份:為了避免單點故障,增加一個從服務(wù)器,用來復(fù)制主服務(wù)器上的數(shù)據(jù)。
分擔(dān)負(fù)載:將寫操作在主上做,查詢操作在從上做。
19.1.2 主從復(fù)制原理
① 主上將所有變更事件記錄到binlog里
② 從發(fā)起請求連接主
③ 主的binlog備份線程將binlog傳給從
④ 從的I/O線程將binlog解析成自己的relay log
⑤ 從的SQL線程根據(jù)relay log來執(zhí)行具體的SQL語句
MySQL主從復(fù)制是一個異步的復(fù)制過程,主庫發(fā)送更新事件到從庫,從庫讀取更新記錄,并執(zhí)行更新記錄,使得從庫的內(nèi)容與主庫保持一致。
binlog:binary log,主庫中保存所有更新事件日志的二進制文件。binlog是數(shù)據(jù)庫服務(wù)啟動的一刻起,保存數(shù)據(jù)庫所有變更記錄(數(shù)據(jù)庫結(jié)構(gòu)和內(nèi)容)的文件。在主庫中,只要有更新事件出現(xiàn),就會被依次地寫入到binlog中,之后會推送到從庫中作為從庫進行復(fù)制的數(shù)據(jù)源。
binlog dump線程:每當(dāng)有從庫連接到主庫的時候,主庫都會創(chuàng)建一個線程然后發(fā)送binlog內(nèi)容到從庫。對于每一個即將發(fā)送給從庫的sql事件,binlog dump線程會將其鎖住。一旦該事件被線程讀取完之后,該鎖會被釋放,即使在該事件完全發(fā)送到從庫的時候,該鎖也會被釋放。
在從庫中,當(dāng)復(fù)制開始時,從庫就會創(chuàng)建從庫I/O線程和從庫的SQL線程進行復(fù)制處理。
從庫I/O線程:當(dāng)START SLAVE語句在從庫開始執(zhí)行之后,從庫創(chuàng)建一個I/O線程,該線程連接到主庫并請求主庫發(fā)送binlog里面的更新記錄到從庫上。從庫I/O線程讀取主庫的binlog輸出線程發(fā)送的更新并拷貝這些更新到本地文件,其中包括relay log文件。
從庫的SQL線程:從庫創(chuàng)建一個SQL線程,這個線程讀取從庫I/O線程寫到relay log的更新事件并執(zhí)行。
19.2 搭建主從復(fù)制
19.2.1 基于二進制日志文件位置的復(fù)制
① 根據(jù)我們前面的文檔,搭建兩臺MySQL服務(wù),具體步驟略
192.168.222.128 主 192.168.222.132 從
② 檢查并配置兩臺機器的server_id
vi my.cnf #搜索server_id ,如果沒有則增加 主上設(shè)置為server_id=1 從上設(shè)置為 server_id = 2
③ 在主上創(chuàng)建用作主從復(fù)制的用戶
create user 'rep'@'192.168.222.132' identified with 'mysql_native_password' by 'AmingLinux.Com'; grant REPLICATION SLAVE on *.* to 'rep'@'192.168.222.132'; flush privileges;
④在主上查詢?nèi)罩久忠约拔恢?/p>
show master status; ##記錄下對應(yīng)的日志命令以及位置 +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | aminglinux.000001 | 853| | | +------------------+----------+--------------+------------------+
⑤到從上執(zhí)行
change master to master_host='192.168.222.128',master_user='rep',master_password='AmingLinux.Com',master_log_file='aminglinux.000001',master_log_pos=853; start slave; show slave statusG
19.2.2 基于GTID的主從復(fù)制
1. 什么是GTID
GTID(Global Transaction ID)是對于一個已提交事務(wù)的編號,并且是一個全局唯一的編號。GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標(biāo)識,保存在mysql數(shù)據(jù)目錄下的auto.cnf文件里。TID代表了該實例上已經(jīng)提交的事務(wù)數(shù)量,并且隨著事務(wù)提交單調(diào)遞增。下面是一個GTID的具體形式:
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
2.GTID的作用
根據(jù)GTID可以知道事務(wù)最初是在哪個實例上提交的,GTID的存在方便了Replication的Failover(故障切換)
3. GTID比傳統(tǒng)復(fù)制的優(yōu)勢
更簡單的實現(xiàn)failover,不用以前那樣在需要找log_file和log_Pos。更簡單的搭建主從復(fù)制。比傳統(tǒng)復(fù)制更加安全。GTID是連續(xù)沒有空洞的,因此主從庫出現(xiàn)數(shù)據(jù)沖突時,可以用添加空事物的方式進行跳過。
4. GTID的工作原理:
① master更新數(shù)據(jù)時,會在事務(wù)前產(chǎn)生GTID,一同記錄到binlog日志中。
②slave端的i/o線程將變更的binlog,寫入到本地的relay log中。
③sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有記錄。
④如果有記錄,說明該GTID的事務(wù)已經(jīng)執(zhí)行,slave會忽略。
⑤如果沒有記錄,slave就會從relay log中執(zhí)行該GTID的事務(wù),并記錄到binlog。
⑥在解析過程中會判斷是否有主鍵,如果有就用二級索引,如果沒有就用全部掃描。
4. GTID復(fù)制搭建
由于之前做過主從配置,可以先取消之前的主從。
slave上執(zhí)行:
stop slave; reset slave all;
master上執(zhí)行:
reset master;
① 主上修改配置文件,重啟mysql服務(wù)
server_id = 1 gtid_mode = on enforce_gtid_consistency=on log_bin=mysql-bin binlog_format=row log-slave-updates=1 skip-slave-start=1
② 從上修改配置文件,重啟mysql服務(wù)
server_id = 2 gtid_mode = on enforce_gtid_consistency=on log_bin=mysql-bin binlog_format=row log-slave-updates=1 skip-slave-start=1
③ 主上授權(quán)用戶
create user 'rep'@'192.168.222.132' identified with 'mysql_native_password' by 'AmingLinux.Com'; grant REPLICATION SLAVE on *.* to 'rep'@'192.168.222.132'; flush privileges;
④ 從上配置主從
stop slave; CHANGE MASTER TO MASTER_HOST='192.168.222.128', MASTER_USER='rep',MASTER_PASSWORD='AmingLinux.Com',MASTER_AUTO_POSITION=1,MASTER_CONNECT_RETRY=10; start slave;
④ 查看主從狀態(tài)
從上執(zhí)行
show slave statusG
⑤ 測試主從
主上新建一個數(shù)據(jù)庫
create database testd;
到從上查看是否有testd數(shù)據(jù)庫
show databases;
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9770瀏覽量
87767 -
數(shù)據(jù)備份
+關(guān)注
關(guān)注
0文章
58瀏覽量
12036 -
MySQL
+關(guān)注
關(guān)注
1文章
853瀏覽量
27822 -
日志
+關(guān)注
關(guān)注
0文章
144瀏覽量
10854 -
線程
+關(guān)注
關(guān)注
0文章
508瀏覽量
20178
原文標(biāo)題:MySQL主從復(fù)制
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
利用MySQL進行一主一從的主從復(fù)制
MySQL主從復(fù)制原理詳解
一個操作把MySQL主從復(fù)制整崩了

什么是Redis主從復(fù)制

評論