MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人!

今天分享一期 MySQL集群方案:主从集群 也是最常用的一种

CSDN 成就一亿技术人!


目录

使用主从复制的原因(优点)

主从复制的过程(原理)

了解两大线程( I/O 和 SQL)

核心原理

1.主从复制实验

1.实验环境

2.配置主服务器(master1)

开启二进制文件

创建用户

查看状态

查看端口号

3.从服务器(master2)

从复制主配置(核心命令)

启动复制

测试


使用主从复制的原因(优点)

主要原因包括提高性能、实现高可用性、数据备份和灾难恢复。

  1. 读写分离: 主从复制允许在主服务器上执行写操作,而在从服务器上执行读操作。这可以分担主服务器的负载,提高整体性能。从服务器可以分担读查询、报表生成等任务,减轻主服务器的压力。

  2. 高可用性: 当主服务器发生故障时,从服务器可以接管服务,从而提供高可用性。通过将从服务器配置为备份,可以确保在主服务器不可用时,系统仍然能够继续提供服务。

  3. 数据备份: 从服务器可以用作实时备份,以便在主服务器发生数据损坏或误操作时进行恢复。备份可以从从服务器上进行,而不会对主服务器的性能产生负面影响。

  4. 灾难恢复: 在发生灾难性事件(如硬件故障、数据中心故障等)时,从服务器可以用作快速恢复数据的副本。通过配置合适的地理位置分布,可以提高系统的灾难恢复能力。

  5. 数据分布: 主从复制还允许在不同地理位置的服务器上维护相同的数据副本。这对于全球分布的应用程序或具有多个地理位置的用户群体非常有用,可以提高用户访问数据的速度。

主从复制的过程(原理)

了解两大线程( I/O 和 SQL)
  1. I/O线程:

    • 目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。
    • 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。
    • 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin  server-id
  2. SQL线程:

    • 目的:SQL线程主要负责执行从I/O线程接收到的二进制日志事件,将这些变更应用到从服务器上的数据库。
    • 功能: 从服务器上的SQL线程会读取中继日志中的事件,并在从服务器上执行相应的SQL语句,以确保从服务器的数据与主服务器保持同步。
    • 配置: 在从服务器上,你需要配置一些参数,如、和来启用二进制日志、指定服务器ID和指定中继日志。log-bin server-id relay-log
核心原理

就是主从复制的工作原理

了解以下部分就能对本章节 易如指掌

  1. 启用二进制日志: 主服务器在配置文件中启用二进制日志,记录所有对数据库的更改。这通过在主服务器的配置文件中设置log-bin选项来实现。二进制日志包含了对数据的所有修改操作,例如插入、更新和删除。

  2. 生成二进制日志事件: 当在主服务器上执行任何更改时,MySQL会将这些更改记录为二进制日志事件。每个事件都有一个唯一的标识,包括操作类型、受影响的表和相应的数据。

  3. 从服务器连接主服务器: 从服务器通过MySQL的复制线程连接到主服务器。在主从复制设置中,从服务器充当复制的被动一方,而主服务器则是主动一方。

  4. 获取主服务器的二进制日志信息: 从服务器向主服务器发送请求,获取主服务器上的二进制日志信息。从服务器要求主服务器提供自己的位置(File和Position),这将作为复制的起始点。

  5. 主服务器发送二进制日志: 主服务器从请求的起始点开始发送二进制日志信息给从服务器。这些二进制日志文件包含了在主服务器上执行的所有更改操作。

  6. 从服务器应用二进制日志: 从服务器接收到二进制日志后,将这些日志逐个应用到自己的数据库中。这样,从服务器的数据会与主服务器保持同步。

  7. 维护复制位置: 从服务器会定期记录自己复制的位置,以便在重新连接时从正确的位置开始复制。这通常由MySQL的relay-logrelay-log-index文件来管理。

  8. 处理主从同步延迟: 在一些情况下,由于网络延迟、从服务器负载等原因,可能会导致主从同步延迟。可以通过适当的调整和优化来降低同步延迟,确保从服务器的数据尽快与主服务器同步。

1.主从复制实验

通过以下实验深刻的理解

1.实验环境

注意事项:尽量使用同一版本的mysql 

实验环境两个安装mysql5.7的CentOs7

每台的配置:关闭防火墙 selinux 配置静态ip 域名解析
第一台:master1        192.168.180.180
第二台:master2        192.168.180.181

域名解析:
vim /etc/hosts
加入
192.168.180.180 master1
192.168.180.181 master2

2.配置主服务器(master1)
开启二进制文件
vim /etc/my.cnf
log-bin=master-bin
server-id=1

systemctl restart mysqld

注释:

log-bin=master-bin:这一行配置启用二进制日志,并设置了二进制日志的文件名为 "master-bin"。二进制日志用于记录对数据库执行的更改操作,这对于主从复制是必要的。

server-id=1:这一行配置为服务器分配唯一的ID,即服务器ID。在主从复制中,每个参与复制的MySQL服务器都必须有唯一的服务器ID,以便在复制时进行标识。在这里,服务器ID被设置为1。

创建用户
grant replication slave on *.* to 'rep'@'192.168.180.%' identified by 'Sunshao-123';

rep是用户名称
@后边跟上服务器网段

查看状态

用于从服务器

  MASTER_LOG_FILE='二进制文件',
  MASTER_LOG_POS=154;

来使用

show master status;

File:当前二进制日志文件的名称。
Position:二进制日志文件中的位置。
Binlog_Do_DB:要复制的数据库(如果指定)。
Binlog_Ignore_DB:复制期间要忽略的数据库(如果指定)。
查看端口号
SHOW VARIABLES LIKE 'port';

3.从服务器(master2)

vim /etc/my.cnf
server-id=2        *******标识符改为2

systemctl restart mysqld
从复制主配置(核心命令)
CHANGE MASTER TO
  MASTER_HOST='主服务器Ip或主机名',
  MASTER_PORT=数据库的端口号(默认3306),
  MASTER_USER='创建的用户',
  MASTER_PASSWORD='用户密码',
  MASTER_LOG_FILE='二进制文件',
  MASTER_LOG_POS=154;

 主服务器show master status;

查看出的参数写入以下两个选项当中

MASTER_LOG_FILE='二进制文件',‘

’MASTER_LOG_POS=154;

端口号也是一样

启动复制
START SLAVE;

查看状态

show slave status \G;

测试

主服务器创建一个库表并且插入数据

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed

mysql> insert into t1 values(1111),(2222);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+
| id   |
+------+
| 1111 |
| 2222 |
+------+
2 rows in set (0.00 sec)

从服务器测试

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)


mysql> use test;
Database changed
mysql> show tables
    -> ;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> select * from t1;
+------+
| id   |
+------+
| 1111 |
| 2222 |
+------+
2 rows in set (0.00 sec)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day 19 (进阶)

一 首先 昨日内容回顾 思维导图:(日更附 养成习惯 加油) 补充Linux思维导图 衔接一下之前学过的 二 课堂知识提炼 练习:统计文件行数 想查看是否正确就用 grep -c “文件名” 来看 会输出结果 练习:把file.c里面的…

数据包跟踪器-实施 DHCPv4

实验大纲 第 1 部分:把路由器配置为 DHCP 服务器 步骤 1:配置要排除在外的 IPv4 地址 步骤 2:在 R2 上 给 R1 LAN 创建一个 DHCP 池 步骤 3:在 R2 上 给 R3 LAN 创建一个 DHCP 池 第 2 部分:配置 DHCP 中继 步骤…

爱上算法:每日算法(24-2月4号)

🌟坚持每日刷算法,😃将其变为习惯🤛让我们一起坚持吧💪 文章目录 [232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/)思路CodeJavaC 复杂度 [225. 用队列实现栈](https://leetcode.cn/…

Maven配置笔记

1、下载Maven 在Maven的官网即可下载,点击访问Apache Maven。 2、配置环境变量 chcp 65001 echo off set mvnhomeE:\apache-maven-3.8.4 rem LPY echo. echo ************************************************************ echo * …

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 ,今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的,那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是,张三家…

ConcurrentHashMap的使用以及源码分析

一、ConcurrentHashMap? 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CASsynchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现ha…

Linux实验记录:使用BIND提供域名解析服务

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 为了降低用户访问网络资源的门槛&am…

解决IntellIJ Idea内存不足

突然有一天我在IDEA打开两个项目时,发生了报错,说我内存不足,我这电脑内存16G怎么会内存不足。下面是我的解决方案。 IntelliJ IDEA 报告内存不足的原因通常与以下几个因素有关: 项目规模较大:如果您正在开发的项目非…

【Python之Git使用教程001】Git简介与安装

一、简介 Git其实就是一个分布式版本的控制系统,在分布式版本的控制系统,大家都拥有一个完整的版本库,不需要联网也可以提交修改,所以中心服务器就显得不那么重要。由于大家都拥有一个完整的版本库,所有只需要把各自的…

假期刷题打卡--Day23

1、MT1190分数乘法 输入5组分数,对他们进行乘法运算,输出结果。不考虑分母为0等特殊情况。 格式 输入格式: 输入整型,每组一行,如样例所示。 输出格式: 输出计算结果实型,如样例所示。 样…

Centos 7.5 安装 NVM 详细步骤

NVM(Node Version Manager)是一个用于管理Node.js版本的工具,它可以让你轻松地在多个版本之间切换。NVM 通过下载和管理 Node.js 的多个版本,为用户提供了一种灵活的方式来使用不同版本的 Node.js。如果你需要更多关于NVM的信息&a…

【MySQL进阶】事务原理

文章目录 事务机制基本介绍事务管理基本操作提交方式事务 ID 隔离级别四种级别加锁分析 原子特性实现方式实现原理undo log 隔离特性实现方式MVCC实现原理隐藏字段undo logRead View RC RR 持久特性实现方式redo log 一致特性 面试题MySQL的ACID特性分别是怎么实现的&#xff1…

工信部颁发的《计算机视觉处理设计开发工程师》中级证书

计算机视觉(Computer Vision)是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说,计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标,计算机视觉结合了图像处理、机器学习、模…

在java中获取excel的cell值的时候报错

在获取cell的时候,通常会有报错类型不匹配的问题,这是因为你的cell中存储的数据类型和使用的方法不匹配的原因,假如说cell中存储了一个数字,但是使用的cell.getStringCellValue()获取值,就会有如下错误 java.lang.Ill…

属性“xxxx”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。

使用vscode编写vue,在使用elementUI时,发现代码中的form报错如下: 属性“form”在类型“ArrayConstructor”上不存在。是否需要更改目标库? 请尝试将 “lib” 编译器选项更改为“es2015”或更高版本。 解决方法: 打开jsconfig.…

智能边缘计算网关实现高效数据处理与实时响应-天拓四方

在当今时代,数据已经成为驱动业务决策的关键因素。然而,传统的数据处理方式往往存在延迟,无法满足实时性要求。此时,智能边缘计算网关应运而生,它能够将数据处理和分析的能力从中心服务器转移至设备边缘,大…

【Linux】文件重定向与实现支持文件重定向的minishell

目录 0.前提 ​编辑 1.重定向 1.1重定向的本质 1.2dup2 1.3模拟实现输出重定向 > 1.4模拟实现追加重定向 >> 1.5模拟实现输入重定向 < 2.让minishell支持重定向 0.前提 文件描述符的分配规则&#xff1a; 在文件描述符表里面&#xff0c;从小到大按照顺…

windows10 powershell多个选项卡

您可以使用下载新的 Windows 终端&#xff0c;新的终端是可以开启多个选项卡的 Windows Terminal - Microsoft Appshttps://apps.microsoft.com/detail/9N0DX20HK701?hlen-us&glUS

使用Pycharm安装Python的库

1.点击文件-----设置&#xff08;setting&#xff09; 2.找到Python解释器&#xff0c;点击加号 3.搜索你需要的库&#xff0c;安装

利用k8s Infra 容器,解决pod网络故障注入的问题

目录 一、infra容器作用 二、pod网络故障注入问题 三、充分利用pod infra容器 一、infra容器的作用 我们知道&#xff0c;在kubernetes中&#xff0c;pod中容器的资源隔离主要通过namespace和cgroup来实现。那如果我们需要为pod中的容器共享某种资源应该怎么做。kubernetes …