基于Centos7+docker+Mysql的主从、主从从模式配置

系统架构

Master节点: 192.168.3.112
Relay节点: 192.168.3.122
Slave节点: 192.168.3.12

基于Docker 运行Mysql

前提: 服务都已经按照好docker,防火墙都已经关闭或者端口都打开
所有命令都基于root运行,如果非root,请添加sudo命令

每台服务器都如下配置

# docker pull mysql:5.7
# cd /data
# mkdir mysql
# cd mysql
# mkdir data conf
# docker run -d -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --restart unless-stopped  mysql:5.7
# docker ps

到此,三台服务的Mysql都已经启动

配置Master

配置master的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server_id=1
log-bin=master-bin
log-bin-index=master-bin.index
binlog-ignore-db=mysql

可以通过增加”replicate-do-db” 指定需要复制的数据库,如果不指定则是所有的数据。如果需要指定多个数据库,只需要增加多个”replicate-do-db” 即可。
binlog-ignore-db 指定忽略的数据库
log-bin 指定归档日志的存储文件
server_id 必须保证在mysql集群中,该字段唯一

重启mysql

# docker restart mysql

创建用于复制的用户

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CREATE USER 'repl'@'192.168.%.%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%';
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

记录:master-bin.0000X
这里写图片描述

docker exec -it mysql /bin/bash 通过docker命令访问容器,并在容器内部进行mysql相关命令操作
mysql -u root -p 执行完成后,需要输入密码。密码是在创建容器的时候指定的,这里指定的是 123456

配置Relay

配置Relay的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server-id=2
binlog-ignore-db=mysql
log_slave_updates=1
log-bin=mysql-bin.log

log_slave_updates=1 该配置是最为关键的一步。该配置主要是配置通过master复制的信息是否写入到归档日志中。1:表示写入。
如果是主从模式 “log_slave_updates”、”log-bin” 配置项都可以删除。

重启mysql

# docker restart mysql

设置连接的Master信息

MASTER_HOST: master的地址。
MASTER_USER: 在Master创建的运行复制的用户。
MASTER_PASSWORD:对应的密码
MASTER_LOG_FILE: 归档日志文件。通过查看master状态获得
MASTER_LOG_POS: 当前位置偏移。通过查看master状态获得

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.112',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000008',MASTER_LOG_POS=970;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

这里写图片描述

创建用于从节点复制中继节点的用户(该节点作为master)

mysql> CREATE USER 'repl'@'192.168.%.%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%';
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

这里写图片描述

配置Slave

配置Slave的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server-id=3

重启mysql

# docker restart mysql

设置连接的Relay信息

MASTER_HOST: master的地址。
MASTER_USER: 在Master创建的运行复制的用户。
MASTER_PASSWORD:对应的密码
MASTER_LOG_FILE: 归档日志文件。通过查看master状态获得
MASTER_LOG_POS: 当前位置偏移。通过查看master状态获得

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.122',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=670;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

结果验证

在master的mysql中创建数据库,并插入数据。在中继和从节点查看数据是否同步。

阅读更多

没有更多推荐了,返回首页