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

Docker mysql 主从复制

目录

介绍:为什么需要进行mysql的主从复制

主从复制原理:

✨主从环境搭建

主从一般面试问题:


介绍:为什么需要进行mysql的主从复制

在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用「主从复制」

比如:在复杂的业务系统中,有一句sql执行后导致锁表,并且这条sql的的执行时间有比较长,那么此sql执行的期间导致服务不可用,这样就会严重影响用户的体验度。

主从复制中分为「主服务器(master)「和」从服务器(slave)」「主服务器负责写,而从服务器负责读」,Mysql的主从复制的过程是一个「异步的过程」

这样读写分离的过程能够是整体的服务性能提高,即使写操作时间比较长,也不影响读操作的进行。

主从复制原理:

Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条线程和Slave中的两条线程

master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。

并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。

I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。

然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。

SQL线程也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步

从复制的过程有不同的策略方式进行数据的同步,主要包含以下几种:

  • 「同步策略」:Master会等待所有的Slave都回应后才会提交,这个主从的同步的性能会严重 的影响。

  • 「半同步策略」:Master至少会等待一个Slave回应后提交。

  • 「异步策略」:Master不用等待Slave回应就可以提交。

  • 「延迟策略」:Slave要落后于Master指定的时间。

✨主从环境搭建

需要一个mysql服务

docker pull mysql/mysql-server:5.7
mkdir -p /home/data/mysql/master/{conf,data}
mkdir -p /home/data/mysql/slave/{conf,data}

确保了上面已有之后

就可以进行主从搭建了

我这里使用的事centos7 vmware的ip分别是192.168.232.155(Slave)192.168.232.156(Master)作为测试,首先在192.168.163.156(Master)中创建一个测试库test:

// 创建测试库
create database test default character set utf8mb4 collate utf8mb4_general_ci;
// 并且授权
grant all privileges on test.* to 'test'@'%';

然后编辑Master中的my.cnf文件,此文件位于/etc/my.cnf,执行下面的sql,并添加下面的信息:

sudo vi /etc/my.cnf
​
==========以下是配置文件中的信息=============
# 配置编码为utf8
character_set_server=utf8mb4
init_connect='SET NAMES utf8mb4'
​
# 配置要给Slave同步的数据库
binlog-do-db=test
# 不用给Slave同步的数据库,一般是Mysql自带的数据库就不用给Slave同步了
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 自动清理30天前的log文件
expire_logs_days=30
# 启用二进制日志
log-bin=mysql-bin
# Master的id,这个要唯一,唯一是值,在主从中唯一
server-id=3
配置完后重启Mysql服务,并查看Mysql的log_bin日志
是否启动成功:
systemctl restart mysqld
# 查看log_bin日志是否启动成功
show variables like '%log_bin%';

接着查看Master的状态:

show master status;

这两个数据FilePosition要记住,后面配置Slave的时候要使用到这两个数据

最后登陆Master的数据库,并创建一个用户用于同步数据:

create user 'kbin'@'%' IDENTIFIED BY 'LDCldc-2020';
grant file on *.* to 'kbin'@'%';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'kbin'@'%';

到这里Master的配置就配置完了,后面就进行Slave的配置。

在Slave中同样要创建test数据库,并且授权给kbin用户:

# 创建同步数据的test数据库
create database test default character set utf8mb4 collate utf8mb4_general_ci;
# 授权
grant all privileges on test.* to 'kbin'@'%';

接着编辑Slave中my.cnf文件,同样是在/etc/my.cnf路径下,加入如下配置:

# 配置从服务器的ID,唯一的
server-id=4
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE

并且重启Slave中的Mysql服务:

systemctl restart mysqld

在Slave中添加Master的信息:

# master_host是Master的ip,master_log_file和master_log_pos就是配置之前查看Master状态时显示的File和Position信息
change master to master_host='192.168.163.156',master_port=3306,master_user='backup',master_password='LDCldc-2020',master_log_file='mysql-bin.000001',master_log_pos=1513; 

最后查看Slave的状态:

show slave status\G

当看到Slave_IO_RunningSlave_SQL_Running都是yes的时候,这表示主从配置成功。

「Slave_IO_Running也就是Slave中的IO线程用于请求Master,Slave_SQL_Running时sql线程将中继日志中更新日志同步到Slave数据库中。」

但是,有时候Slave_IO_Running会为no,而Slave_SQL_Running为yes,这时候需要检查一下原因,因为我自己初次搭建的时候,也是出现这个问题。

首先看重启一下Slave的MySQL服务:systemctl restart mysqld,然后执行:

stop slave;
start slave;

这样就能够使Slave_IO_RunningSlave_SQL_Running显示都是yes了

最后就是测试了,测试使用的是之前创建的test库,Master是用来写的,在Master的test库中随机创建一个表,你会发现Slave也会有这个表,插入数据也一样,都会被同步到Slave中

主从一般面试问题:

Mysql主从有什么优点?为什么要选择主从?

✨高性能方面:

主从复制通过水平扩展的方式,解决了原来单点故障的问题,并且原来的并发都集中到了一台Mysql服务器中,现在将单点负载分散到了多台机器上,实现读写分离,不会因为写操作过长锁表而导致读服务不能进行的问题,提高了服务器的整体性能

✨可靠性方面:

主从在对外提供服务的时候,若是主库挂了,会有通过主从切换,选择其中的一台Slave作为Master;若是Slave挂了,还有其它的Slave提供读服务,提高了系统的可靠性和稳定性

相关文章:

Docker mysql 主从复制

目录 介绍:为什么需要进行mysql的主从复制 主从复制原理: ✨主从环境搭建 主从一般面试问题: 介绍:为什么需要进行mysql的主从复制 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff…...

第7章-第1节-Java中的异常处理

1、异常Exception概述: 1)、异常的概念: 现实生活中万物在发展和变化会出现各种各样不正常的现象。 例如:人的成长过程中会生病。 实际工作中,遇到的情况不可能是非常完美的。 比如:你写的某个模块&…...

使用python生成一个月度账单消费金额柱状图表

阿里云月度账单根据月份、消费金额(可开票)生成一个柱状图表 import pandas as pd import matplotlib.pyplot as plt import os# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 用于显示中文的宋体# 获取当前工作目录下所有CSV文件 csv_fil…...

将一个独立的磁盘添加到已有的 `/` 分区

将一个独立的磁盘添加到已有的 / 分区是比较复杂的,因为 / 分区已经是一个逻辑卷(LVM)。在这种情况下,可以扩展现有的 LVM 体积组(Volume Group),然后扩展 / 逻辑卷(Logical Volume&…...

AI智能电销器人需要注意哪些问题呢

随着科技的不断发展,人们出行变得越来越方便,市面上很多产品也越来越智能化,高科技的产品不仅改变了我们的生活方式而且也改变了企业的竞争方式,很多的企业尤其是电销行业中的大佬己经意识到了AI电销机器人的好处,因此…...

呼叫中心研究分析:到2027年市场规模预计将达4966亿美元

由于业务运营中以客户为中心的方法的兴起,呼叫中心市场近年来出现了显着增长。随着对客户满意度的日益重视,全球对呼叫中心服务的需求猛增。在本次分析中,我们将从全球和中国的角度审视呼叫中心市场的发展趋势。全球市场: 到 2027…...

工业数据采集分析——工厂大脑 提升综合经济效益

随着企业对数字化的认知越来越清晰,对工业数智化的战略越来越明确,企业的诉求也在发生转变。中国的工业企业经过近几十年的发展,自动化、信息化,以及一些基础的数据系统建设在不同的行业中慢慢地推进。近几年,工业企业…...

python系列教程218——生成器表达式

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...

jquery 实现简单的标签页效果

实现 <!DOCTYPE html> <html> <head><title>jq 实现简单的标签页效果</title><script src"/jquery/jquery-1.11.1.min.js"></script><style>.tab {cursor: pointer;width:100px;height:30px;float:left;text-align…...

C++ Web框架Drogon初体验笔记

这段时间研究了一下C的Web框架Drogon。从设计原理上面来说和Python的Web框架是大同小异的&#xff0c;但是难点在于编译项目上面&#xff0c;所以现在记录一下编译的过程。下面图是我项目的目录。其中include放的是头文件&#xff0c;src放的是视图文件&#xff0c;static放的是…...

x-cmd pkg | busybox - 嵌入式 Linux 的瑞士军刀

目录 简介首次用户功能特点竞品和相关作品 进一步阅读 简介 busybox 是一个开源的轻量级工具集合&#xff0c;集成了一批最常用 Unix 工具命令&#xff0c;只需要几 MB 大小就能覆盖绝大多数用户在 Linux 的使用&#xff0c;能在多款 POSIX 环境的操作系统&#xff08;如 Linu…...

Java异常简单介绍

文章目录 1. 异常分类和关键字1.1 分类1.2 关键字 2. Error2.1 Error定义2.2 常见的Error2.2.1 VirtualMachineError2.2.2 ThreadDeath2.2.3 LinkageError2.2.4 AssertionError2.2.5 InternalError2.2.6 OutOfMemoryError2.2.6.1 OOM原因2.2.6.2 OutOfMemoryError会导致宕机吗 …...

ocrmypdf_pdf识别

安装 安装说明 https://ocrmypdf.readthedocs.io/en/latest/installation.html#native-windows提到需要的软件&#xff1a; Python 3.7 (64-bit) or later Tesseract 4.0 or later Ghostscript 9.50 or later 安装 ocrmypdf pip install ocrmypdf 添加语言包 https://oc…...

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据&#xff0c;Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集&#xff0c;并对其进行一定的操作&#xff0c;以正确的导入到我们的计算机&#xff0c;为接下…...

【linux 多线程并发】线程本地数据存储的两种方式,每个线程可以有同名全局私有数据,以及两种方式的性能分析

线程本地数据(TLS) ​专栏内容&#xff1a; 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构&#xff0c;以及如何实现多机的数据库节点的多读多写&#xff0c;与传统主备&#xff0c;MPP的区别&#xff0c;技术难点的分析&#xff0c;数据元数据同步&#xff0c;多主节点的…...

2401d,d导入C的问题

原文 D中是否可用仅C头文件库? 在C语言中,我需要这样做: #define STB_DS_IMPLEMENTATION #include "stb_ds.h"在包含h文件前,必须在单个C文件中定义. 在D中试过: enum STB_DS_IMPLEMENTATION 1; import stb_ds;但它不管用.有建议吗?也许使用中间C文件会工作 ,但…...

SpringCloud GateWay实现路由限流

目录 RequestRateLimiterGatewayFilterFactory令牌桶算法实现限流 RequestRateLimiterGatewayFilterFactory Spring Cloud Gateway 内置了一个限流功能的过滤器工厂&#xff0c;那就是RequestRateLimiterGatewayFilterFactory &#xff0c;它使用 Redis 和 Lua 脚本实现令牌桶…...

打印日期c++

给出年份 y和一年中的第 d天&#xff0c;算出第 d天是几月几号。 输入格式 输入包含多组测试数据。 每组数据占一行&#xff0c;包含两个整数 y 和 d。 输出格式 每组数据输出一行一个结果&#xff0c;格式为 yyyy-mm-dd。 数据范围 输入最多包含 100 组数据, 1≤y≤3000, 1≤d…...

数据结构入门到入土——链表(1)

目录 一&#xff0c;顺序表表/ArrayList的缺陷 二&#xff0c;链表 三&#xff0c;链表的实现 四&#xff0c;与链表有关的题目练习&#xff08;1&#xff09; 1.删除链表中等于给定值 val 的所有节点 2.反转一个单链表 3.给定一个带有头结点 head 的非空单链表&#xf…...

MySQL C API的使用

MySQL C API的使用 介绍及使用 MySQL C API&#xff08;也称为 MySQL Connector/C&#xff09;是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体&#xff0c;允许你在 C 程序中连接到 MySQL 数据库服务器&#xff0c;并执行查询、插入、更新等数据库操作。…...

JavaScript防御性编程

简单聊一下防御性编程&#xff0c;初衷是开发人员为了防止自己被裁员&#xff0c;而将代码编写为只有自己能看懂。如何只有自己能看懂&#xff1f;方法多种多样&#xff0c;但不能将简单问题复杂化&#xff0c;比如&#xff1a;编写一堆无效的逻辑关系&#xff0c;或将业务复杂…...

微信预约小程序制作指南:从小白到专家

在当今的数字时代&#xff0c;微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能&#xff0c;以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台&#xff0c;你…...

向量数据库:Milvus

特性 Milvus由Go(63.4%),Python(17.0%),C(16.6%),Shell(1.3%)等语言开发开发&#xff0c;支持python&#xff0c;go&#xff0c;java接口(C,Rust,c#等语言还在开发中)&#xff0c;支持单机、集群部署&#xff0c;支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行…...

亚马逊国际商品详情 API:获取特定商品详细信息的实践

随着电子商务的飞速发展&#xff0c;亚马逊作为全球最大的在线零售商之一&#xff0c;提供了丰富的商品详情 API&#xff0c;使得第三方开发者能够轻松地获取亚马逊网站上的商品信息。本文将介绍如何使用亚马逊国际商品详情 API&#xff08;Amazon Product Advertising API&…...

MSB30M-ASEMI小贴片整流桥MSB30M

编辑&#xff1a;ll MSB30M-ASEMI小贴片整流桥MSB30M 型号&#xff1a;MSB30M 品牌&#xff1a;ASEMI 封装&#xff1a;UMSB-4 最大平均正向电流&#xff1a;3A 最大重复峰值反向电压&#xff1a;1000V 产品引线数量&#xff1a;4 产品内部芯片个数&#xff1a;4 产品…...

Redis启动方式

redis三种启动方式 1.直接启动 进入redis根目录&#xff0c;执行命令: #加上‘&’号使redis以后台程序方式运行 ./redis-server & 2.通过指定配置文件启动 可以为redis服务启动指定配置文件&#xff0c;例如配置为/etc/redis/6379.conf 进入redis根目录&#x…...

TEMU 新手小白必看!2024入驻流程/入驻类目/入驻资料等详细流程讲解

2023 TEMU 可谓是赚足眼球&#xff0c;流量持续上涨&#xff0c;2024年相信不少卖家们已经跃跃欲试&#xff0c;但大陆卖家如何入驻TEMU&#xff1f;哪些品类适合入驻&#xff1f;又有哪些入驻要求和资料&#xff1f;别急&#xff0c;今天东哥就一一给大家详细讲解&#xff0c;…...

【C语言】数组

一维数组的创建和初始化 数组是一组相同类型元素的集合。 数组的创建 //数组的创建方式&#xff1a;type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式&#xff0c;用来指定数组的大小数组创建的实例&#xff1a; 数组创建&#xff…...

常见测试技术都有哪些?

测试技术是用于评估系统或组件的方法&#xff0c;目的是发现它是否满足给定的要求。系统测试有助于识别缺口、错误&#xff0c;或与实际需求不同的任何类型的缺失需求。测试技术是测试团队根据给定的需求评估已开发软件所使用的最佳实践。这些技术可以确保产品或软件的整体质量…...

Spring事务控制

1.事务介绍 1.1什么是事务&#xff1f; 当你需要一次执行多条SQL语句时&#xff0c;可以使用事务。通俗一点说&#xff0c;如果这几条SQL语句全部执行成功&#xff0c;则才对数据库进行一次更新&#xff0c;如果有一条SQL语句执行失败&#xff0c;则这几条SQL语句全部不进行执…...

asp.net做报名网站/公司网络推广营销

学习python一直是断断续续的&#xff0c;今天我们来介绍的是python的一个非常强大的模块---OS,我们来事例的时候不是用的标准的python&#xff0c;而是用的python的同胞兄弟Ipython&#xff0c;ipython 是一个 python 的交互式 shell&#xff0c;比默认的 python shell 好用得多…...

临沂做商城网站的公司/百度投诉电话人工客服24小时

https://www.xin3721.com/eschool/本文实例讲述了Winform中Treeview实现按需加载的方法&#xff0c;非常具有实用价值。分享给大家供大家参考。具体分析如下&#xff1a;最近项目里用到treeview&#xff0c;原先设计的是一开始就把所有数据都加载到treeview里&#xff0c;后来发…...

做网站的故意给中病毒/网络销售怎么找客户

文章目录MyBatis-Plus特性快速开始项目整体目录结构数据库准备配置文件简单CRUD通用service源码下载MyBatis-Plus 官网 个人白话解释&#xff1a;简单的CRUD直接通过方法调用&#xff0c;无需多写接口和xml&#xff0c;像jpa那样调用 愿景 我们的愿景是成为 MyBatis 最好的搭档…...

南京网页设计培训机构/新手怎么入行seo

CentOS 6.X 自带的软件源可选的并不多&#xff0c;有时候要找到一个偏门一些的软件&#xff0c;用命令一搜怎么都没有源&#xff0c;考虑到使用软件源配合 yum 命令安装可以自动安装依赖&#xff0c;所以加一个新的软件源迫在眉睫。 考虑到同根性&#xff0c;如果安装第三方的源…...

网站开发的技术方案/百度收录入口提交

操作系统环境 一台ubutun16.04&#xff0c;一台ubutun server18.04 说明 ubutun内部有ssh来帮我们连接另一台主机&#xff0c;但是每次连接都要输入对方主机密码才能连接: 那么怎么实现两台主机间不需要输入密码就可以实现连接呢&#xff1f;这就是我今天要说的主机间免密…...

软件平台包括什么/宁波专业seo外包

这是一篇Python入门指南&#xff0c;针对没有编程经验&#xff0c;甚至从未涉足计算机编程领域的「小白」。 不管你学习的初衷是热爱还是工作、转行需要&#xff0c;都能在这篇内容中找到答案。 Python 作为当下最火的编程语言之一&#xff0c;网上的学习教程很多&#xff0c;不…...