Mysql主從復(fù)制之半同步復(fù)制(基于gtid)

MySQL主從復(fù)制
mysql主從復(fù)制原理:
從庫(kù)有兩個(gè)線程IO線程和SQL線程
1.從庫(kù)的IO線程向主庫(kù)的主進(jìn)程發(fā)送請(qǐng)求,主庫(kù)驗(yàn)證從庫(kù),交給主庫(kù)IO線程負(fù)責(zé)數(shù)據(jù)傳輸;
2.主庫(kù)IO線程對(duì)比從庫(kù)發(fā)送過(guò)來(lái)的master.info里的信息,將binlog文件信息,偏移量和binlog文件名等發(fā)送給從庫(kù)
3.從庫(kù)接收到信息后,將binlog信息保存到relay-bin中,同時(shí)更新master.info的偏移量和binlog文件名
4.從庫(kù)的SQL線程不斷的讀取relay-bin的信息,同時(shí)將讀到的偏移量和文件名寫道relay-log.info文件,binlog信息寫進(jìn)自己的數(shù)據(jù)庫(kù),一次同步操作完成。
5.完成上次同步后,從庫(kù)IO線程不斷的向主庫(kù)IO線程要binlog信息
6.從庫(kù)如果也要做主庫(kù),也要打開log_bin 和log-slave-update參數(shù)
配置讀寫mysql主從復(fù)制的步驟:
1.在主庫(kù)與從庫(kù)都安裝mysql數(shù)據(jù)庫(kù)
2.在主庫(kù)的配置文件(/etc/my.cnf)中配置server-id 和log-bin
3.在登陸主庫(kù)后創(chuàng)建認(rèn)證用戶并做授權(quán)。
4.在從庫(kù)的配置文件(/etc/my.cnf)中配置server-id
5.登陸從庫(kù)后,指定master并開啟同步開關(guān)。
需要注意的是server-id主從庫(kù)的配置是不一樣的。
Server-id存在作用:
mysql同步的數(shù)據(jù)中是包含server-id的,而server-id用于標(biāo)識(shí)該語(yǔ)句最初是從哪個(gè)server寫入的。因此server-id一定要有的
Server-id不能相同的原因:每一個(gè)同步中的slave在master上都對(duì)應(yīng)一個(gè)master線程,該線程就是通過(guò)slave的server-id來(lái)標(biāo)識(shí)的;每個(gè)slave在master端最多有一個(gè)master線程,如果兩個(gè)slave的server-id 相同,則后一個(gè)連接成功時(shí),slave主動(dòng)連接master之后,如果slave上面執(zhí)行了slave stop;則連接斷開,但是master上對(duì)應(yīng)的線程并沒(méi)有退出;當(dāng)slave start之后,master不能再創(chuàng)建一個(gè)線程而保留原來(lái)的線程,那樣同步就可能有問(wèn)題;
在mysql做主主同步時(shí),多個(gè)主需要構(gòu)成一個(gè)環(huán)狀,但是同步的時(shí)候有要保證一條數(shù)據(jù)不會(huì)陷入死循環(huán),這里就是靠server-id來(lái)實(shí)現(xiàn)的;

創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元閩清做網(wǎng)站,已為上家服務(wù),為閩清各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

Mysql的主從復(fù)制(gtid)實(shí)驗(yàn)配置:

配置環(huán)境:rhel6.5  iptables selinx down
172.25.40.1    server1.example.com  master
172.25.40.2    server2.example.com   slave
安裝包:mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
在master和slave上解壓后安裝mysql數(shù)據(jù)庫(kù):

tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm
 /etc/init.d/mysqld start
 grep 'password' /var/log/mysqld.log       
      #篩選初始化是數(shù)據(jù)庫(kù)登陸密碼
登陸數(shù)據(jù)庫(kù)后修改密碼:
`alter user root@localhost identified by 'xxxxxxx';` ##修改本地用戶密碼
1.Master端的操作:

vim /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON    #使用gtid模式
enforce-gtid-consistency=true  #強(qiáng)制使用gtid

Slave端的操作:

[mysqld]
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true

注意:在修改兩臺(tái)服務(wù)器的mysql配置文件時(shí),一定要保證server-id必須是不同的,server-id的取值范圍是:2^32-1
2.重新啟動(dòng)兩臺(tái)服務(wù)器上的mysql
` /etc/init.d/mysqld restart`
3.進(jìn)入主庫(kù)創(chuàng)建認(rèn)證用戶并授權(quán)
`grant replication slave on *.* to redhat@'172.25.40.%' identified by 'xxxxxxxxxx';`
4.進(jìn)入slave端指定master

stop slave;
change master to master_host='172.25.40.1',master_user='redhat',master_password='xxxxxxxxxx',master_auto_position=1;
start slave;

5.在設(shè)置半同步復(fù)制master端的操作

mysql>  install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.50 sec)

mysql>  set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)

6.5.在設(shè)置半同步復(fù)制slave端的操作

mysql>  install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.14 sec)

mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

如果在slave端開啟io線程后,會(huì)自動(dòng)調(diào)轉(zhuǎn)為半同步模式進(jìn)行數(shù)據(jù)傳輸
Mysql 主從復(fù)制之半同步復(fù)制(基于gtid)

關(guān)閉io線程 在master上再進(jìn)行事務(wù)時(shí)會(huì)等待10s后從半同步狀態(tài)轉(zhuǎn)為異步。
Mysql 主從復(fù)制之半同步復(fù)制(基于gtid)

當(dāng)?shù)诙芜M(jìn)行數(shù)據(jù)插入時(shí)會(huì)變成異步同步

Mysql 主從復(fù)制之半同步復(fù)制(基于gtid)

Mysql 并行復(fù)制
多線程工作
Slave端修改配置文件:

[mysqld]
slave-parallel-type=LOGICAL_CLOCK         
slave-parallel-workers=16             #開啟16個(gè)線程工作
master_info_repository=TABLE        #以表的形式存放master_info的信息
relay_log_info_repository=TABLE       #以表的形式存放relay_log_info的信息
relay_log_recovery=ON               #

重啟服務(wù)
`/etc/init.d/mysqld restart`
當(dāng)進(jìn)入數(shù)據(jù)庫(kù)的mysql庫(kù)中,可以執(zhí)行sql語(yǔ)句:
`select * from slave_master_info;`
可以看到原本在/var/lib/mysql下的relay-log.info的文件已經(jīng)轉(zhuǎn)為數(shù)據(jù)庫(kù)中的表。

分享題目:Mysql主從復(fù)制之半同步復(fù)制(基于gtid)
URL地址:http://bm7419.com/article16/godhgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)