[Docker][MySQL]配置 docker 容器的 MySQL 的主主复制

本文不再介绍主从复制,主从复制请移步至 [Linux][数据库]配置 docker 容器的 MySQL 的主从复制

1. 主主复制概念

使用主从复制后,存在一个问题:从库一定不能进行增删改操作,会导致主从数据不一致。

那么,解决方案之一就是让原来的主从数据库,变成互为主从,也就是主从双写。

2. 主主复制配置

2.1 关闭从库复制

进入从库的容器内:docker exec -it mysql-slave bash
登陆MySQL控制台之后,关闭主从复制:stop slave;

2.2 修改配置文件

2.2.1 主库修改

1、进入主库容器:docker exec -it mysql-master bash
2、修改主库容器内的配置文件:vim /etc/mysql/my.cnf

[mysqld]

# 设定服务id,同一局域网内 此id唯一
server-id=100

# 启动二进制日志,并定义日志位置名称;将操作命令记录到日志中,同步数据
# 可在主节点执行 show variables like '%log_bin%'; 查看日志位置
log-bin=mysql-bin

# 在主从配置上,加上下边的配置

# 开启主库的中继日志
relay-log=master-relay-log

#步进值。一般有n台主MySQL就填n(MySQL设置自增主键时,自增的步进值,避免主从冲突)
auto_increment_increment=2

#起始值。一般填第n台主MySQL。此时为第一台主MySQL(自增偏移量)
auto_increment_offset=1

3、重启服务,启动docker(加上–restart就不用重启容器了)
service mysql restart
docker start mysql-master

2.2.2 从库修改

进入从库容器:docker exec -it mysql-slaver bash
修改从库容器内的配置文件:vim /etc/mysql/my.cnf

[mysqld]

# server-id ,意义同上
server-id=101

# 如果此从库 作为 主库,开启二进制日志功能
# log-bin=mysql-slave-bin

# 定义中继日志位置和名称;将主机的二进制日志记录到中继日志,SQL线程读取中继日志SQL 用于同步数据
# 可在从节点执行 show variables like '%relay_log%'; 查看日志位置
relay_log=mysql-relay-log

# 在主从配置上,加上下边的配置

# 启动二进制日志,并命名
log-bin=mysql-bin
# 同步数据 忽略 mysql、information_schema 库
# binlog-ignore-db=mysql,information_schema 
# 自增步长和偏移量
auto_increment_increment=2
auto_increment_offset=1

3、重启服务,启动docker(加上–restart就不用重启容器了)
service mysql restart
docker start mysql-slave

2.3 配置主主复制

2.3.1 配置从库用户权限

进入从库容器控制台,并对slave用户授权。

为slave用户赋予权限:

# replication client 用户的复制权限
# replication slave 监视管理复制用户权限
# 赋予slave用户 对于 *.*(所有库的所有表 格式:database_name.table_name) 的权限
grant replication slave, replication client on *.* to 'slave'@'%';

如果没有该用户,就先创建用户:

# 创建用户slave 密码为 123456,% 允许任何远程主机登录此用户
create user 'slave'@'%' identified by '123456';

2.3.2 反向链接主从

1、查看从节点状态信息

在mysql-slave容器的mysql控制台root用户 查看从库状态信息,记录File和Position,sql:

-- 因为现在的 mysql-slave 作为主库,所以展示 master 状态。
show master status;

2、在 mysql-master 配置同步信息

SQL语句:

change master to master_host='192.168.44.156', \
master_user='slave', \
master_password='123456', \
master_port=3340, \
master_log_file='mysql-bin.000001', \
master_log_pos= 617, \
master_connect_retry=30;

配置说明(这里所说的主节点是mysql-slave):

master_host:主节点的地址,同一台服务器用主库容器mysql-master的ip
mster_user:主节点创建授权的账户
master_password:用户密码
master_port:主节点的端口号,指的是容器的端口号,我mysql-master映射出来的端口是3339;同一台服务器使用3306
master_log_file:上述主节点状态信息中的File,指定slave从哪个日志文件复制数据
master_log_pos:上述的Position,从哪个Positon开始读取
master_connect_retry:连接失败时的重试 时间间隔,单位是秒,默认60s

3、开启主从复制

在 mysql-master 执行sql:

start slave;

4、查看主从复制状态信息

mysql-master 执行SQL:

# 注意末尾没有分号
show slave status \G

当 Slave_IO_Running 和 Slave_SQL_Running 都为 YES,说明主从复制配置成功。

5、开启 mysql-slave 的主从复制功能
mysql-slave 执行SQL:

start slave;

3. 遇到问题

问题描述:
从节点重新链接 master 时报错,
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

解决方案:
执行SQL:

reset slave;
start slave;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值