当前位置: 首页 > news >正文

Docker搭建MySQL8主从复制

之前文章我们了解了面试官:说一说Binlog是怎么实现的,这里我们用Docker搭建主从复制环境。

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;

图片

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

http://www.lryc.cn/news/293002.html

相关文章:

  • 【前端】日期转换
  • Git 怎么设置用户的权限
  • 大端和小端模式介绍
  • 【vue】报错 Duplicate keys detected 解决方案
  • 机器学习_13_SVM支持向量机、感知器模型
  • OpenCV学习记录——轮廓检测
  • FreeRTOS任务挂起以及延时部分源码分析
  • oracle数据库慢查询SQL
  • C语言搭配EasyX实现贪吃蛇小游戏
  • # 软件安装-Linux搭建nginx(单机版)
  • 成熟的汽车制造供应商协同平台 要具备哪些功能特性?
  • React16源码: React中处理ref的核心流程源码实现
  • ref和reactive
  • 掌握数据预测的艺术:线性回归模型详解
  • STM32F407移植OpenHarmony笔记8
  • C++:输入流/输出流
  • 十、Qt三维图表
  • CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard
  • 【leetcode】完全背包总结
  • 【Linux】理解系统中一个被打开的文件
  • k8s kubeadm部署安装详解
  • RT-DETR算法优化改进: 下采样系列 | 一种新颖的基于 Haar 小波的下采样HWD,有效涨点系列
  • CocosCreator3.8源码分析
  • (已解决)spingboot 后端发送QQ邮箱验证码
  • 【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题
  • 2024牛客寒假算法基础集训营1
  • 元素的显示与隐藏,精灵图,字体图标,CSSC三角
  • 最新!2024顶级SCI优化!TTAO-CNN-BiGRU-MSA三角拓扑聚合优化、双向GRU融合注意力的多变量回归预测程序!
  • Flink SQL Client 安装各类 Connector、组件的方法汇总(持续更新中....)
  • React18-模拟列表数据实现基础表格功能