1. 程式人生 > >centos7下mariadb主從環境搭建詳細步驟

centos7下mariadb主從環境搭建詳細步驟

一、主從複製原理

      主伺服器開啟二進位制日誌功能後,主伺服器的的變更就會記錄到二進位制日誌中。從伺服器把主伺服器的二進位制日誌讀到本地的中繼日誌,然後利用中繼日誌重做變更,以此保證主從兩個環境變更一致。

二、搭建環境

       vmware虛擬機器,centos7,mariadb 10.2.14

        主伺服器IP:192.168.160.7

        從伺服器IP:192.168.160.8

三、搭建步驟

1、安裝mariadb

      分別在主從兩個伺服器上安裝好mariadb,和安裝單例項資料庫沒有差別,安裝步驟直接略過。我的實驗環境是直接通過虛擬機器克隆獲得的。

2、配置主伺服器配置檔案

     編輯my.cnf檔案:vi /etc/mysql/my.cnf

     開啟二進位制日誌:log-bin=mysql-bin

     新增不同步資料的資料庫:

     binlog-ignore-db=information_schema
     binlog-ignore-db=mysql 

     binlog-ignore-db=performance_schema 

    (也可以指定同步的資料,本文兩種配置都配置:binlog-do-db=hse_aq )

     修改server_id:server-id       = 1

     然後儲存退出配置檔案,完成配置

3、配置從伺服器配置檔案

     編輯my.cnf檔案:vi /etc/mysql/my.cnf

     開啟中繼日誌:relay-log = /app/data/relay-bin

     限制從伺服器資料庫只讀(超級許可權使用者依然能修改從庫的資料):read_only         = 1

     修改server_id:server-id       = 2

     然後儲存退出配置檔案,完成配置

4、在主伺服器上建立複製使用者

     登入mariadb,建立複製賬戶:GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'marry'@'192.168.160.8' IDENTIFIED BY '123456';

     檢視主庫二進位制日誌狀態,以便在從伺服器選擇複製開始位置:show master status;


5、在從伺服器上訪問主伺服器

      在從伺服器上登入mariadb,使用複製賬戶marry訪問主伺服器,其中MASTER_LOG_FILE是主伺服器當前使用的二進位制日誌,MASTER_LOG_POS是日誌的開始位置:

CHANGE MASTER TO MASTER_HOST='192.168.160.7',MASTER_PORT=3306,MASTER_USER='marry',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=7000;


      檢視同步狀態:SHOW SLAVE STATUS\G
MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.160.7
                  Master_User: marry
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 7000
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: No
            Slave_SQL_Running: No
              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: 7000
              Relay_Log_Space: 256
              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: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
1 row in set (0.00 sec)


      從上面的內容可以看到
Slave_IO_Running: No
Slave_SQL_Running: No

      說明覆制過程還沒有開始,在從伺服器上啟動複製:START SLAVE;
       再檢視同步狀態:SHOW SLAVE STATUS\G

      MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.160.7
                  Master_User: marry
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 7000
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 555
        Relay_Master_Log_File: mysql-bin.000007
             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: 7000
              Relay_Log_Space: 858
              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
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
1 row in set (0.00 sec)

      兩個狀態都已經變成yes,說明同步已經開始。

6、驗證

     在主伺服器上新建資料庫(如果主伺服器配置了binlog-do-db引數,新建資料庫不會同步到從伺服器)、新建表、新增資料、修改資料、刪除資料、刪除表等操作,都能反應到從庫,說明環境搭建成功。

7、備註

      如果在從伺服器上訪問主伺服器出現問題,可以用stop slave、reset slave命令重新配置。

      還有很多配置引數在本次搭建沒有配置,可以一點點配置測試。