mysql8基于GTID(全局事务)主从复制架构搭建

首先在vmware上创建3个cenos7虚拟机,ip分别是:192.168.0.112,192.168.0.113,192.168.0.114,

搭建架构图如下:

mysql8基于GTID(全局事务)主从复制架构搭建_第1张图片

1.在3个虚拟机上安装mysql;

2.master机器(192.168.0.112)创建复制用户设置其权限:

mysql> create user 'repl'@'%' identified by 'Repl_123456';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> flush privileges;

3.配置主从数据库my.cnf

master my.cnf配置内容如下:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 主从复制所需
server_id=1
gtid_mode=ON
enforce-gtid-consistency=ON
#binlog
log_bin=master-binlog
log-slave-updates=1
binlog_format=row
#relay log
skip_slave_start=1
max_connect_errors=1000
default_authentication_plugin = 'mysql_native_password'

slave my.cnf配置文件如下:

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 主从复制所需
server_id=2
gtid_mode=ON
enforce-gtid-consistency=ON
# 启动每个副本 ,以确保在配置副本设置之前不会启动复制
skip-slave-start=on
# 指定复制的数据库
replicate-do-db=demo
#binlog
log-bin=slave-binlog
log-slave-updates=1
binlog_format=row      #强烈建议,其他格式可能造成数据不一致

#relay log
skip_slave_start=1
default_authentication_plugin = 'mysql_native_password'

 配置完成从起主从mysql:

service mysqld restart

重启后,在slave上尝试链接复制用户是否可以连接成功:

mysql -urepl -pRepl_123456 -h192.168.0.112 -P 3306

如果链接不成功,查看master防火墙是否开发3306端口号,如果未开放开放后再试

4.主从设置:

先在master机器上mysql中执行以下命令查看master状态:

mysql> show master status\G

mysql8基于GTID(全局事务)主从复制架构搭建_第2张图片

如图,master的gtid  xxxxx:1-n则设置正确

在slave的mysql中执行下面命令,设置主从关系:

mysql> CHANGE MASTER TO
        MASTER_HOST = '192.168.0.112',
        MASTER_PORT = 3306,
        MASTER_USER = 'repl',
        MASTER_PASSWORD = 'Repl_123456',
        MASTER_AUTO_POSITION = 1;

 在slave的mysql中启动slave:

mysql> start slave;

在slave的mysql中查看slave状态:

mysql> show slave status\G

如下图,出现两个yes则主从同步设置成功:

mysql8基于GTID(全局事务)主从复制架构搭建_第3张图片

 5.注意事项

a.设置过程如果出错,可以重新设置

    在master的mysql中执行:reset master然后删除配置data下的binlog文件;

    在slave的mysql中执行:

         mysql> stop slave;

         mysql> reset slave;

         mysql> start slave;

b.在搭建过程master和slave机器上都应没有需要同步的库,直到搭建成功,才可以在master中创建数据库、创建表、插入数据等操作才会同步到slave库;

   如果master已经存在库了,即是在原库基础上做slave横向扩展,需要先把master数据库备份,然后在新slave上导入,在配置从库同步。

c.每次停止从服务器,再次启动后,需要在slave上mysql中执行start slave,否则不会同步数据。

你可能感兴趣的:(mysql,架构,数据库)