• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • mysql的主從復制、基于GTID的主從復制、半同步復制、并行復制

    mysql的主從復制

    MySQL之間數據復制的基礎是二進制日志文件(binary log file)。一臺MySQL數據庫一旦啟用二進制日志后,其作為master,它的數據庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數據庫 作為slave通過一個I/O線程與主服務器保持通信,并監控master的二進制日志文件的變化,如果發現master二進制日志文件發生變化,則會把 變化復制到自己的中繼日志中,然后slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了 主從復制。

    實驗環境:

    Linux系統版本:Redhat 6.5版本 
    系統防火墻關閉:selinux=disabled 
    server2:172.25.68.2(Master) 
    server3:172.25.68.3(Slave) 

    1.master數據庫的搭建

    [root@server2 ~]# tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
    

    [root@server2 ~]# yum install 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 -y
    [root@server2 ~]# /etc/init.d/mysqld start    ##開啟數據庫

    [root@server2 ~]# grep password /var/log/mysqld.log      ##查找數據庫的原始密碼

    [root@server2 ~]# mysql_secure_installation     ##初始化數據庫,密碼設定為WESTOS.com123
    [root@server2 ~]# vim /etc/my.cnf    ##server-id為服務器的默認id,master和slave不能相同,log-bin表示二進制日志
    

     [root@server2 ~]# /etc/init.d/mysqld restart
    

    [root@server2 ~]# mysql -p
    

    可以看出,master的id為154

    mysql> grant replication slave on *.* to repl@'172.25.68.%' identified by 'WESTOS.com123';      ##授權slave以repl身份從172.25.68.0/24網段登陸,對任何數據庫的任何表進行操作,密碼‘WESTOS.com123‘
    

    授權后,id為447

    2.slave數據庫的搭建

    [root@server3 ~]# tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
    [root@server3 ~]# yum install 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 -y
    [root@server3 ~]# /etc/init.d/mysqld start    ##開啟數據庫
    [root@server3 ~]# grep password /var/log/mysqld.log      ##查找數據庫的原始密碼
    [root@server3 ~]# mysql_secure_installation     ##初始化數據庫,密碼設定為WESTOS.com123
    [root@server3 ~]# vim /etc/my.cnf   

    [root@server3 ~]# /etc/init.d/mysqld restart
    [root@server3 ~]# mysql -p
    mysql> change master to master_host='172.25.68.2',master_user='repl',master_password='WESTOS.com123',master_log_file='mysql-bin.000001',master_log_pos=447; 
    mysql> start slave;
    mysql> show slave status\G;      ##開啟slave,并查看slave狀態
    

    IO線程和sql線程已開啟

    創建westos庫,在westos庫中創建表linux并寫入數據

    查看linux表中信息

    在slave中登陸mysql,查看自動同步過來的linux表中的信息

    3.GTID主從復制

    1.配置master

    [root@server2 ~]# vim /etc/my.cnf     ##添加的內容表示開啟gtid模塊
    

     [root@server2 ~]# /etc/init.d/mysqld restart
     [root@server2 ~]# mysql -p

    2.配置slave

    [root@server3 ~]# vim /etc/my.cnf
    

    [root@server3 ~]# /etc/init.d/mysqld restart
    [root@server3 ~]# mysql -p


    測試:

    在master的westos庫中的linux表中寫入數據

    在slave中查看同步到的數據

    4.半同步復制

    異步復制(Asynchronous replication)

    MySQL默認的復制即是異步的,主庫在執行完客戶端提交的事務后會立即將結果返給給客戶端,并不關心從庫是否已經接收并處理,這樣就會有一個問題,主如果crash掉了,此時主上已經提交的事務可能并沒有傳到從上,如果此時,強行將從提升為主,可能導致新主上的數據不完整。

    全同步復制(Fully synchronous replication)

    指當主庫執行完一個事務,所有的從庫都執行了該事務才返回給客戶端。因為需要等待所有從庫執行完該事務才能返回,所以全同步復制的性能必然會收到嚴重的影響。

    半同步復制(Semisynchronous replication)

    介于異步復制和全同步復制之間,主庫在執行完客戶端提交的事務后不是立刻返回給客戶端,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復制,半同步復制提高了數據的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步復制最好在低延時的網絡中使用。

    1.master配置

    [root@server2 ~]# mysql -p     ##安裝半同步模塊

    以上設定為臨時的,永久設定如下:

    [root@server2 ~]# vim /etc/my.cnf

    [root@server2 ~]# /etc/init.d/mysqld restart
    

    2.slave配置

    [root@server3 ~]# mysql -p     ##安裝半同步模塊并啟動

    重新連接主服務器(半同步才會生效)

    3.server2(slave)配置:配置同server2相同

    Master上查看是否啟用了半同步:

    主要看Rpl_semi_sync_master_clients是否為1,Rpl_semi_sync_master_status是否為ON。若符合則表示班同步復制機制已經正常工作,如果Rpl_semi_sync_master_status為OFF,說明出現了網絡延遲或Slave IO線程延遲。

    延時測試:

    關掉server2的IO線程

    在server1寫入數據

    在server2和3查看是否同步

    未同步過來,因為設置的延時為10秒,當server1等待10秒后,若還沒有反應則會轉成異步模式

    開啟server2的io線程

    server3又自動同步過來

    當server2的IO線程關閉后,server2和server3的數據都不會與server1同步

    只關閉server3的IO線程后,只有server3與server1不同步

    5.并行復制

    思考:

    一般主從復制,有三個線程參與,都是單線程:Binlog Dump(主) ----->IO Thread (從) -----> SQL Thread(從)。復制出現延遲一般出在兩個地方

    1)SQL線程忙不過來(可能需要應用數據量較大,可能和從庫本身的一些操作有鎖和資源的沖突;主庫可以并發寫,SQL線程不可以;主要原因)

    2)網絡抖動導致IO線程復制延遲(次要原因)。

    解決辦法:

         MySQL從5.6開始有了SQL Thread多個的概念,可以并發還原數據,即并行復制技術。

      MySQL 5.6中,設置參數slave_parallel_workers = 4(>1),即可有4個SQL Thread(coordinator線程)來進行并行復制,其狀態為:Waiting for an evant from Coordinator。

    但是其并行只是基于Schema的,也就是基于庫的。如果數據庫實例中存在多個Schema,這樣設置對于Slave復制的速度可以有比較大的提升。通常情況下單庫多表是更常見的一種情形,

    那基于庫的并發就沒有卵用。其核心思想是:不同schema下的表并發提交時的數據不會相互影響,即slave節點可以用對relay log中不同的schema各分配一個類似SQL功能的線程,

    來重放relay log中主庫已經提交的事務,保持數據與主庫一致。

      在MySQL 5.7中,引入了基于組提交的并行復制(Enhanced Multi-threaded Slaves),設置參數slave_parallel_workers>0并且 global.slave_parallel_type=‘LOGICAL_CLOCK’,

    即可支持一個schema下,slave_parallel_workers個的worker線程并發執行relay log中主庫提交的事務。其核心思想:一個組提交的事務都是可以并行回放(配合binary log group commit);

    slave機器的relay log last_committed相同的事務(sequence_num不同)可以并發執行。

    [root@server2 ~]# vim /etc/my.cnf

    [root@server2 ~]# /etc/init.d/mysqld restart
    [root@server2 ~]# mysql -p

    其狀態:Waiting for an evant from Coordinator已經存在,說明并行復制已經配置成功!

     

    6.斷電后數據庫的恢復

    mysql> show binlog events\G可以查看到binlog和pos點

    方案一:

    mysqldump -p test > test.sql      ## 將庫的內容導入到test.sql文件中

    scp test.sql server3:       ##傳到server3

    mysql -p < test.sql    ##在server3上恢復test庫

    ps:這種方法會DROP之前的內容重新建,可能會導致信息丟失

    方案二:

    mysqlbinlog 命令,可以使用start time 和stop time進行限定,或--start-position

    --help查看用法

     

     

     

    版權聲明:本文為l675655077原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/l675655077/article/details/81489790

    智能推薦

    基于gtid的半同步mysql主從復制

    此篇博客的是在上一篇博客(mysql主從復制)的基礎上寫的 https://blog.csdn.net/weixin_40543283/article/details/87911286  此篇博客寫的是基于gtid的半同步mysql主從復制 一、gtid的半同步mysql主從復制的原理介紹 1.什么是gtid? GTID (Global Transaction ID) 是對于一個已提交事...

    Mysql的主從復制以及基于gtid的主從復制、半同步復制、組復制

    前言: Mysql是現在普遍使用的數據庫,但是如果宕機了必然會造成數據丟失。為了保證mysql數據庫的可靠性。就要會一些提高可靠性的技術。因此,一般來說都是通過 主從復制(Master-Slave)的方式來同步數據提高可靠性,再通過讀寫分離(MySQL-Proxy)來提升數據庫的并發負載能力。 本文我們將會詳細給大家介紹在Redhat7環境下Mysql的主從復制以及基于gtid的主從復制、半同步復...

    linux mysql的主從復制(GTID)/并行復制/無損復制

    安裝mysql 本次使用五個rpm包安裝   安裝后修改密碼即可 密碼默認在log中   初始化修改即可   開啟mysql二進制日志 可以設定徐亞同步的數據庫或不需要的數據庫 進入mysql創建備份賬戶 查看日至位置以及pos在備份機使用 grant replication slave on  *.* to  'bobo'@'172.25.15....

    mysql主從復制 | 級聯方式復制 | 并行復制 | 半同步復制 | 全同步

    兩種模式 注意: 去中心化server3找server2,server2找server1  -------級聯,這樣降低了server1的負載 配置mysql是,很多問題直接看報錯日志就可以解決!!!!! 主從復制是單向的,不能在從機直接操作數據庫寫數據 主從復制的基礎是在底層數據一致上才能搭建,如果不一致,一定要先同步數據在slave上   /////////////////...

    基于gtid實現的mysql主從復制,半同步復制,組復制

    MySQL主從復制 1.mysql主從復制原理: 從庫有兩個線程IO線程和SQL線程 1.從庫的IO線程向主庫的主進程發送請求,主庫驗證從庫,交給主庫IO線程負責數據傳輸; 2.主庫IO線程對比從庫發送過來的master.info里的信息,將binlog文件信息,偏移量和binlog文件名等發送給從庫 3.從庫接收到信息后,將binlog信息保存到relay-bin中,同時更新master.inf...

    猜你喜歡

    mysql主從復制、半同步復制、并行復制、多組復制

    一、主從復制 redhat6.5 master:server1 172.25.35.52 slave:server3 172.25.35.53 master: slave: 測試: master:添加數據庫 slave:查看到同步過來 二、Gtid主從復制 測試: master:給數據庫插入內容 slave:可以同步過來 三、半同步復制 master: timeout 10s,超過該時間會轉為異步...

    mysql主從復制,基于gtid的主從,半同步復制

    MySQL復制原理,其通過三個線程來完成,在master節點上運行的binlogdump線程以及在slave節點上運行的I/O線程和SQL線程。 1. master節點上的binlogdump線程,在slave與其正常連接的情況下,將binlog發送到slave上。 2.slave節點上的I/O線程,通過讀取master節點發送的內容,并將數據復制到本地的relaylog中。 3.slave節點上...

    MySQL5.7安裝+基于GTID主從復制+并行復制+增強半同步復制+讀寫分離+M-S-S架構(聯級復制)

    實驗環境: Centos7.2 角色 主機IP server_id 數據狀態 Proxysql 192.168.148.62 null 無 Master 192.168.148.62 1 剛安裝的全新MySQL實例 Slave1 192.168.148.61 2 剛安裝的全新MySQL實例 Slave2 192.168.148.64 3 剛安裝的全新MySQL實例   一、安裝最新版本M...

    MySQL 主從復制模式以及 基于GTID的半同步復制模式的實現

    MySQL 主從復制模式以及 基于GTID的半同步復制模式的實現 一、MySQL 主從復制模式 異步模式(mysql async-mode) 半同步模式(mysql semi-sync) 全同步模式 二、基于GTID的半同步復制模式的實現 配置server1(主庫) 配置server2(從庫) 測試: 結論: 一、MySQL 主從復制模式 異步模式(mysql async-mode) MySQL默...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    精品国产乱码久久久久久蜜桃不卡