使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤)

news2024/11/27 15:29:20

目录

      • 一、前提
      • 二、MySQL 生产安装
        • 1,拉取mysql
        • 2,查看mysql镜像
        • 3, 启动 mysql 容器
        • 4,修改mysql的中文编码
        • 5,查看验证mysql的中文编码
      • 三、Mysql主机 mysql_master 的安装与配置
        • 1, 拷贝master容器
        • 2, 启动 master 容器
        • 3,新建 my.cnf
        • 3,重启 master 容器
        • 4,进入容器连接 mysql
        • 5,创建用户
        • 6,授权用户
      • 四、Mysql从机 mysql_slave 的安装与配置
        • 1, 拷贝slave容器
        • 2, 启动 slave 容器
        • 3,新建 my.cnf
        • 3,重启 slave容器
        • 4,进入容器连接 mysql
      • 五、配置主从复制
        • 1,查看 master 状态
        • 2,slave 指定 master
        • 3,查看 slave 状态
        • 4,slave 开启同步
      • 六、测试
        • 1,在 master 中写入
        • 2,在 slave 中读取
        • 3,用navicat连接主从数据库

一、前提

安装了VMware Workstation
安装并创建docker虚拟机
XShell工具

在这里插入图片描述
在这里插入图片描述

二、MySQL 生产安装

为了保证数据的安全性,在生产环境下安装的 mysql 容器,在启动时都会使用数据卷来持久化数据。

1,拉取mysql
 docker pull mysql:5.7

在这里插入图片描述

2,查看mysql镜像
docker images

在这里插入图片描述

3, 启动 mysql 容器
docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/log:/var/log/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-dp 3306:3306 \
mysql:5.7

这里指定了三个数据卷:

  • /root/mysql/log:/var/log/mysql
  • /root/mysql/data:/var/lib/mysql
  • /root/mysql/conf:/etc/mysql/conf.d
4,修改mysql的中文编码

在这里插入图片描述

在宿主机的/root/mysql/conf 目录(数据卷目录)中新建 my.cnf 文件,并在其中键入如下内容:
[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

在这里插入图片描述

5,查看验证mysql的中文编码

修改配置文件后,重启mysql镜像:

docker restart mysql

进入mysql:

docker exec -it mysql /bin/bash
mysql -uroot -p

查看数据库中字符串支持的格式:

show variables like 'character%';

在这里插入图片描述

三、Mysql主机 mysql_master 的安装与配置

1, 拷贝master容器

从上一步创建mysql生产镜像中copy一份,作为mysql-master容器:

复制 :

cp -r mysql mysql_master

删除data和log目录:

rm -rf data/ log/
2, 启动 master 容器
docker run --name mysql_master \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql_master/data:/var/lib/mysql \
-v /root/mysql_master/log:/var/log/mysql \
-v /root/mysql_master/conf:/etc/mysql/conf.d \
-dp 3316:3306 \
mysql:5.7
3,新建 my.cnf

在宿主机的/root/mysql_master/conf 目录中新建 my.cnf 文件,并在其中键入如下内容:

[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8
server_id=01
binlog-ignore-db=mysql
log-bin=master-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
3,重启 master 容器

由于修改了 mysql 配置,所以需要重启 master 容器,以使新配置生效。

docker restart mysql_master

在这里插入图片描述

4,进入容器连接 mysql

进入容器并连接上 mysql 后,查看其字符编码,可以看到其是支持中文的。
在这里插入图片描述

5,创建用户

为当前 MySQL 创建一个用户:

create user 'slave'@'%' identified by '123456';

在这里插入图片描述

6,授权用户

为新创建的用户授权:

grant replication slave,replication client on *.* to 'slave'@'%';

在这里插入图片描述

四、Mysql从机 mysql_slave 的安装与配置

再打开一个会话窗口

1, 拷贝slave容器

从上一步创建mysql生产镜像中copy一份,作为mysql-slave容器:

复制 :

cp -r mysql mysql_slave

删除data和log目录:

rm -rf data/ log/
2, 启动 slave 容器
docker run --name mysql_slave \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql_slave/data:/var/lib/mysql \
-v /root/mysql_slave/log:/var/log/mysql \
-v /root/mysql_slave/conf:/etc/mysql/conf.d \
-dp 3326:3306 \
mysql:5.7
3,新建 my.cnf

在宿主机的/root/mysql_slave/conf 目录中新建 my.cnf 文件,并在其中键入如下内容:

[client]
default_character_set=utf8
[mysql]
default_character_set=utf8
[mysqld]
character_set_server=utf8

server_id=02
binlog-ignore-db=mysql
log-bin=slave-log-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=relay-log-bin
log_slave_updates=1
read_only=1

3,重启 slave容器

由于修改了 mysql 配置,所以需要重启 slave容器,以使新配置生效。

docker restart mysql_slave
4,进入容器连接 mysql

进入容器并连接上 mysql 后,查看其字符编码,可以看到其是支持中文的。

show grants for 'slave'@'%';
docker exec -it mysql /bin/bash
mysql -uroot -p

在这里插入图片描述

五、配置主从复制

1,查看 master 状态

在 master 中运行 show master status 命令,查看二进制日志文件名及要开始的位置。

show master status;

在这里插入图片描述

2,slave 指定 master

在 slave 中通过运行 change master to 命令来指定其要连接的 master 相关信息。

首先查看一下ip:

ifconfig

在这里插入图片描述
然后,输入一下命令进行配置:

change master to master_host='192.168.162.105' , master_user='slave' ,master_password='123456' ,master_port=3316 ,master_log_file='master-log-bin.000002' ,master_log_pos=154 ,master_connect_retry=30 ,master_retry_count=3;
3,查看 slave 状态

在 slave 中查看 slave 状态发现,当前 slave 与 master 的同步复制还没有开始。

show slave status \G;

在这里插入图片描述

4,slave 开启同步

在 slave 中使用 start slave 命令开启 slave 的数据同步。

 start slave

此时再次查看 slave 的状态,发现同步已经开始。

在这里插入图片描述
注意
如果发现 Slave_SQL_Running: No
原因:
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.

一般是事务回滚造成的:
解决办法:

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

六、测试

到这里,一主一从的读写分离集群就搭建完毕了。下面在 master 中创建一个数据库与表,在 slave 中如果可以查看到,则说明搭建成功。

1,在 master 中写入

在这里插入图片描述

2,在 slave 中读取

在 slave 中可以查看到在 master 中写入的数据,说明集群搭建成功。
在这里插入图片描述

3,用navicat连接主从数据库

在这里插入图片描述
主从数据同步发生变化!!!搞定!!!!

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

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

相关文章

chrome 扩展 popup 弹窗的使用

popup的基本使用方法 popup介绍 popup 是点击 browser_action 或者 page_action图标时打开的一个小窗口网页,焦点离开网页就立即关闭,一般用来做一些临时性的交互。 popup配置 V3版本中(V2版本是在 browser_action 中 )&#x…

Python武器库开发-常用模块之base64模块(十四)

常用模块之base64模块(十四) 在Python中,base64是内置的常用的标准模块,base64模块是用来作base64编码解码,常用于小型数据的传输。我们可以直接通过import导入base64模块直接使用 import base64base64模块,除了base64之外&…

[PyTorch][chapter 61][强化学习-免模型学习1]

前言: 在现实的学习任务中,环境 其中的转移概率P,奖赏函数R 是未知的,或者状态X也是未知的 称为免模型学习(model-free learning) 目录: 1: 蒙特卡洛强化学习 2:同策略-蒙特卡洛强化学习 3&am…

紫光同创FPGA编写的8画面分割器演示

适用于板卡型号: 紫光同创PGL50H开发平台(盘古50K开发板) 图(1) 盘古50K开发板 TOP 层逻辑框 图(2) TOP层逻辑框 video_copy_ux 将输入的一路RGB888信号复制成8份,每份画面内容相同,各路颜色有些差异: 第…

C++ 之Google benchmark测试与分析

0. 简介 作为一个程序而言,benchmark是非常关键的一个衡量指标,无论是程序算法的指标还是程序运行性能的指标,这些我们都可以去完成衡量。对于性能衡量而言google benchmark无疑是一个比较好的选择 1. google benchmark安装 1.1 下载地址 …

矢量图形设计软件:Illustrator 2024(AI)中文激活版

Illustrator 2024是一款强大的矢量图形设计软件,它具备丰富的绘图和设计工具,用户可以通过画笔、铅笔、形状、路径等工具创建各种矢量图形和插图设计。新版本还增强了智能功能,可以自动从图像或调色板中提取颜色并应用到设计中,同…

云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单

为了让企业和开发者更快速、便捷地进行云上开发,阿里云重磅发布云工作流(CloudFlow),它是一款强大的面向开发者的流程编排开发工具,全托管、高并发、高可用,帮助用户简化和自动化复杂的云上业务流程和工作流…

数据结构 - ArrayList - 动态修改的数组

目录 实现一个通用的顺序表 总结 包装类 装箱 / 装包 和 拆箱 / 拆包 ArrayList 与 顺序表 ArrayList基础功能演示 add 和 addAll ,添加元素功能 ArrayList的扩容机制 来看一下,下面的代码是否存在缺陷 模拟实现 ArrayList add 功能 add ind…

Linux安装配置awscli命令行接口工具及其从aws上传下载数据

官网技术文档有全面介绍:安装或更新 AWS CLI 的最新版本 - AWS Command Line Interface在系统上安装 AWS CLI。https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html#getting-started-install-instructionsawscli常用命令参考&…

红海云签约澳森集团,为钢铁行业人力资源数字化转型注入新动能

辛集市澳森特钢集团有限公司(以下简称“澳森集团”)是集钢铁冶炼、轧钢及钢材深加工、新型建材、国际贸易、房地产开发、酒店餐饮、热力供应于一体的大型钢铁联合企业,是华北地区最具品牌影响力和核心竞争力的综合性大型企业集团。 近日&…

LBS营销|基于位置信息的营销策略

LBS营销(Location-Based Services Marketing)是一种基于位置信息的营销策略,它利用移动设备和位置数据来为消费者提供与其当前位置相关的个性化信息和服务。LBS营销通过分析用户的地理位置,向他们提供特定地点或地理区域的有关信息…

虚拟数字人技术篇

1. 虚拟数字人概念解析 虚拟数字人它是由三个部分组成:虚拟、数字、人。 虚拟:存在于非物理世界,多模态存在于各种介质;数字:数字化,可复制多个分身,多技术综合体;人:具备拟人化的外表和行为交互的能力。具体说明如下: 虚拟: 通常是指它是存在于非物理世界,可以是…

基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

Docker安装matomo

Docker安装matomo 文章目录 Docker安装matomo1.安装Docker2.matomo安装 1.安装Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.matomo安装 #拉取matomo镜像 docker pull matomo#启动matomo容器 docker run -d --name matomo -p 8093:80 -v /do…

喜讯!苏州箱讯获评苏州市软件和信息服务业 “头雁”培育企业

近日,由中国电子信息产业发展研究院、中国工业经济联合会、国家智能制造专家委员会、国家产业基础专家委员会、江苏省工业和信息化厅、江苏省国有资产监督管理委员会、苏州市人民政府共同主办的2023第三届中控中国大会在苏州太湖国际会议中心举办。 本届大会以“生态…

erp 技术的发展趋势和方向有哪些?

近日,亿欧智库重磅发布了《2022中国制造业ERP研究报告》。亿欧通过桌面研究及行业专家访谈,对ERP在制造业领域的应用情况进行分析,洞察ERP针对制造业不同场景的服务模式,研讨制造业ERP的未来发展趋势,旨在帮助制造业企…

OPCUA 行业配套标准:机器人

OPC UA 定义了对象,对象类型,结构化组织能力和定义对象之间关系的能力,利用这些基础和衍生类型及对象,用户还可以搭建出更复杂的类型,关系和对象。 如果不同的厂商或者用户定义的信息模型不同,将会影响系统…

springboot+vue基于JAVA的企业内部人员绩效量化管理系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢

大家好,我是微学AI,今天给大家介绍一下时间复杂度的计算技巧-算法模型中的时间复杂度如何计算,有哪些技巧呢,算法的时间复杂度是评估算法性能和效率的一种方式,它表示算法需要执行多少次基本操作才能完成其任务&#x…

【数据库】关系数据库管理系统 (RDBMS) 中事务处理的四个特性ACID

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 数据库事务是指一组数据库操作(例如插入、更新、删除等),被视为一个单独的逻辑操作单元,并且要么全部执行成功,要么全部不执行&…