当前位置: 首页 > news >正文

MySQL数据库主从复制和读写分离

MySQL数据库主从复制和读写分离

。## MySQL主从复制

MySQL主从复制的概念

MySQL主从复制是一个异步的数据复制过程,允许将一个MySQL服务器(主服务器)上的数据复制到一个或多个MySQL服务器(从服务器)。主从复制提供了数据冗余和高可用性,常用于读写分离、负载均衡和备份等场景。

**1主从复制的过程
MySQL主服务器开启二进制日志,MySQL主服务器的dump线程响应从服务器IO线程,从服务器的IO线程会定期检查主服务器的二进制日志是否有新的更新,如果有,它会主动发起请求。从服务器的IO线程请求到了更新的二进制日志后会将二进制日志更新写入中继日志,此时从服务器的SQL线程会读取中继日志并将中继日志中事务执行,并存入硬盘

2支持复制的类型
(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

主从复制的部署

部署环境
Master服务器 192.168.20.10
Slave1服务器192.168.20.20
Slave2服务器192.168.20.30
关闭防护墙

systemctl stop firewalld

关闭selinux

setenforce 0

1时间同步
主服务器与从服务器要进行时间同步

主服务器配置
安装时间同步服务

yum install ntp -y
vim /etc/ntp.conf

添加

server 127.127.20.0
fudge 127.127.20.0 stratum 8

在这里插入图片描述

service ntpd start

启动ntpd 服务
从服务器配置

定时进行时间同步

yum install ntp ntpdate -y
service ntpd start
/usr/sbin/ntpdate 192.168.20.10
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.20.10

在这里插入图片描述
在这里插入图片描述
2配置Mysql服务
主服务器

vim /etc/my.cnf
server-id = 1                        服务器id号
log-bin=master-bin              开启主服务器二进制文件
binlog_format = MIXED   	使用MIXED模式
log-slave-updates=true		允许slave从master复制数据时可以写入到自己的二进制日志

在这里插入图片描述

systemctl restart mysqld
mysql -uroot -p123123

给从服务器赋权

GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.20.%' IDENTIFIED BY '123123';
FLUSH PRIVILEGES;

在这里插入图片描述

查看主服务器偏移量

show master status;

在这里插入图片描述
偏移量为1036

从服务器的mysql配置

vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery = 1 
systemctl restart mysqld.service
CHANGE master to master_host='192.168.20.10',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=1036;

master_log_file 和 master_log_pos要和查询出来的一样
在这里插入图片描述
启动同步

start slave;

查看同步状态

show slave status\G

在这里插入图片描述

测试
在主MySQL是创建一个新库glcs

create database glcs;

在这里插入图片描述

在这里插入图片描述

读写分离的的搭建

新开一台虚拟主机
192.168.20.40
新机器上安装Amoeba服务
安装Amoeba服务

下载我上传的Amoeba压缩包
解压包

cd /opt/amoeba
tar xfv amoeba-mysql-binary-2.2.0.tar.gz
chmod -R 777 /opt/amoeba
/opt/amoeba/bin/amoeba

输入/opt/amoeba/bin/amoeba以后显示amoeba start|stop则表示安装成功
先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问

grant all on *.* to test@'192.168.20.%' identified by '123123';

再回到amoeba服务器配置amoeba服务

cd /opt/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml
--30行--
<property name="user">amoeba</property>
--32行-- 
<property name="password">123456</property>
--115行--
<property name="defaultPool">master</property>
--117-去掉注释-
<property name="writePool">master</property>
<property name="readPool">slaves</property>
cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改数据库配置文件
--23行--注释掉  作用:默认进入test库 以防mysql中没有test库时,会报错
<!-- <property name="schema">test</property> -->
--26--修改
<property name="user">test</property>
--28-30--去掉注释
<property name="password">123456</property>
--45--修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
--48--修改,设置主服务器的地址
<property name="ipAddress">192.168.10.15</property>
--52--修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
--55--修改,设置从服务器1的地址
<property name="ipAddress">192.168.10.14</property>
--58--复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.10.16</property>
--65行--修改
<dbServer name="slaves" virtual="true">
--71行--修改
<property name="poolNames">slave1,slave2</property>

启动amoeba

/usr/local/amoeba/bin/amoeba start&

测试
客户端

yum install -y mariadb-server mariadb
systemctl start mariadb.service

在客户端服务器上测试:

mysql -u amoeba -p123456 -h 192.168.20.40 -P8066

查询时出现报错则在主服务器上添加
在这里插入图片描述

CREATE USER 'amoeba'@'192.168.20.40' IDENTIFIED BY '123123';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'192.168.20.40';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;

测试

#在主服务器上
use glcs;
create table test4 (id int(10),name varchar(10),address varchar(20));
#在两台从服务器上
stop slave;											#关闭同步
use glcs;
#在slave1上:
insert into test4 values('1','gh','this_is_slave1');
#在slave2上:
insert into test4 values('2','lo','this_is_slave2');

在这里插入图片描述
在这里插入图片描述

#在主服务器上:
insert into test4 values('3','lx','this_is_master');

在这里插入图片描述
在这里插入图片描述
读写分离成功

相关文章:

MySQL数据库主从复制和读写分离

MySQL数据库主从复制和读写分离 。## MySQL主从复制 MySQL主从复制的概念 MySQL主从复制是一个异步的数据复制过程&#xff0c;允许将一个MySQL服务器&#xff08;主服务器&#xff09;上的数据复制到一个或多个MySQL服务器&#xff08;从服务器&#xff09;。主从复制提供了…...

rust - 使用log4rs打印日志

本文提供了一种通过log4rs库记录日志的方法。这里没有采用读取yaml文件的方式&#xff0c;而是通过对象构造的方式来初始化日志&#xff0c;用于发包时不带配置文件的场景。 初始化日志 在release环境&#xff0c;仅需要将日志打印到文件中&#xff0c;而日常开发时&#xff…...

数据结构:单调栈和单调队列

文章目录 一、单调栈1.1、栈的思想1.2、单调栈1.2.1、单调栈的基本应用&#xff1a;找出数组中每个元素右侧第一个更大的元素1.2.2、单调栈的基本应用&#xff1a;找出数组中每个元素左侧第一个更大的元素1.2.3、单调栈拓展1.2.4、单调栈LeetCode题单 二、单调队列2.1、队列的思…...

大模型RAG性能提升路径

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…...

机器视觉学习(九)—— 边缘检测

目录 一、边缘检测 1.1 Canny边缘检测 1.1.1 cv2.Canny函数 1.1.2 Canny边缘检测示例 1.2 角点检测 1.2.1 cv2.goodFeaturesToTrack()函数 1.2.2 OpenCV角点检测示例代码 1.3 直线检测 1.3.1 cv2.HoughLinesP()函数 1.3.2 OpenCV直线检测示例代码 1.4 圆形检测 1.4…...

基于单片机声音分贝采集和显示控制系统设计

**单片机设计介绍&#xff0c;基于单片机声音分贝采集和显示控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机声音分贝采集和显示控制系统设计&#xff0c;主要目标是实现声音分贝的实时采集、处理以及显示…...

CentOS使用Docker部署Halo并结合内网穿透实现公网访问本地博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…...

打造高效自动化渗透测试系统:关键步骤与实践

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…...

绿联 部署vocechat,搭建私人聊天服务器,用于小型团队和家庭环境

1、镜像 privoce/vocechat-server:latest 2、安装 2.1、基础设置 重启策略&#xff1a;容器退出时总是重启容器。 2.2、网络 桥接即可。 2.3、存储空间 装载路径&#xff1a;/home/vocechat-server/data不可变更&#xff0c;权限读写。 2.4、端口设置 容器端口3000不可变…...

考研数学|高效刷透汤家凤《1800》经验分享

当然不需要换老师&#xff0c;如果你在基础阶段连汤老师的课都听不进去&#xff0c;那么换其他老师的话&#xff0c;很大可能也是白搭。 如果你现在对于1800还是一筹莫展的话&#xff0c;那么很明显&#xff0c;这反映出前期基础不扎实&#xff0c;没有真正理解和掌握这部分内…...

LLM推理入门指南②:深入解析KV缓存

在本系列文章《LLM推理入门指南①&#xff1a;文本生成的初始化与解码阶段》中&#xff0c;作者对Transformer解码器的文本生成算法进行了高层次概述&#xff0c;着重介绍了两个阶段&#xff1a;单步初始化阶段&#xff0c;即提示的处理阶段&#xff0c;和逐个生成补全词元的多…...

上采样技术在语义分割中的应用

目录 概要 一、概述 二、实现方法 1.转置卷积 2.反池化 3.双线性插值法 三、在经典网络中的的应用 1.U-Net 2.FCN 总结 概要 上采样是用于深度学习中提高语义分割精度的技术&#xff0c;可以实现图像放大和像素级别标注 一、概述 神经网络的基本结构为&#xff1a;…...

linux 组建raid5详细操作

raid5最多运行损坏一个盘&#xff0c;最少3个盘&#xff0c;容量为少一块硬盘的容量之和。 如果硬盘数量较多&#xff0c;比如8块以上&#xff0c;建议用raid6&#xff0c;raid6最多允许两块硬盘损坏。 如果需要 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf …...

机器学习概念、步骤、分类和实践

在当今数字化时代&#xff0c;机器学习已经渗透到我们生活的方方面面&#xff0c;从智能手机应用、搜索引擎优化&#xff0c;到自动驾驶汽车、医疗诊断等&#xff0c;其应用无处不在。本文将带您走进机器学习的世界&#xff0c;了解它的基本概念、步骤、分类以及实践应用。 一…...

钉钉服务端API报错 错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确

problem 调用钉钉服务端API&#xff0c;机器人发送群聊消息&#xff0c;后台返回报错信息: 钉钉服务端API报错 错误描述: robot 不存在&#xff1b;解决方案:请确认 robotCode 是否正确&#xff1b; reason 定位: 登录后台&#xff0c;查看机器人是存在查看机器人调用权限接…...

Linux 开发环境以及编译链接

再谈编译链接 C函数重载与编译链接-CSDN博客 之前我已经写过文章简单介绍了编译链接要做的一些操作。现在为了能更好的理解我们平时的开发环境&#xff0c;我会在Linux系统上完整地走一遍流程。 环境描述 我们使用普通用户在Linux上进行操作&#xff0c;先写一段测试代码。 …...

SmartChart的部署以及可能遇见的报错解决方案

简介 数据可视化是一种将数据转化为图形的技术&#xff0c;可以帮助人们更好地理解和分析数据。但是&#xff0c;传统的数据可视化开发往往需要编写大量的代码&#xff0c;或者使用复杂的拖拽工具&#xff0c;不仅耗时耗力&#xff0c;而且难以实现个性化的需求。有没有一种更…...

【Node.js从基础到高级运用】十九、Node.js 捕获错误之“未捕获的异常”

引言 在 Node.js 应用程序中&#xff0c;错误处理是保证应用稳定性和可靠性的关键部分。特别是“未捕获的异常”&#xff08;uncaught exceptions&#xff09;&#xff0c;如果不妥善处理&#xff0c;很可能会导致整个进程崩溃。在本文中&#xff0c;我们将探讨如何在 Node.js …...

vue 计算属性

基础示例​ 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。比如说&#xff0c;我们有这样一个包含嵌套数组的对象&#xff1a; const author reactive({name: John Doe,books: [V…...

RedissonLock-tryLock-续期

redisson版本3.16.6 1.什么是看门狗 Redisson提供的分布式锁是支持锁自动续期的&#xff0c;也就是说&#xff0c;如果线程仍旧没有执行完&#xff0c;那么redisson会自动给redis中的目标key延长超时时间&#xff0c;这在Redisson中称之为 Watch Dog 机制。默认情况下&#x…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年&#xff0c;金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征&#xff1a; AI驱动的自适应攻击&#xff1a;攻击流量模拟真实用户行为&#xff0c;差异率低至0.5%&#xff0c;传统规则引…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...