MySQL基础笔记(12)-使用Docker搭建MySQL主从复制架构

Docker Compose搭建MySQL主从复制集群 前言 随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作。此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 分摊请求,从而 减少单库 的 访问压力,进而应用得到优化。 正文 主从复制的方式 MySQL 5.6 开始主从复制有两种方式:基于日志(binlog)和 基于 GTID(全局事务... 阅读详情

本文要介绍的是使用Docker搭建MySQL主从服务器的过程。

一、Docker入门介绍

在这里插入图片描述
简单来讲,Docker是一种基于Linux的容器技术,它能够实现一个隔离的、安全的、独立的容器环境,在这个容器中我们可以安装各种各种的产品,例如MySQL、Tomcat、Nginx等,并且能够实现秒级启动和关闭。相关的入门介绍可以看这篇文章:https://blog.youkuaiyun.com/pbrlovejava/article/details/83098373。

  • Docker的常用命令:
    1、docker ps:查看当前运行的容器
    2、docker ps -a:查看全部 容器
    3、docker images:查看所有拉取到的镜像
    4、docker pull 镜像名:版本号 :拉取docker hub中的镜像,如果不指定镜像名则为最新版本的镜像
    5、docker rm 容器名:移除镜像
    6、docker search 镜像名:搜索镜像
    7、docker rmi 镜像名:删除镜像
    8、docker run 镜像名:版本号 :启动镜像作为容器,可以带有以下参数

      -p 主机端口:容器端口  ,将主机端口映射到容器的端口
      -P 随机端口映射
      -d 后台运行
      --name 指定容器名
      -e 指定运行参数
    

    9、docker exec -it 容器名 /bin/bash :进入容器内部
    10、docker inspect 容器名:查看容器详细情况,包括主机内ip地址等

二、MySQL主从复制原理

2.1、主从复制
  • MySQL主从复制的作用:
    1、从服务器的数据和主服务器的数据保持一致,当主服务器发生故障时可紧急启用从服务器作为主服务器,确保业务继续正常进行。
    2、是读写分离的基础,可用来分担主服务的读压力,使读压力分担到从服务器上,提高数据库读写性能瓶颈。

  • MySQL主从复制的过程:
    1、主服务器提交事务时,将DDL和DML信息记录到主服务器的二进制日志中。
    2、从服务器的I/O线程读取到主服务器二进制日志的变化,并开始读取日志数据,将其写到从服务器的中继日志中。
    3、从服务器的SQL线程读取到中继日志的变化,将其重放为SQL语句或者是行数据,复制到从服务器中,主从复制完毕,这时主从数据一致。
    在这里插入图片描述

2.2、读写分离

即将读压力从主服务器中分离到从服务器中,下文中将会介绍,本文不做详细介绍。
在这里插入图片描述

三、开始搭建

3.1、拉取MySQL镜像

本次拉取的是MySQL5.5版本镜像:

docker pull mysql:5.5
3.2、启动第一个容器作为主服务器

启动第一个MySQL镜像容器mysql-master作为主服务器,将本机3305端口映射到容器3306端口,初始ROOT密码为123:

docker run -d -p 3305:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123 mysql:5.5 
3.3、进入主服务器容器

现在启动了一个主服务器容器后,需要进入其中修改配置MySQL的配置文件进行相关的配置:
docker exec -it mysql-master /bin/bash

3.4、更新apt-get工具并且下载vim

因为需要修改MySQL的配置文件,所以需要在容器中下载vim工具

apt-get update
apt-get install vim
3.5、修改主服务器配置文件

这里需要配置一下主服务器的相关信息:

vi /etc/mysql/my.cnf
[client]
# 默认字符集utf8
default-character-set=utf8

[mysqld]
# 主服务器id
server-id=1
# 开启二进制日志
log-bin=mysql-master-bin-log
# 将二进制日志写入形式改为ROW
binlog_format=ROW
3.6、创建SLAVE用户

创建的slave用户用于在之后的从服务器主从配置中读取二进制日志的数据。

# 以ROOT用户登录
mysql -u root -p 

# 登陆之后,创建一个slave用户,密码为123,不限制登录域名
create user 'slave'@'%' identified by '123';

# 为slave用户授权
grant replication slave,replication client on *.* to 'slave'@'%';

3.7、记录下主服务器的信息

现在需要记录下主服务器的信息供从服务器配置使用,主要有以下量:

  • 二进制文件名和偏移量
show master status\G;


*************************** 1. row ***************************
File: mysql-master-bin-log.000002 //这就是二进制日志名
Position: 1340					//这是偏移量,也就是从这里开始录入
Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)
  • 主服务器的IP地址
    退出该容器并重启,通过以下命令获取容器IP
docker inspect mysql-master
3.8、创建从服务器

步骤和之前一样:

# 创建从服务器容器
docker run -d -p 3304:3306 --name mysql-slave-1 -e MYSQL_ROOT_PASSWORD=123 mysql:5.5 

# 进入容器
docker exec -it mysql-slave-1 /bin/bash

# 下载vim
apt-get update
apt-get install vim

3.9、修改从服务器配置文件
vi /etc/mysql/my.cnf
-------------------------------
[client]
default-character-set=utf8

[mysqld]
server-id=2
log-bin=mysql-slave-bin-log1
# 开启中继日志,这段一定要配置
relay-log=mysql-slave-relay-log1

3.9.1、进入从服务器MySQL配置主从复制信息
change master to
master_host='172.17.0.2', 
master_port=3306,
master_user='slave',
master_password='123',
master_log_file='mysql-master-bin-log.000001',
master_log_pos=2,
master_connect_retry=30;
3.9.2、查看主从信息
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 172.17.0.3
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-master-bin-log.000002
          Read_Master_Log_Pos: 1340
               Relay_Log_File: mysql-relay-log-bin1.1080635
                Relay_Log_Pos: 264
        Relay_Master_Log_File: mysql-master-bin-log.000002
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1340
              Relay_Log_Space: 799
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 11
1 row in set (0.00 sec)


3.9.3、开启主从复制
start slave;

这时如果顺利的话,主从复制已经开启了,主服务器上的更新会同步到从服务器中。
如果需要更换主服务器的配置,那么需要停止主从复制,并且重置主从信息:

stop slave;
reset slave;

四、主从复制的一些问题

主从复制有时可能存在一些问题:
1、从服务器在复制主服务器数据时某些数据缺失:这个的解决办法一般是调整主服务器的二进制日志记录写入数据的格式,将statement改为row,即以行作为数据记录。

set global binlog_format = row;

如果还是不行,那么尝试从主服务器二进制日志的第一个日志的第一行开始复制,即将所有的DML/DDL操作都复制到从服务器的中继日志中并进行SQL重做。

2、报错说找不到主服务器的二进制日志:确定主服务器的二进制日志已经开启:

show global variables like 'bin_log';

没有开启的话需要在my.cnf中配置,如果不是这个问题,那么在主服务器中使用命令检查二进制日志的名字是否配置正确:

show master status\G

3、主从服务器一些参数调优:
对于主服务器,最好将二进制日志的写入模式改为在事务提交后立即记录到二进制日志中,每秒刷新一次日志数据到磁盘中,这样就不会造成每秒写入数据都立即提交到磁盘中,防止产生大量I/O操作;

set global innodb_flush_log_at_trx_commit=2;

对于从服务器,需要设置relay_log_recovery=1,即当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。

 set global relay_log_recovery = 1;
Docker Compose搭建mysql主从复制 系统环境 docker 1.12.3 mysql5.7.17 deepin 15.3桌面版(这个没啥影响,因为我们用docker) 原文地址:Docker Compose搭建mysql主从复制 要点说明 使用docker bridge网络,设置静态IP 使用volumes挂载,不使用数据卷容器(因为我使用docker compose没搞成功 - -!) 镜像使用build创建(保留扩展性),不使用i 阅读详情

相关推荐

基于Docker搭建MySQL主从复制

目录 版本参数 主从复制原理 搭建主库 搭建从库 Mysql的配置文件的ignore问题 版本参数 Ubuntu:16.04 Docker:18.09.7 MySQL:Percona5.7.23 主从复制原理 master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件(这些记录叫做二进制日志事件) slave将master的二进制日志事件拷贝到它的中继日志(relay log)中 slave重做中...

我能在河边钓一整天的鱼 707

基于docker搭建MySql主从数据库(详细步骤)

docker 部署主从

2301_76357803的博客 2957

Outlook日历同步全攻略:Win10+安卓+iOS三端无缝衔接(附常见问题解决)

本文提供了一份详尽的Outlook日历同步指南,帮助用户在Windows 10、安卓和iOS三端实现无缝衔接。文章深入解析了Exchange ActiveSync等核心同步原理,并给出了从账户创建到各设备(特别是华为手机)的具体配置步骤、进阶管理技巧以及针对同步失败、事件重复等常见问题的实战解决方案,旨在彻底解决跨平台日程管理的痛点。

l3m4n的博客 556

Docker搭建MySQL主从同步(全网最全保姆教程)

slave会从master读取binlog来进行数据同步IO 线程SQL线程。

日常技术分享 3787

在centos7部署k8s搭建kubernetes集群

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找

山东梅长苏 1万+

3D-IC测试挑战与Tessent解决方案解析

3D-IC技术通过硅通孔(TSV)实现芯片垂直堆叠,是延续摩尔定律的关键路径。该技术面临三大核心挑战:KGD标准严苛化要求测试覆盖率达99.5%以上,存储器测试需兼容LPDDR/HBM等多种协议,逻辑堆叠需解决TSV互连的电气特性和时序验证问题。Mentor Tessent平台采用混合测试架构,结合压缩扫描测试(ATPG)和内建自测试(BIST)技术,实现100x测试数据压缩比和99.97%的TSV缺陷检出率。这些创新方案在移动SoC和高性能计算芯片中已获验证,测试时间缩短73%,缺陷逃逸率降低77%。随着

weixin_30621711的博客 376

docker搭建MySQL主从

在下方文件区域找到文件夹/usr/local/software/mysql/3306/conf,右上角按钮上传本地文件my.cnf。【注】当前显示/var/lib/mysql/日志文件的最后一个文件,即本案例中的binlog.000002。【或者:在navicat中新建查询,直接用mysql语句查询】【注意】或者,在docker中的mysql中输入,也是一样的。【命令:创建mysql的容器(docker)】【命令:创建mysql的容器(docker)】【示例:在docker中的mysql中输入】

chaojichunshen的博客 4344

电力现货交易市场-报价方式

电是一种能源,也是一种商品,既然是商品自然可以在市场中进行自由交易。

qq_38225433的博客 5121

超详细!Docker安装Mysql并配置主从

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别是数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的连接,下面就进入我们今天的主题。利用主从数据库来实现读写分离,从而分担主数据库的压力。在多个服务器上部署mysql,将其中一台认为主数据库,而其他为从数据库,实现主从同步。

m0_58660606的博客 2931

基于DFT的mbist sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 926

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2624

Docker搭建Mysql主从模式

纯干货

qq_45987661的博客 1122

Python 爬虫项目:爬取百度贴吧帖子,保存标题与评论内容

在 Python 爬虫技术的学习与实战体系中,贴吧类动态内容爬取是典型的入门进阶案例,百度贴吧作为国内主流的社区论坛平台,其页面结构规范、数据载体清晰,非常适合用于巩固爬虫核心技术栈。本次实战项目基于requests请求库与解析库实现完整的爬取流程,从网页请求、数据解析、内容提取到本地持久化存储全链路落地,既能掌握基础爬虫的核心逻辑,也能理解网页结构化数据解析的通用思路,同时规避爬虫常见的反爬基础策略,具备极高的实战参考价值。本文核心价值。

2503_91057718的博客 2544

Docker搭建Mysql主从复制

相信我,看完这一篇,mysql主从复制能遇到的错误在我这里都遇到了,docker能遇到的错误在我这里也遇到了,包括centos的错误 如果你还没有用docker搭建过mysql先不要急着搭建集群,可以显示着用docker搭建一个mysql,这里有教程,可以先试着去搭建一个mysql: 之前我们使用docker搭建了一个Mysql,那既然一个Mysql我们可以搭建成功,集群还不是分分钟,今天我们就简单搭建一个Mysql集群,就搭建一个最简单的一主一从的主从复制吧,

hello_list的博客 3669

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 1172

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Docker下搭建MySQL主从复制

Docker下安装MySQL主从复制

名不显时心不朽,再挑灯火看文章 2203

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

基于Docker的Mysql主从复制搭建

mysql 主从复制(主库和从库)(读写分离)的意义 解决高并发、减轻单台数据库的压力、提高并发量 主库称为写库(新增、删除、修改操作执行写库),从库称读库 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相互独立,有独立ip,互不冲突 Docker使用步骤简便,启动容器在秒级别 安装docker docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,

Django的博客 2168

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

docker搭建Mysql 主从复制

超详细!傻瓜式复制粘贴即可快速搭建一个Mysql 主从复制集

胖虎儿的博客 7218

【050】使用Docker容器为MySQL搭建主从复制

读者可以按照本文的提示,利用MySQL的官方Docker镜像,一步一步搭建出一个MySQL主从复制的用例。

zhangchao19890805的专栏 3096

如何使用Docker搭建MySQL主从复制架构

前言:如果你在Django项目中使用MySQL,你需要了解主从复制读写分离的配置。如果你还希望用docker部署你的Django项目,你就更加需要了解本文了,实现一箭双雕。本文要介...

大江狗 571

【 MySQL集群架构与实践1】使用Docker实现简单主从复制

在当前互联网环境下,网站业务量不断增长,对系统可用性和性能提出了更高的要求。MySQL集群是一个高可用、高性能的数据库解决方案,旨在满足大规模应用程序对数据访问的需求。性能提升:通过将负载分散到多个服务器,集群可以显著提升数据库的读、写的性能。高可用性:MySQL集群通过数据冗余和故障转移机制确保高可用性。即使某个节点发生故障,其他节点仍能继续提供服务。扩展性:集群可以通过添加更多节点,来水平扩展系统的容量和处理能力。数据一致性:通过复制和同步技术,集群模式可以确保数据在多个节点间的一致性。读写分离。

2301_80224556的博客 1069

docker搭建mysql主从复制

docker搭建mysql主从复制1.1 搭建环境1.2 安装docker1.3 启动Docker1.4 安装MySQL1.5 运行主容器master1.6 检验是否启动成功1.7 创建主容器的复制账号1.8 修改MySQL配置环境1.9 运行MySQL从容器slave11.10 运行MySQL从容器slave21.11 配置主从复制1.12 检查是否配置成功1.13 测试主从复制 1.1 搭建环境 Centos 7 64位 MySQL 5.7.13 Docker 1.13.1 接下来,我们将会在一台服务器

qq_48469418的博客 785

Docker的Mysql主从复制搭建

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。删除docker容器 docker rm 容器id。2.然后使用此镜像启动容器,这里需要分别启动主从两个容器。:Master的地址,指的是容器的独立ip,可以通过。,需要我们在docker容器内部自行安装vim。容器名称|容器id`查询容器的ip。docker start 容器名。docker start 容器名。

weixin_60670275的博客 1064

使用 Docker 搭建 MySQL 主从复制环境

通过以上步骤,我们成功使用 Docker 搭建了 MySQL 主从复制环境,并解决了配置过程中可能遇到的常见问题。主从复制是 MySQL 高可用性和负载均衡的基础,掌握其配置方法对于数据库管理至关重要。如果你在配置过程中遇到其他问题,欢迎在评论区留言讨论!

Fire_Knight_的博客 1058

docker搭建MySQL主从复制

docker搭建MySQL主从复制

qq_45415290的博客 817
上一篇: MySQL基础笔记(11)-参数优化小结
下一篇: MySQL基础笔记(13)-使用Docker搭建MySQL主主热备架构
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值