设为首页 收藏本站
查看: 1374|回复: 1

[经验分享] MySQL的主从复制

  [复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-23 10:47:24 | 显示全部楼层 |阅读模式
当业务扩展到一定程度时,服务器的负载能力往往不能胜任当前的业务规模,解决的方法无非是横向扩展和纵向扩展:
     横向扩展:又称水平扩展(ScaleOut),是通过负载均衡的方式,将压力疏散到后端各个节点服务器;
     纵向扩展:又称垂直扩展(ScaleUp),简单提高服务器的硬件性能,此方法很容易再次出现性能瓶颈现象。

数据库服务器在涉及到均衡调度时通常会遇到很多不可忽视的问题:
     数据库服务器数据的一致性;
     多个事务提交导致的数据完整性的保证;
     服务器宕机,怎么保证事务正常提交等等。

数据同步方面,一般得解决方案有一下几种:
    同步复制 (Synchronous Replication):发生写数据时,主服务器需要等待从服务器同步完成之后才会返回给客户端信息,等待过程中为阻塞状态,所以效率极低;
    半同步复制 (Asynchronous Replication):发生写数据时,主服务器只同步给其中一台从服务器,半同步给其他从服务器;
    异步复制 (Semisynchronous Replication):发生写数据时,主服务器在从服务器同步数据的同时,向客户端返回信息,这种方式可能导致主从服务器数据不一致,或者从服务器数据同步状态严重落后于主服务器上的数据。

MySQL主从复制模式:Master/Slave、Master/Master

    Master/Slave:一主多从模式,由于从服务器只有只读权限,所以此种模式只能有效分担读请求的压力,但不能分担写请求;此种模式会带来数据同步一致性的问题,可能从服务器同步的数据进度远落后于主服务器更新的进度;如果主机宕机后,则数据就无法写入。
    Master/Master:多主模式,多台服务器互为主从;这种模式会带来数据更新不一致,从而发生冲突的问题。

主/从工作流程:
iyunv.com-2017-3-2349.png
    建立主从关系后,如果主服务器发生Data Change之后,Binary Log会更新日志记录;从服务器通过I/O Thread读取主服务器上的Binary Log保存至本地的 RelayLog中,再通过SQL Thread执行本地RelayLog中的SQL语句,并将执行后的数据保存至磁盘中。


示例一:MySQL异步复制实现
iyunv.com-2017-3-2350.png

配置文件:
Master:node7配置文件:   
   [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    innodb_file_per_table=1
    skip_name_resolve=ON
    log_bin=master-log                #开启二进制日志
    server_id=1                       #设置serverID

    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid

Slave:node8配置文件:
   [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    relay-log=relay-log               #开启relay日志
    innodb_file_per_table=1
    read-only=1                       #设置为只读
    server_id=2                       #设置serverID,必须不同于其他serverID

    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid

启动mariaDB:
    [iyunv@node7 ~]#systemctl start mariadb.service   
    [iyunv@node8 ~]# systemctl start mariadb.service

从服务器需要主服务器授权一个具有REPLICATIONSLAVE, REPLICATION CLIENT权限的用户:
    MariaDB [(none)]> GRANT REPLICATIONSLAVE,REPLICATION CLIENT ON *.* TO 'hisen'@'192.168.17.%' IDENTIFIED BY'hisen';
    MariaDB[(none)]> FLUSH PRIVILEGES;  

    MariaDB [(none)]> SHOW MASTER STATUS;    #记录此时的binlog文件及位置,从服务器即将从此处进行同步
    +-------------------+----------+--------------+------------------+
    |File              | Position |Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    |master-log.000003 |      492 |              |                  |
    +-------------------+----------+--------------+------------------+
    1row in set (0.00 sec)

从服务器开始做同步复制的配置:
    MariaDB[(none)]> CHANGE MASTER TO
        -> MASTER_HOST='192.168.17.70',
        -> MASTER_USER='hisen',
        -> MASTER_PASSWORD='hisen',
        -> MASTER_LOG_FILE='master-log.000003',
        -> MASTER_LOG_POS=492;
    QueryOK, 0 rows affected (0.01 sec)

    MariaDB [(none)]> SHOW SLAVESTATUS\G;         #查看从服务器状态
    ***************************1. row ***************************
                   Slave_IO_State:
                      Master_Host: 192.168.17.70
                      Master_User: hisen
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File:master-log.000003
              Read_Master_Log_Pos: 492
                   Relay_Log_File: relay-log.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File:master-log.000003
                 Slave_IO_Running: No                    #IO-Thread没有启动
                Slave_SQL_Running: No                    #SQL-Thread没有启动

    MariaDB [(none)]> START SLAVE;        启动IO-Thread和SQL-Thread         
    QueryOK, 0 rows affected (0.02 sec)

    MariaDB[(none)]> SHOW SLAVE STATUS\G;
    ***************************1. row ***************************
                   Slave_IO_State: Waiting formaster to send event
                      Master_Host: 192.168.17.70  #主服务器地址
                      Master_User: hisen                     #复制时用到的用户名
                      Master_Port: 3306                       #主服务器端口
                    Connect_Retry: 60                            #重试连接时长
                  Master_Log_File:master-log.000003      #同步主服务器上的binlog文件
             Read_Master_Log_Pos: 492                                    #binlog文件的位置
                   Relay_Log_File: relay-log.000002       #本地relay文件
                    Relay_Log_Pos: 530                                     #relay文件位置
            Relay_Master_Log_File:master-log.000003
                 Slave_IO_Running: Yes               #IO-Thread启动
                Slave_SQL_Running: Yes               #SQL-Thread启动


测试主从复制:
Master配置:      
    MariaDB[(none)]> CREATE DATABASE hisendb;
    QueryOK, 1 row affected (0.00 sec)

    MariaDB[(none)]> USE hisendb;
    Databasechanged

    MariaDB[hisendb]> CREATE TABLE teachers (TID TINYINT NOT NULL PRIMARY KEY,NameVARCHAR(50),Age INT,Gender CHAR(10));
    QueryOK, 0 rows affected (0.02 sec)

    MariaDB[hisendb]> INSERT INTO teachers VALUES (1,'Mo Yuan',100,'M'),(2,'BaiQian',150,'F'),(3,'Dong Huadijun',100,'M');
    QueryOK, 3 rows affected (0.01 sec)
    Records:3  Duplicates: 0  Warnings: 0

    MariaDB[hisendb]> SELECT * FROM teachers;
    +-----+---------------+------+--------+
    |TID | Name          | Age  | Gender |
    +-----+---------------+------+--------+
    |   1 | Mo Yuan       | 100 | M      |
    |   2 | Bai Qian      | 150 | F      |
    |   3 | Dong Huadijun |  100 | M     |
    +-----+---------------+------+--------+
    3rows in set (0.00 sec)

Slave端查看:
    MariaDB[(none)]> SHOW DATABASES;
    +--------------------+
    |Database           |
    +--------------------+
    |information_schema |
    |hisendb            |
    |mysql              |
    |performance_schema |
    |test               |
    +--------------------+
    5rows in set (0.01 sec)

    MariaDB[(none)]> USE hisendb;
    Databasechanged

    MariaDB[hisendb]> SELECT * FROM teachers;
    +-----+---------------+------+--------+
    |TID | Name          | Age  | Gender |
    +-----+---------------+------+--------+
    |   1 | Mo Yuan       | 100 | M      |
    |   2 | Bai Qian      | 150 | F      |
    |   3 | Dong Huadijun |  100 | M     |
    +-----+---------------+------+--------+
    3rows in set (0.00 sec)
对比可知,已经实现主从同步的效果!

再次查看Master信息:
    MariaDB[(none)]> SHOW MASTER STATUS;
    +-------------------+----------+--------------+------------------+
    |File              | Position |Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    |master-log.000003 |     1008 |              |                  |
    +-------------------+----------+--------------+------------------+
    1row in set (0.00 sec)

再次查看Slave信息:

    MariaDB[hisendb]> SHOW SLAVE STATUS\G;
    ***************************1. row ***************************
                   Slave_IO_State: Waiting formaster to send event
                      Master_Host: 192.168.17.70
                      Master_User: hisen
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File:master-log.000003
             Read_Master_Log_Pos: 1008                             #已经跟Master的binlog位置相同
                   Relay_Log_File: relay-log.000002
                    Relay_Log_Pos: 1046
            Relay_Master_Log_File:master-log.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes

示例二:MySQL半同步复制实现
iyunv.com-2017-3-2351.png
需要插件支持:semisync_master.so、semisync_slave.so
主节点:     
    MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
    QueryOK, 0 rows affected (0.10 sec)

    MariaDB[(none)]>
    MariaDB[(none)]>
    MariaDB[(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_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   |
    +------------------------------------+-------+
    4rows in set (0.00 sec)

    MariaDB[(none)]> SET GLOBAL rpl_semi_sync_master_enabled=ON;
    QueryOK, 0 rows affected (0.00 sec)

    MariaDB[(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';   
    +------------------------------------+-------+
    |Variable_name                      |Value |
    +------------------------------------+-------+
    | rpl_semi_sync_master_enabled       | ON   |     #半同步主节点开启
    | rpl_semi_sync_master_timeout       | 10000 |     #主节点等待超时时间,默认10S
    |rpl_semi_sync_master_trace_level   |32    |
    |rpl_semi_sync_master_wait_no_slave | ON   |
    +------------------------------------+-------+
    4rows in set (0.00 sec)

    MariaDB[(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO'hisen'@'192.168.17.%' IDENTIFIED BY 'hisen';

    MariaDB[(none)]> SHOW MASTER STATUS;
    +-------------------+----------+--------------+------------------+
    |File              | Position |Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    |master-log.000003 |      417 |              |                  |
    +-------------------+----------+--------------+------------------+
    1row in set (0.00 sec)

    MariaDB[(none)]> SHOW GLOBAL STATUS LIKE '%semi%';        
    +--------------------------------------------+-------+
    |Variable_name                             | Value |
    +--------------------------------------------+-------+
    | Rpl_semi_sync_master_clients               | 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             | 1     |
    |Rpl_semi_sync_master_no_tx                | 1     |
    | 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     |
    +--------------------------------------------+-------+
    14rows in set (0.01 sec)

从节点:     
    MariaDB[(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
    QueryOK, 0 rows affected (0.00 sec)

    MariaDB[(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
    +---------------------------------+-------+
    |Variable_name                   | Value |
    +---------------------------------+-------+
    |rpl_semi_sync_slave_enabled     |OFF   |
    |rpl_semi_sync_slave_trace_level | 32    |
    +---------------------------------+-------+
    2rows in set (0.00 sec)

    MariaDB[(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=ON;
    QueryOK, 0 rows affected (0.00 sec)

    MariaDB[(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';  
    +---------------------------------+-------+
    |Variable_name                   | Value |
    +---------------------------------+-------+
    |rpl_semi_sync_slave_enabled     | ON    |
    |rpl_semi_sync_slave_trace_level | 32    |
    +---------------------------------+-------+
    2rows in set (0.00 sec)

               MariaDB [(none)]> CHANGE MASTER TO
        -> MASTER_HOST='192.168.17.70',
        -> MASTER_USER='hisen',
        -> MASTER_PASSWORD='hisen',
        -> MASTER_LOG_FILE='master-log.000003',
        -> MASTER_LOG_POS=417;
               Query OK, 0 rows affected (0.01 sec)

    MariaDB[(none)]> START SLAVE;
    QueryOK, 0 rows affected (0.01 sec)

    MariaDB[(none)]> SHOW SLAVE STATUS\G;
    ***************************1. row ***************************
                   Slave_IO_State: Waiting formaster to send event
                      Master_Host: 192.168.17.70
                      Master_User: hisen
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File:master-log.000003
              Read_Master_Log_Pos: 417
                   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

    MariaDB[hisendb]> SHOW GLOBAL STATUS LIKE '%semi%';
    +----------------------------+-------+
    |Variable_name              | Value |
    +----------------------------+-------+
    | Rpl_semi_sync_slave_status | ON    |     #已经确认为半同步复制中从节点
    +----------------------------+-------+
    1row in set (0.00 sec)

验证主从模式半同步复制:
Master节点:     
    MariaDB[(none)]> CREATE DATABASE hisendb;
    QueryOK, 1 row affected (0.00 sec)

    MariaDB[(none)]> USE hisendb;
    Databasechanged
    MariaDB[hisendb]> CREATE TABLE teachers(TID INT NOT NULL PRIMARY KEY,NameVARCHAR(50) NOT NULL,Age INT ,Gender CHAR(1));
    QueryOK, 0 rows affected (0.01 sec)

    MariaDB[hisendb]> INSERT INTO teachers VALUES (1,'Ma Yun',55,'M'),(2,'MaHuateng',43,'M'),(3,'Li Yanhong',49,'M');
    QueryOK, 3 rows affected (0.01 sec)
    Records:3  Duplicates: 0  Warnings: 0

    MariaDB[hisendb]> SELECT * FROM teahcers;
    ERROR1146 (42S02): Table 'hisendb.teahcers' doesn't exist
    MariaDB[hisendb]> SELECT * FROM teachers;
    +-----+------------+------+--------+
    |TID | Name       | Age  | Gender |
    +-----+------------+------+--------+
    |   1 | Ma Yun     |  55 | M      |
    |   2 | Ma Huateng |   43 | M     |
    |   3 | Li Yanhong |   49 | M     |
    +-----+------------+------+--------+
    3rows in set (0.00 sec)

    MariaDB[hisendb]> SHOW GLOBAL STATUS LIKE '%semi%';
    +--------------------------------------------+-------+
    |Variable_name                             | Value |
    +--------------------------------------------+-------+
    |Rpl_semi_sync_master_clients              | 1     |
    |Rpl_semi_sync_master_net_avg_wait_time    | 1500  |
    |Rpl_semi_sync_master_net_wait_time        | 4502  |
    |Rpl_semi_sync_master_net_waits            | 3     |
    |Rpl_semi_sync_master_no_times             | 1     |
    |Rpl_semi_sync_master_no_tx                | 1     |
    | Rpl_semi_sync_master_status                | ON    |   
    |Rpl_semi_sync_master_timefunc_failures    | 0     |
    |Rpl_semi_sync_master_tx_avg_wait_time     | 1592  |
    |Rpl_semi_sync_master_tx_wait_time         | 4777  |
    |Rpl_semi_sync_master_tx_waits             | 3     |
    |Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
    |Rpl_semi_sync_master_wait_sessions        | 0     |
    |Rpl_semi_sync_master_yes_tx               | 3     |
    +--------------------------------------------+-------+
    14rows in set (0.00 sec)

Slave节点:
    MariaDB[(none)]> USE hisendb

    Databasechanged
    MariaDB[hisendb]> SELECT * FROM teachers;
    +-----+------------+------+--------+
    |TID | Name       | Age  | Gender |
    +-----+------------+------+--------+
    |   1 | Ma Yun     |  55 | M      |
    |   2 | Ma Huateng |   43 | M     |
    |   3 | Li Yanhong |   49 | M     |
    +-----+------------+------+--------+
    3rows in set (0.00 sec)

到此主从模式的半同步复制已经成功,但是如果主节点与从节点的IO-Thread停止通信,则主节点会等待一个超时时间,然后自动降级为异步复制模式:

    关闭从节点Slave功能:
    MariaDB[hisendb]> STOP SLAVE;
    QueryOK, 0 rows affected (0.01 sec)

    MariaDB[hisendb]> SHOW SLAVE STATUS\G;
    ***************************1. row ***************************
                   Slave_IO_State:
                      Master_Host: 192.168.17.70
                      Master_User: hisen
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File:master-log.000003
              Read_Master_Log_Pos: 932
                   Relay_Log_File: relay-log.000002
                    Relay_Log_Pos: 1045
            Relay_Master_Log_File:master-log.000003
                 Slave_IO_Running: No    #IO-Tread关闭
                Slave_SQL_Running: No    #SQL-Thread关闭

    主节点再插入数据,会等待10s的半同步超时时间:
    MariaDB[hisendb]> INSERT INTO teachers VALUES (4,'Lei Jun',44,'M');
    QueryOK, 1 row affected (10.00 sec)

    查看主节点半同步信息:
    MariaDB[hisendb]> SHOW GLOBAL STATUS LIKE '%semi%';               
    +--------------------------------------------+-------+
    |Variable_name                             | Value |
    +--------------------------------------------+-------+
    |Rpl_semi_sync_master_clients              | 1     |
    |Rpl_semi_sync_master_net_avg_wait_time    | 1194  |
    |Rpl_semi_sync_master_net_wait_time        | 4777  |
    |Rpl_semi_sync_master_net_waits            | 4     |
    |Rpl_semi_sync_master_no_times             | 2     |
    |Rpl_semi_sync_master_no_tx                | 2     |
    | Rpl_semi_sync_master_status                | OFF   |     #关闭半同步主节点功能
    |Rpl_semi_sync_master_timefunc_failures    | 0     |
    |Rpl_semi_sync_master_tx_avg_wait_time     | 1592  |
    |Rpl_semi_sync_master_tx_wait_time         | 4777  |
    |Rpl_semi_sync_master_tx_waits             | 3     |
    |Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
    |Rpl_semi_sync_master_wait_sessions        | 0     |
    |Rpl_semi_sync_master_yes_tx               | 3     |
    +--------------------------------------------+-------+
    14rows in set (0.01 sec)

示例三:MySQL双主模式实现:
iyunv.com-2017-3-2352.png

    MySQL的双主模式,其实就是服务器互为主从关系的模式,都拥有写数据的权限,也就是说双方都分别拥有binlog和relaylog。但是双主模式会带来不少问题,也容易造成数据不一致的情况。
    由于双主/多主服务器都能对同一表进行插入新数据,如果有id属性,可能会造成双主服务器插入数据冲突,这种问题可以通过自增长id来解决,但是看起来并没像想象中那么美好:
iyunv.com-2017-3-2353.png
    从上图可以看出,按照自增长id的方式,ID号出现“间隙”。主主模式在使用时,问题多多,所以生产环境中MySQL一般都使用主从模式,主主模式可以作为了解MySQL同步数据其中的一种方式而已。


实验拓扑:
iyunv.com-2017-3-2354.png
配置主要节点:
MySQL服务启动前,配置文件设定:
    (1)sever_id必须不同;
    (2)双方都需要启用binlog和relaylog;
    (3)存在自增长id的表,为了使得id不冲突,需要定义自动增长方式:
       一个节点使用奇数id
       auto_increment_offset=1
       auto_increment_increment=2
       另一个节点使用偶数id
       auto_increment_offset=2
       auto_increment_increment=2

MySQL服务启动后:
    (1)双方都需要有复制权限的用户;
    (2)双方都需要指向对方为自己的主节点。

实验过程:
node7文件配置:
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    thread_handling=pool-of-threads
    innodb_file_per_table=1
    skip_name_resolve=ON
    log_bin=master-log      #开启binlog
    relay-log=relay-log    #开启relay log
    auto_increment_offset=1   #自增长id初始值
    auto_increment_increment=2  #自增长id步进
    server_id=1          #serverID

node8文件配置:     
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    relay-log=relay-log  #开启relay log
    innodb_file_per_table=1
    server_id=2      #serverID
    log_bin=master-log  #开启binlog
    auto_increment_offset=2  #自增长id初始值
    auto_increment_increment=2   #自增长id步进


①启动MySQL服务:
    [iyunv@node7~]# systemctl start mariadb.service
    [iyunv@node8~]# systemctl start mariadb.service

②各自创建一个拥有复制权限的用户:
node7 :
    MariaDB[(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO'hisen'@'192.168.17.%' IDENTIFIED BY 'hisen';
      QueryOK, 0 rows affected (0.00 sec)

    MariaDB[(none)]> FLUSH PRIVILEGES;
      QueryOK, 0 rows affected (0.11 sec)

node8:
    MariaDB[(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO'hisen'@'192.168.17.%' IDENTIFIED BY 'hisen';
    QueryOK, 0 rows affected (0.00 sec)

    MariaDB[(none)]> FLUSH PRIVILEGES;
    QueryOK, 0 rows affected (0.00 sec)

③查看双方当前使用的binlog及位置:
node7:  
     MariaDB[(none)]> SHOW MASTER STATUS;
      +-------------------+----------+--------------+------------------+
      |File              | Position |Binlog_Do_DB | Binlog_Ignore_DB |
      +-------------------+----------+--------------+------------------+
      |master-log.000003 |      502 |              |                  |
      +-------------------+----------+--------------+------------------+
      1row in set (0.00 sec)

node8:
      MariaDB[(none)]> SHOW MASTER STATUS;
      +-------------------+----------+--------------+------------------+
      |File              | Position |Binlog_Do_DB | Binlog_Ignore_DB |
      +-------------------+----------+--------------+------------------+
      |master-log.000003 |      502 |              |                  |
      +-------------------+----------+--------------+------------------+
      1row in set (0.00 sec)

④各自指向对方的服务器为自己的主节点:
node7 :
      MariaDB[(none)]> CHANGE MASTER TO
          ->   MASTER_HOST='192.168.17.80',
          -> MASTER_USER='hisen',
          -> MASTER_PASSWORD='hisen',
          -> MASTER_LOG_FILE='master-log.000003',
          -> MASTER_LOG_POS=502;
         QueryOK, 0 rows affected (0.04 sec)

node8:
      MariaDB[(none)]> CHANGE MASTER TO
          -> MASTER_HOST='192.168.17.70',
          -> MASTER_USER='hisen',
          -> MASTER_PASSWORD='hisen',
          ->   MASTER_LOG_FILE='master-log.000003',
          -> MASTER_LOG_POS=502;
        QueryOK, 0 rows affected (0.02 sec)

⑤开启SLAVE,并查看SLAVE状态:
node7:
      MariaDB [(none)]> START SLAVE;
        QueryOK, 0 rows affected (0.01 sec)

      MariaDB[(none)]> SHOW SLAVE STATUS\G;
      ***************************1. row ***************************
                     Slave_IO_State: Waiting for masterto send event
                       Master_Host:192.168.17.80   #主节点为对方IP
                        Master_User: hisen
                        Master_Port: 3306
                      Connect_Retry: 60
                    Master_Log_File: master-log.000003
                Read_Master_Log_Pos: 502
                      Relay_Log_File: relay-log.000002
                      Relay_Log_Pos: 530
                Relay_Master_Log_File: master-log.000003
                  Slave_IO_Running: Yes       #已经开启IO-Thread
                   Slave_SQL_Running: Yes     #已经开启SQL-Thread

node8:  
      MariaDB[(none)]> START SLAVE;
      QueryOK, 0 rows affected (0.00 sec)

      MariaDB[(none)]> SHOW SLAVE STATUS\G;
      ***************************1. row ***************************
                   Slave_IO_State: Waiting formaster to send event
                      Master_Host: 192.168.17.70  #主节点为对方IP
                      Master_User: hisen
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File:master-log.000003
              Read_Master_Log_Pos: 502
                   Relay_Log_File: relay-log.000002
                    Relay_Log_Pos: 530
            Relay_Master_Log_File:master-log.000003
                 Slave_IO_Running: Yes  #已经开启IO-Thread
                Slave_SQL_Running: Yes  #已经开启SQL-Thread

⑥测试主主数据复制:
创建数据库hisendb,并创建friends表:      
        MariaDB [(none)]> CREATE DATABASE hisendb;
           Query OK, 1 row affected (0.01 sec)

        MariaDB [hisendb]> CREATE TABLE friends(ID INT UNSIGNED PRIMARYKEY AUTO_INCREMENT,Name VARCHAR(50) NOT NULL,Age TINYINT,Gender ENUM('F','M'));
           Query OK, 0 rows affected (0.09 sec)

首先在node7主节点插入 ('Xu He',25,'M'),('XuMingying',27,'F'):      
    MariaDB[hisendb]> INSERT INTO friends(Name,Age,Gender) VALUES ('Xu He',25,'M'),('XuMingying',27,'F');
    QueryOK, 2 rows affected (0.17 sec)
    Records:2  Duplicates: 0  Warnings: 0

    MariaDB[hisendb]> SELECT * FROM friends;
    +----+-------------+------+--------+
    |ID | Name        | Age  | Gender |
    +----+-------------+------+--------+
    |  1 | Xu He       |  25 | M      |
    |  3 | Xu Mingying |   27 | F     |
    +----+-------------+------+--------+
    2rows in set (0.00 sec)

再次在node8主节点插入('TianTao',26,'M'),('Liang Juntao',27,'M'):
    MariaDB[hisendb]> INSERT INTO friends(Name,Age,Gender) VALUES ('TianTao',26,'M'),('Liang Juntao',27,'M');
    QueryOK, 2 rows affected (0.00 sec)
    Records:2  Duplicates: 0  Warnings: 0

    MariaDB[hisendb]> SELECT * FROM friends;
    +----+--------------+------+--------+
    |ID | Name         | Age  | Gender |
    +----+--------------+------+--------+
    |  1 | Xu He        |  25 | M      |
    |  3 | Xu Mingying  |   27| F      |
    |  4 | Tian Tao     |  26 | M      |
    |  6 | Liang Juntao |   27 | M     |
    +----+--------------+------+--------+
    4rows in set (0.00 sec)

由上可知,双方能完成数据同步,但是自增长ID的确出现“间隙”。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-354022-1-1.html 上篇帖子: MySQL基于SSL协议的主从复制 下篇帖子: Mysql分表分库分析
累计签到:14 天
连续签到:1 天
发表于 2017-3-28 18:28:01 | 显示全部楼层
٩(ˊωˋ*)و

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表