MySQL主从复制(读写分离前置工作)

MySQL主从复制和读写分离 前言在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。 MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。主MySQL服 阅读详情

八、MySQL主从复制

原理:

两个日志:主bin-log 从relay-log

三个线程:主dump 从io、sql


作用:

  • ·实时备份:主服务器实时备份数据到从服务器,主服务器中数据丢失时,可以从从服务器中恢复数据。
  • ·读写分离:主服务器负责写操作(insert\update\delete),从服务器负责读操作(select)
  • ·高可用集群:当主服务器突然下线,从服务器可以很快地接替主服务器的功能。
  • ·负载均衡:将原本一台服务器处理的请求分发给多台服务器去处理,适用于高并发场景,防止单台服务器负载过高而崩溃。

主从服务器准备工作:

# 主从服务器准备工作

# 配置yum源

mount /dev/cdrom /media

cd /etc/yum.repos.d

# 关闭防火墙,沙盒

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

# mysql 安装

wget 192.168.56.200/Software/mysql_install.sh

# 一键安装

bash mysql_install.sh

# 重新加载

source /etc/profile

bash

# 登录mysql

mysql -uroot -p

再输入密码

show databases;

实战:

一、主库配置,开启主服务器的master的log_bin

vim /etc/my.cnf

+++++++++++++++++++++++++++++++++++++

[mysqld]

...

# 在后面直接设置主服务器唯一ID

server-id=1

# 启用二进制日志

log-bin= /usr/local/mysql/data/mysql-bin

# 设置不要复制的数据库(可设置多个)

binlog-ignore-db=sys

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

# 设置需要复制的数据库(可设置多个,也可以不写)

# binlog-do-db=test

# 设置logbin格式

binlog_format=STATEMENT

+++++++++++++++++++++++++++++++++++++

二、从库配置开启从服务器的realy log

vim /etc/my.cnf

+++++++++++++++++++++++++++++++++++++

[mysqld]

...

# 在之前配置下方编写从服务器唯一ID

server-id=2

# 启用中继日志

relay-log=/usr/local/mysql/data/mysql-relay

+++++++++++++++++++++++++++++++++++++

# 重启两台服务器上的mysql

/etc/init.d/mysqld restart

三、关闭主从数据库服务器防火墙

# 查看防火墙状态(一般已经默认关闭了)

systemctl status firewalld

# 关闭防火墙(可省略)

# systemctl stop firewalld

四、主数据库创建用户slave并授权

# 在主数据库端(192.168.221.20)

# 登录mysql

mysql -uroot -proot123

# 创建用户slave

create user 'slave'@'%' identified with mysql_native_password by 'Root@123';

# 授权

grant replication slave on *.* to 'slave'@'%';

# 刷新权限

flush privileges;

五、从数据库端验证主数据库slave用户是否可用

# 在从数据库端(192.168.221.30)

# 验证主数据库slave用户是否可用

mysql -uslave -p -h192.168.221.20

输入密码Root@123

六、配置主从节点信息

# 在主数据库端(192.168.221.20)查询服务ID及Master状态

# 登录

mysql -uroot -proot123

# 查询server_id是否可配置文件中一致

show variables like 'server_id';

# 若不一致,可设置临时ID(重启失效),若一致则跳过这步

set global server_id = 1;

# 查询Master状态,并记录 File(对应下一步中的master_log_file)并查询Position (对应下一步中的master_log_pos)的值

show master status;

记录下File和Position的值

# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化

七、在从数据库设置同步

# 在从数据库(192.168.221.30)

# 退出slave登录的mysql,登录root

mysql -uroot -proot123

# 查询server_id是否可配置文件中一致

show variables like 'server_id';

# 若不一致,可设置临时ID(重启失效,若一致则跳过这步)

set global server_id = 2;

# 设置主数据库参数(用上一步创建的slave用户及密码)

change master to

master_host='192.168.221.20',

master_port=3306,

master_user='slave',

master_password='Root@123',

master_log_file='mysql-bin.000001',

master_log_pos=828;

# 开始同步

start slave;

# 查询Slave状态

show slave status\G;

# 查看是否配置成功

Slave_IO_Running :yes

Slave_SQL_Running :yes,则证明配置成功。(后续可不看)

若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值

# 若出现错误,则停止同步,重置后再次启动

stop slave;

reset slave;

start slave;

八、测试主从复制

# 主服务上执行(192.168.221.20)

mysql -uroot -proot123

# 创建test库,t1表,添加测试数据

create database test;

use test;

create table t1(id int,name varchar(30));

insert into t1(id,name) values(1,"aaa");

# 从服务器上执行(192.168.221.30)

mysql -uroot -proot123

# 查看是否同步数据

show databases;

use test;

show tables;

select * from t1;


GTID方案

1、GTID 是什么?

GTID 的全称是 Global Transaction Identifier,全局事务 ID,当一个事务提交时,就会生成一个 GTID,相当于事务的唯一标识。GTID 是 MySQL 数据库中用于唯一标识每个事务的机制,主要应用于主从复制场景,能简化复制配置、提高故障转移效率。

·结构:GTID=server_uuid:gno

- source_id:通常是生成事务的主库的服务器UUID,用于区分不同的数据库实例。- transaction_id:是在该主库上生成的事务的序列号,从1开始递增。

例如,8a8b8c8d-8e8f-8a8b-8c8d-8e8f8a8b8c8d:100 就是一个GTID,其中8a8b8c8d-8e8f-8a8b-8c8d-8e8f8a8b8c8d是source_id,100是transaction_id。

2、GTID的工作原理

GTID 方案:主库计算主库 GTID 集合和从库 GTID 的集合的差集,主库推送差集 binlog 给从库。

·事务生成:主库上执行的每个事务都会被分配一个唯一的GTID,该GTID会随着事务一起记录到二进制日志(binlog)中。

·复制传输:从库通过I/O线程将主库的binlog传输到本地的中继日志(relay log),同时也会获取到事务对应的GTID。

·事务执行与记录:从库的SQL线程读取中继日志中的事务并执行,执行完成后,会将该GTID记录到gtid_executed系统变量中,用于标识已经执行过的事务。

·冲突避免:当主从切换或有新的从库加入时,新的主库会根据从库的gtid_executed来判断哪些事务需要被发送,确保从库不会重复执行已经执行过的事务。

3、GTID的优势

·简化复制配置:在配置主从复制时,不再需要指定二进制日志文件名和位置,只需启用GTID并正确配置相关参数,从库就能自动找到需要同步的起点。 例如,传统方式配置从库需要执行change master to master_log_file='xxx', master_log_pos=xxx,而使用GTID后,只需change master to master_auto_position=1。

·便于故障转移:当主库发生故障需要切换到从库时,通过查看各从库的gtid_executed,可以快速确定哪个从库拥有最新的事务,从而选择最合适的从库作为新的主库,减少数据丢失的风险。

·提高事务追踪能力:每个事务都有唯一的GTID,通过GTID可以方便地在主从库之间追踪事务的执行情况,便于排查复制过程中出现的问题。

4、如何启用GTID

# 修改主库和从库的配置文件:

vim /etc/my.cnf

+++++++++++++++++++++++++++++++++

[mysqld]

...

## 在配置文件中添加GTID配置

gtid_mode=on       #启用GTID后,每个事务都会被分配一个唯一的GTID

enforce_gtid_consistency=on  

#从库只能复制具有与主库一致的 GTID 链的事务,以确保数据一致性

+++++++++++++++++++++++++++++++++

# 修改从库配置同步的参数

## 格式

change master to

master_host=’$host_name’,           #主机IP

master_port=$port,                   #端口号

master_user=’$user_name’,           #用户名

master_password=’$password’,

master_auto_position=1;             #主从关系使用的GTID协议

5、在线将传统复制切换到GTID复制

## 在主从库执行

set global enforce_gtid_consistency=WARN;

set global enforce_gtid_consistency=on;

set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

## 先在从库上执行

set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

## 然后在主库执行

set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

# 查看是否为0,等于0是表示所有连接都转为gtid复制

show status like 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';

# 主从库执行

set global gtid_mode=on;

# 从库执行

stop slave;

change master to master_auto_position=1;

start slave;

## 永久生效,记得更改配置文件

6、在线将GTID的环境切换到非GTID

# 从库执行

stop slave;

change master to master_auto_position=0;

start slave;

# 主从库执行

set @@GLOBAL.GTID_MODE = ON_PERMISSIVE

# 主库执行

set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE

# 这个时候已经从gtid转到传统复制了,不过还是中间状态

# 在从库执行

set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE

# 主从库执行

select @@GLOBAL.GTID_OWNED;

# 是不是为空

# 主库执行

set global gtid_mode=0;

# 主库执行

set global enforce_gtid_consistency=off;

## 永久生效,记得配置文件修改

MySQL主从复制与读写分离 首先,Slave开始一个工作线程一一I/0线程,I/0线程在Master上打开一个普通的连接,然后开始Binlogdump process。复制过程有一个很重要的限制,即复制在SIave上是串行化的,也就是说Master上的并行更新操作不能在Slave上并行操作。MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。在主服务器上执行的SQL语句,在从最务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高。 阅读详情

相关推荐

本地使用大模型:Ollama+open-webui+AnythingLLM(Windows+linux)

随着大模型的发展,大量的开源模型可以被直接使用。大模型的使用可以选择在云端或者在本地,如果本地存储空间尚可,而且模型需求不是很大的话,我们可以选择在本地部署一个大模型来使用。针对特定的任务需求,进一步在本地去微调我们的大模型。我在windows和linux上都尝试了一遍,这里记录一下过程。

wpqgt的博客 2165

MySQL的主从

前言 金三银四面试的时候,面试官经常会问MySQL主从。今天就跟大家聊聊MySQL的主从。 数据库主从概念、优点、用途 数据库主从复制原理 主主、主从、主备的区别 MySQL是怎么保证主从一致的 数据库主从延迟的原因与解决方案 聊聊数据库的高可用方案 1. 数据库主从概念、优点、用途 主从数据库是什么意思呢,主是主库的意思,从是从库的意思。数据库主库对外提供读写的操作,从库对外提供读的操作。 数据库为什么需要主从架构呢? 高可用,实

qq_39871711的博客 1万+

信息安全与技术——(十一)恶意代码检测与防范技术

恶意代码(Malicious Code )或恶意软件(Malware )主要是指以危害信息的安全等不良意图为目的的程序,它们一般潜伏在受害计算机系统中实施破坏或窃取信息。

m0_63853448的博客 5991

MySQL主从

本文主要讲述了MySQL的主从复制概念以及部署配置和GTID

SinG_Lala的博客 5130

CentOS 7/8 系统下,基于Docker Compose一键部署Dify AI应用平台

本文详细介绍了在CentOS 7/8系统下,使用Docker Compose一键部署Dify AI应用平台的完整流程。从系统环境准备、Docker引擎安装与加速配置,到获取Dify项目、关键环境变量设置,再到服务启动、状态监控及初始化访问,提供了手把手的部署指南和常见问题排查方法,帮助用户快速搭建稳定、可维护的AI应用开发环境。

q5r6s7的博客 138

win10 运行lisflood_8踩过的坑

1、安装cuda及VS2019 https://www.bilibili.com/read/cv7335974/ 2、netcdf.h头文件找不到问题 https://www.cnblogs.com/lyggqm/p/12926974.html https://blog.youkuaiyun.com/u011954296/article/details/54617048 3、编码问题 https://blog.youkuaiyun.com/qq_33485434/article/details/81196843 4、

我的笔记 4115

Mysql主从配置,亲手搭建,保证可用!

配置前准备 1、准备2个mysql环境 2、两个mysql网络互通 第一步 配置mysql配置文件【my.cnf】|【my.ini】 【master】配置如下 [mysqld] server-id = 1 # 节点ID,确保唯一 log config log-bin = mysql-bin #开启mysql的binlog日志功能,binlog日志位置 sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到

铁蛋的博客 6287

OpenHarmony之Histreamer引擎深度解析:pipeline_core架构如何全面取代GStreamer,一统音视频播放与录制

Histreamer是OpenHarmony多媒体框架的核心媒体引擎,采用架构设计。一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。1.播放场景分为如下几个节点:数据源读取、解封装、解码、输出;2.录制场景分为如下几个节点:数据源读取、编码、封装、输出。该引擎从OH5.0开始取代了原有的媒体引擎gstreamer(部分文档还保留较老架构的讲解),提供统一的音视频播放、录制、元数据解析等能力。

m0_67505153的博客 332

mysql基础5——mysql主从

mysql主从原理实操说明

百慕卿君博客 4914

FM20S用户手册-PL端案例开发手册

为便于演示,本次操作直接将led_flash案例中的 "led_flash_fm20s\constraints\constrs_1Ved_flash_fm20s.fdc"文件全部代码拷贝至编辑 界面,并点击保存按钮。引脚约束请查看案例工程"led_flash\project\led_flash_fm20s\constraints\constrs_1\"目 录下的led_flash_fm20sfdc。(4)弹出如下界面,在界面配置Select device forthe project"内容,如下图。

创龙,嵌入式一体化解决方案商 399

Python电梯II

输入数据有若干组(最多不超过1000组),每组数据的第一行为四个如题目中所示的整数N,u,d,s,由空格分隔开。第二行为不同楼层需要上下楼的请求, 最多不超过1000个。每个请求的格式为"from-to",其中"from"和"to"为所在楼层和要到达的楼层,保证from!=to。

沐风—云端行者 908

MySQL主从复制及读写分离

MySQL主从复制及读写分离一、相关概述(一)MySQL 支持的复制类型(二)MySQL主从复制的工作过程1.Master 服务器保存记录到二进制日志2.Slave 服务器复制 Master 服务器的日志3.Slave 服务器重放复制过来的日志二、读写分离(1)读写分离的概念(2)读写分离的作用(3)MySQL 读写分离原理(4)常见的 MySQL 读写分离1)基于程序代码内部实现2)基于中间代理层实现三、MySQL主从复制和读写分离实验部署(1)主从复制实验步骤及准备1.关闭防火墙及安全机制2.安装时间同

weixin_53567573的博客 2377

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 964

MySQL的主从复制和读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

weixin_58376680的博客 2178

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Mysql 主从复制、读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离。

2201_75549363的博客 1445

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL主从复制与读写分离(图文详解)

文章目录MySQL主从复制与读写分离一、案例概述二、======MySQL 主从复制原理======1、MySQL 支持的复制类型2、MySQL主从复制的工作过程三、======MySQL读写分离原理======1、读写分离存在意义2、常见的 MySQL 读写分离分为两种四、MySQL主从复制和读写分离实验部署案例拓扑图实验思路环境配置 MySQL主从复制与读写分离 一、案例概述 在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满

愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒! 1854

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MySQL 主从复制与读写分离

MySQL 主从复制是一种数据同步机制,允许数据从一个主数据库(Master)复制到一个或多个从数据库(Slave)。数据冗余与灾备:通过从库提供数据备份,增强容灾能力。负载均衡:将读操作分散到多个从库,减轻主库压力。高可用性:主库故障时,从库可快速切换为主库,减少停机时间。MySQL 读写分离是一种通过分离读操作(SELECT)与写操作(INSERT/UPDATE/DELETE)的数据库架构设计,将写操作集中在主库(Master),读操作分散到从库(Slave),以提升系统性能和并发处理能力。核心作用。

2301_80839375的博客 1762

MySQL 主从复制、读写分离

在数字化浪潮的席卷下,数据量呈现出爆发式增长的态势。企业所面临的数据处理挑战日益严峻,传统的单节点MySQL架构在诸多方面逐渐暴露出其局限性。当面对高并发读写请求时,单节点架构就如同交通拥堵路段,性能急剧下降,响应迟缓;在数据容灾方面,缺乏有效的备份和恢复机制,一旦主节点出现故障,数据丢失和服务中断的风险极高;而且随着数据量的不断攀升,性能瓶颈愈发明显,严重制约了企业业务的发展。为了突破这些困境,MySQL主从复制与MyCAT读写分离技术应运而生。

2503_91100205的博客 1242
上一篇: MySQL进阶——优化、日志
下一篇: MySQL读写分离
chen_note
博客等级 码龄1年 251粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值