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

news/2025/2/5 16:32:26 标签: docker, mysql, adb

创建挂载目录和配置文件

  • 主节点
mkdir -p /mysql_master/mysql/log
mkdir -p /mysql_master/mysql/data
mkdir -p /mysql_master/mysql/conf
vim /mysql_master/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_ignore_db=mysql #设置不需要同步的库(多个数据库设置可以写多行)
binlog_ignore_db=sys
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
# binlog_do_db #设置需要同步的库(多个数据库设置可以写多行)
relay_log_recovery=on #当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
read-only=0 #1表示将MySQL设置为只读状态
relay_log=mysql-relay-bin 
sync_binlog=1 #事务提交后立即写入二进制日志,而不是放内存中,避免主服务器故障时事务没有写入日志,最好设为1,但是插入速度很慢,该参数的有效值为0 、1、N, 默认:0 查询语句: select @@sync_binlog;
innodb_flush_log_at_trx_commit=1 #每次事务提交后立即将日志写入磁盘的配置 默认:1 查询语句: select @@innodb_flush_log_at_trx_commit;
log-slave-updates=on
auto-increment-offset=1 #自增值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)
binlog_cache_size=100M #日志的缓存大小
binlog_format=mixed #设置bin-log日志文件格式为:mixed,防止主键重复
expire_logs_days=7 #设置bin-log日志文件保存的天数
slave_skip_errors=ddl_exist_errors,1032 #slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
master_info_repository=table
relay_log_info_repository=table
slave-parallel-type=LOGICAL_CLOCK #DATABASE:默认值,基于库的并行复制方式 LOGICAL_CLOCK:基于组提交的并行复制方式
slave-parallel-workers=20
max_allowed_packet=1024M
log-bin-trust-function-creators=1
max_connections=1000
max_user_connections=500
wait_timeout=31536000
interactive_timeout=31536000
sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
  • 从节点
mkdir -p /mysql_slave/mysql/log
mkdir -p /mysql_slave/mysql/data
mkdir -p /mysql_slave/mysql/conf
vim /mysql_slave/mysql/conf/my.cnf
[mysqld]
datadir=/var/lib/mysql #MySQL 数据库文件存放路径
server_id = 2 #指定数据库服务器的唯一标识。同一个复制组下的所有实例的server_id都必须唯一
log-bin= mysql-bin #开启MySQL的bin log日志功能,自定义的值将作为bin log的名称的前缀信息
replicate_ignore_db=mysql #设置不需要同步的库
replicate_ignore_db=sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
# replicate_do_db #设置需要同步的库
# replicate_ignore_table #设置不需要同步的表
# replicate_do_table #设置需要同步的表
relay_log_recovery=on #当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
read-only=1 #1表示将MySQL设置为只读状态
relay_log=mysql-relay-bin 
sync_binlog=1 #事务提交后立即写入二进制日志,而不是放内存中,避免主服务器故障时事务没有写入日志,最好设为1,但是插入速度很慢,该参数的有效值为0 、1、N, 默认:0 查询语句: select @@sync_binlog;
innodb_flush_log_at_trx_commit=1 #每次事务提交后立即将日志写入磁盘的配置 默认:1 查询语句: select @@innodb_flush_log_at_trx_commit;
log-slave-updates=on
auto-increment-offset=1 #自增值
auto-increment-increment=2 #漂移值,也就是步长(也就是你准备搞几个实例)
binlog_cache_size=100M #日志的缓存大小
binlog_format=mixed #设置bin-log日志文件格式为:mixed,防止主键重复
expire_logs_days=7 #设置bin-log日志文件保存的天数
slave_skip_errors=ddl_exist_errors,1032 #slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
master_info_repository=table
relay_log_info_repository=table
slave-parallel-type=LOGICAL_CLOCK #DATABASE:默认值,基于库的并行复制方式 LOGICAL_CLOCK:基于组提交的并行复制方式
slave-parallel-workers=20
max_allowed_packet=1024M
log-bin-trust-function-creators=1
max_connections=1000
max_user_connections=500
wait_timeout=31536000
interactive_timeout=31536000
sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

Mysql 容器启动

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

Mysql主从复制设置

主节点设置
  • 进入容器
docker exec -it mysql_master /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表示当前日志的位置,用于从节点日志同步
show master status;
从节点设置
  • 进入容器
docker exec -it mysql_slave /bin/bash
mysql -uroot -p123456
  • 设置主节点连接,master_host为主节点容器IP(docker inspect mysql_master查看ip),master_user为主备账号,master_password为主备账号密码,master_log_file和master_log_pos为主节点容器中通过show master status查出来的File和Position值
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.niftyadmin.cn/n/5842328.html

相关文章

《黑马点评》实战笔记

目录 P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 P3 短信登录 基于session实现短信登录的流程 P4 短信登录 实现发送短信验证码功能 P5 短信登录 实现短信验证码登录和注册功能 P6 短信登录 实现登录校验拦截器 P7 短信登录 隐藏用户敏感信息 P8 短信登录 …

【BUUCTF杂项题】后门查杀、webshell后门

前言:Webshell 本质上是一段可在 Web 服务器上执行的脚本代码,通常以文件形式存在于 Web 服务器的网站目录中。黑客通过利用 Web 应用程序的漏洞,如 SQL 注入、文件上传漏洞、命令执行漏洞等,将 Webshell 脚本上传到服务器&#x…

kubernetes 核心技术-集群安全机制 RBAC

随着 Kubernetes 在企业级应用中的广泛采用,确保集群的安全性变得至关重要。Kubernetes 提供了多种安全机制来保护集群及其资源免受未授权访问和潜在威胁的影响。其中,基于角色的访问控制(Role-Based Access Control, 简称 RBAC)是…

excel实用问题:提取文字当中的数字进行运算

0、前言: 这里汇总在使用excel工作过程中遇到的问题,excel使用wps版本,小规模数据我们自己提取数据可行,大规模数据就有些难受了,因此就产生了如下处理办法。 需求:需要把所有文字当中的数字提取出来&…

HarmonyOS NEXT:应用程序框架进阶

基本概念 UIAbility组件:一种包含UI的应用组件,主要用于和用户交互。 ExtensionAbility组建:基于特定场景,如服务卡片、输入法等提供的应用组件,每一个具体场景对应一个ExtensionAbilityType,开发者只能使…

C++ Primer 多维数组

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

Swift 进阶:Observation 框架中可观察(@Observable)对象的高级操作(上)

概述 在 WWDC 24 中苹果推出了全新的 Observation 框架,借助于它我们可以更加细粒度的监听可观察(@Observable)对象 。同时,SwiftUI 自身也与时偕行开始全面支持 @Observable 对象的“嵌入”。 然而在这里,我们却另辟蹊径来介绍 @Observable 对象另外一些“鲜为人知”的故…

项目中常用中间件有哪些?分别起什么作用?

在项目开发中,常用的中间件包括消息中间件、缓存中间件、数据库中间件等,以下是一些常见的中间件及其作用: 消息中间件 Kafka:一般用于处理大规模的消息数据,具有高吞吐量、低延迟的特点,适用于日志收集、…