Docker 部署 MySQL 一主多从

这篇具有很好参考价值的文章主要介绍了Docker 部署 MySQL 一主多从。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主从复制的原理:
1、主库: 创建一个有权访问binlog日志的从库账号,配置需要主从复制的库
                 有写操作时,可以将写操作或者写操作之后的数据记录到日志文件中(binlog)
                 通过一个线程通知需要同步数据的从库来加载binlog中最新的日志
2、从库:会记录上一次读取主库日志文件的position
                启动io线程和主库的线程交互,一旦主库binlog更新,io线程会读取主库的binlog日志到从库中存到中继日志(relaylog)文件中
                再通过sql线程将中继日志文件中的最新的日志重演到从库中

数据最终一致性:弱一致性 

服务器规划:使用docker方式创建,主从服务器IP一致,端口号不一致

  • 主服务器:容器名 mysql-master,端口 3306
  • 从服务器:容器名 mysql-slave1,端口 3307
  • 从服务器:容器名 mysql-slave2,端口 3308

主:3316   mydb1,mydb2
       创建了一个从库可以使用有权同步数据的子账户
从1:3307
       使用子账户建立主从同步关系
从2:3308
       使用子账户建立主从同步关系

注意:如果此时防火墙是开启的,则先关闭防火墙,并重启docker,否则后续安装的MySQL无法启动

#关闭docker
systemctl stop docker
#关闭防火墙
systemctl stop firewalld
#启动docker
systemctl start docker

一、准备主服务器

1. 在docker中创建并启动MySQL主服务器:端口3306

docker run -d \
-p 3306:3306 \
-v /liush/mysql/master/conf:/etc/mysql/conf.d \
-v /liush/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-master \
mysql:8.0.29

2. 创建MySQL主服务器配置文件: 

默认情况下MySQL的binlog日志是自动开启的,可以通过如下配置定义一些可选配置

vim /liush/mysql/master/conf/my.cnf

(1)配置如下内容

[mysqld]
# 服务器唯一id,默认值1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
binlog-do-db=mydb1
binlog-do-db=mydb2
# 设置不需要复制的数据库
binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema

Docker 部署 MySQL 一主多从

(2)重启MySQL容器

docker restart mysql-master

3. 使用命令行登录MySQL主服务器

(1)进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码

docker exec -it mysql-master env LANG=C.UTF-8 /bin/bash

(2)进入容器内的mysql命令行

mysql -uroot -proot

(3)修改默认密码插件

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

4. 主机中创建slave用户

(1)创建slave用户

CREATE USER 'slave'@'%';

(2)设置密码

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

(3)授予复制权限

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

(4)刷新权限

FLUSH PRIVILEGES;

Docker 部署 MySQL 一主多从

5. 主机中查询master状态 执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

SHOW MASTER STATUS;

记下File和Position的值。执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

Docker 部署 MySQL 一主多从

二、准备从服务器

可以配置多台从机slave1、slave2...,这里以配置slave1、slave2为例

1. 在docker中创建并启动MySQL从服务器:端口3307

docker run -d \
-p 3307:3306 \
-v /liush/mysql/slave1/conf:/etc/mysql/conf.d \
-v /liush/mysql/slave1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave1 \
mysql:8.0.29
docker run -d \
-p 3308:3306 \
-v /liush/mysql/slave2/conf:/etc/mysql/conf.d \
-v /liush/mysql/slave2/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave2 \
mysql:8.0.29

2. 创建MySQL从服务器配置文件

vim /liush/mysql/slave1/conf/my.cnf
vim /liush/mysql/slave2/conf/my.cnf

(1)配置如下内容  

[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=2
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin
[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=3
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

(2)重启MySQL容器

docker restart mysql-slave1
docker restart mysql-slave2

3. 使用命令行登录MySQL从服务器

(1)进入容器

docker exec -it mysql-slave1 env LANG=C.UTF-8 /bin/bash
docker exec -it mysql-slave2 env LANG=C.UTF-8 /bin/bash

(2)进入容器内的mysql命令行

mysql -uroot -proot

(3)修改默认密码插件

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

4. 在从机上配置主从关系

在从机上执行以下SQL操作

查看主的状态:show master status 

Docker 部署 MySQL 一主多从

这里的File和Position要与下面配置内容保持一致

查看从的状态: show slave status

Docker 部署 MySQL 一主多从

此时什么也没有!

 在从slave1和slave2分别下执行下面命令

CHANGE MASTER TO 
MASTER_HOST='47.100.73.47', 
MASTER_USER='slave',
MASTER_PASSWORD='123456', 
MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=1333; 

Docker 部署 MySQL 一主多从

Docker 部署 MySQL 一主多从

三、启动主从同步

启动从机的复制功能,执行SQL:

启动从库:START SLAVE;

停止从库:STOP SLAVE;
-- 查看状态(不需要分号)
SHOW SLAVE STATUS\G

两个关键进程:下面两个参数都是Yes,则说明主从配置成功!  

Docker 部署 MySQL 一主多从

Docker 部署 MySQL 一主多从

四、实现主从同步

在主机中执行以下SQL,在从机中查看数据库、表和数据是否已经被同步

CREATE DATABASE mydb1;
USE mydb1;
CREATE TABLE t_user (
 id BIGINT AUTO_INCREMENT,
 uname VARCHAR(30),
 PRIMARY KEY (id)
);
INSERT INTO t_user(uname) VALUES('zhang3');
INSERT INTO t_user(uname) VALUES(@@hostname)

Docker 部署 MySQL 一主多从

Docker 部署 MySQL 一主多从

五、停止和重置

需要的时候,可以使用如下SQL语句

在从机上执行。功能说明:停止I/O 线程和SQL线程的操作。

stop slave; 

在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。

reset slave;

-- 在主机上执行。功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。
-- 用于第一次进行搭建主从库时,进行主库binlog初始化工作;
文章来源地址https://www.toymoban.com/news/detail-425252.html

reset master;

到了这里,关于Docker 部署 MySQL 一主多从的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker搭建MySQL8.0主从复制(一主一从)

    宿主机使用的版本为 19045 的win10专业版,MySQL使用的是8.0+,Docker容器使用Linux。 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能,CMD中运行: “Docker Desktop Installer.exe” install --installation-dir= --installation-dir=path : changes the default installation location ( C:Program Fil

    2024年01月25日
    浏览(41)
  • 关于SPI通信一主多从的通信异常的解决

    运用场景: 当一个主机分别对多个从机通信(1对8),正常情况下全部接入从机通信没有问题,但当不接第四个SPI模块时,发现整个通讯异常,导致整个SPI数据错误,但是,接入1,2,3,5设备通信又能正常,接入1,2,3也能正常。 1.检测PCB走线,从机都为模块化设计,没有发

    2024年02月12日
    浏览(39)
  • docker搭建mysql多主多从(集群),亲测有效!

    提示 :如果你只是想要搭建mysql主从看这篇文档就够了,很多地方参考了这篇文章:点击这里 原理图 : 主1(docker容器名为mysql-master) 主2(docker容器名为mysql-master_2) 从1(docker容器名为mysql-slave) 从2(docker容器名为mysql-slave-2) 四个容器都起动成功 解释 注意 :配置文件路径为do

    2024年02月04日
    浏览(38)
  • TTL电平串口通信连接多个从机,二极管即可改造UART串口为一主多从总线 一对多通讯

    在重新翻阅了许多遍串口相关的书籍资料以后,(其实是看了485、232,modbus协议以后还是觉得再尝试尝试…) 改用以上连线后,通过串口助手发送数据测试… ** ** 虽然电路很简单,查阅了许多资料都建议使用RS485/232或者是改用SPI,CAN的通信,但是还是发个博记录一下吧。 关于连

    2024年02月11日
    浏览(35)
  • mysql主从复制搭建(一主一从)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 介绍 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志

    2024年02月12日
    浏览(46)
  • Docker集群部署-MySQL主从复制

    利用Docker实现MySQL主从复制架构的部署,实现1主1从集群配置。 要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。 新建主服务器容器实例3307 # docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /m

    2024年02月12日
    浏览(35)
  • STM32F103单片机通过SPI全双工通信协议与W25Q64(FLASH)进行通信【串行同步通信(数据线与时钟线配合),(一主多从模式)】附相关驱动代码详解

    1.W25Qxx系列是一种低成本、小型化、使用简单的 非易失性存储器 ,常应用于数据存储、字库存储、固件程序存储等场景 2.存储介质: Nor Flash(闪存) 3.时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI) 4.存储容量(24位地址): W25Q40: 4Mbit / 512KByte W25Q80: 8Mbit / 1MByte W25Q16: 16

    2024年04月13日
    浏览(59)
  • 基于Docker搭建多主多从K8s高可用集群

    主机规划 master - 最低两核心,否则集群初始化失败 主机名 IP地址 角色 操作系统 硬件配置 ansible 10.62.158.200 同步工具节点 CentOS 7 2 Core/4G Memory master01 10.62.158.201 管理节点01 CentOS 7 2 Core/4G Memory master02 10.62.158.202 管理节点02 CentOS 7 2 Core/4G Memory master03 10.62.158.203 管理节点03 CentOS

    2024年04月22日
    浏览(36)
  • Kubernetes(k8s)部署高可用多主多从的Redis集群

    首先你需要一个Kubernetes集群,如图我已经安装好了一个Kubernetes集群: 如果你还没有Kubernetes集群可参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 你还需要一个可动态供应的存储类,我之前已经写过一篇关于安装NFS动态供给存储类的文章:https://blog.csdn.net/m

    2024年02月09日
    浏览(49)
  • mysql主从复制及原理

    主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程) 1、MySQL将数据变化记录到二进制日志中; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库 在主服务器(master)上启用

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包