Docker 部署 MySQL 一主多从

news2024/11/10 7:40:06

服务器规划:使用docker方式创建,主从服务器IP一致,端口号不一致

  • 主服务器:容器名 mysql-master,端口 3306
  • 从服务器:容器名 mysql-slave1,端口 3307
  • 从服务器:容器名 mysql-slave2,端口 3308

注意:如果此时防火墙是开启的,则先关闭防火墙,并重启docker,否则后续安装的MySQL无法启动

#关闭docker
systemctl stop docker
#关闭防火墙
systemctl stop firewalld
#启动docker
systemctl start docker

一、准备主服务器

1. 在docker中创建并启动MySQL主服务器:端口3306

docker run -d \
-p 3306:3306 \
-v /liush/mysql/master/conf:/etc/mysql/conf.d \
-v /liush/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-master \
mysql:8.0.29

2. 创建MySQL主服务器配置文件: 

默认情况下MySQL的binlog日志是自动开启的,可以通过如下配置定义一些可选配置

vim /liush/mysql/master/conf/my.cnf

(1)配置如下内容

[mysqld]
# 服务器唯一id,默认值1
server-id=1
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
binlog-do-db=mydb
# 设置不需要复制的数据库
binlog-ignore-db=mysql
#binlog-ignore-db=infomation_schema

(2)重启MySQL容器

docker restart mysql-master

3. 使用命令行登录MySQL主服务器

(1)进入容器:env LANG=C.UTF-8 避免容器中显示中文乱码

docker exec -it mysql-master env LANG=C.UTF-8 /bin/bash

(2)进入容器内的mysql命令行

mysql -uroot -proot

(3)修改默认密码插件

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

4. 主机中创建slave用户

(1)创建slave用户

CREATE USER 'slave'@'%';

(2)设置密码

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

(3)授予复制权限

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

(4)刷新权限

FLUSH PRIVILEGES;

5. 主机中查询master状态

执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

SHOW MASTER STATUS;

记下File和Position的值。执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

二、准备从服务器

可以配置多台从机slave1、slave2...,这里以配置slave1、slave2为例

1. 在docker中创建并启动MySQL从服务器:端口3307

docker run -d \
-p 3307:3306 \
-v /liush/mysql/slave1/conf:/etc/mysql/conf.d \
-v /liush/mysql/slave1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave1 \
mysql:8.0.29
docker run -d \
-p 3308:3306 \
-v /liush/mysql/slave2/conf:/etc/mysql/conf.d \
-v /liush/mysql/slave2/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql-slave2 \
mysql:8.0.29

2. 创建MySQL从服务器配置文件

vim /liush/mysql/slave1/conf/my.cnf
vim /liush/mysql/slave2/conf/my.cnf

(1)配置如下内容  

[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=2
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin
[mysqld]
# 服务器唯一id,每台服务器的id必须不同,如果配置其他从机,注意修改id
server-id=3
# 中继日志名,默认xxxxxxxxxxxx-relay-bin
#relay-log=relay-bin

(2)重启MySQL容器

docker restart mysql-slave1
docker restart mysql-slave2

3. 使用命令行登录MySQL从服务器

(1)进入容器

docker exec -it mysql-slave1 env LANG=C.UTF-8 /bin/bash
docker exec -it mysql-slave2 env LANG=C.UTF-8 /bin/bash

(2)进入容器内的mysql命令行

mysql -uroot -proot

(3)修改默认密码插件

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

4. 在从机上配置主从关系

在从机上执行以下SQL操作

CHANGE MASTER TO MASTER_HOST='192.168.60.128', 
MASTER_USER='slave',MASTER_PASSWORD='123456', MASTER_PORT=3306,
MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=1357; 

三、启动主从同步

启动从机的复制功能,执行SQL:

START SLAVE;
-- 查看状态(不需要分号)
SHOW SLAVE STATUS\G

两个关键进程:下面两个参数都是Yes,则说明主从配置成功!  

四、实现主从同步

在主机中执行以下SQL,在从机中查看数据库、表和数据是否已经被同步

CREATE DATABASE mydb;
USE mydb;
CREATE TABLE t_user (
 id BIGINT AUTO_INCREMENT,
 uname VARCHAR(30),
 PRIMARY KEY (id)
);
INSERT INTO t_user(uname) VALUES('zhang3');
INSERT INTO t_user(uname) VALUES(@@hostname)

五、停止和重置

需要的时候,可以使用如下SQL语句

在从机上执行。功能说明:停止I/O 线程和SQL线程的操作。

stop slave; 

在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。

reset slave;

-- 在主机上执行。功能说明:删除所有的binglog日志文件,并将日志索引文件清空,重新开始所有新的日志文件。
-- 用于第一次进行搭建主从库时,进行主库binlog初始化工作;

reset master;

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

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

相关文章

springboot+vue幼儿园管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的幼儿园管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…

删除Android手机自带应用

目录 1、下载手机adb插件 2、进入开发者模式 3、删除应用 4、之后记得关闭手机usb及开发模式 1、下载手机adb插件 Downloads - ADB Shell 之后路径行输入cmd,或者winr,进入该目录: 2、进入开发者模式 设置--系统--关于手机--快速多次点…

YOLOv7+双目实现三维跟踪(python)

YOLOv7双目实现三维跟踪(python) 1. 目标跟踪2. 测距模块2.1 测距原理2.2 添加测距 3. 细节修改(可忽略)4. 实验效果 相关链接 1. YOLOV5 双目测距(python) 2. YOLOV7 双目测距(python&#x…

快速发展、持续领跑,软件顶级盛会第二届中国国际软件发展大会成功召开

2023年4月18日,第二届中国国际软件发展大会在北京国家会议中心召开,工业和信息化部党组成员、副部长王江平出席大会并致辞。 王江平副部长表示,党的十八大以来,我国软件产业快速发展,核心技术持续突破,产业…

LiveCharts2 初步认识

文章目录 1 LiveCharts2 是什么?2 LiveCharts2 可以做什么?3 简单使用LiveCharts2 ,实现动态曲线图 1 LiveCharts2 是什么? GitHub:https://github.com/beto-rodriguez/LiveCharts2 官网: https://lvchar…

CANoe自带的诊断工程分析

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

基于matlab的长短期神经网络的三维路径跟踪预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的三维路径跟踪预测 MATALB代码 效果图 结果分析 展望 参考论文 背影 路径跟踪是指通过计算机算法,。长短期记忆模型对复杂,非线性运动的目标跟踪,解决目标跟踪困难&a…

回溯算法专题

回溯算法专题 框架篇全排列问题N 皇后问题如果只需要一个合法答案,怎么办? 快速排序LeetCode 912. 排序数组解题思路代码实现LeetCode 215. 数组中的第K个最大元素解题思路代码实现总结 不要纠结,干就完事了,熟练度很重要&#xf…

e与phi不互素 --- 四道题详记

文章目录 题一([MoeCTF2022]signin)题目描述:题目分析: 题二(unusualrsa5)题目描述:题目分析: 题三([0ctf 2016]RSA?)题目描述:题目分析: 题四(2022ctfshow卷王杯现代密码签到)题目描述:题目分…

【Python】re模块

一、re模块简介及操作方法 正则表达式其本身就是一种小型的,高度专业化的编程语言。在Python中,它被内 嵌在了re模块里面,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹 配引擎执行。 1、re.search方法 re.search 扫描…

“王炸”组合竞逐「行泊一体」

去年开始,在中国市场,「行泊一体」的热度,不亚于当年特斯拉推出FSD,甚至更加火热。从上游芯片、传感器,到域控制器、智能驾驶系统供应商以及车企,都在公开场合不断普及这个组合功能。 「行泊一体」市场的启…

MongoDBRedis基础知识

MongoDB&Redis基础知识 1. MongoDB简介2. Redis 关系型数据库遵循ACID原则: 原子性一致性独立性持久性 分布式系统:由多台计算机和通信的软件组件通过计算机网络连接组成,分布式系统是建立在网络之上的软件系统,因为软件的特…

操作系统论文导读(七):Response-Time Analysis for Mixed Criticality Systems——混合关键系统的响应时间分析

目录 一、论文核心思想 二、案例引入 三、基础定义 四、分区关键性调度 (PC) 五、SMC调度 5.1 调度流程 5.2 响应时间分析(考虑EDF分配) 5.3 优先级分配 六、AMC调度 6.1 调度流程 6.2 响应时间分析(考虑EDF分配) 6.3 AMC…

Cesium 核心概念 核心接口

Cesimum 可以做什么 Cesium 是一个开源的3D地球可视化引擎,它可以在Web浏览器中以高性能和高质量呈现全球范围内的地球表面数据。 Cesium 可以用于以下领域: 地理信息系统:Cesium 可以呈现地球表面上的各种地理信息数据,包括卫…

【Python入门】NumPy 数组裁切及数据类型

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 裁切数组 python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。 我们像这样传递切片而不是索引:[start:end]。 我们还可以定义步长,如下所示:[start&#x…

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么? 1.RabbitMQ简介 RabbitMQ是有erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 常见的消息队列有:RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…

设计模式 --- 创建者模式

一、概述 创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。 创建型模式分为: 单例模式 工厂方法模式 抽象工程模式 原型…

【linux】yum “应用商店” 的基本用法

好多工具 yum软件包查看软件包安装软件卸载软件 yum 通俗的讲,这就似我们手机上的应用商店,只不过是在linux下的。 我们可以用yum来下载东西。 软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样…

【Linux 命令】chroot

文章目录 一、背景二、语法三、案例3.1 命令3.2 系统调用3.3 查找服务是否存在于 chrooted 监禁内 四、注意事项 chroot 用来在指定根目录运行命令(即指定 / 的位置),不可操作指定目录之外的地方。其是一种非常简单的资源隔离化操作&#xff…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中,需要频繁的更新docker镜像,然而默认情况下,docker的2375端口是关闭的,下面介绍如何打开端口。 修改docker配置文件 操作步骤: 1.1、修改配置 登录docker所在服务器,修改docker…