八、Docker安装MySQL主从

news2024/12/23 6:15:42

学习参考:尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出)

目录

  • 前言
  • 一、pull一个mysql镜像
  • 二、主服务器master配置
    • 2.1 新建主服务器容器实例
    • 2.2 配置master的my.cnf
    • 2.3 重启master容器实例并验证
    • 2.4 master容器实例内创建数据同步用户
  • 三、从服务器slave配置
    • 3.1 新建从服务器容器实例
    • 2.2 配置slave的my.cnf
    • 2.3 重启slave容器实例并验证
    • 2.4 在从数据库中配置主从复制
  • 四、开启从服务器复制
    • 4.1 在从数据库中查看主从同步状态
    • 4.2 在从数据库中开启主从同步
    • 4.1 再次在从数据库中查看主从同步状态
    • 五、主从复制测试
    • 5.1 在主机新建数据库db_mytest
    • 5.2 在新数据库中创建表t_user
    • 5.3 在表中新增数据
    • 5.4 查看从服务中数据库和表
  • 总结

前言

docker版MySQL主从安装。

一、pull一个mysql镜像

我这里使用5.7版本,也可以用8.x版本

docker pull mysql:5.7

二、主服务器master配置

2.1 新建主服务器容器实例

端口:3307,可以自己指定其他端口。

docker run -p 3307:3306 --name mysql-master \	# 端口映射主机3307:docker3306,容器实例名mysql-master 
-v /zwcoder/mysql-master/log:/var/log/mysql \	#挂载log目录
-v /zwcoder/mysql-master/data:/var/lib/mysql \	#挂载data目录
-v /zwcoder/mysql-master/conf:/etc/mysql \		#挂载conf目录
-e MYSQL_ROOT_PASSWORD=root  \					#mysql密码
-d mysql:5.7									#-d后台运行,镜像用的mysql:5.7
docker run -p 3307:3306 --name mysql-master \ 
-v /zwcoder/mysql-master/log:/var/log/mysql \
-v /zwcoder/mysql-master/data:/var/lib/mysql \
-v /zwcoder/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

启动成功如图:
在这里插入图片描述

2.2 配置master的my.cnf

cd /zwcoder/mysql-master/conf/
vim my.cnf

master的my.cnf配置内容如下:

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

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

2.3 重启master容器实例并验证

docker restart mysql-master	#重启
docker exec -it mysql-master /bin/bash #进入容器验证是否可用

启动发现没问题:
在这里插入图片描述

2.4 master容器实例内创建数据同步用户

mysql主从中master是要对slave授权的,否则从服务器是无法访问主master的。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

在这里插入图片描述


三、从服务器slave配置

3.1 新建从服务器容器实例

端口:3308,可以自己指定其他端口。

docker run -p 3308:3306 --name mysql-slave \
-v /zwcoder/mysql-slave/log:/var/log/mysql \
-v /zwcoder/mysql-slave/data:/var/lib/mysql \
-v /zwcoder/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

在这里插入图片描述

2.2 配置slave的my.cnf

cd /zwcoder/mysql-slave/conf/
vim my.cnf

slave的my.cnf配置内容如下:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
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=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

在这里插入图片描述

在这里插入图片描述

2.3 重启slave容器实例并验证

docker restart mysql-slave	#重启
docker exec -it mysql-slave /bin/bash #进入容器验证是否可用

成功:
在这里插入图片描述

2.4 在从数据库中配置主从复制

change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

主从复制参数说明:
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

在这里插入图片描述
到此单独配置master和slave基本完成,接下来开始配置主从的其他配置


四、开启从服务器复制

4.1 在从数据库中查看主从同步状态

show slave status \G;

在这里插入图片描述

4.2 在从数据库中开启主从同步

start slave;

在这里插入图片描述

4.1 再次在从数据库中查看主从同步状态

show slave status \G;

复制已经开启:
在这里插入图片描述


五、主从复制测试

5.1 在主机新建数据库db_mytest

create database db_mytest;
use db_mytest;

在这里插入图片描述

5.2 在新数据库中创建表t_user

create table t_user(
	id bigint primary key,
	username varchar(32),
	password varchar(16)
);

在这里插入图片描述

5.3 在表中新增数据

insert into t_user value(1,'zs','123456');

在这里插入图片描述

5.4 查看从服务中数据库和表

slave中已经有了master中的数据库、表和数据,至此主从搭建成功!
在这里插入图片描述

总结

本次写的是一主一从,还可以尝试一主多从。


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

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

相关文章

JVM知识扫盲篇

JVM扫盲 一:故事背景二:知识点主要构成2.1 JVM为什么能跨平台2.2 JVM整体结构2.1 类加载子系统2.1.1 概述2.1.2 具体类加载器2.1.3 双亲委派机制2.1.4 Tomcat为什么要自定义类加载器 2.2 运行时数据区2.2.1 整体概念2.2.2 程序计数器的作用2.2.3 虚拟机栈…

MySQL - 数据库级别的外键

1. 外键 FOREIGN KEY (了解) 测试数据 : 学生表 CREATE TABLE IF NOT EXISTS student (id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号,name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名,pwd VARCHAR(20) NOT NULL DEFAULT 123456 COMMENT 密码,sex VARC…

在 Mac 上安装 K8S

本篇文章将介绍如何在 Mac 上使用 minikube 搭建单机版的 Kubernetes。 安装步骤 安装 Docker 安装 docker 主要是用于提供容器引擎。直接下载安装即可。 下载地址 安装 Kubectl 推荐使用 home brew 安装 brew install kubectl可以使用下面的命令查看是否已经安装完毕 …

MAYA粒子圈

无法修改 完成一圈的时间

【C51】基于51单片机的自动输液监控系统设计与实现

摘 要 随着科技进步,我国的医疗设施不断完善,逐渐达到现代化水平。在当今的医疗环境下,病患更关心自己是否能够及时进行有效的治疗,医护人员对患者进行输液过程的全程监控。医生治疗的效果明显提高,不仅节约大量的时间…

Linux: 进程管理

一,快速上手,结束一个失控的进程 在主目录中,用文本编辑器创建一个文本文件badpro,如下: #! /bin/bash while echo "Im making files!!" domkdir adircd adirtouch afilesleep 2s done将该文件设定为可执行…

Leetcode 刷题 动态规划 子序列问题

300. 最长递增子序列 首先明确什么是子序列 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序 不一定要连续 可以删除部分元素 但是要保证相对顺序 1. dp[i]的定义 dp[i]表示i之前包括i的以nums[i]结尾的最长…

Hutool 30

Hutool是一个Java工具包,提供了丰富的工具类库和简化开发的工具方法。它的目标是提供一套丰富、实用、高效和易用的Java工具类,以提升开发者的开发效率和开发质量。以下是Hutool的一些主要特点和功能模块: 常用工具类:Hutool提供了…

【Linux | Shell命令】bash shell 进程、磁盘、排序命令

目录 一、概述二、进程相关命令2.1 ps 命令 三四五 一、概述 上篇文章 bash shell 基础命令 中,介绍了一些与目录、文件相关的 shell 命令,本文继续介绍其他与进程、磁盘、排序、归档相关的命令,读者可以在自己的Linux系统下,实操…

【AI赋能未来】一文带你了解生成对抗网络(GAN)

自我介绍⛵ 📣我是秋说,研究人工智能、大数据等前沿技术,传递Java、Python等语言知识。 🙉主页链接:秋说的博客 📆 学习专栏推荐:MySQL进阶之路、C刷题集、网络安全攻防姿势总结 欢迎点赞 &…

shiro框架 02使用shiro进行用户的认证

01.shiro框架的具体业务: 具体的内部结构: Subject(主体):与软件交互的一个特定的实体(用户、第三方服务等)。 SecurityManager(安全管理器) :Shiro 的核心,用来协调管理组件工作。 其中的: Au…

小研究 - Java 指针分析综述(二)

近年来静态程序分析已成为保障软件可靠性、安全性和高效性的关键技术之一. 指针分析作为基 础程序分析技术为静态程序分析提供关于程序的一系列基础信息,例如程序任意变量的指向关系、变量 间的别名关系、程序调用图、堆对象的可达性等. 介绍了 Java 指针分析的重要…

亚马逊云科技积极探索多样化生态合作模式,助力实现可持续发展愿景

2023年6月26日,亚马逊云科技中国峰会在上海世博中心盛大开幕!以主题“因构建 而可见”为大家拉开帷幕。当前,越来越多的企业客户,以及当地政府监管机构对企业的要求,都需要企业告知碳足迹,亚马逊云科技提供…

优盘数据恢复怎么做?3个方法分享!

我的优盘里保存了很多有纪念意义的照片,但是刚刚将u盘插入电脑后,发现有些照片已经损坏了。我想将优盘里的数据恢复,有什么靠谱的方法吗?给我推荐一下吧! 优盘是一种便携式存储设备,常用于存储和传输数据。…

Java-API简析_java.lang.Thread类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131467981 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…

九类AI应用和五个简单LLM的Prompt技巧

一、九类AI应用 AI艺术:造梦日记、MidJourney、Stable Diffusion、Adobe、Stability、Remove AI聊天:ChatGPT、Discord、文心一言、Google Bard、星火、Character.Al AI社区:Kaggle、Hugging Face、H20、Github、Replicate、OpenCV AI创造…

chatgpt赋能python:Python随机打乱列表:如何使用Python打乱您的数据?

Python随机打乱列表:如何使用Python打乱您的数据? 在数据处理中,列表是一种常见的数据结构。然而,当数据量很大时,列表的排序方式也变得重要。为了更好地处理数据,我们需要知道如何使用Python打乱列表。 …

k8s操作命令

系列文章目录 文章目录 系列文章目录一、k8s基础命令1.陈述式资源管理方法:2.基础命令 总结 一、k8s基础命令 1.陈述式资源管理方法: 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具…

项目——学生信息管理系统2

目录 用户类型,我们创建一个枚举类 在 org.xingyun.model 包下创建 UserType 枚举类 快速生成 get set 方法 修改代码,下拉框的内容,用我们的枚举类型 给登录按钮绑定事件 我们在 org.xingyun.utils 包下创建一个工具类 Eclipse 智能提…