系统架构
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中创建数据库,并插入数据。在中继和从节点查看数据是否同步。