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

文章內容概覽

1、什麼是主從複製

2、主從複製的作用

3、主從複製的工作流程

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

   4、1 複製如何開始

   4、2 如果限制從服務器只讀

   4、3 如果保證主從複製時的事務安全

5、配置主從複製

   5、1 Master節點配置

   5、2 Slave 節點配置

   5、3 驗證主從複製

6、半同步複製

    6、1 什麼是半同步複製

    6、2 主節點配置

    6、3 從節點配置

7、複製過濾器

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

    7、2 複製過濾器實現

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

    8、1 雙主配置注意事項

    8、2 雙主配置環境

    8、3 雙主配置過程

    8、4 驗證雙主

    8、5 驗證id自動增長

9、複製的監控和維護


文章環境說明

操作系統:

[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

1、什麼是主從複製

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

2、主從複製的作用

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

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

備份:備份的時候可以停止從節點進行備份,備份更安全

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

MySQL升級測試:高版本數據庫通過複製獲得數據,然後進行測試

3、複製的工作流程

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

wKiom1WK01ShOzqHAAJ4lmbAMW0950.jpg

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

2、主節點將所有引起數據庫更改的語句記錄到bin-log日誌文件中

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

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

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

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

7、將所有引起從庫更改的語句記錄到從庫的bin-log日誌文件中;由於bin-log日誌主要是用於數據恢復,並且在主庫已經存在所以在從庫開啓會佔用不必要的性能開銷,推薦關閉。

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

4、1:複製如何開始

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

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

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

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

       阻止所有用戶 MariaDB> FLUSH TABLES WITH READ LOCK;

4、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

5、主從複製配置

5、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;   #設置完成一定要刷新,不然不生效

5、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

5、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          二進制日誌文件中的位置

6、半同步複製

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

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


配置半同步需要裝載模塊,否則不會出現半同步配置變量

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

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

6、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    |
+------------------------------------+-------+

6、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     |
+--------------------------------------------+-------+

7、複製過濾器

7、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      |           |
+----------------------------------+-----------+

7、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            |
+--------------------+

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

8、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) 各自把對方指定爲主服務器

8、2:雙主配置環境

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

Node1172.16.4.136

Node2172.16.4.10

8、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

8、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)

8、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 |
+----+------+

9、複製的監控和維護

(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) 數據不一致的修復方法:

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

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章