«

Docker搭建MySQL8的主从复制

时间:2024-2-9 17:07     作者:Anglei     分类: 自动化运维


docker安装主从MySQL,这里我们使用MySQL8.0.32版本:

主库配置

master.cnf

//基础配置
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysql.sock  //路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法

//主从配置
server-id=1                     //id唯一,一般采用机器ip后缀
replicate-wild-ignore-table=mysql.*      # 忽略表

//主库必须,从库不必须
log-bin=mysql-bin                       //in-log日志路径, 路径相对于 datadir
#binlog_cache_size=2M             //为每个session 分配的内存,如果事务大而且多,dml操作也频繁(2–4M)
log_slave_updates=1             //表示slave将复制事件写进自己的二进制日志
binlog_format=mixed              //数据混合复制同步

运行容器:

这里将数据及配置映射到本地。

docker run -p 4306:3306 --name mysql1 -v /Users/XXX/work/docker/data/mysql/mysql1:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/master.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -d mysql:8.0.32

从库配置

//基础配置
[client]
port=3306
socket=/var/run/mysqld/mysql.sock
[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysql/mysql.sock  //路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法

//主从配置
server-id=2                     //id唯一,一般采用机器ip后缀
replicate-wild-ignore-table=mysql.*      //忽略表

运行容器:

docker run -p 5306:3306 --name mysql2 -v /Users/XXX/work/docker/data/mysql/mysql2:/var/lib/mysql -v /Users/XXX/work/docker/data/mysql/conf/slave.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456  --privileged=true -d mysql:8.0.32

异步复制搭建

异步复制配置

• 连接主库

mysql -h127.0.0.1 -uroot -p123456 -P4306

• 主库创建复制用户,这里需要指定密码类型,MySQL8默认类型从库无法连接

CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

• 查询主库状态

show master status;

• 连接从库

mysql -h127.0.0.1 -uroot -p123456 -P5306

• 设置主库链接。

change master to master_host='192.168.1.10',master_user='repl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=157,master_port=4306;

master_host :Master的地址。 由于这里使用docker容器部署,采用桥接模式,IP需要填写宿主机IP
master_port:Master的端口号
master_user:用于数据同步的用户,这里填我们新创建的用户主从同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上面主库中 File 字段的值
master_log_pos:从哪个 Position 开始读,即上面主库 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

• 启动从库同步

start slave;

• 查看同步状态

show slave status;

下图表示主库已连接成功:

测试

主库创建测试数据库test,并创建表t1

从库查看数据源已同步过来

表也同步过来

半同步复制搭建

半同步复制是使用额外的插件实现的,并非MySQL中内置的,因此必须单独安装相应插件之后才能启用。安装插件后,可以通过与之关联的系统变量来控制半同步复制的启用或禁用。在安装关联的插件之前,与半同步复制相关的系统变量不可用(因为这些系统变量是半同步复制插件携带的)。

由于半同步复制需要已经配置好异步复制且复制处于可用状态,这里我们直接使用上面的异步复制进行。

主库配置

• 安装semi插件

install plugin rpl\_semi\_sync\_master soname 'semisync\_master.so';

• 查看插件状态

show global variables like '%semi%';

• 开启半同步,并将主从错误连接超时时间改为3秒。

set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 3000;

改后配置如下:

从库配置

• 设置从库

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = 1;

• 查看从库半同步配置

show global variables like '%semi%';

• 重启同步线程
必须重启从库的I/O线程,否则半同步复制不生效。重启I/O线程之后,从库会重新连接到主库,并注册为半同步的从库(如果是全新搭建的复制拓扑,可以忽略该步骤。但是,半同步复制的配置如果发生在异步复制的配置之后,则仍然需要此步骤):

stop slave io_thread;
start slave io_thread;

到此半同步复制就配置完成了。

本文完结,相关标签: mysql

 版权所有:Anglei
 文章标题:Docker搭建MySQL8的主从复制
 除非注明,本站文章如未特殊说明均为 MAXADA社区知识库 原创,且版权所有,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(0)

鲜花(0)

鸡蛋(0)
分享到: