Mariadb主從複製,半同步複製,主主複製

文章內容概覽前端

一、什麼是主從複製node

二、主從複製的做用mysql

三、主從複製的工做流程linux

四、複製時應該注意的問題sql

   四、1 複製如何開始數據庫

   四、2 若是限制從服務器只讀
vim

   四、3 若是保證主從複製時的事務安全
安全

五、配置主從複製bash

   五、1 Master節點配置服務器

   五、2 Slave 節點配置

   五、3 驗證主從複製

六、半同步複製

    六、1 什麼是半同步複製

    六、2 主節點配置

    六、3 從節點配置

七、複製過濾器

    七、1 複製過濾器實現思路

    七、2 複製過濾器實現

八、雙主(主主複製)配置介紹

    八、1 雙主配置注意事項

    八、2 雙主配置環境

    八、3 雙主配置過程

    八、4 驗證雙主

    八、5 驗證id自動增加

九、複製的監控和維護


文章環境說明

操做系統:

[root@master ~]# cat/etc/redhat-release
CentOS release 6.6 (Final)
[root@node2 ~]# uname -r
2.6.32-504.el6.x86_64
[root@node2 ~]# uname -m
x86_64

數據庫軟件:

mariadb-5.5.43-linux-x86_64.tar.gz

ip地址:

master172.16.4.136

slave172.16.4.10

一、什麼是主從複製

      Mysql主從複製是mysql集羣的基礎,在mysql集羣中爲了保證數據的一致型,須要在mysql集羣前端添加讀寫分離器,只將寫入操做交給指定節點寫入數據,這個節點就是主節點;將讀操做交給集羣中其餘不執行寫入操做的節點,這個節點就是從節點,那麼從節點的數據從那裏來?就是複製主節點的上面的數據,複製原理下文中有圖文說明。

二、主從複製的做用

數據分佈:可以將數據分散到多個位置,能夠實現異地災備

負載均衡:讀操做,適用於讀密集型的應用

備份:備份的時候能夠中止從節點進行備份,備份更安全

高可用和故障切換:主節點故障,能夠將從節點提高爲主節點(須要手動實現,或者腳本監控實現,不如corosync或者heartbeat之類高可用方案)

MySQL升級測試:高版本數據庫經過複製得到數據,而後進行測試

三、複製的工做流程

對第456步就是有兩個,你沒有看錯,我沒有畫錯

wKiom1WK01ShOzqHAAJ4lmbAMW0950.jpg

一、用戶向主節點數據庫寫入數據

二、主節點將全部引發數據庫更改的語句記錄到bin-log日誌文件中

三、從庫的IO進程,不停的發送信息詢問主庫是否有數據更新,發送請求以前會讀取master.info文件,獲取上次記錄的pos位置和鏈接主庫的用戶名和密碼

四、主庫IO線程收到從庫請求,拿從庫上次記錄主庫的pos點和主庫bin-log日誌當前記錄的pos點進行對比,若是主庫pos點的數值大於從庫上次記錄的pos點,就說明數據發生改變,發送bin-log的更新內容給從庫;若是主庫pos點的數值等於從庫上次記錄的pos點,說明數據沒有更改,則繼續接收從庫請求,進行判斷

五、從庫IO線程收到主庫的更新內容,將pos的更新信息記錄到master.info文件中,下次從庫在請求主庫更新則是從當前記錄的pos位置開始;而且將主庫更新的SQL語句記錄到relay-log日誌文件中。

六、SQL線程從relay log中讀取日誌信息,在本地完成重放;(此時從庫更新完成)

七、將全部引發從庫更改的語句記錄到從庫的bin-log日誌文件中;因爲bin-log日誌主要是用於數據恢復,而且在主庫已經存在因此在從庫開啓會佔用沒必要要的性能開銷,推薦關閉。

四、複製時應該注意的問題

四、1:複製如何開始

       主節點運行很長時間,且已經有必定規模的數據,如何啓動複製?

       解決方法:在主節點作一個徹底備份,並記錄二進制日誌文件及位置;在從節點恢復此徹底備份,並在啓動複製時從記錄的二進制日誌文件和位置開始;

四、2:如何限制從服務器只讀

       在從服務器啓動read_only;但僅對非具備SUPER權限的用戶有效;

       阻止全部用戶 MariaDB> FLUSH TABLES WITH READ LOCK;

四、3:如何保證主從複製時的事務安全

     二進制日誌默認在內存中會有緩衝,當一個事務提交的時候,這個數據就會被持久的存儲到innodb文件中去了,可是和這個事務相關的二進制日誌有可能還在內存中,因此從服務器是沒法找到這種二進制日誌的,因此須要儘量作到一旦事務提交了,就當即把相關的二進制日誌保存到硬盤中,以保證事務安全。


master節點啓用參數:

   sync_binlog= on        #同步二進制日誌,一旦事務提交則立馬將內存中的二進制日誌文件同步到磁盤

   若是用到的爲InnoDB存儲引擎:

        innodb_flush_logs_at_trx_commit  #innodb一旦在事務提交時當即將日誌文件寫入到磁盤

        innodb_support_xa=on            #支持分佈式事務

slave節點:

  1、最好不要將relay-log日誌和數據文件放到同一個磁盤

  2、跳過slave的自動啓動功能

啓動了複製功能的從節點,若是從節點的mysql服務被關閉在啓動以後slave線程是自動啓動的,可是複製數據的位置有可能不是咱們指望的位置,最好關閉slave的自啓動功能,有運維人員手動啓動,以避免形成數據不一致,關閉命令以下:

       skip_slave_start 


不考慮磁盤IO的請求下,能夠啓動以下選項:

主節點:

       sync_master_info= 1

從節點:

       sync_relay_log= 1

       sync_relay_log_info= 1

五、主從複製配置

五、1master節點配置

 (1) 啓用二進制日誌;

 (2) 設置一個在當前集羣中唯一的server-id

二進制日誌,在Mariadb安裝完成以後默認就是啓動的,這裏只是將mysql-bin改成了master-bin固然不改也是能夠的,另外server-id的選項也是默認的,這裏並無修改。

[root@master ~]#  vim /etc/my.cnf
log-bin=master-bin       
server-id      = 1

設置完成以後重啓服務生效,並驗證二進制日誌文件是否更改成master-bin

[root@master ~]# ll /mydata/data/
-rw-rw---- 1 mysql mysql      245 Jun 15 23:36 master-bin.000001
-rw-rw---- 1 mysql mysql       20Jun 15 23:36 master-bin.index

 (3) 建立一個有複製權限(REPLICATION SLAVE, REPLICATION CLIENT)帳號;

MariaDB [(none)]> grant replicationclient,replication slave on *.* to 'repluser'@'172.16.%.%' identified by'replpass';
MariaDB [(none)]> flushprivileges;   #設置完成必定要刷新,否則不生效

五、2slave節點配置

 (1) 啓用中繼日誌;

 (2) 設置一個在當前集羣中唯一的server-id

設置關閉二進制日誌,而後啓用中繼日誌,因爲master已經使用的1id,因此slave須要修改id號,這裏爲了方便之後擴展修改成10

[root@slvae ~]# vim /etc/my.cnf
#log-bin=mysql-bin     #註銷即關閉二進制日誌
#binlog_format=mixed
relay-log = relay-bin
server-id = 10
read-only = on       #關閉從服務器寫入功能

 (3) 使用有複製權限用戶帳號鏈接至主服務器,並啓動複製線程;

複製以前查看一下master服務器記錄二進制日誌的位置,肯定從主服務器的那個位置複製。

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      496 |              |                  |
+-------------------+----------+--------------+------------------+

從服務器使用CHANGE MASTER鏈接主服務器進行復制,CHANGE MASTER使用語法在下面有介紹。

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.16.4.136',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=496,MASTER_CONNECT_RETRY=5,MASTER_HEARTBEAT_PERIOD=2;

說明:若是是生產環境,從服務器複製以前須要導入一次主服務器的徹底備份,而後在從主服務器備份以後開始記錄二進制日誌的pos位置開始服務。           

 

查看從服務器複製狀態,IOSQL線程仍是處於關閉狀態,須要手動啓動纔會開始複製

MariaDB [(none)]> show slave status\G
*************************** 1. row***************************
              Slave_IO_State:
                 Master_Host: 172.16.4.136
                 Master_User: repluser
                 Master_Port: 3306
               Connect_Retry: 5
             Master_Log_File: master-bin.000001
         Read_Master_Log_Pos: 496
              Relay_Log_File: relay-bin.000001
               Relay_Log_Pos: 4
       Relay_Master_Log_File: master-bin.000001
            Slave_IO_Running: No        #值爲NO表示沒有啓動IO線程
           Slave_SQL_Running: No        #值爲NO表示沒有啓動SQL線程
             Replicate_Do_DB:
         Replicate_Ignore_DB:
          Replicate_Do_Table:
      Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
                  Last_Errno: 0
                  Last_Error:
                Skip_Counter: 0
         Exec_Master_Log_Pos: 496
             Relay_Log_Space: 245
             Until_Condition: None
              Until_Log_File:
               Until_Log_Pos: 0
          Master_SSL_Allowed: No
          Master_SSL_CA_File:
          Master_SSL_CA_Path:
             Master_SSL_Cert:
           Master_SSL_Cipher:
              Master_SSL_Key:
       Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error:
              Last_SQL_Errno: 0
              Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
            Master_Server_Id: 0
1 row in set (0.00 sec)

使用START SLAVE命令啓動從服務器的IOSQL線程,並再次查看狀態

MariaDB [(none)]> START SLAVE;      #此命令啓動從服務器複製
MariaDB [(none)]> show slave status\G
*************************** 1. row***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: 172.16.4.136
                 Master_User: repluser
                 Master_Port: 3306
               Connect_Retry: 5
             Master_Log_File: master-bin.000001
         Read_Master_Log_Pos: 496
              Relay_Log_File: relay-bin.000002
               Relay_Log_Pos: 530
       Relay_Master_Log_File: master-bin.000001
            Slave_IO_Running: Yes    #這裏的值爲YES表示啓動
           Slave_SQL_Running: Yes    
             Replicate_Do_DB:
         Replicate_Ignore_DB:
          Replicate_Do_Table:
      Replicate_Ignore_Table:
     Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
                  Last_Errno: 0
                  Last_Error:
                Skip_Counter: 0
         Exec_Master_Log_Pos: 496
             Relay_Log_Space: 818
             Until_Condition: None
              Until_Log_File:
               Until_Log_Pos: 0
          Master_SSL_Allowed: No
          Master_SSL_CA_File:
          Master_SSL_CA_Path:
             Master_SSL_Cert:
           Master_SSL_Cipher:
              Master_SSL_Key:
       Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error:
               Last_SQL_Errno: 0
              Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
            Master_Server_Id: 1
1 row in set (0.00 sec)

查看中繼日誌已經存在了

[root@slvae ~]# ll /mydata/data/relay-*
-rw-rw---- 1 mysql mysql 245 May 27 23:06 /mydata/data/relay-bin.000001
-rw-rw---- 1 mysql mysql  19 May 27 23:06 /mydata/data/relay-bin.index
-rw-rw---- 1 mysql mysql  43 May 27 23:06 /mydata/data/relay-log.info

五、3:驗證主從複製:

主節點執行寫操做,如建立一個數據庫

MariaDB [(none)]> create database mydb;

從節點驗證:從節點沒有執行建立,數據庫就自動建立過來了

MariaDB [(none)]> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mydb              |
| mysql             |
| performance_schema |
| test              |
+--------------------+

在此查看從服務器狀態,日誌的記錄位置也已經改變了

MariaDB [(none)]> show slave status\G
*************************** 1. row***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: 172.16.4.136
                 Master_User: repluser
                 Master_Port: 3306
               Connect_Retry: 5
             Master_Log_File: master-bin.000001
         Read_Master_Log_Pos: 579      #這裏從496變成了579
              Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 613     #這裏從530變成了613
       Relay_Master_Log_File: master-bin.000001
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes
             Replicate_Do_DB:
         Replicate_Ignore_DB:
           Replicate_Do_Table:
      Replicate_Ignore_Table:
     Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
                  Last_Errno: 0
                  Last_Error:
                Skip_Counter: 0
         Exec_Master_Log_Pos: 579
              Relay_Log_Space: 901
             Until_Condition: None
              Until_Log_File:
               Until_Log_Pos: 0
          Master_SSL_Allowed: No
          Master_SSL_CA_File:
          Master_SSL_CA_Path:
             Master_SSL_Cert:
           Master_SSL_Cipher:
              Master_SSL_Key:
       Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error:
              Last_SQL_Errno: 0
              Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
            Master_Server_Id: 1
1 row in set (0.00 sec)

說明:服務器程序版本:最好相同;若是不一樣應該從版本高;

附錄CHANGE MASTER用法:

語法:CHANGE MASTER TO option [, option] ...

選項以下:

MASTER_BIND = 'interface_name'

| MASTER_HOST = 'host_name'               主服務器地址

| MASTER_USER = 'user_name'               有複製權限的用戶名

| MASTER_PASSWORD = 'password'            用戶密碼

| MASTER_PORT = port_num                  主服務器的端口

| MASTER_CONNECT_RETRY = interval          鏈接重試時間間隔

| MASTER_HEARTBEAT_PERIOD = interval        心跳檢測時間間隔

| MASTER_LOG_FILE = 'master_log_name'       主服務器二進制日誌文件

| MASTER_LOG_POS = master_log_pos          二進制日誌文件中的位置

六、半同步複製

六、1:什麼是半同步複製:

    正常狀況下主服務器和從服務器是同步的,可是一旦主服務器和從服務器的鏈接超時主服務器就自動降級爲異步模式。


配置半同步須要裝載模塊,不然不會出現半同步配置變量

主節點裝載的模塊:semisync_master.so

從節點轉載的模塊:semisync_slave.so

六、2:主節點配置:

裝載模塊

MariaDB [(none)]> INSTALL PLUGINrpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> show global variables like'%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF  |     #是否啓用半同步
| rpl_semi_sync_master_timeout       | 10000 |    #超時時間,單位毫秒
| rpl_semi_sync_master_trace_level   | 32   |      #追蹤級別
| rpl_semi_sync_master_wait_no_slave | ON    |    #等待確保沒有從服務器
+------------------------------------+-------+

設置半同步參數:

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;     #設置爲1或者on表示啓用半同步
MariaDB [(none)]> SET GLOBALrpl_semi_sync_master_timeout=2000;   #設置超市時間爲2秒
MariaDB [(none)]> show global variables like'%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | ON   |
| rpl_semi_sync_master_timeout       | 2000 |
| rpl_semi_sync_master_trace_level   | 32   |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+

六、3:從節點設置

轉載從節點模塊

MariaDB [(none)]> INSTALL PLUGINrpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE'%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF  |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+

啓動從節點

MariaDB [(none)]> SET GLOBALrpl_semi_sync_slave_enabled=1;
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE'%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+

設置完成以後,從節點須要重啓IO線程。

MariaDB [(none)]> STOP SLAVE IO_THREAD;
MariaDB [(none)]> START SLAVE IO_THREAD;

驗證:主節點查看Rpl_semi_sync_master_clients值爲1表示已經有一個從節點已半同步的狀態鏈接到了主節點

MariaDB [(none)]> show global status like'%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |   #此值爲1,表示有一個從節點以半同步模式鏈接到主節點
| Rpl_semi_sync_master_net_avg_wait_time     | 0    |
| Rpl_semi_sync_master_net_wait_time         | 0    |
| Rpl_semi_sync_master_net_waits             | 0     |
| Rpl_semi_sync_master_no_times              | 0    |
| Rpl_semi_sync_master_no_tx                 | 0     |
| Rpl_semi_sync_master_status                | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0    |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0    |
| Rpl_semi_sync_master_tx_wait_time          | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse |0     |
| Rpl_semi_sync_master_wait_sessions         | 0    |
| Rpl_semi_sync_master_yes_tx                | 0     |
+--------------------------------------------+-------+

七、複製過濾器

七、1 複製過濾器實現思路

複製過濾器功能:slave節點僅複製幾個指定的數據庫,而非全部。

有兩種實現思路:

(1) 主服務器僅向二進制日誌中記錄有特定數據庫相關的寫操做;

       問題:即時點還原將沒法全面實現,不建議使用

       binlog_do_db=                     # 數據庫白名單,若是啓用則只記錄白名單中的數據庫

       binlog_ignore_db=               # 數據庫黑名單,若是啓用則除了黑名單以外的數據庫都記錄

(2)從服務器的SQL_THREAD僅在中斷日誌中讀取特定數據相關的語句並應用在本地;推薦使用

       問題:會形成網絡帶寬和磁盤IO的浪費;

       Replicate_Do_DB=                        #數據庫白名單

       Replicate_Ignore_DB=                  #數據庫黑名單

       Replicate_Do_Table=                    #表白名單

       Replicate_Ignore_Table=              #表黑名單

       Replicate_Wild_Do_Table=           #表白名單支持通配符;%(後面全部)、_(一個字符)

       Replicate_Wild_Ignore_Table=     #表黑名單支持通配符

 

查看Replicate相關變量,表示什麼都沒有設置,若是須要設置複製過濾,能夠直接修改Replicate變量或者在配置文件中定義。

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE'replicate%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| replicate_annotate_row_events    | OFF      |
| replicate_do_db                  |           |
| replicate_do_table               |           |
| replicate_events_marked_for_skip | replicate |
| replicate_ignore_db              |           |
| replicate_ignore_table           |           |
| replicate_wild_do_table          |           |
| replicate_wild_ignore_table      |           |
+----------------------------------+-----------+

七、2 複製過濾器實現

示例:設置只能只複製testdb數據庫,設置以前須要關閉複製功能,不然會報錯,設置完成以後在開啓。

MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> SET GLOBALreplicate_do_db=testdb;
MariaDB [(none)]> STARTSLAVE;

驗證:查看slave狀態,Replicate_Do_DB的值就是testdb,表示只複製testdb的內容

MariaDB [(none)]> show slave status\G;
              Replicate_Do_DB: testdb

操做驗證:主節點建立兩個數據庫testdbtestdb1

MariaDB [(none)]> create database testdb;
MariaDB [(none)]> createdatabase testdb1;

從節點查看數據庫只是複製過來了testdb,而testdb1則是被過濾掉了

MariaDB [(none)]> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| performance_schema |
| test              |
| testdb            |
+--------------------+

八、雙主(主主複製)配置介紹

八、1:雙主配置注意事項:

(1) 各自使用不一樣的serverid

(2) 都啓用binlogrelay log

(3) 定義自動增加的id字段的增加方式

   定義一個節點使用奇數id
     auto_increment_offset=1      #指定開始的id
     auto_increment_increment=2   #指定一次增長的id
   定義另外一個節點使用偶數id
     auto_increment_offset=2
     auto_increment_increment=2

(4) 都受權有複製權限的用戶帳號

(5) 各自把對方指定爲主服務器

八、2:雙主配置環境

這裏的配置是重新的環境中開始配置的,不是使用上面的主從配置環境,可是拓撲沒有變。

Node1172.16.4.136

Node2172.16.4.10

八、3 雙主配置過程

Node1節點配置

修改node1節點配置文件,啓動二進制日誌和中繼日誌,這裏的id選擇爲單數

[root@node1 ~]# vim /etc/my.cnf
log-bin=master-bin        
relay-log=relay-bin
auto_increment_offset=1
auto_increment_increment=2
server-id      = 1

配置文件修改完成,重啓服務生效

登陸Mariadb建立具備複製權限的用戶

MariaDB [(none)]> GRANT REPLICATIONSLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY'replpass';
MariaDB [(none)]> FLUSH PRIVILEGES;

Node2節點配置

啓動二進制日誌和中繼日誌,這裏的id選擇爲雙數

[root@node2 ~]# vim /etc/my.cnf
server-id      = 10
log-bin=master-bin
relay-log = relay-bin
auto_increment_offset=2
auto_increment_incremtn=2

配置文件修改完成,重啓服務生效

登陸Mariadb建立具備複製權限的用戶

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
MariaDB [(none)]> FLUSH PRIVILEGES;

node1node2節點分別啓用複製功能

查看node1節點二進制文件的記錄位置

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000004 |      506 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

查看node2節點二進制文件的記錄位置

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      506 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

 

Node1node2節點使用CHANGE MASTER進行復制

Node1節點

MariaDB[(none)]> CHANGE MASTER TO MASTER_HOST='172.16.4.136',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=506;

命令執行若是沒有報錯就啓動複製線程

MariaDB[(none)]> START SLAVE;
MariaDB[(none)]> show slave status\G;       
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

Node2節點

MariaDB [(none)]> CHANGE MASTER TOMASTER_HOST='172.16.4.10',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000004',MASTER_LOG_POS=506;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> show slave status\G;
             Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

八、4:驗證雙主

Node1節點建立一個數據庫

MariaDB [(none)]> create database node1;

Node2節點建立一個數據庫

MariaDB [(none)]> create database node2;

分別在node1節點和node2節點查看,若是主節點和從節點都出現了node1node2數據庫說明雙主配置成功了。

MariaDB [(none)]> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mysql             |
| node1             |
| node2             |
| performance_schema |
| test              |
+--------------------+
6 rows in set (0.00 sec)

八、5:Id自動增加驗證

Node2節點建立一個表,而且插入數據查看字段的id就是雙數

MariaDB [(none)]> use node1;
MariaDB [node1]> create table tb1 (id INTUNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name
MariaDB [node1]> INSERT INTO tb1 (name) VALUES('stu1'),('stu2');
MariaDB [node1]> select * from tb1;
+----+------+
| id | name |
+----+------+
|  2 | stu1 |
|  4 | stu2 |
+----+------+

Node1插入數據,查看id就是單數

MariaDB [(none)]> use node1;
MariaDB [node1]> INSERT INTO tb1 (name) VALUES('stu3'),('stu4');
MariaDB [node1]> SELECT * FROM tb1;
+----+------+
| id | name |
+----+------+
|  2 | stu1 |
|  4 | stu2 |
|  5 | stu3 |
|  7 | stu4 |
+----+------+

九、複製的監控和維護

(1) 清理日誌:PURGE    

(2) 複製監控

       SHOW  MASTER  STATUS      #查看當前使用的二進制日誌和pos位置

       SHOW  BINLOG  EVENTS      #查看二進制日誌文件記錄的內容

       SHOW  BINARY  LOGS          #查看全部二進制日誌

       SHOW  SLAVE  STATUS        #從節點查看複製狀態

(3) 如何判斷slave是否落後於master       

MariaDB [(none)]> show slave status\G;

     Seconds_Behind_Master: 0     #0表示不落後

(4) 如何肯定主從節點數據是否一致?

       經過表自身的CHECKSUM檢查

       使用percona-toolspt-table-checksum

(5) 數據不一致的修復方法:

       重複複製:就是在從上一次主庫徹底備份的導入位置從新複製一遍

相關文章
相關標籤/搜索