当前位置: 首页 > news >正文

docker实战之搭建MYSQL8.0主从同步

目录

  • 环境配置
  • 容器创建
    • 主服务器
      • 创建MYSQL容器
      • 新增my.cnf文件
      • 创建用户并授权
    • 从服务器
      • 创建MYSQL容器
      • 新增my.cnf文件
      • 重启MYSQL容器
      • 配置主从同步
  • 验证主从同步
  • 彩蛋

MySQL 主从同步(Master-Slave Replication)是一种常用的解决方案,它允许一个主服务器(Master)将其数据复制到一个或多个从服务器(Slave)。这种架构不仅提高了数据的冗余性,还能通过读取分离来提升应用的性能
关于MYSQL主从同步的原理以及八股文这篇文章中就暂时不讲述啦,直接上干货,面对许多同学没有大量服务器,又想参与MYSQL集群实战过程中,提升技能,这篇实操技能你值得拥有~

环境配置

正如文章主题,简单明了,docker,会使用基本的docker命令即可,即使不会也没有关系,溪源会带着大家一步一步完成搭建。

  • 获取MYSQL镜像:docker命令
docker pull mysql:8.0.36
  • 本地服务器创建数据卷
/Users/docker/data/mysql/

对于docker实战而言,少不了,主机目录与容器数据卷映射之类的操作,所以可以将相关数据卷统一目录管理;

  • 授权
chmod 777 /Users/docker/data/

授权所有用户读写操作

容器创建

主服务器

创建MYSQL容器

docker run -d -p 3317:3306 --privileged=true \
-v /Users/docker/data/mysql/master/log:/var/log/mysql \
-v /Users/docker/data/mysql/master/data:/var/lib/mysql \
-v /Users/docker/data/mysql/master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql_master mysql:8.0.36
  • 命令说明:
**docker run**: Docker 命令,用于运行一个新的容器。**-d:** 以分离模式(detached mode)运行容器。容器将会在后台运行,你不会看到容器的输出。**-p 3317:3306:** 将主机的端口 3317 映射到容器的端口 3306。MySQL 默认监听 3306 端口,通过这种映射,你可以通过主机的 3317 端口访问 MySQL。**--privileged=true**:给予容器额外的权限。这通常用于需要访问主机的硬件设备或执行某些受限操作的容器。在大多数情况下,这不是必要的,并且使用时应谨慎。**-v /Users/docker/data/mysql/master/log:/var/log/mysql**:
将主机目录 /Users/docker/data/mysql/master/log 映射到容器的 /var/log/mysql 目录。这样,MySQL 的日志文件将会保存在主机上,即使容器删除,日志文件也会保留。**-v /Users/docker/data/mysql/master/data:/var/lib/mysql**:
将主机目录 /Users/docker/data/mysql/master/data 映射到容器的 /var/lib/mysql 目录。MySQL 的数据文件将会保存在主机上,确保数据持久化。**-v /Users/docker/data/mysql/master/conf:/etc/mysql/conf.d**:
将主机目录 /Users/docker/data/mysql/master/conf 映射到容器的 /etc/mysql/conf.d 目录。可以在该目录中放置 MySQL 配置文件(如 my.cnf),以便自定义 MySQL 配置。**-e MYSQL_ROOT_PASSWORD=123456**:
设置环境变量 MYSQL_ROOT_PASSWORD,用于初始化 MySQL 的 root 用户密码为 123456。这是在容器首次启动时设置 MySQL root 用户密码的简便方法。
**--name mysql_master** :
指定容器的名称为 mysql_master。这样你可以通过名称而不是容器 ID 来引用这个容器。**mysql:8.0.36:**
使用 mysql 镜像,并指定版本为 8.0.36。这将从 Docker Hub 拉取指定版本的 MySQL 镜像,并在容器中运行。

新增my.cnf文件

路径:上面新建文件的路径:**/Users/docker/data/mysql/master/conf **
vim my.cnf

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

创建用户并授权

  • 进入容器:
    docker exec -it mysql_master /bin/bash

  • 执行语句创建slave用户以及设置密码
    mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

  • 执行语句授权slave
    mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

  • 退出容器,输入 exit;
    mysql> exit; bash-4.4# exit

  • 执行重启主数据库:
    docker restart mysql_master;

在这里插入图片描述

  • 重启完成后,再次进入容器
    docker exec -it mysql_master /bin/bash
    进入MYSQL命令行

  • 查看主库状态
    show master status;
    在这里插入图片描述

特别说明,此处的position特别重要,后面配置从服务器需要用到

从服务器

创建MYSQL容器

docker run -d -p 3318:3306 --privileged=true \
-v /Users/docker/data/mysql/slave01/log:/var/log/mysql \
-v /Users/docker/data/mysql/slave01/data:/var/lib/mysql \
-v /Users/docker/data/mysql/slave01/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql_slave01 mysql:8.0.36

新增my.cnf文件

[mysqld]
pid-file= /var/run/mysqld/mysqld.pid
socket= /var/run/mysqld/mysqld.sock
datadir= /var/lib/mysql
secure-file-priv= NULL
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,设置二进制日志名,默认binlog
log-bin=binlog  
## 设置二进制日志使用内存大小(事务)
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=mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1
# 设置默认时区
default-time_zone='+8:00'
binlog-ignore-db=infomation_schema,配置同步,则主服务器用户会直接同步到从服务器

重启MYSQL容器

命令:docker restart mysql_slave;

配置主从同步

  • 进入从服务器
    进入容器:docker exec -it mysql_slave01 /bin/bash
    登录MYSQL

  • 执行以下语句,在从数据库配置主从复制

change master to master_host='主库主机ip地址', master_user='2.1在主库创建的账号', master_password='2.1在主库创建的密码', master_port=3307, master_log_file='binlog.000004', master_log_pos=157, master_connect_retry=30;


执行语句:
change master to master_host='XXXXXX', master_user='slave', master_password='123456', master_port=3307, master_log_file='binlog.000004', master_log_pos=157, master_connect_retry=30;参数说明:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
  • 查看主从同步状态
    show slave status \G;
    在这里插入图片描述
    说明:此时Slave_IO_Running与Slave_SQL_Running为 NO状态。

  • 开启主从同步
    start slave;
    在这里插入图片描述
    说明:Slave_IO_Running与Slave_SQL_Running为 Yes状态

验证主从同步

  • 主服务器创建数据库和表
mysql> create database tenant;
Query OK, 1 row affected (0.01 sec)mysql> use tenant;
Database changed
mysql> CREATE TABLE users (->     user_id INT AUTO_INCREMENT PRIMARY KEY, --  ID->     username VARCHAR(50) NOT NULL UNIQUE,    -- 50->     email VARCHAR(100) NOT NULL UNIQUE,      -- 100->     password VARCHAR(255) NOT NULL,          -- 255->     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- ->     updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- -> );
Query OK, 0 rows affected (0.04 sec)mysql> show tables;
+------------------+
| Tables_in_tenant |
+------------------+
| users            |
+------------------+
1 row in set (0.00 sec)
  • 查看从库是否完成同步
    在这里插入图片描述

彩蛋

哈哈哈,,,此篇彩蛋主要扩展解决问题方案,开启主从同步时,如何取消主从配置说明。溪源在配置主从配置过程IP地址错误,导致从库无法连接,如图:
在这里插入图片描述
Error connecting to source 'slave@localhost:3317'. This was attempt 2/86400, with a delay of 30 seconds between attempts. Message: Can't connect to MySQL server on 'localhost:3317' (99)
执行以下命令:

  • 停止复制进程:
    STOP SLAVE;
  • 清除所有复制配置:
    RESET SLAVE ALL;

然后按照从库,再重新配置主从同步,但是一定要注意查看一下主库的状态,判断position位置是否变化。

相关文章:

docker实战之搭建MYSQL8.0主从同步

目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步(Master-Slave Replication)是一种常用的解决方案,它允许一个主服…...

LTD275次升级 | 网页编辑器新增AI翻译 • 文章|产品等内容可导出 • 新增交互数据 • 购物清单可导出• 官微中心app出新版

1、 网站编辑器文本组件可一键翻译; 2、 文章、产品新增导出功能; 3、 购物车新增导出购物清单功能; 4、 App优化首页数据展示、新增访客交互数据功能; 5、 已知问题修复与优化; 01 网站编辑器 新增文本组件一键翻…...

代码随想录算法训练营第36期DAY36

贪心好难&#xff0c;希望能坚持到柳暗花明那天。 DAY36 1005K次取反后最大化的数组和 自己的方法&#xff0c;注意越界条件放在最前面就好&#xff1a; class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { //自己的…...

zookeeper安装教程

前置环境&#xff1a; hadoop3.3.6 三台集群 CentOS7 (图文并茂)基于CentOS-7搭建hadoop3.3.6大数据集群-CSDN博客 1.下载并上传 下载并上传ZOOKEEPER安装包到主节点 官网下载地址 Index of /dist/zookeeper (apache.org) 切换到/opt/bigdata目录&#xff08;根据自己的情况…...

windows2008修改远程桌面端口,如何果断修改远程桌面端口,确保系统安全无忧!

在数字化时代的浪潮中&#xff0c;Windows 2008系统以其卓越的稳定性和可靠性&#xff0c;赢得了众多企业和个人的青睐。然而&#xff0c;随着网络安全问题的日益严峻&#xff0c;如何确保远程桌面连接的安全&#xff0c;成为了摆在我们面前的一道难题。今天&#xff0c;我将为…...

【计算机网络原理】对传输层TCP协议的重点知识的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…...

mysql实战——半同步复制搭建

一、搭建前准备 主库 192.168.1.78 从库 192.168.1.76 二、搭建 1、先搭建异步复制 MySQL实战——主从异步复制搭建&#xff08;一主一从&#xff09;-CSDN博客 2、在异步的基础上搭建半同步复制 主库 mysql>install plugin rpl_semi_sync_slave soname semisy…...

Leetcode 3152. Special Array II

Leetcode 3152. Special Array II 1. 解题思路2. 代码实现 题目链接&#xff1a;3152. Special Array II 1. 解题思路 这一题的话思路上就是分堆&#xff0c;使用贪婪算法找到每一个元素所在的最长special子序列&#xff0c;然后判断query的首尾元素是不是属于同一个special…...

人工智能与区块链技术:开启未来科技的双引擎

在当今科技飞速发展的时代&#xff0c;人工智能和区块链技术如同两颗璀璨的明星&#xff0c;照亮了人类通往未来的道路。 人工智能&#xff0c;以其强大的学习和分析能力&#xff0c;正悄然改变着我们的生活。它能够处理海量的数据&#xff0c;为我们提供精准的预测和个性化的…...

Python筑基之旅-MySQL数据库(二)

目录 一、第三方库 1、mysql-connector-python 1-1、由来 1-2、优缺点 1-2-1、优点 1-2-1-1、官方支持 1-2-1-2、纯Python实现 1-2-1-3、全面支持 1-2-1-4、兼容性 1-2-1-5、易于使用 1-2-2、缺点 1-2-2-1、性能 1-2-2-2、安装 1-2-2-3、社区支持 1-2-2-4、扩…...

web前端面试题

web前端面试题 1、前端如何实现优化性能 (1)减少网络时间 ①使用DNS缓存技术 ​ ②减少需要传输的文件尺寸 ​ ③加快文件传输速度 (2)减少发送的请求数量 ①利用浏览器缓存 ​ ②使用合并的图片文件 (3)提高浏览器下载的并发度 ①JS文件放在HTML文档最后 ​ ②使用多个域名 (…...

创建型模式之单例

文章目录 概述定义场景小结 概述 设计模式包括创建型模式&#xff0c;结构型模式&#xff0c;行为型模式。 今天先看看创建型模式&#xff0c;而单例是创建型模式中的第一个而且是常用的&#xff0c;就从它开始吧。 定义 单例模式用来创建全局唯一的对象。一个类只允许创建一…...

在 Next.js 应用中创建ContactForm表单提交

在 Next.js 应用中创建表单提交涉及几个关键步骤&#xff0c;包括设置表单、处理表单提交以及管理服务器端或 API 逻辑。以下是使用 Next.js 开发一个简单表单提交的步骤。 1. 设置表单组件 首先&#xff0c;创建一个表单组件。在这个例子中&#xff0c;我们将创建一个 Conta…...

HTML5 3D图像应用

目录 关键技术与规范应用示例与领域相关工具与框架HTML5 3D图像应用是利用HTML5、CSS3、JavaScript(及其相关的库和框架)以及其他现代Web技术(如WebGL)构建的,能够在浏览器中呈现三维图形、动画和交互式场景的应用程序。以下是一些关于HTML5 3D图像应用的关键点和示例: …...

SQL——DML对表中数据的操作

# 创建数据库 create database if not exists db_BigData default character set gb2312 default collate gb2312_chinese_ci; # 创建表 create table if not exists db_BigData.stu (id int auto_increment primary key comment 主键ID,name var…...

深度学习之基于Matlab卷积神经网络(CNN)手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉领域的一个重要问题&#xff0c;也是深度学习应用的一个典型场景。卷…...

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端

工业4.0 企业级云MES全套源码&#xff0c;支持app、小程序、H5、台后管理端 采用javaspringboot-vue.jsuniapp开发 随着工业4.0的快速发展&#xff0c;制造执行系统&#xff08;MES&#xff09;成为了智能制造的核心。今天&#xff0c;将为大家介绍一款开源的MES系统——MES管…...

Science| 单体耦合纤维实现无芯片纺织电子(纤维器件/智能织物/柔性可穿戴电子)

东华大学Hongzhi Wang,Chengyi Hou和Qinghong Zhang团队在《Science》上发布了一篇题为“Single body-coupled fiber enables chipless textile electronics”的论文。论文内容如下: 一、 摘要 智能纺织品为将技术融入日常生活中提供了理想的平台。然而,目前的纺织电子系统…...

前端面试项目细节重难点(已工作|做分享)

面试官提问&#xff1a;需求场景&#xff1a;页面上有一个单选框&#xff0c;有是否两个选项&#xff1a;当用户选择是&#xff0c;出现一个输入框&#xff0c;用户可以输入内容&#xff0c;给后端的保存接口传入参数radio和content这两个字段&#xff0c;值分别是用户选项和输…...

ASTGCN 论文学习下

文章目录 4.4.2 时间注意力4.4.2 计算示例 4.5 空间-时间卷积4.5.1 空间维度上的图卷积4.5.2 时间维度上的图卷积4.5.3 空间-时间卷积模块总结 4.6 多组件融合 5 实验5.1 数据集5.1.1 PeMSD45.1.2 PeMSD8 5.2 数据预处理5.3 实验设置5.4 基线模型5.5 比较与结果分析5.5.1 主要发…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...