Docker安装MySQL主从配置

news2024/10/6 10:26:58

今天学习Docker安装MySQL主从配置

一、Master

1.1、拉取镜像

$docker pull mysql:8.0.25

1. 2、新建MySQL主服务器的容器实例,端口为3306

docker run -p 3306:3306 --name mysql-master \
-v /data/mysql/mysql-master/log:/var/log/mysql \
-v /data/mysql/mysql-master/data:/var/lib/mysql \
-v /data/mysql/mysql-master/conf:/etc/mysql \
-v /data/mysql/mysql-master/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.25

 命令说明:
docker run :创建并运行一个容器
–name : 给容器起一个名字,比如叫做abc
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
-e:环境变量,如密码什么的
-v:挂载一个数据卷到某个容器内目录,上面分别配置了日志、数据、配置的数据卷

docker使用mysql8镜像时加载指定的外部配置文件和存储目录时,也需要指定 /var/lib/mysql-files的外部目录,不然会报如下的错:
mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)
所以在启动容器时 需要加上-v /data/mysql/mysql-master/mysql-files:/var/lib/mysql-files/

1.3、进入/data/mysql/mysql-master/conf目录下新建my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=201 

## 指定不需要同步的数据库名称
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

1.4、修改完my.cnf配置后重启master实例

$docker restart mysql-master

1.5、进入mysql-master容器,登录并创建表

$docker exec -it mysql-master /bin/bash

$mysql -uroot -p123456

1.6、在mysql-master容器实例内创建同步用户和授权

#新建一个数据同步用户:

$mysql>CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

#给这个用户授予权限:

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

#MySQL8的话,密码必须修改为mysql_native_password的,客户端才能被连接,不然无法连接。

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

 master主机设置完毕。

二、slave

2.1、新建从服务器从服务器实例3307

docker run -p 3307:3306 --name mysql-slave \
-v /data/mysql/mysql-slave/log:/var/log/mysql \
-v /data/mysql/mysql-slave/data:/var/lib/mysql \
-v /data/mysql/mysql-slave/conf:/etc/mysql \
-v /data/mysql/mysql-slave/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.25

 2.2、进入/data/mysql/mysql-slave/conf目录下新建my.cnf

$cd /data/mysql/mysql-slave/conf

$vim my.cnf

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=202

## 指定不需要同步的数据库名称
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

三、配置主从同步 

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

$docker exec -it mysql-master /bin/bash

$mysql -uroot -p123456

#查看主从状态

$show master status;

 3.2、在从数据库中查看主从状态

#进入mysql-slave容器

$docker exec -it mysql-slave /bin/bash

$mysql -uroot -p123456

3.3、在从数据库里面配置主从复制

3.3.1、从数据库配置主从复制

change master to master_host='10.1.1.183', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=994, master_connect_retry=30;

 例如:在主数据库中File参数为:mall-mysql-bin.000001,Position参数为994,

主从复制命令参数说明:
master_host: 主数据库的IP地址;

master_port:主数据库的运行端口;

master_user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码;

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

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

$show slave status \G

 3.3.3、在从数据库中开启主从同步

$start slave;

再次查看状态

四、主从复制测试 

4.1、主数据库新增数据检查同步

4.1.1.、主数据库新增数据库和表

#创建数据库

$create database dbtest;

#显示数据库列表

$show databases;

#使用数据库

$use dbtest;

#创建表

create table student(
id int,
name char(16),
english tinyint,
chinese tinyint,
time timestamp );

 4.1.2、查看从数据库数据展示-->可看到同步

#显示数据库列表

$show databases;

#使用数据库

$use dbtest;

#显示表

$show tables;

 

 4.2、从数据库新增数据检查主数据库同步

4.2.1、从数据库新增表

4.2.2、主数据库检查同步-->看不到

 

 

备注:

主新建数据库,然后新建数据表,插入数据,然后在从数据库里面查看是否同步。
主数据库可以读写数据,从数据库可以同步读取主数据库的数据,从数据库写的数据只存在从数据库中,不会进行同步。

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

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

相关文章

WebSocket聊天功能小Demo

一、WebSocket简介 1.1 什么是WebSocket? WebSocket协议是基于TCP的一种网络协议,它实现了浏览器与服务器全双工(Full-duplex)通信。它允许服务端主动向客户端推送数据,这使得客户端和服务器之间的数据交换变得更加简…

模型微调的预处理

一.简历文本标注数据的准备 目标:把原始数据集转换为PaddleNLP支持的文本/文档抽取标注格式,为后续的模型微调做好准备。 工具:Label Studio 使用手册: applications/information_extraction/label_studio_text.md PaddlePad…

ai原创文章生成器-原创文章生成的软件

AI原创文章生成器——让你轻松批量生成高质量文章 随着内容创作的需求不断增加,人工撰写也难以满足快速高效的产出需求。在这种情况下,AI原创文章生成器应运而生,为人们创造了一种全新的自动化创作方式。下面我们就来了解一下这个神奇的工具…

无网络要求有网就能免费体验ChatGPT/GPT4

ChatGPT 是 OpenAI 公司开发的一款聊天机器人。它基于 OpenAI 的 GPT-3 语言模型,可以进行开域的自然语言聊天。主要特点如下: 开域聊天:ChatGPT可以聊任意话题,不需要预先定义话题范围或关键词,真正实现开放领域聊天。自然语言交互:ChatGPT可以理解并生成自然的语言表达,其对…

[答疑]事件和其影响的属性的对应是多样的

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 第五元素 2023-5-2 19:16 这题是不是缺少条件啊?“按钮默认isEnabled为true,被点击后,isEnabled变为false” 是通过什么渠道达到S4状态…

视频截取gif方法分享,利用gif制作工具在线制作动图

表情包作为聊天社交中调节氛围的工具,而动态的gif表情包更是深受大众的喜爱。那么,这种gif动态图片要怎么制作呢?其实,很简单不需要下载软件,小白也能轻松操作的。 一、什么工具能够制作gif动画呢? 使用G…

freeswitch两个DTMF转换接口的区别

概述 freeswitch支持三种模式的DTMF传输方式,分别时inband、INFO、2833。 在传统的PSTN网络中,所有的DTMF码都是inband模式,所以VOIP网络和PSTN网络对接中,需要将DTMF码做格式转换,通常是2833和inband之间的转换。 …

普乐蛙数字文旅动感5d电影设备5d动感电影体验馆

普乐蛙5d动感影院7d互动影院设备,它是通过视觉、听觉、触觉、嗅觉和味觉,在特定的环境中模拟形成一种特定的空间,营造出身临其境的效果。普乐蛙5d动感影院7d互动影院设备,它是根据人体工程学设计的座椅,让观众坐在座椅…

【iOS】—— 实现WebSocket发送消息(SocketRocket第三方库的使用和解析)

文章目录 WebSocketWebSocket特点 SocketRocket导入头文件设置代理SRWebSocket的初始化和建立连接SRWebSocketDelegate 代理方法实现加上简单UI实现两个用户之间简单通信浅看了一点点源码(理解的不深) 偶然之间了解到了利用WebSocket实现后端和前端的相互…

力扣刷题19天

106.从中序与后序遍历序列构造二又树(1、在中序、前序和后序,每轮取得时候数量都一样. 2、必须要有中序才能推测出来) 这道题下面是前提: 如果没有这个前提,会出现下面情况(前序遍历会变成新的树): 运行代码: class S…

MySQL简介与基本的select语句

1.SQL的分类 DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据库表的结构. 主要的语句关键字包括 CREATE、DROP、ALTER等。 DML(Data Manipulation Lan…

CSS3 的其他特性(了解)

目录 1.CSS3滤镜filter: 2.CSS3 calc函数 3.CSS3 过度(重点) 4.进度条案例 5.侠义的HTML5 CSS3 1.CSS3滤镜filter: filter CSS属性及那个模糊或颜色偏移等图形效果应用于元素。 filter: 函数(); 例如:…

端子排电压继电器 动作时间短 35mm卡槽安装 JY-7GA/2 80-320VAC

JY-7GA/2端子排电压继电器品牌:JOSEF约瑟名称:端子排电压继电器型号:JY-7GA/2电压整定范围:60200VAC/90300VDC功率消耗:<3W触点容量:250V5A返回系数:过压0.920.96/欠压1.041.08 系列型号: JY-7GA/DK/220端子排电压继电器; JY-7GB/DK/220端…

sqoop将hive中的数据导入MySQL不能正常显示中文——已解决

问题: 原因: 结果查看 问题: 在做练习利用sqoop工具将hive中的表导入到MySQL之后,在MySQL查看中文部分不能正常显示 输入sqoop执行语句 sqoop export -connect "jdbc:mysql://HadoopMaster:3306/hive_to_mysql?useUnicode…

要不要提前去实习?

大家好,我是帅地。 秋招结束,很多人在纠结要不要提前去公司实习,最近也有一些帅友问了这个问题 说说我去年在腾讯实习的经历给你做个参考吧。 入职前的学习 20年初那会,还是蛮激动,之前我从来没有去打过工&#xff…

如何用Xcode安装ipa

Xcode安装ipa iOS APP上架App Store其中一个步骤就是要把ipa文件上传到App Store!​ 下面进行步骤介绍!​ 利用Appuploader这个软件,可以在Windows、Linux或Mac系统中申请ios和上传IPA到App Store Connect。​ 非常的方便,没有…

08-01 分布式系统理论

分布式一致性和CAP理论 C(一致性):在分布式环境中,一致性是指数据在多个副本之间能否保持一致的特性A(可用性):系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是…

butter滤波器

文章目录 什么是巴特沃斯滤波器?滤波器的阶数的含义matlab中的butterscipy.signal butter 中有哪些参数,各参数分别是什么含义? 本节围绕以下问题展开 butter 是什么?滤波器的阶数是什么意思?matlab中的butter参数含义…

00后工资太低想转行?选择云计算如何

00后已经成为目前从业最年轻的群体,有活力也需求明确,搞钱已经成为上班最核心的目的。但也有一波比较迷茫的00后,比如原专业学得不好,没有对口就业、工作内容不喜欢、工资太低养不活自己等等。而工资太低也是大部分00后想转行的主…

Linux 服务器设置 jar包开机自启动

一、新建jar包启动sh文件 新建startup.sh脚本文件,启动项目jar包 nohup java -jar test.jar >/dev/null 2>&1 & 二、设置自动启动命令 1.进入rc.d目录 执行cd /etc/rc.d 命令,进入rc.d目录 如图所示(示例)&…