Docker部署MySQL主从复制

1. 主从复制概念及优势

1.1 概念

MySQL主从复制是一种数据库复制技术,它允许将一个数据库服务器(主服务器)上的数据更改复制到一个或多个数据库服务器(从服务器)。这种技术在数据库管理和维护中扮演着重要的角色,尤其是在需要数据冗余、负载均衡和高可用性的场景中。

主从复制的概念

  • 主服务器(Master):主服务器是数据更改的源头。所有的写操作(包括插入、更新和删除)都在主服务器上执行。主服务器负责记录所有数据变更到它的二进制日志中。

  • 从服务器(Slave):从服务器接收主服务器的数据变更并将它们应用到自己的数据库中。从服务器通常用于读取操作,如查询,这样可以减轻主服务器的负载。

  • 复制过程:复制过程涉及两个主要的线程——主服务器上的日志转储线程和从服务器上的复制I/O线程与复制SQL线程。主服务器将变更写入二进制日志,从服务器的I/O线程读取这些日志并将其写入中继日志,然后从服务器的SQL线程执行这些日志中的命令以更新数据。

1.2 主从复制的优势

  • 数据冗余和备份:主从复制提供了数据的冗余副本,这意味着即使主服务器发生故障,数据也不会丢失,可以从从服务器恢复。

  • 提高读取性能:通过将读取操作(如查询)分配给一个或多个从服务器,可以显著减轻主服务器的负载,提高整体的读取性能。

  • 高可用性:在主服务器发生故障时,可以从服务器接管服务,从而实现无缝的数据服务切换,保证系统的高可用性。

  • 负载均衡:主从复制允许将不同的数据库负载分配给不同的服务器,这样可以优化资源使用,提高系统的整体性能。

  • 数据分发:在分布式系统中,主从复制可以用来将数据分发到不同的地理位置,以减少数据访问的延迟。

  • 备份和恢复:从服务器通常用于备份目的,因为它们提供了数据的一个只读副本,这使得备份操作不会影响主服务器的性能。

MySQL主从复制是一种强大的工具,它提供了数据冗余、提高了读取性能和系统的可用性,同时还支持了负载均衡和数据分发等多种场景。

2.主从复制流程

Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。

配置主从同步的步骤总结:

  • 在主服务器上,必须开启二进制日志机制和配置一个独立的ID
  • 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号,可以是同一个,也可以不同
  • 在开始复制进程前,在主服务器上记录二进制文件的位置信息
  • 如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
  • 配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
  • 从服务器开启复制功能
  • 主服务器修改数据测试是否成功

3.主从复制实战

3.1 部署主服务器

创建容器,运行数据库主服务器master

docker run -p 3307:3306 --name master-mysql -v /masterdata/mysql-master/log:/var/log/mysql -v /masterdata/mysql-master/data:/var/lib/mysql -v /masterdata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7

修改master配置文件,/masterdata/mysql-master/conf 新建配置文件

vim /masterdata/mysql-master/conf/my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=1001 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

重启master实例

docker restart master-mysql

进入master容器,验证数据库

docker exec -it master-mysql /bin/bash

连接数据库,看是否能进入

bash-4.2# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44-log MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

出现这个红框中内容,即为部署成功

在master容器实例内创建数据同步用户(重要)

# 创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 赋予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 刷新权限
FLUSH PRIVILEGES;

查询创建的用户是否已经创建成功

SELECT user FROM mysql.user;

3.2 部署从服务器

创建从机服务器

docker run -p 3308:3306 --name mysql-slave -v /masterdata/mysql-slave/log:/var/log/mysql -v /masterdata/mysql-slave/data:/var/lib/mysql -v /masterdata/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7

修改从机服务器配置文件,进入/masterdata/mysql-slave/conf目录下新建my.cnf

vi /masterdata/mysql-slave/conf/my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=1002
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

重启slave实例

docker restart mysql-slave

进入从机,验证是否安装成功

docker exec -it mysql-slave /bin/bash
bash-4.2# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44-log MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

 出现图片内容,证明安装成功

3.3 主从复制

主数据库中查看主从同步状态

show master status;

进入从机mysql-slave容器

docker exec -it mysql-slave /bin/bash

在从数据库中配置主从复制

change master to master_host='192.168.1.42', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000004', master_log_pos=769,master_connect_retry=30;

master_log_file对应的是主服务器中查询状态的文件名称

master_log_pos对于查询文件的Postion

change master命令参数: 

master_host:主数据库的IP地址;

master_port:主数据库的运行端口;

master_user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码;

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

在从数据库中查看主从同步状态:no代表没有开始复制数据

show slave status \G;

在从数据库中开启主从同步

start slave;

再次查看从数据库状态:yes表示已经同步

3.4 主从复制数据验证

使用数据库管理工具,连接主从复制数据库

主机创建数据库即数据表,写入测试数据

从机查看是否同步

至此,mysql主从复制配置完成。

4.最后

感谢大家,请大家多多支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57651.shtml

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

相关文章

CSS 网格布局

网格布局是一个二维布局系统,允许开发者以行和列的形式创建灵活的网络,并将内容放置在网络的单元格中。有些元素可能只占据网络的一个单元,另一些元素则可能占据多行或多列。 网格的大小既可以精确定义,也可以根据自身内容自动计…

使用frp0.61.0透传局域网的https服务到自有域名

本文成因:我之前已经写过多个frphttps的文章,但因为frp版本升级后,更换了配置文件,其格式和之前差别比较明显,其次,之前的教程也过于繁杂,因此做出更新和改进。主要是展示各部分的配置文件&…

C/C++(六)多态

本文将介绍C的另一个基于继承的重要且复杂的机制,多态。 一、多态的概念 多态,就是多种形态,通俗来说就是不同的对象去完成某个行为,会产生不同的状态。 多态严格意义上分为静态多态与动态多态,我们平常说的多态一般…

实战应用WPS WebOffice开放平台服务

概述 根据公司的业务需要,主要功能是在线编辑文档,前端的小伙伴进行的技术调研,接入的是WPS WebOffice,这里只阐述技术介入的步骤、流程和遇到的坑进行的一些总结。 实践 WPS WebOffice 开放平台进行认证 在开始之前&#xff…

【NOIP提高组】加分二叉树

【NOIP提高组】加分二叉树 💐The Begin💐点点关注,收藏不迷路💐 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整…

安全见闻(3)

脚本语言 lua php go(也算吧) python JavaScript nodejs这种主流脚本就很多了,这些编程语言都可以写一些脚本性的病毒,python可以编写木马,js也可以编写木马,比如beefxss,了解本质的人都知道那个就是相当于js写的木马…

TensorFlow面试整理-TensorFlow 结构与组件

TensorFlow 的结构和组件是其功能强大、灵活性高的重要原因。掌握这些结构和组件有助于更好地理解和使用 TensorFlow 构建、训练和部署模型。以下是 TensorFlow 关键的结构与组件介绍: 1. Tensor(张量) 定义:张量是 TensorFlow 中的数据载体,类似于多维数组或矩阵。张量的…

深入了解Vue Router:基本用法、重定向、动态路由与路由守卫的性能优化

文章目录 1. 引言2. Vue Router的基本用法2.1 基本配置 3. 重定向和命名路由的使用3.1 重定向3.2 命名路由 4. 在Vue Router中如何处理动态路由4.1 动态路由的概念4.2 如何处理动态路由4.3 动态路由的懒加载 5. 路由守卫的实现与性能影响5.1 什么是路由守卫?5.2 路由…

Redis 持久化 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 持久化 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 持久化 & 总结》(学习总结/最新最准/持续更新)《Redis & …

通信协议——UART

目录 基础概念串行&并行串行的优缺点 单工&双工 UART基本概念时序图思考:接收方如何确定01和0011 基础概念 串行&并行 串行为8车道,并行为1车道 串行的优缺点 通行速度快浪费资源布线复杂线与线之间存在干扰 单工&双工 单工&#xf…

WPF:Binding数据绑定

WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows客户端应用程序的UI框架。数据绑定是WPF中一个强大的功能,它允许UI元素与数据源之间建立连接,使得UI能够自动显示数据源中的数据,并且当数据源中…

NewStarCTF 2023 公开赛道 Web week1-week2

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask ​Begin of PHP R!C!E! EasyLogin ​week2 游戏高手 include 0。0 ez_sql ​Unserialize? Upload again! R!!C!!E!! week1 泄漏的秘密 使用ctf-scan.py(https://gith…

EasyExcel文件导入与导出

1.文件导入 导入校验 public class BoyListener extends AnalysisEventListener {List<String> names new ArrayList<>();/*** 每解析一行&#xff0c;回调该方法**/Overridepublic void invoke(Object data, AnalysisContext analysisContext) {//校验名称Stri…

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台&#xff0c;为用户提供强大、易用的作图工具&#xff01;支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

Qt中使用线程之QConcurrent

QConcurrent可以实现并发&#xff0c;好处是我们可以不用单独写一个类了&#xff0c;直接在类里面定义任务函数&#xff0c;然后使用QtConcurrent::run在单独的线程里执行一个任务 1、定义一个任务函数 2、定义1个QFutureWatcher的对象&#xff0c;使用QFutureWatcher来监测任…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

多楼层智能穿梭:转运机器人助力制造业转型升级

针对当前喷砂产品人工转运存在的劳动强度大、效率低、安全隐患多等问题&#xff0c;本方案提出设计一套高效、安全、多楼层自动转运系统&#xff0c;采用潜伏式转运机器人结合电梯与升降平台技术&#xff0c;实现平面类、立柱类及小工件类喷砂产品的自动化、智能化转运。 项目需…

Docker 与 Yocto

Yocto项目为什么需要Docker Yocto 项目并不直接依赖 Docker&#xff0c;但在某些情况下使用 Docker 可以为 Yocto 项目提供以下具体且实际的好处&#xff1a; 1. 环境一致性&#xff1a; Yocto 构建需要一个稳定且一致的开发环境。不同的 Linux 发行版可能会有不同的库版本、…