CentOS Docker搭建Mysql5.7集群

MySQL Replication

        MySQL提供了Replication功能,可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库(master),后者则被称从库(slave)。MySQL复制过程采用异步方式,但延时非常小,秒级同步。

同步复制数据基本原理

1.在主库上发生的数据变化记录到二进制日志Binlog
2.从库的IO线程将主库的Binlog复制到自己的中继日志Relay log
3.从库的SQL线程通过读取、重放中继日志实现数据复制

mysql

        MySQL的复制有三种模式:Statement Level、Row Level、Mixed Level。复制级别的不同,会导致Master端二进制日志文件的生成形式的不同。

环境

环境版本
Docker26.1.4
CentOS7
Mysql5.7

步骤

一、创建容器

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-cluster/mysql-master1/log:/var/log/mysql \
-v /mydata/mysql-cluster/mysql-master1/data:/var/lib/mysql \
-v /mydata/mysql-cluster/mysql-master1/conf:/etc/mysql \
-v /mydata/mysql-cluster/mysql-master1/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7docker run -p 3317:3306 --name mysql-master2 \
-v /mydata/mysql-cluster/mysql-master2/log:/var/log/mysql \
-v /mydata/mysql-cluster/mysql-master2/data:/var/lib/mysql \
-v /mydata/mysql-cluster/mysql-master2/conf:/etc/mysql \
-v /mydata/mysql-cluster/mysql-master2/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7docker run -p 3327:3306 --name mysql-slave1 \
-v /mydata/mysql-cluster/mysql-slave1/log:/var/log/mysql \
-v /mydata/mysql-cluster/mysql-slave1/data:/var/lib/mysql \
-v /mydata/mysql-cluster/mysql-slave1/conf:/etc/mysql \
-v /mydata/mysql-cluster/mysql-slave1/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7docker run -p 3337:3306 --name mysql-slave2 \
-v /mydata/mysql-cluster/mysql-slave2/log:/var/log/mysql \
-v /mydata/mysql-cluster/mysql-slave2/data:/var/lib/mysql \
-v /mydata/mysql-cluster/mysql-slave2/conf:/etc/mysql \
-v /mydata/mysql-cluster/mysql-slave2/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

二、创建配置文件

分别创建配置文件并写入对应的配置:

master配置

修改mydata/mysql-cluster/mysql-master1/conf/my.cnf,把以下配置写入到my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[mysqld]
server_id=1
log-bin=mysql-bin
read-only=0binlog-do-db=adminreplicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schemabinlog_cache_size=1M  
binlog_format=mixed  
log-slave-updates 
expire_logs_days=7  
slave_skip_errors=1062

slave配置

修改mydata/mysql-cluster/mysql-slave1/conf/my.cnf,把以下配置写入到my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8' 
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolveserver_id=4
log-bin=mysql-bin
read-only=1
binlog-do-db=adminreplicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

*注意

每个配置文件server_id必须唯一

若不配置读写分离read-only无需设置

log-bin=mysql-bin:mysql5.7默认不开启bin_log日志,需要此配置开启

binlog-do-db:指定同步的数据库名

replicate-ignore-db:指定不同步的数据库名

三、启动容器

docker start mysql-master mysql-master2 mysql-slave1 mysql-slave2

四、主从关联

配置master

1.进入容器

docker exec -it mysql-master /bin/bash

2.登录

mysql -uroot -proot

3.查看是否开启远程访问(可选)

mysql> select user,host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.01 sec)

如果没有'root'@'%'记录就执行

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

4.配置权限

grant replication slave on *.* to 'backup'@'%' identified by 'root';

5.查看状态

File和Position这两个参数后面会用到

mysql> show master status\G;
*************************** 1. row ***************************File: mysql-bin.000001Position: 439Binlog_Do_DB: adminBinlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

 配置Slave

重复配置master的1、2、3(可选)步骤

4.配置主从复制

change master to master_host='192.168.56.11',master_user='backup',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=439,master_port=3307;

‌        change master命令用于配置和改变Slave服务器用于连接Master服务器的参数,以便Slave服务器读取Master服务器的binlog及Slave服务器的relay log。‌ 这个命令同时更新master.info及relay-log.info信息。在执行该命令之前,如果Slave服务器上的IO线程和SQL线程已经启动,需要先停止这些线程(执行stop slave命令)。

change master命令的参数‌包括但不限于:

  • MASTER_HOST‌ 和 ‌MASTER_PORT‌:指定Master服务器的IP地址和端口号。
  • MASTER_USER‌ 和 ‌MASTER_PASSWORD‌:用于认证的Master服务器用户名和密码。
  • MASTER_LOG_FILE‌ 和 ‌MASTER_LOG_POS‌:指定从哪个binlog文件以及从该文件的哪个位置开始复制数据。
  • MASTER_CONNECT_RETRY‌、‌MASTER_RETRY_COUNT‌、‌MASTER_DELAY‌、‌MASTER_HEARTBEAT_PERIOD‌ 等:这些参数用于控制连接重试、延迟和心跳等行为。
  • MASTER_AUTO_POSITION‌:设置为1时,Slave服务器可以自动确定应该从Master服务器的哪个binlog文件和位置开始复制数据。
  • RELAY_LOG_FILE‌ 和 ‌RELAY_LOG_POS‌:如果设置了,这些参数用于指定中继日志的文件名和位置。
  • MASTER_SSL‌ 和相关SSL参数:用于配置SSL加密连接。

5.开启同步

start slave;

如果Slave_IO_RunningSlave_SQL_Running显示为Yes,开启成功,如果为Connecting说明出现错误,排查网络是否畅通、mysql配置文件、防火墙、master账号的连接权限、change master参数

 master执行记录

[root@10 conf]# docker exec -it mysql-master /bin/bash
root@1275b7c6c4d6:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36-log MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select user,host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
4 rows in set (0.01 sec)mysql> grant replication slave on *.* to 'backup'@'%' identified by 'root';
Query OK, 0 rows affected, 1 warning (0.02 sec)mysql> show master status\G;
*************************** 1. row ***************************File: mysql-bin.000001Position: 439Binlog_Do_DB: adminBinlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

slave执行记录

mysql> change master to master_host='192.168.56.11',master_user='backup',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=439,master_port=3307;
Query OK, 0 rows affected, 2 warnings (0.11 sec)mysql> start slave;
Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.56.11Master_User: backupMaster_Port: 3307Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 439Relay_Log_File: 9cd2f3cd957f-relay-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: mysql,sys,information_schema,performance_schemaReplicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 439Relay_Log_Space: 534Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 2Master_UUID: 534ec559-61e3-11ef-a009-0242ac110009Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 
1 row in set (0.00 sec)

五、双主关联

两个master互为主从

master1

mysql> change master to master_host='192.168.56.11',master_user='backup',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=439,master_port=3317;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

master2

mysql> change master to master_host='192.168.56.11',master_user='backup',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=369,master_port=3307;
Query OK, 0 rows affected, 2 warnings (0.12 sec)

至此,Msql集群搭建完成

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

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

相关文章

初始redis:Zset有序集合

Set作为集合,有两个特点:唯一且无序。 Zset是有序集合,在保证唯一的情况下,是根据什么来排序的呢?排序的规则是什么? Zset中的member引入了一个属性,分数(score)&#…

立式报工台助力MES系统打造智能硬件解决方案

信息化与自动化的深度结合,使得企业在生产效率、质量控制以及资源管理等方面得以大幅提升。制造执行系统MES作为连接企业管理层与生产现场的重要桥梁,正在愈发得到重视。为了进一步强化MES系统的功能与应用,立式报工台作为一种新兴的智能硬件…

适用于 Windows 10 的最佳数据恢复免费软件是什么?

有没有适用于 Windows 10 的真正数据恢复免费软件?这篇文章将讨论这个话题,并分享什么是适用于 Windows 10/11/8.1/8/7/Vista/XP 的最佳数据恢复工具。 有没有适用于 Windows 10 的真正免费的数据恢复软件? 丢失重要数据,无论是由…

RISC-V vector(1) --- vector的引入与register说明

Vector相较于SIMD的优势 这两种实现方案,都是为了实现数据级并行性(存在大量的数据可供程序同时计算); SIMD(Single Instruction Multiple Data) SIMD是将数据宽度和操作类型,都放在了指令中&a…

一道xss题目--intigriti-0422-XSS-Challenge-Write-up

目录 进入挑战 js代码 代码分析 构造payload ​编辑 结果 进入挑战 Intigriti April Challenge题目地址 打开题目后&#xff0c;找到对应页面的js代码&#xff0c;寻找一下我们用户可控的点 js代码 <!DOCTYPE html> <html lang"en"><head> …

[GKCTF 2021]excel 骚操作1

使用010editor打开发现zip头&#xff0c;改后缀名xlsx为zip&#xff0c;解压&#xff0c;在D:\python\flag (1)\xl\worksheets目录下有个sheet1.xml就是ecxel的sheet1的主要样式style 看到很多c r"B2" s"1&#xff0c;只是单元格数据不同而已 &#xff0c;还有的…

Awesome-LLMs-for-Video-Understanding - 基于大型语言模型的视频理解研究

Awesome-LLMs-for-Video-Understanding 是 基于大型语言模型的视频理解研究 github : https://github.com/yunlong10/Awesome-LLMs-for-Video-Understandingpaper&#xff1a;Video Understanding with Large Language Models: A Survey https://arxiv.org/pdf/2312.17432 视频…

C++20中的约束与概念

类模板、函数模板和非模板函数(通常是类模板的成员)可能与约束(constraint)相关联&#xff0c;该约束指定对模板参数的要求(requirements)&#xff0c;可用于选择最合适的函数重载和模板特化。约束是使用模板时需要通过模板参数满足的条件或要求。这些要求的命名集合称为概念(c…

Hadoop 分布式集群搭建

HDFS分布式集群搭建 一、部署规划1.1 进程规划1.2 软件规划1.3 用户规划1.4 目录规划 二、 搭建HDFS 分布式集群2.1 HDFS 集群配置2.1.1 下载安装 Hadoop2.1.2 修改 hadoop-env.sh 配置文件2.1.3 修改 core-site.xml 配置文件2.1.4 修改 hdfs-site.xml 配置文件2.1.5 修改 slav…

程序员:全栈的痛你不知道

上周一个同事直接对我开喷&#xff0c;骂我无能&#xff0c;说&#xff1a;“你怎么一个人就搞不定所有系统呢&#xff1f;”&#xff0c;我半支烟纵横IT江湖14余年&#xff0c;还是第一次被人这么嫌弃。 事情缘由 某公司的业务线特别多&#xff0c;有个业务线前后端项目共计…

ComfyUI IPAdapter plus的模型应该怎么装-免费版-2024.8.25

&#x1f386;背景 ipadapter相关的节点大家应该都不陌生&#xff0c;具体是做什么的就不详细介绍了&#xff0c;但是还是有很多新入门的朋友不太了解这个节点相关的这一堆模型到底应该怎么安装。这里就借着官方节点的介绍来大概讲下这个话题。 涉及到的节点源地址&#xff1…

【Qt】Qt系统 | Qt事件| 鼠标事件

文章目录 鼠标事件鼠标点击事件鼠标释放事件鼠标双击事件鼠标移动事件 滚轮事件 在 Qt 中&#xff0c;鼠标事件是用 QMouseEvent 实现的。当在窗口中按下鼠标或者移动鼠标时&#xff0c;都会产生鼠标事件 鼠标事件 鼠标点击事件 鼠标按下时通过 虚函数 mousePressEvent() 来…

线程安全是什么问题?如何引起?死锁是啥?如何解决?

目录 一、什么是线程不安全&#xff1f; 二、如何引起的线程安全&#xff1f;怎么解决&#xff1f; 1&#xff09;CPU调度执行是随机的&#xff0c;抢占式执行&#xff08;根本原因&#xff0c;硬件层面咱们无法干预&#xff09; 2&#xff09;多个线程&#xff0c;对同一变…

【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树

目录 1- 思路递归 2- 实现⭐105. 从前序与中序遍历序列构造二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;105. 从前序与中序遍历序列构造二叉树 1- 思路 递归 前序&#xff1a;中左右中序&#xff1a;左中右 让前序的第一个元素作为中序的分割点 分割思路 1- 递归…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…

使用gitee存储项目

gitee地址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台 创建gitee远程仓库 将远程仓库内容拉取到本地仓库 复制下面这个地址 通过小乌龟便捷推送拉取代码&#xff1a;https://blog.csdn.net/m0_65520060/article/details/140091437

基于51单片机的百叶窗proteus仿真

地址&#xff1a;https://pan.baidu.com/s/19M6jeTIHJcyDBGNx4H9nTA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是RabbitMQ Server的客…

快手怎么免费的去掉视频水印?分享这三个工具给你

​ 我们经常会遇到想要保存的视频带有水印&#xff0c;这不仅影响美观&#xff0c;也不利于分享。为了解决这个问题&#xff0c;我将分享三个免费去除视频水印的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受无干扰的视频体验。 工具一&#xff1a;奈斯水印助手(小程序…

数码管进阶设计验证

前言 随着数字电路和嵌入式系统的广泛应用&#xff0c;数码管作为一种常见的显示设备&#xff0c;在各种电子产品中扮演着重要角色。数码管以其结构简单、显示清晰和成本低廉的特点&#xff0c;广泛应用于计数器、时钟、测量仪器等领域。然而&#xff0c;传统的数码管设计通常仅…