MySQL之间数据同步

MySQL主主同步和主从同步的原理一样,只是双方都是主从角色。

环境

操作系统版本:CentOS7 64位 
MySQL版本:mysql5.6.33 
节点1IP:192.168.1.205 主机名:edu-mysql-01 
节点2IP:192.168.1.206 主机名:edu-mysql-02

MySQL 主从复制官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication.html

注意: 
1> 主从服务器操作系统版本和位数要保持一致 
2> Master和Slave数据库的版本要一致 
3> Master和Slave数据库中的数据要一致

配置

配置之前先参考《MySQL5.7安装与配置(YUM)》安装好MySQL(注意本文演示的是5.6版本,需要修改文章中的yum源为5.6)

1、安全配置

1> 防火墙 
添加mysql通信端口(默认为3306)

  1.  
    shell > vim /etc/sysconfig/iptables
  2.  
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
  3.  
    shell > service iptables restart
  • 1
  • 2
  • 3

或关闭防火墙

shell> service iptables stop
  • 1

2> 关闭selinux

  1.  
    shell> vi /etc/selinux/config
  2.  
    SELINUX=disabled
  • 1
  • 2

将SELINUX的值修改为disabled

2. 节点1配置(192.168.1.205)

2.1 添加数据同步配置

shell> vim /etc/my.cnf
  • 1

在[mysqld]中增加以下配置项:

  1.  
    # 服务器的ID,必须唯一,一般设置自己的IP
  2.  
    server_id= 205
  3.  
    # 复制过滤:不需要备份的数据库(MySQL库一般不同步)
  4.  
    binlog-ignore-db=mysql
  5.  
    # 开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)
  6.  
    log-bin=edu-mysql-bin
  7.  
    # 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
  8.  
    binlog_cache_size= 1M
  9.  
    # 主从复制的格式(mixed,statement,row,默认格式是 statement)
  10.  
    binlog_format=mixed
  11.  
    # 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
  12.  
    expire_logs_days= 7
  13.  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
  14.  
    ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
  15.  
    slave_skip_errors= 1062
  16.  
    # 作为从服务器时的中继日志
  17.  
    relay_log=edu-mysql-relay-bin
  18.  
    # log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
  19.  
    log_slave_updates= 1
  20.  
    # 主键自增规则,避免主从同步ID重复的问题
  21.  
    auto_increment_increment= 2 # 自增因子(每次加2
  22.  
    auto_increment_offset= 1 # 自增偏移(从1开始),单数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.2 Master配置

  1.  
    # 先重启一下服务
  2.  
    shell> service mysqld restart
  3.  
    # 登录到mysql
  4.  
    shell> mysql -uroot -p
  5.  
    # 创建数据库同步用户,并授予相应的权限
  6.  
    mysql> grant replication slave, replication client on *.* to 'repl'@'192.168.1.206' identified by 'root123456';
  7.  
    # 刷新授权表信息
  8.  
    mysql> flush privileges;
  9.  
    # 查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要用到
  10.  
    mysql> show master status;
  11.  
    +----------------------+----------+--------------+------------------+-------------------+
  12.  
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  13.  
    +----------------------+----------+--------------+------------------+-------------------+
  14.  
    | edu-mysql-bin.000001 | 120 | | mysql | |
  15.  
    +----------------------+----------+--------------+------------------+-------------------+
  16.  
    1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.3 Slave配置

  1.  
    # master_user和master_password:在206上执行grant replication slave...创建的用户和密码
  2.  
    # master_log_file和master_log_pos:在206上运行show master status;命令执行结果对应File和Position字段的值
  3.  
    mysql> change master to master _host='192.168.1.206',master_user='repl', master_password='root123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=439, master_connect_retry=30;
  4.  
    # 查看作为从节点的状态信息
  5.  
    mysql> show slave status\G;
  6.  
    *************************** 1. row ***************************
  7.  
    Slave_IO_State:
  8.  
    Master_Host: 192.168.1.206
  9.  
    Master_User: repl
  10.  
    Master_Port: 3306
  11.  
    Connect_Retry: 30
  12.  
    Master_Log_File: edu-mysql-bin.000001
  13.  
    Read_Master_Log_Pos: 439
  14.  
    Relay_Log_File: edu-mysql-relay-bin.000001
  15.  
    Relay_Log_Pos: 4
  16.  
    Relay_Master_Log_File: edu-mysql-bin.000001
  17.  
    Slave_IO_Running: No
  18.  
    Slave_SQL_Running: No
  19.  
    # 省略其它配置。。。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

由于此时从节点还没有启动,Slave_IO_State的值为空,Slave_IO_Running和Slave_SQL_Running线程为No表示也没有运行。

2.4 启动Slave

注意:要在节点2上创建同步帐户后再启动,否则会报连不上master错误

  1.  
    # 启动从节点,开始工作接收主节点发送事件(数据库数据变更的所有事件)
  2.  
    mysql> start slave;
  3.  
    # 此时再查看slave节点的状态
  4.  
    mysql> show slave status\G;
  5.  
    *************************** 1. row ***************************
  6.  
    Slave_IO_State: Waiting for master to send event
  7.  
    Master_Host: 192.168.1.206
  8.  
    Master_User: repl
  9.  
    Master_Port: 3306
  10.  
    Connect_Retry: 30
  11.  
    Master_Log_File: edu-mysql-bin.000001
  12.  
    Read_Master_Log_Pos: 439
  13.  
    Relay_Log_File: edu-mysql-relay-bin.000002
  14.  
    Relay_Log_Pos: 287
  15.  
    Relay_Master_Log_File: edu-mysql-bin.000001
  16.  
    Slave_IO_Running: Yes
  17.  
    Slave_SQL_Running: Yes
  18.  
    Replicate_Do_DB:
  19.  
    # ...省略其它配置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3. 节点2配置(192.168.1.206)

3.1 添加数据同步配置

shell> vim /etc/my.cnf
  • 1

在[mysqld]中增加以下配置项:

  1.  
    server_id =206
  2.  
    binlog -ignore-db=mysql
  3.  
    log-bin=edu-mysql-bin
  4.  
    binlog_cache_size =1M
  5.  
    binlog_format =mixed
  6.  
    expire_logs_days =7
  7.  
    slave_skip_errors =1062
  8.  
    relay_log =edu-mysql-relay-bin
  9.  
    log_slave_updates =1
  10.  
    #ID自增从2开始,双数
  11.  
    auto_increment_increment =2
  12.  
    auto_increment_offset =2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.2 Master配置

  1.  
    # 先重启一下服务
  2.  
    shell> service mysqld restart
  3.  
    # 登录到mysql
  4.  
    shell> mysql -uroot -p
  5.  
    # 创建数据库同步用户,并授予相应的权限(只允许repl用户从192.168.1.205上登录)
  6.  
    mysql> grant replication slave, replication client on *.* to 'repl'@'192.168.1.205' identified by 'root123456';
  7.  
    # 刷新授权表信息
  8.  
    mysql> flush privileges;
  9.  
    # 查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要用到
  10.  
    mysql> show master status;
  11.  
    +----------------------+----------+--------------+------------------+-------------------+
  12.  
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  13.  
    +----------------------+----------+--------------+------------------+-------------------+
  14.  
    | edu-mysql-bin.000001 | 439 | | mysql | |
  15.  
    +----------------------+----------+--------------+------------------+-------------------+
  16.  
    1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这时可以启动节点1(205)的slave服务

3.3 Slave配置

  1.  
    # master_log_file和master_log_pos:205节点上执行show master status;对应File和position的值
  2.  
    mysql> change master to master _host='192.168.1.205',master_user='repl', master_password='root123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=120, master_connect_retry=30;
  3.  
    Query OK, 0 rows affected, 2 warnings (0.02 sec)
  4.  
    mysql> show slave status\G;
  5.  
    *************************** 1. row ***************************
  6.  
    Slave_IO_State:
  7.  
    Master_Host: 192.168.1.205
  8.  
    Master_User: repl
  9.  
    Master_Port: 3306
  10.  
    Connect_Retry: 30
  11.  
    Master_Log_File: edu-mysql-bin.000001
  12.  
    Read_Master_Log_Pos: 120
  13.  
    Relay_Log_File: edu-mysql-relay-bin.000001
  14.  
    Relay_Log_Pos: 4
  15.  
    Relay_Master_Log_File: edu-mysql-bin.000001
  16.  
    Slave_IO_Running: No
  17.  
    Slave_SQL_Running: No
  18.  
    Replicate_Do_DB:
  19.  
    #...省略其它配置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.4、启动Slave

  1.  
    shell> start slave;
  2.  
    Query OK, 0 rows affected (0.01 sec)
  3.  
    mysql> show slave status\G;
  4.  
    *************************** 1. row ***************************
  5.  
    Slave_IO_State: Waiting for master to send event
  6.  
    Master_Host: 192.168.1.205
  7.  
    Master_User: repl
  8.  
    Master_Port: 3306
  9.  
    Connect_Retry: 30
  10.  
    Master_Log_File: edu-mysql-bin.000001
  11.  
    Read_Master_Log_Pos: 439
  12.  
    Relay_Log_File: edu-mysql-relay-bin.000002
  13.  
    Relay_Log_Pos: 287
  14.  
    Relay_Master_Log_File: edu-mysql-bin.000001
  15.  
    Slave_IO_Running: Yes
  16.  
    Slave_SQL_Running: Yes
  17.  
    Replicate_Do_DB:
  18.  
    ...省略其它配置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4、验证

  1.  
    # 登录205创建一个数据库
  2.  
    shell> mysql -u root -p
  3.  
    mysql> create database if not exists mydb default character set utf8 collate utf8_general_ci;
  4.  
    mysql> create table user (id int, username varchar(30), password varchar(30));
  5.  
    mysql> insert into user values (1, 'yangxin', '123456');
  6.  
    # 下面是在206节点上的操作
  7.  
    #1、登录206查询所有库,是否包含mydb数据库
  8.  
    #2、切换到mydb库,是否包含user表,并有一条数据
  9.  
    #3、在206的mydb.user表插入一条数据,查看205是否同步过去
  10.  
    mysql> insert into user values (2,'yangxin2','123456')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

详细过程如下图所示:

数据同步操作过程

猜你喜欢

转载自www.cnblogs.com/HKROnline-SyncNavigator/p/10970541.html
今日推荐