基于 docker 的mysql 5.7 主主集群搭建

embedded/2025/2/6 6:58:18/

创建挂载目录和配置文件

  • 主节点1
mkdir -p /mysql_master_1/mysql/log
mkdir -p /mysql_master_1/mysql/data
mkdir -p /mysql_master_1/mysql/conf
vim /mysql_master_1/mysql/conf/my.cnf
[mysqld]
datadir=/var/lib/mysql #MySQL 数据库文件存放路径
server_id = 1 #指定数据库服务器的唯一标识。同一个复制组下的所有实例的server_id都必须唯一
log-bin= mysql-bin #开启MySQL的bin log日志功能,自定义的值将作为bin log的名称的前缀信息
binlog_do_db=testdb #设置需要同步的库(多个数据库设置可以写多行)
auto-increment-offset=1 #自增值,为了防止 id 重复,我们需要在配置文件中对两个数据库的自增长的 offset 设置为不同的值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)
  • 主节点2
mkdir -p /mysql_master_2/mysql/log
mkdir -p /mysql_master_2/mysql/data
mkdir -p /mysql_master_2/mysql/conf
vim /mysql_master_2/mysql/conf/my.cnf
[mysqld]
datadir=/var/lib/mysql #MySQL 数据库文件存放路径
server_id = 2 #指定数据库服务器的唯一标识。同一个复制组下的所有实例的server_id都必须唯一
log-bin= mysql-bin #开启MySQL的bin log日志功能,自定义的值将作为bin log的名称的前缀信息
binlog_do_db=testdb #设置需要同步的库(多个数据库设置可以写多行)
auto-increment-offset=2 #自增值,为了防止 id 重复,我们需要在配置文件中对两个数据库的自增长的 offset 设置为不同的值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)

Mysql 容器启动

  • 拉取镜像
docker pull mysql:5.7
  • 启动主节点1
docker run -p 33061:3306 --name mysql_master_1 \
-v /mysql_master_1/mysql/log:/var/log/mysql \
-v /mysql_master_1/mysql/data:/var/lib/mysql \
-v /mysql_master_1/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • 启动主节点2
docker run -p 33062:3306 --name mysql_master_2 \
-v /mysql_master_2/mysql/log:/var/log/mysql \
-v /mysql_master_2/mysql/data:/var/lib/mysql \
-v /mysql_master_2/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

Mysql主主复制设置

主节点1设置同步账号
docker exec -it mysql_master_1 /bin/bash
mysql -uroot -p123456
  • 设置同步的专用帐号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  • 刷新权限
flush privileges;
  • 查看用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
  • 查询master的状态,记录File、Position的值,File表示当前日志文件名称,Position表示当前日志的位置,用于主节点2日志同步
show master status;
主节点2设置同步账号
docker exec -it mysql_master_2 /bin/bash
mysql -uroot -p123456
  • 设置同步的专用帐号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  • 刷新权限
flush privileges;
  • 查看用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 
  • 查询master的状态,记录File、Position的值,File表示当前日志文件名称,Position表示当前日志的位置,用于主节点1日志同步
show master status;
主节点1配置数据同步
docker exec -it mysql_master_1 /bin/bash
mysql -uroot -p123456
  • 设置主节点1连接,master_host为主节点2容器IP(docker inspect mysql_master_2查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点2容器中,通过show master status查出来的值;
change master to master_host='172.18.0.3',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=600;
  • 启动同步
start slave; 
  • 查看从节点状态
show slave status\G;
主节点2配置数据同步
docker exec -it mysql_master_2 /bin/bash
mysql -uroot -p123456
  • 设置主节点2连接,master_host为主节点1容器IP(docker inspect mysql_master_1查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点1容器中,通过show master status查出来的值;
change master to master_host='172.18.0.2',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=600;
  • 启动同步
start slave; 
  • 查看从节点状态
show slave status\G;

http://www.ppmy.cn/embedded/159958.html

相关文章

React组件中的列表渲染与分隔符处理技巧

React组件中的列表渲染与分隔符处理技巧 摘要问题背景解决方案分析方案一:数组拼接法方案二:Fragment组件方案三:动态生成key 关键技术点1. key的使用原则2. Fragment组件3. 性能优化 实战演练挑战1:动态分隔符样式挑战2&#xff…

SQL中的三值逻辑和NULL

在SQL中,三值逻辑是一个重要概念,它的存在主要是由于 NULL 值的引入。NULL 代表未知值,它既不是空字符串,也不是数字 0,而是一个特殊的标记,表示数据缺失或不可用。 目录 SQL的三值逻辑 NULL的特性 NULL…

【单层神经网络】softmax回归的从零开始实现(图像分类)

softmax回归 该回归分析为后续的多层感知机做铺垫 基本概念 softmax回归用于离散模型预测(分类问题,含标签) softmax运算本质上是对网络的多个输出进行了归一化,使结果有一个统一的判断标准,不必纠结为什么要这么算…

Java NIO详解

一、NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 New,是解决高并发、I/O高性能的有效方式。 Java NIO 是Java1.4之后推出来的一套IO接口,NIO提供了一种完全不同的操作方式, NIO支持面向缓冲区的、基于通道的IO操作。 …

unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键

目录 1 用Input接口去监测:鼠标,键盘,虚拟轴,虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…

第 1 天:UE5 C++ 开发环境搭建,全流程指南

🎯 目标:搭建 Unreal Engine 5(UE5)C 开发环境,配置 Visual Studio 并成功运行 C 代码! 1️⃣ Unreal Engine 5 安装 🔹 下载与安装 Unreal Engine 5 步骤: 注册并安装 Epic Game…

修复使用unplugin-auto-import和unplugin-vue-components后tsc-vue报错的问题

在使用NaiveUI的过程中,引入了unplugin-auto-import和unplugin-vue-components。 这两个组件能自动引入vue方法和vue组件,提升了开发者体验。 但是在vscode中,源码里未手动引用而直接用的方法和组件还是被标红,提示找不到&#x…

【llm对话系统】大模型 Llama 如何进行量化和推理

1. 写在前面 Llama 是 Meta AI 开源的一系列大型语言模型 (LLM),在各种 NLP 任务上表现出色。然而,这些模型通常具有庞大的参数量,需要大量的计算资源和内存才能进行推理。为了降低 Llama 模型的部署成本,并提高其推理速度,我们可以采用模型量化 (Quantization) 技术。 …