Mysql5.7 基于Docker搭建主从复制集群

news2025/1/18 7:25:37

基础

参考:mysql5.7-Docker-安装-备份

拉取镜像

docker pull mysql:5.7

创建目录

mkdir /home/liangshijie/mysql-docker-file/conf
mkdir /home/liangshijie/mysql-docker-file/logs
mkdir /home/liangshijie/mysql-docker-file/data

创建配置文件

cd /home/liangshijie/mysql-docker-file/conf

vim my.cnf

[mysqld]
########################### 基础配置 ####################################
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000


[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

启动一个Mysql

通过下面的命令,可以启动一个mysql,后面默认使用此命令创建主、从节点。

docker run -p 3306:3306 --name mysql -v /home/liangshijie/mysql-docker-file/conf:/etc/mysql/conf.d -v /home/liangshijie/mysql-docker-file/logs:/var/log/mysql -v /home/liangshijie/mysql-docker-file/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

# MYSQL_ROOT_PASSWORD 用于指定默认密码

基于 Pos模式的主从复制

主节点

配置文件

[mysqld]
########################### 基础配置 ####################################
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
########################### 同步配置 ####################################
# binlog刷盘策略
sync_binlog=1
# 需要备份的数据库
binlog-do-db=study
# 不需要备份的数据库
binlog-ignore-db=mysql
# 启动二进制文件
log-bin=mysql-bin
# 服务器ID
server-id=132



[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

重启服务

docker restart xxx

创建从节点用的账号

GRANT REPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机IP' identified by '从机MySQL密码';

# 例如:
grant replication slave on *.* to 'repl'@'192.168.204.%' identified by 'root';

# 刷新
flush privileges;

查看&记录主节点状态信息

这里先记一下FilePosition信息。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      603 | study        | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

多次反复启动容器可能File是mysql-bin.000002、3。我遇到一个坑就是从节点在进行同步的时候写mysql-bin.000002、3等,是无法同步的,还是要写mysql-bin.000001才行。

从节点

配置文件

[mysqld]
########################### 基础配置 ####################################
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
########################### 同步配置 ####################################
server-id=133


[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

重启服务

# 启动、重启现有的从节点容器
docker start | restart xxx
# or 运行一个新容器
docker run -p 3306:3306 --name mysql -v /home/liangshijie/mysql-docker-file/conf:/etc/mysql/conf.d -v /home/liangshijie/mysql-docker-file/logs:/var/log/mysql -v /home/liangshijie/mysql-docker-file/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

进行同步

将上面记录的FilePosition信息填写下去:

# 停止同步
stop slave;
# 配置账户和同步信息
change master to
master_host='192.168.204.132',
master_port=3306,
master_user='repl',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=154,
MASTER_AUTO_POSITION=0;


# master_log_file 一般是mysql-bin.000001
# master_log_pos  可以写1

# 启动
start slave;


检查同步情况

show slave status
关键结果:

在这里插入图片描述

测试

现在添加数据试试看。

可能的问题

主从延迟;
数据一致性:同步数据丢失问题;
主节点出问题之后,不好进行故障转移;
。。。

基于GTID模式的主从复制


是什么?

GTID:全局事务ID。
从5.6.5开始的一种基于GTID的复制方式。GTID 保证主节点提交的事务在从集群中可以生成唯一的ID。在主、从节点内,GTID是唯一的。
从节点执行事务时,事务的ID是从收到的binlog找到并设置的。执行前先对比自身的binlog日志中的GTID,可以防止执行重复的事务。
GTID模式强化了数据一致性,提供更方便的故障转移能力,提高容错能力。
优点:

  • 数据安全性更好、故障转移更简单,更容易搭建主从复制。
  • 通过GTID的实例ID快速定位事务最初谁提交的。
  • 更方便集群迁移。

限制:

  • 需要注意的是,表存储引擎必须一致。
  • 同一个复制组必须统一开启、关闭GTID。
  • 不允许SQL语句同时更新一个事务引擎表和非事务引擎表。
  • 不支持如下语句:
    • create table….select
    • create temporary table
    • drop temporary table

GTID 主从复制原理

在这里插入图片描述

  1. 更新数据时,在事务开启前生成GTID到binlog。
  2. 从节点IO线程将带有GTID的binlog数据写入relaylog。
  3. 从节点 SQL线程 读取GITD的值,并设置下一个要执行的GTID值 GTID=xxx。然后对比自己Binlog,判断事务是否执行过了:
    1. 执行过就忽略;
    2. 每执行过就执行,并记录到自己的binlog。

GTID解决了什么问题?

更方便的进行故障转移。

主节点

配置文件

[mysqld]
########################### 基础配置 ####################################
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
########################### 同步配置 ####################################
# binlog刷盘策略
sync_binlog=1
# 需要备份的数据库
binlog-do-db=study
# 不需要备份的数据库
binlog-ignore-db=mysql
# 启动二进制文件
log-bin=mysql-bin
# 服务器ID
server-id=132
########################### 使用GTID模式 #################################
gtid_mode=on
enforce_gtid_consistency=on
# 强烈建议,其他格式可能造成数据不一致
binlog_format=row
# 避免启动后还是使用老的复制协议
skip_slave_start=1


[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

创建从节点用的账户(选做)

# 如果没有创建有账户则先在主节点上创建一个
GRANT REPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机IP' identified by '从机MySQL密码';

# 例如:
grant replication slave on *.* to 'repl'@'192.168.204.%' identified by 'root';

# 刷新
flush privileges;

从节点

配置文件

[mysqld]
########################### 基础配置 ####################################
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
########################### 同步配置 ####################################
server-id=133
########################### 使用GTID模式 ################################
gtid_mode=on
enforce_gtid_consistency=on
# 强烈建议,其他格式可能造成数据不一致
binlog_format=row
# 避免启动后还是使用老的复制协议
skip_slave_start=1

# 做级联复制的时候,再开启。允许下端接入slave
#log_slave_updates=1

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

验证是否启用了GTID

mysql> show variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name                    | Value                                    |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                       |
| enforce_gtid_consistency         | ON                                       |
| gtid_executed_compression_period | 1000                                     |
| gtid_mode                        | ON                                       |
| gtid_next                        | AUTOMATIC                                |
| gtid_owned                       |                                          |
| gtid_purged                      | 4750c043-6bdb-11ed-a1ec-0242ac110003:1-6 |
| session_track_gtids              | OFF                                      |
+----------------------------------+------------------------------------------+

开启同步

# 停止从节点
stop slave;
# 切换主节点配置,比基于pos简单不少
change master to
master_host='192.168.204.132',
master_port=3306,
master_user='repl',
master_password='root',
master_auto_position=1;
# 启动从节点
start slave;
show slave status

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

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

相关文章

GEE Python本地快速下载GEE数据(比网页版保存到网盘再下载快几十倍,尤其是在下载几十年的长时间系列数据时,速度提升更加明显)

前言 可根据研究区直接裁剪数据以及进行一些计算处理后再下载,GEE成为了大家下载数据的重要途径,然而直接通过官网网页将数据先保存到网盘再下载的下载方法速度太慢,新号速度还好,越用速度越来越慢,本文提供了一种直接…

IBM MQ通道接收端绑定步骤

不同类型的绑定 IBM MQ 支持应用程序可以连接的两种方式: 1.本地绑定:这是当应用程序和队列管理器在同一个操作映像上时。 CHLAUTH 与此类应用程序连接无关。 2. 客户端绑定:这是应用程序和队列管理器使用网络进行通信的时候。 应用程序和队列…

从Opencv之图像直方图源码,探讨高性能计算设计思想

前言 纸上得来终觉浅,绝知此事要躬行。学会算法的理论很重要,但是把理论高效的实现也是需要一点点练习的。 图像直方图的理论很简单,就是把一个图像的像素区间划分为几个子区间,然后统计图像中的像素包含在子区间内的个数。这里&a…

什么是网络变压器,它是干什么用的?作用/参数表/价格及型号体系有哪些?怎么测量网络变压器好坏

什么是网络变压器? 网络变压器是在以太网网络传输设备中,主板上芯片PHY与网口RJ45之间的一个黑黑的小方块,里面的结构是磁环及铜线组成,这个小方块就是我们俗称的网络变压器 有的变压器中心抽头接到地。而接电源时,电…

深度学习入门(五十七)循环神经网络——循环神经网络从零开始实现

深度学习入门(五十七)循环神经网络——循环神经网络从零开始实现前言循环神经网络——循环神经网络从零开始实现教材1 独热编码(one-hot)2 初始化模型参数3 循环神经网络模型4 预测5 梯度裁剪6 训练7 小结前言 核心内容来自博客链接1博客连接2希望大家多…

【Hack The Box】linux练习-- Pandora

HTB 学习笔记 【Hack The Box】linux练习-- Pandora 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 &#x1f…

TensorFlow之文本分类算法-4

1 前言 2 收集数据 3 探索数据 4 选择模型 5 准备数据 6 模型-构建训练评估 机器学习主要包括模型构建、模型训练、模型评估,在选择模型章节中已经对如何根据S/W的比率进行模型的选择,其包括n-gram模型或者序列模型,本章节内容主要描述…

LeetCode-813-最大平均值和的分组

1、动态规划法 我们可以利用数组dp[i][j]dp[i][j]dp[i][j]来表示我们将数组中区间[0,i−1][0,i-1][0,i−1]的元素分为jjj组的平均值的总和。因此我们可以得到状态转化方程如下:{dp[i][j]∑r0i−1nums[r]i,j1dp[i][j]maxx≥j−1(dp[x][j−1]∑rxi−1nums[r]i−x),j&…

计算机五大部件是指什么

计算机五大部件: 计算机硬件系统由运算器、控制器、存储器(内外存储器)、输入设备和输出设备五部分组成。 1、控制器:控制器就是一个系统中枢,控制计算机如何运行、运转的基本单元。 每一个运算器都需一个单独的控制…

D-016 JTAG硬件电路设计

JTAG硬件电路设计1 简介1.1 JTAG分类1.2 ARM调试器2 设计要点3 电路实战3.1 Xilinx3.2 ALTERA ------USB blaster1 简介 JTAG(Join Test Action Group)的中文名称为联合测试工作组,是一种国际标准测试协议,主要用于芯片内部测试:验证设计和P…

Ubuntu16.04 完整版 Gym 安装及说明

Ubuntu16.04 完整版 Gym 安装及说明1. 安装前言2. Gym 开发环境说明3. 完整版 Gym 的安装3.1 Anaconda 创建虚拟环境3.2 安装 gym[box2d]3.2.1 采用官方 GitHub 教程进行安装的报错及解决方案3.2.2 采用 Anaconda 进行安装3.2.3 测试能否成功运行 LunarLander-v2 环境3.3 安装 …

【一文秒懂——YAML配置文件】

目录 1. YAML配置文件 2. 实例 2.1 将原application.properties改为application.yml: 2.2 将原application-dev.properties改为application-dev.yml: 1. YAML配置文件 在Spring Boot项目中,还可以使用YAML配置文件,这是一种使…

一文搞懂漏洞严重程度分析

漏洞的级别定义主要从两个维度进行判断; 1、可利用性 2、影响性 可利用性指标 可利用性指标组刻画脆弱性组件(即包含漏洞的事物)的特征,反映漏洞利用的难易程度和技术要求等。可利用性指标组包含四个指标,分别是攻击…

最新阿里云GPU服务器租用配置费用价格表出炉(多配置报价)

阿里云GPU服务器优惠3折GPU云服务器vgn6i优惠价469.46元/月起,GPU云服务器gn6i和GPU云服务器gn6v均有活动,NVIDIA T4及V100均有活动,主机教程网 来详细说下阿里云GPU云服务器收费标准价格表,再来说说GPU云服务器计费模式&#xff…

Python学习笔记(十八)——Pandas进阶

文章主要内容文件操作: • 文件读取: read_csv(csv),read_table(表格),read_excl(excel) • 文件写入:to_csv, to_excel 数据清洗: • 处理缺失值:isnull(识别), dropna (过滤), fillna(填充) • 数据转换:drop_duplic…

MVCC多版本并发控制

目录 1、数据库并发场景 2、当前读和快照读 3、MVCC的隔离级别 4、实现原理 4.1、隐藏字段 ​​​​​​​4.2、Undo_log(版本链) 4.3、Read View(读视图) 4.4、RC、RR隔离级别下的快照读有什么区别 MVCC,多版…

文献认证!Kamiya艾美捷抗酒石酸酸性磷酸酶TRAP染色试剂盒

人类及动物体骨组织不断地进行着重建,骨重建过程包括骨的分解吸收与新骨的形成。破骨细胞(Osteoclast,OC)负责骨分解与吸收,而成骨细胞(osteoblast,OB)负责新骨形成。破骨细胞贴附在…

【WAX链游】发布一个免费开源的MiningNetwork合约脚本BTK

前言 挖矿网络(Mining Network)官网: https://miningnetwork.io 挖矿网络(Mining Network)合约脚本:https://github.com/encoderlee/MiningNetworkBot 回顾之前我们推出过的免费开源链游脚本&#xff1a…

【React技术】JSX在企业级项目的运用and一个元素渲染demo

JSX 它被称为JSX,是JavaScript的语法扩展。我们建议在React中使用JSX。JSX可以很好地描述UI应该呈现它应该具有的基本交互形式。JSX可能会让人想起模板语言,但它具有JavaScript的所有功能。 const element = <h1>Hello, world!</h1>;React认为渲染逻辑与其他UI…

红眼睛红外成像微型成像仪快速刷新与动态显示温度测量

默认参数下&#xff0c;设备的温度测量和数据输出频率为每秒 4Hz&#xff0c;这一输出速率基本可以保证所有计 算机和手机都能够正常显示实时画面&#xff0c;但导致的问题是实时画面有卡顿的感觉。数据的处理速度与 计算机和手机的配置高低有直接关系&#xff0c;下面仅以…