简介

跨云服务器一主一从,可以自己按照逻辑配置多个从服务器
假设主服务器ip: 192.168.0.4 从服务器ip:192.168.0.5
系统 CentOS7.9 (停止维护了,建议大家用 Ubuntu 之类的,我这个没办法,前人在云服务器上搞的,但是有生产数据又不能乱动)
考虑到公司的实际情况,网络相对也安全,所以暂时不配置 SSL,如需 SSL 的同学请自行增加部分配置项即可!

前置配置

默认你不是小白,有些细节可能不会很详细。

  1. 我这里提前创建一个叫做common的docker网络供后续容器使用
docker network create common --driver bridge

主服务器配置

  1. 编写docker-compose.yml
services:mysql-master:image: mysql:8.0.39container_name: data-base-platform-mysql-masterrestart: alwaysprivileged: true# 提高文件句柄限制,适合高负载ulimits:memlock: -1nofile:soft: 1000000hard: 1000000environment:TZ: Asia/ShanghaiLANG: C.UTF-8MYSQL_ROOT_PASSWORD: VThzb5x5POhuzR # 生产请改为强密码MYSQL_DATABASE: test                  # 业务库示例volumes:- ./data:/var/lib/mysql                    # 数据持久化- ./logs:/var/log/mysql                    # 错误日志/慢日志- ./conf/my.cnf:/etc/mysql/my.cnf:ro       # 主配置文件- ./init:/docker-entrypoint-initdb.d:ro    # 启动时自动创建复制账号- ./backup:/backup                         # 备份目录ports:- "23306:3306"networks:- commonlogging:driver: "json-file"options:max-size: "100m"max-file: "5"networks:common:driver: bridgeexternal: true
  1. 启动容器
# 进入docker-compose.yml文件所在目录,执行以下
docker compose up -d# 查看日志是否正常
docker compose logs -f# 旧版本的可能叫做 docker-compose
  1. 设置目录权限
    启动成功之后会创建对应的目录:
  • data MySQL 数据目录
  • logs 日志目录
  • conf MySQL 配置文件目录
  • backup 备份目录
  • init 容器启动后需要执行的sql脚本放在这个目录

在这些目录同级内更改目录权限,避免可能出现的一些问题

chown -R 999:999 data conf logs init backup
# 不过容器配置了 privileged: true 一般也不会有问题,按需更改权限
  1. 放入my.cnf
    my.cnf文件放入到 conf 目录下,my.cnf如下:
[mysqld]
port                 = 3306             # 监听端口
# 基础身份
server-id            = 1001
# 二进制日志名,默认binlog
log-bin              = mysql-bin
binlog_format        = ROW
binlog_row_image     = FULL
# 日志轮转
binlog_expire_logs_seconds = 604800   # binlog 的保留时间 7天 = 7 * 24 * 3600
max_binlog_size      = 1G               # 单个binlog文件最大大小# 启用GTID复制,更易管理故障转移
gtid_mode            = ON
enforce_gtid_consistency = ON           # 强制GTID一致性log-error = /var/log/mysql/error.log    # 错误日志路径
sync_binlog          = 1                # 每事务同步binlog(高耐久性)
innodb_flush_log_at_trx_commit = 1      # 每事务刷新InnoDB日志(高耐久性)# 安全
# require_secure_transport = ON
# ssl_ca   = /etc/mysql/ssl/ca.pem
# ssl_cert = /etc/mysql/ssl/server-cert.pem
# ssl_key  = /etc/mysql/ssl/server-key.pem# 安全设置
skip-name-resolve                       # 跳过主机名解析,提高性能
default_authentication_plugin = mysql_native_password  # 默认认证插件# 性能
innodb_buffer_pool_size = 8G            # InnoDB缓冲池大小
# innodb_buffer_pool_instances = 2
max_connections         = 1000[client]  # 客户端配置节
default-character-set = utf8mb4  # 默认字符集,支持Emoji等
  1. 重启容器
# 停止
docker compose down# 重新启动
docker compose up -d
# 查看日志是否成功启动
  1. 测试连接
    自行通过其它远程连接工具测试是否可以远程连接,如果不可以请检查防火墙以及安全组配置。也可以测试 localhost 连接看看MySQL 是否可用。不再详细赘述。
  2. 创建同步账号
# 进入 MySQL 容器,假设你的容器叫做 mysql8
docker exec -it mysql8 bash# 登录 MySQL
mysql -uroot -p # 回车然后输入密码回车# 执行以下创建同步账号
# 主库创建用户,用户名、密码、可访问ip(就是@后面的%里面的内容,可以自行更改)都可以自行配置
CREATE USER IF NOT EXISTS 'repl_user'@'%' IDENTIFIED BY 'aO20QLeXyQFBa';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;# 查看状态
SHOW MASTER STATUS;

从服务器配置

  1. 编写docker-compose.yml
services:mysql-slave:image: mysql:8.0.39container_name: data-base-platform-mysql-slave1restart: alwaysprivileged: true# 提高文件句柄限制,适合高负载ulimits:memlock: -1nofile:soft: 1000000hard: 1000000environment:TZ: Asia/ShanghaiLANG: C.UTF-8MYSQL_ROOT_PASSWORD: VThzIib5PhuzRMYSQL_DATABASE: testvolumes:- ./data:/var/lib/mysql- ./logs:/var/log/mysql- ./conf/my.cnf:/etc/mysql/my.cnf:ro- ./init:/docker-entrypoint-initdb.d:ro    # 启动时自动创建复制账号- ./backup:/backupports:- "23307:3306"networks:- commonlogging:driver: "json-file"options:max-size: "100m"max-file: "5"networks:common:driver: bridgeexternal: true
  1. 启动容器
  2. 设置目录权限
  3. 放入my.cnf
[mysqld]
port                 = 3306  # 监听端口
server-id            = 2002  # 唯一服务器ID
gtid_mode            = ON  # 启用GTID
enforce_gtid_consistency = ON  # 强制GTID一致性
read_only            = 1  # 只读模式
super_read_only      = 1  # 超级只读
sync_binlog          = 1  # 每事务同步(高耐久性)
innodb_flush_log_at_trx_commit = 1  # 每事务刷新(高耐久性)expire_logs_days     = 7  # binlog保留(即使不启用binlog,也可设)
max_binlog_size      = 1G  # 单个binlog大小innodb_buffer_pool_size = 8G  # InnoDB缓冲池大小
max_connections         = 1000  # 最大连接数# 安全设置
skip-name-resolve  # 跳过主机名解析,提高性能
default_authentication_plugin = mysql_native_password  # 默认认证插件[client]
default-character-set = utf8mb4  # 默认字符集
  1. 重启容器
  2. 测试连接
  3. 配置主从同步
# 进入 MySQL 容器,假设你的容器叫做 mysql8
docker exec -it mysql8 bash# 登录 MySQL
mysql -uroot -p # 回车然后输入密码回车
# 如果SLAVE 已运行,先停止
STOP SLAVE;# 配置主从
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.0.4',  -- 主库IPSOURCE_PORT = 23306,  -- 主容器内部端口SOURCE_USER = 'repl_user', -- 主库上设置的用户SOURCE_PASSWORD = 'aO20HQFBa', -- 主库上设置的用户密码SOURCE_AUTO_POSITION = 1;  -- 使用GTID自动定位
START SLAVE;SHOW SLAVE STATUS;  -- 检查状态

注意事项

  1. 如果启动容器出现网络的警告 WARNING: IPv4 forwarding is disabled. Networking will not work.
    这样子的话即使容器成功启动,防火墙打开,Docker 容器也是无网络的,请检查:
# 执行编辑
sudo vim /etc/sysctl.conf# 加入下面这行
net.ipv4.ip_forward = 1# 重载
sudo sysctl -p

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepResearch(上)

概述 OpenAI首先推出Deep Research Agent,深度研究智能体,简称DRA。 通过自主编排多步骤网络探索、定向检索和高阶综合,可将大量在线信息转换为分析师级别的、引用丰富的报告,将数小时的手动桌面研究压缩为几分钟。 作为新一代…

附050.Kubernetes Karmada Helm部署联邦及使用

文章目录karmada简介karmada概述karmada Helm部署Kubernetes karmada介绍基础准备Kubernetes集群获取chat包正式部署karmada使用karmada纳管集群查看memeber集群导出kubeconfig切换集群测试应用karmada简介 karmada概述 参考:附049.Kubernetes Karmada Local-up部…

必知必会:基于Transformer 的预训练语言模型如何区分文本位置(sinusoidal位置编码、原理和详细推导)

预训练位置编码 基于Transformer 的预训练语言模型如何区分文本位置? 基于 Transformer 的预训练语言模型主要通过位置编码来区分文本位置。Transformer 核心的自注意力机制本身并不考虑词的顺序,它对输入序列的处理是与位置无关的。在 query 和 key 的矩阵乘法之后…

redis key过期后会立马删除吗

Redis 的 Key 过期后不会立即被删除。Redis 采用了一种结合 ​惰性删除 (Lazy Expiration)​​ 和 ​定期删除 (Periodic Expiration)​​ 的策略来管理过期 Key 的回收,这是为了在内存管理、性能和 CPU 开销之间取得平衡。📌 Redis 过期 Key 删除的两种…

关于 React 19 的四种组件通信方法

注意:使用的是UI库是 antd-mobile1.父子级组件通信父组件单向数据流:数据从父组件流向子组件。支持多种数据类型:字符串、数字、对象、数组、函数等。只读性:子组件不能直接修改 props 中的数据。import { useState } from react …

OC-单例模式

文章目录单例模式定义特点使用原因缺点模式介绍懒汉模式同步锁实现dispatch_once饿汉模式实现总结懒汉模式优点缺点饿汉模式优点缺点单例模式 定义 单例模式,简单的说就是一个类始终只对应同一个对象,每次获取这个类的对象获得的都是同一个实例 如果一…

[论文阅读] 算法 | 抗量子+紧凑!SM3-OTS:基于国产哈希算法的一次签名新方案

抗量子紧凑!SM3-OTS:基于国产哈希算法的一次签名新方案 论文信息信息类别具体内容论文原标题SM3-OTS: 基于国密算法SM3的紧凑型后量子一次签名方案主要作者杨亚涛、殷方锐、陈亮宇、潘登研究机构1. 北京电子科技学院 电子与通信工程系(北京 1…

C语言-指针用法概述

目录 1.指针基础概念 2. 指针与数组 3. 指针作为函数参数 4. 动态内存分配 5. 指针的高级用法 6. 常见错误与注意事项 7. 指针数组 vs. 数组指针 8.总结与建议 本文主要作为指针用法的复习,会对指针的大致用法进行举例和概述。 1.指针基础概念 ​什…

Java调用Whisper和Vosk语音识别(ASR)模型,实现高效实时语音识别(附源码)

简介 语音识别(Automatic Speech Recognition, ASR)是将人类的语音信号自动转换为对应文字的技术,它使计算机能够“听懂”人说的话,是人机语音交互的核心技术,广泛应用于智能助手、语音输入、客服系统等场景。 现在我…

第3周 机器学习课堂记录

1.学习问题的分类有监督的学习分类回归无监督学习聚类密度估计:确定输入空间中的数据的分布可视化:把高位空间中的数据投影到二维或三维空间强化学习不给定最优输出的示例,而是通过试错发现最优输出2.泛化versus过度拟合背景引入:…

消息队列(MQ)高级特性深度剖析:详解RabbitMQ与Kafka

一、引言:为什么需要关注高级特性? 在现代分布式系统架构中,消息队列(Message Queue)已成为不可或缺的核心组件。初级使用消息队列可能只需几行代码就能实现基本功能,但要真正发挥其在大规模生产环境中的威…

【GPT入门】第65课 vllm指定其他卡运行的方法,解决单卡CUDA不足的问题

【GPT入门】第65课 vllm指定其他卡运行的方法,解决单卡CUDA不足的问题1.原理说明:2.实践1.原理 要将 vllm 部署在第二张 GPU 卡上(设备编号为 1),只需在命令前添加 CUDA_VISIBLE_DE…

Spring Boot Actuator自定义指标与监控实践指南

Spring Boot Actuator自定义指标与监控实践指南 本篇文章以生产环境实战经验为主线,结合某电商系统的业务场景,讲解如何在Spring Boot Actuator中添加并暴露自定义指标,并使用Prometheus和Grafana进行完整的监控与告警配置。 一、业务场景描述…

Vue报错<template v-for=“option in cardOptions“ :key=“option.value“>

在Vue项目中遇到报错&#xff0c;原因是模板中使用了<template>标签内的v-for指令&#xff0c;而当前Vue版本不支持此用法。解决方案是移除<template>标签&#xff0c;直接在<el-option>上使用v-for。同时优化计算属性cardOptions&#xff0c;使其能够兼容历…

人工智能学习:Transformer结构中的规范化层(层归一化)

Transformer结构中的规范化层(层归一化) 一、规范化层(层归一化)介绍 概念 层归一化(Layer Normalization) 是一种用于提高深度神经网络训练稳定性和加速收敛的技术,广泛应用于现代深度学习模型中,尤其是在Transformer等序列建模网络中。它通过对每一层的输出进行归一化…

盼之代售 最新版 decode__1174

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 部分python代码 cp1 execj…

Transformer系列 | Pytorch复现Transformer

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、Transformer和Seq2Seq 在之前的博客中我们学习了Seq2Seq(深度学习系列 | Seq2Seq端到端翻译模型)&#xff0c;知晓了Attention为RNN带来的优点。那么有没有…

【MySQL】常用SQL语句

介绍常用的DDL语句、DML语句基本语法分号结尾使用空格和缩进不区分大小写--或#注释单行内容 /*注释多行内容*/DDL数据定义语句&#xff1a;定义数据库、表、字段一、操作库-- 创建库create database db1;-- 创建库是否存在&#xff0c;不存在则创建create database if not exi…

云手机就是虚拟机吗?

云手机并非等同于虚拟机&#xff0c;尽管二者存在一定相似性&#xff0c;但有着诸多区别&#xff0c;以下从多个方面来分析&#xff1a;云手机是一种基于云计算技术&#xff0c;将云端服务器虚拟化为手机设备&#xff0c;用户能通过网络远程操控的虚拟手机服务&#xff0c;它从…

准确--Nginx 1.28.0 安装与配置流程

Nginx 1.28.0 安装与配置流程 1. 下载与解压 cd ~ wget http://nginx.org/download/nginx-1.28.0.tar.gz tar -zxvf nginx-1.28.0.tar.gz cd nginx-1.28.02. 配置编译参数 ./configure \--prefix/home/ynnewweb/nginx \--with-http_ssl_module \--with-http_gzip_static_module…