mysql同步复制_MySQL 全同步复制

实验环境:没有主从之分,全都是组成员

CentOS7操作系统;

主机:server1-----------192.168.200.112

server2-----------192.168.200.113

server3-----------192.168.200.114

软件:mysql

三台机器数据保存一致性

在server1上:

修改mysql的配置文件

[email protected] ~]# vim /etc/my.cnf

[mysqld]

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

server-id=1    #将server设置为使用唯一标识号,以启动全局事物标识符号

gtid_mode=ON    #打开 gtid 保证半同步

enforce_gtid_consistency=ON    #强制持续打开

master_info_repository=TABLE    #master 的信息存放在系统表中,而不是文件中

relay_log_info_repository=TABLE    #IO从主获取的信息

binlog_checksum=NONE    #设置 server 打开二进制日志记录,使用基于行的格式并禁用二进制日志事件校验和

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW    #二进制文件格式

#组复制设置

#loose-如果在 server 启动时尚未加载组复制插件,group_replication 变量使用的 loose- 前缀将指示 server 继续启动

transaction_write_set_extraction=XXHASH64    #server 必须为每个事务收集写集合,并使用 XXHASH64 哈希算法将其编码为散列

loose-group_replication_group_name="b9e8cc0f-9c7a-11e8-ac38-52540025fd63"   #告知插件,正在加入或创建的组命名,uuidgen 获取查看

loose-group_replication_start_on_boot=off    #server 启动时不自动启动组复制

loose-group_replication_local_address="192.168.200.112:24901"    #插件使用的ip地址,端口用于接受来自组中其他成员的传入连接

loose-group_replication_group_seeds="192.168.200.112:24901,192.168.200.113:24901,192.168.200.114:24901"    #组成员

loose-group_replication_bootstrap_group=off    #插件是否自动引导,注意此选项在任何时候只能在一个 server 实例上使用,通常是首次引导组时(或在整个组被崩溃然后恢复的情况下)。 如果您多次引导组,例如,当多个 server 实例设置了此选项,则它们可能会人为地造成脑裂的情况,其中存在两个具有相同名称的不同组。 在第一个server 实例加入组后禁用此选项。组中的所有 server 成员的配置都非常相似

loose-group_replication_single_primary_mode=off

loose-group_replication_enforce_update_everywhere_checks=on

loose-group_replication_ip_whitelist="192.168.200.0/24"    #组的白名单用户,如果不设置则不能加入组

组复制使用异步复制协议来实现分布式恢复

注意:修改完配置文件后,应重启服务。

登录数据库

[[email protected] ~]# mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 3

Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.

MariaDB [(none)]>

对数据库进行具体配置

mysql> set sql_log_bin=0;    #关闭防止之后传到其他 server 上

Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to [email protected]‘%‘ identified by ‘123456‘;    #创建用户授权

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;    #刷新表

Query OK, 0 rows affected (0.01 sec)

mysql> reset master;    #清空重置二进制日志,

Query OK, 0 rows affected (0.45 sec)

mysql> set sql_log_bin=1;

Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_user=‘myslave‘, master_password=‘123456‘ for channel ‘group_replication_recovery‘;

Query OK, 0 rows affected, 2 warnings (0.61 sec)

mysql> install plugin group_replication soname ‘group_replication.so‘;

Query OK, 0 rows affected (0.51 sec)

mysql> show plugins;

| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |

| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |

| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |

| ngram | ACTIVE | FTPARSER | NULL | GPL |

| validate_password | ACTIVE | VALIDATE PASSWORD | validate_password.so | GPL |

| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |

+----------------------------+----------+--------------------+---------------------

mysql> set global group_replication_bootstrap_group=on;

Query OK, 0 rows affected (0.00 sec)

mysql> start group_replication;

Query OK, 0 rows affected (1.67 sec)

mysql> set global group_replication_bootstrap_group=off;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | 9c37fc1c-9cad-11e8-be36-5254006a3b48 | server1 | 3306 | ONLINE |

+---------------------------+--------------------------------------+-------------+-

在server2,3上重复类似操作

修改mysql的配置文件

不同之处

server-id=2        #id对应的是组中编号

loose-group_replication_local_address="192.168.200.113:24901"     #address对应的是主机iP

..............

............

server-id=3         #id对应的是组中编号

loose-group_replication_local_address="192.168.200.114:24901"     #address对应的是主机iP

mysql> set global group_replication_bootstrap_group=on; ##添加一个组,ON表示开启。此步只需在第一个组员创建即可,后续的组员不用创建。这样才能确保在同一组中。

Query OK, 0 rows affected (0.00 sec)

mysql> start group_replication;

Query OK, 0 rows affected (1.67 sec)

注意:设置组时只需在第一个组员中创建即可,后续的组员不用创建。这样才能确保在同一组中。不然在同组中无法实现全同步。

自己每台主机都创建了组,每台主机都有属于自己独立的组。这样虽然每台主机状态配置良好(都处于online)。但并不互通。

以上就是server2,server3(其它组员)和server1(第一个组员)配置的不同之处了。

online与recovering 两种状态辨析。

mysql> select * from performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | 57b54493-81cf-11e8-8a9a-52540013d792 | server1 | 3306 | ONLINE |

| group_replication_applier | c33132d0-81d1-11e8-9ff1-525400677cc8 | server2 | 3306 | RECOVERING |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

2 rows in set (0.00 sec)

###首次查看状态RECOVERING,有可能是在同步数据,可以等会再查看,

mysql> select * from performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |

+---------------------------+--------------------------------------+-------------+-------------+--------------+

| group_replication_applier | 57b54493-81cf-11e8-8a9a-52540013d792 | server1 | 3306 | ONLINE |

| group_replication_applier | c33132d0-81d1-11e8-9ff1-525400677cc8 | server2 | 3306 | ONLINE |

+---------------------------+----

测试:

在server1中创建新的数据库并写入数据,看server2和server3是否都同步有相同的数据。

mysql> create database test;

Query OK, 1 row affected (0.26 sec)

mysql> use test;

Database changed

mysql> create table t1 (c1 int primary key,c2 text not null); ##插入表时需要设置主键

Query OK, 0 rows affected (1.11 sec)

mysql> insert into t1 values(1,‘chaokaidi‘);

Query OK, 1 row affected (0.24 sec

server2和server3上查看(两者都同步有server1的数据):

mysql> show databases;

mysql> use test;

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| t1 |

+----------------+

1 row in set (0.00 sec)

mysql> select * from t1;

+----+---------+

| c1 | c2 |

+----+---------+

| 1 | chaokaidi |

+----+---------+

实现全复制的另一种方法是修改数据库脚本文件(/etc/init.d/mysqld)以实现全同步。

mysql脚本文件修改,注释掉密码插件。

111 ret=$?

112 #[ $ret -ne 0 ] && return $ret

113 #initfile="$(install_validate_password_sql_file)"

114 #action $"Installing validate password plugin: " /usr/sbin/mysqld --datadir= "$datadir" --user=mysql --init-file="$initfile"

115 #ret=$?

116 #rm -f "$initfile"

117 chown -R mysql:mysql "$datadir"

原文:https://www.cnblogs.com/2567xl/p/11681168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值