- 下面的架构是双主同步+各自有从节点
下载
docker pull mishamx/mysql docker tag mishamx/mysql rep docker rmi mishamx/mysql
创建容器
主节点
docker run -d -p 9003:3306 \
-e MYSQL_MASTER_PORT=3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_REPLICATION_USER=backup \
-e MYSQL_REPLICATION_PASSWORD=backup \
-v rnv1:/var/lib/mysql \
--privileged \
--name rn1 \
--net=<虚拟网络> rep
配置文件
/etc/mysql/my.cnf
[mysq1d]
character_set_server=utf8mb4
# 要不同
server_id=1001
log_bin=mysql_bin
relay_log=relay_bin
# 由于双主节点互相同步,互相为 slave
## 表示 slave 将复制事件写进自己的二进制日志
log-slave-updates=1
# 数据同步模式
## 不指定引擎时,默认使用 Innodb 引擎
## 一个事务中,有 sql 执行错误,则回滚事务
sq1_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
从节点
docker run -d -p 9004:3306 \
-e MYSQL_MASTER_HOST=rn1 \
-e MYSQL_MASTER_PORT=3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_REPLICATION_USER=backup \
-e MYSQL_REPLICATION_PASSWORD=backup \
-v rnv2:/var/lib/mysql \
--privileged \
--name rn2 \
--net=<主节点同一个虚拟网络> rep
- 修改了
--name
- 就多了
MYSQL_MASTER_HOST
配置文件
/etc/mysql/my.cnf
[mysqld]
server_id=1003
character_set_server=utf8mb4
log_bin=mysql_bin
# 表示 slave 将复制事件写进自己的二进制日志
relay_log=relay_bin
# 只读
read-only=1
配置主从同步
- 各个从分别同步各自的主
- 双主配置互相同步
stop slave;
change master to
-- swarm 网络可能会变化,所以设置 docker 名即可
master_host='rn1',
master_port=3306,
master_use r='backup',
master_password='backup';
注意点
主节点宕机
- 主从同步失效,但是从节点可读
**