CentOS7操作系統下實現mysql數據庫的主主複製

CentOS7操作系統下實現mysql主主複製
實驗環境:兩臺主機,172.18.24.107,172,18.24.27
操作系統爲Centos7.3
安裝mariadb服務,源碼編譯安裝或者yum安裝都可,這裏選擇yum安裝
172.18.24.107主機上:
停掉mariadb服務,修改配置文件

[root@node1 ~]#systemctl stop mariadb.srevice 
vim /etc/my.cnf.d/server.cnf 
[server]
skip_name_resolve=ON        #跳過解析過程
innodb_file_per_table=ON   
max_connection=20000        #最大連接數
log_bin=master-log          #開啓二進制日誌 
server_id=1                 #服務器di號
relay_log=relay-log         #開啓中繼日誌
auto_increment_offset=1
auto_increment_increment=2
[root@node1 ~]#systemctl start mariadb.service   #開啓服務
[root@node1 ~]#mysql
MariaDB [(none)]> SHOW MASTER STATUS;
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.18.24.%' IDENTIFIED BY 'replpass';    

查看172.18.24.27主機上二進制日誌文件記錄的位置:

MariaDB [test]> SHOW BINARY LOGS;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-log.000001 |     30824 |
| master-log.000002 |   1069459 |
| master-log.000003 |       507 |
+-------------------+-----------+
從上面可以看到172.18.24.27主機上二進制記錄的結束位置是507,那麼需要從507開始複製

回到在172.18.24.107主機上:

MariaDB [test]>CHANGE MASTER TO MASTER_HOST='172.18.24.107',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='masterlog.000003',MASTER_LOG_POS=507;
MariaDB [test]>START SLAVE;
MariaDB [test]>SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.18.24.107
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003
          Read_Master_Log_Pos: 723
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 746
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

172.18.24.107節點上:

systemctl stop mariadb.srevice 
vim /etc/my.cnf.d/server.cnf 
    [server]
    skip_name_resolve=ON    #跳過解析過程
    innodb_file_per_table=ON  
    max_connection=20000   #最大連接數

    log_bin=master-log   #開啓二進制日誌 
    server_id=1          #服務器di號
    relay_log=relay-log  #開啓中繼日誌

    auto_increment_offset=2   #初始值
    auto_increment_increment=2   #步進值                   
systemctl start mariadb.service 
mysql 
>SHOW MASTER STATUS;
MariaDB [test]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.18.24.%' IDENTIFIED BY 'replpass';
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.18.24.27',MASTER_USER='repluser',
MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-log.000003',MASTER_LOG_POS=507; 
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 172.18.24.27
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003
          Read_Master_Log_Pos: 507
               Relay_Log_File: relay-log.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: No
            Slave_SQL_Running: No
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.18.24.27
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003
          Read_Master_Log_Pos: 507
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 530
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

配置完成,開始測試:
在172.18.24.107上

MariaDB [test]> show tables;   #107上測試數據庫test中沒有表
Empty set (0.00 sec)

在172.18.24.27上

ariaDB [(none)]> use test;
Database changed
MariaDB [test]> show tables;  #27上測試數據庫test中沒有表
Empty set (0.00 sec)
MariaDB [test]> CREATE TABLE students(id INT UNSIGNED PRIMARY KEY,name CHAR(30) NOT NULL,age TINYINT UNSIGNED,gender ENUM('F','M'));    #在27上創建數據庫      

在172.18.24.107上查看測試數據庫中是否同步了172.18.24.27上的表students

MariaDB [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| students       |
+----------------+
1 row in set (0.00 sec)

查看錶結構,根27上的表一樣,說明172.1824.107主機上同步了172.18.24.27主機

MariaDB [test]> DESC students;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id     | int(10) unsigned    | NO   | PRI | NULL    |       |
| name   | char(30)            | NO   |     | NULL    |       |
| age    | tinyint(3) unsigned | YES  |     | NULL    |       |
| gender | enum('F','M')       | YES  |     | NULL    |       |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

如上,我們可以確定,172.18.24.107主機上的數據庫同步了172.18.24.27上的數據庫

然後,我們在172.1824.107主機上插入數據如下:

MariaDB [test]> INSERT INTO students VALUE (1,'xiaoming',22,'M');
Query OK, 1 row affected (0.01 sec)

MariaDB [test]> SELECT * FROM students;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  1 | xiaoming |   22 | M      |
+----+----------+------+--------+
1 row in set (0.00 sec)

在172.18.24.27主機上查看是否同步了172.1824.107主機上的插入更改:

MariaDB [test]> select * from students;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  1 | xiaoming |   22 | M      |
+----+----------+------+--------+
1 row in set (0.00 sec)

如上,我們可以確定,172.18.24.27主機上的數據庫同步了172.18.24.107上的數據庫。

由此,我們實現了兩臺主機的互相複製,互爲主從!

總結:主主複製是在主從複製上衍生過來的,自己是別人的從也同時是別人的主,做爲主數據庫,需要有寫的權限,並且二進制日誌需要開啓,從數據庫只需要有讀的權限,但是我們這裏是主主,即兩臺主機都需要開啓讀寫權限。在生產中,我們需要不停機的狀態下中途搭建主主複製模式,那麼之前的數據就需要全量備份到從數據庫中,然後再開啓複製。

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