Docker搭建MySQL8主从复制

news2024/11/19 5:44:14

之前文章我们了解了面试官:说一说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.coloradmin.cn/o/1428379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java(面向对象基础)

面向对象的三大特征:封装、继承、多态 一、封装 用 类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。 封装规范:合理隐藏,合理暴露(先将成…

力扣hot100 编辑距离 多维DP

Problem: 72. 编辑距离 文章目录 思路Code 思路 👨‍🏫 参考地址 Code ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) 🌎 空间复杂度: O ( n m ) O(nm) O(nm) class Solution {public int minDistance(String s1, String s2){int n s1.lengt…

MongoDB基础认识

MongoDB数据库介绍 名称源自“humongous”(意为“巨大无比”)。MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提…

备战蓝桥杯---搜索(DFS基础1)

何为深搜&#xff1f; 即不撞南墙不罢休。 话不多说&#xff0c;直接看题&#xff1a; 我们可以把这看成深搜的模板题&#xff0c;下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[15];//存值并输出 int vis[15]; int n18; void dfs(int …

Nicn的刷题日常之喝汽水问题

目录 1.题目描述 2.解题思路 3.解题 4.思路2 解题 1.题目描述 喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff08;编程实现&#xff09;。 2.解题思路 1. 20元首先可以喝20瓶&#xff0c;此时手…

书生浦语2-对话-20B大模型部署实践

简介 书生浦语2.0是一个大语言模型&#xff0c;是商汤科技与上海 AI 实验室联合香港中文大学和复旦大学发布的新一代大语言模型。‘ 具体特性 有效支持20万字超长上下文&#xff1a;模型在 20 万字长输入中几乎完美地实现长文“大海捞针”&#xff0c;而且在 LongBench 和 L…

Python程序设计 函数基础

简单函数 函数&#xff1a;就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。 函数的使用包含两个步骤&#xff1a; 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用&#xff0c;在开发程序时&#xff0c;使用…

2024年美赛F题超详细思路

Problem F: Reducing Illegal Wildlife Trade 美赛F题以非法野生动物贸易为背景进行命题&#xff0c;需要我们选择客户进行一系列的问题。本文正式解题前需要收集客户的数据以及数据预处理。对于客户的选择&#xff0c;这里考虑的点在于该客户需要能够对非法贸易交易产生影响。…

el-upload子组件上传多张图片(上传为files或base64url)

场景&#xff1a; 在表单页&#xff0c;有图片需要上传&#xff0c;表单的操作行按钮中有上传按钮&#xff0c;点击上传按钮。 弹出el-dialog进行图片的上传&#xff0c;可以上传多张图片。 由于多个表单页都有上传多张图片的操作&#xff0c;因此将上传多图的el-upload定义…

6、基于机器学习的预测

应用机器学习的任何预测任务与这四个策略。 文章目录 1、简介1.1定义预测任务1.2准备预测数据1.3多步预测策略1.3.1多输出模型1.3.2直接策略1.3.3递归策略1.3.4DirRec 策略2、流感趋势示例2.1多输出模型2.2直接策略1、简介 在第二课和第三课中,我们将预测视为一个简单的回归问…

Python开源项目周排行 2024年第3周

ython 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

K8S-NFS-StorageClass

工作流程 K8s中部署NFS-StorageClass K8s的StorageClass提供了为集群动态创建PV的能力。 1.部署NFS服务 2.选择NFS的Provinisoner驱动 K8S中没有内置的NFS的制备器&#xff0c;而定义StorageClass的时候需要指定制备器&#xff08;Pervisioner&#xff09;,所以需要&#xf…

Pycharm Community 配置调试Behave

前提&#xff1a;python小白&#xff0c;临时搞python项目&#xff0c;公司限制使用Pycharm版本&#xff0c;故只能使用社区版&#xff0c;然而官方有明确说明&#xff1a;只有Professional版支持Behave。故研究了半天才整清楚社区版调试Behave的设置 没有进行下面的步骤之前&…

C++面试宝典第26题:螺旋矩阵

题目 给你一个正整数n,生成一个包含1到n的平方的所有元素,且元素按顺时针顺序螺旋排列成n x n的正方形矩阵。 示例: 输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 解析 螺旋矩阵是指按照顺时针(或逆时针)螺旋顺序排列元素的二维矩阵。比如:给定一个如下的3x3矩阵,按顺…

PSoc62™开发板之WDT应用

看门狗 看门狗定时器(WDT)是一种硬件定时器&#xff0c;在出现意外固件时自动复位设备执行路径。如果启用了WDT&#xff0c;则必须在固件中定期进行服务&#xff0c;以避免复位。否则&#xff0c;计时器失效并产生一个设备复位。此外&#xff0c;WDT可以用作中断源或在低功耗唤…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器&#xff08;TIM6 / TIM7&#xff09; 我们的目标是通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪一下&#xff01; 思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时器什…

2024021期传足14场胜负前瞻

2024021期赛事由亚洲杯2场、英超5场&#xff0c;德甲6场、非洲杯1场组成。售止时间为2月3日&#xff08;周六&#xff09;19点00分&#xff0c;敬请留意&#xff1a; 本期1.5以下赔率3场&#xff0c;1.5-2.0赔率3场&#xff0c;其他场次基本皆是平半盘、平盘。本期14场整体难度…

第三百零三回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容&#xff0c;本章回中将介绍如何在在输入框中提示错误.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

LabVIEW CVT离合器性能测试

介绍了CVT&#xff08;连续变速器&#xff09;离合器的性能测试的一个应用。完成了一个基于LabVIEW软件平台开发的CVT离合器检测与控制系统&#xff0c;通过高效、准确的测试方法&#xff0c;确保离合器性能达到最优。 系统采用先进的硬件配合LabVIEW软件&#xff0c;实现了对…

python-自动化篇-运维-实现读取日志文件最后一行的时间

文章目录 1. 使用Python打开日志文件2.python读取文件最后一行两种方式3.读取当前时间&#xff0c;进行两者相减&#xff0c;超时报警4.将内容推送到企业微信5. 关闭日志文件整体代码 1. 使用Python打开日志文件 在开始实时读取日志文件之前&#xff0c;我们首先需要打开一个日…