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

本文主要是介绍使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

      • 一、前提
      • 二、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=utf8server_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连接主从数据库

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

这篇关于使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/338410

相关文章

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念