前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >mysql 读写分离_详解MySQL读写分离

mysql 读写分离_详解MySQL读写分离

作者头像
全栈程序员站长
发布于 2022-08-11 13:44:22
发布于 2022-08-11 13:44:22
7.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

主从复制的原理

MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。

读写分离的原理

简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到从数据库中。

基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客户段的请求通过判断后转发到后端数据库。

实验环境

1 一台centos7作为客户端测试IP为192.168.30.36

2 一台centos7作为amoeba前端代理服务器 IP为192.168.30.32

3 一台centos7作为MySQL主服务器 IP为 192.168.30.33

4 两台centos7作为MySQL 从服务器 IP为192.168.30.34 192.168.30.35

一、搭建MySQL主从复制

1、 配置主服务器

1) 建立时间同步环境

yum install ntp –y

vi /etc/ntp.conf

17行修改添加

restrict 192.168.30.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0

fudge 127.127.1.0 stratum 8

systemctl start ntpd //开启ntp服服务

2)配置主MySQL

vi /etc/my.cnf //编辑数据库配置文件

在 [mysqld]模块下面添加以下几行

server_id = 1 //主服务器编号

log_bin=master_bin //指定二进制日志

log_slave_updates=true //允许从服务器更新

systemctl restart mysqld 重启MySQL服务

3)进入主数据库授权

mysql -u root -p //进入主数据库

GRANT REPLICATION SLAVE ON *.* TO ‘myslave’@’192.168.30.%’ IDENTIFIED BY ‘abc123”;//为所有从服务器授权所有数据库

FLUSH PRIVILEGES; //刷新权限

show master status; //要记下 Position 列的值

2、配置从服务器同步 两台配置相同

1)在从服务器修改my.cnf文件

修改之后重启mysqld

2)同步时间

yum install ntpdate -y //两台从都安装时间同步工具

ntpdate 192.168.30.33

echo ‘*/30 * * * * /usr/sbin/ntpdate 192.168.30.33’ >> /var/spool/cron/root //创建计划任务每隔三十秒同步一次

3)进入从数据库授权

mysql -uroot -p //进入数据库

change master to master_host=’192.168.30.33′,master_user=’myslave’,master_password=’ard=’abc123′,master_log_file=’master_bin.000001′,master_log_pos=603; //指定主服务器

start slave; //开启从服务器

show slave status \G

两台从都是yes 即可

4)验证主从复制

进入主服务器数据库

mysql -u root -p123456

create database test; //建库测试

二、搭建MySQL读写分离

1、配置前端代理服务器

1) 安装JDK环境(amoeba基于jdk开发)

tar xf jdk-8u144-linux-x64.tar.gz //解压jdk安装包

cp -a jdk1.8.0_144/ /usr/local/java

vi /etc/profile

添加Java环境

export JAVA_HOME=/usr/local/java

export JRE_HOME=/usr/local/java/jre

export PATH=$PATH:/usr/local/java/bin

export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile //刷新环境

java -version //验证jdk环境

2)安装Amoeba

unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/ //解压软件包

mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba //更改软件位置

chmod -R 755 /usr/local/amoeba/ //提权

vi /usr/local/amoeba/jvm.properties //编辑jvm配置文件优化

32行下注释新增:

#JVM_OPTIONS=”-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m”

JVM_OPTIONS=”-server -Xms1024m -Xmx1024m -Xss256k”

3)制作amoeba启动脚本

vi /etc/init.d/amoeba

#!/bin/bash

#chkconfig: 35 62 62

export JAVA_HOME=/usr/local/java

export PATH=JAVAHOME/bin:JAVA_HOME/jre/bin:

NAME=Amoeba

AMOEBA_BIN=/usr/local/amoeba/bin/launcher

SHUTDOWN_BIN=/usr/local/amoeba/bin/shutdown

PIDFILE=/usr/local/amoeba/Amoeba-MySQL.pid

SCRIPTNAME=/etc/init.d/amoeba

case “$1” in

start)

echo -n “Starting $NAME… “

$AMOEBA_BIN

echo ” done”

;;

stop)

echo -n “Stoping $NAME… “

$SHUTDOWN_BIN

echo ” done”

;;

restart)

$SHUTDOWN_BIN

sleep 1

$AMOEBA_BIN

;;

*)

echo “Usage: $SCRIPTNAME {start|stop|restart}”

exit 1

;;

esac

chmod +x /etc/init.d/amoeba //将amoeba启动脚本提权

chkconfig –add amoeba //加入系统配置中

service amoeba start //出现下面的端口说明启动成功,直接ctrl+C退出

netstat -anpt | grep 8066

4)与客户端对接

vi /usr/local/amoeba/conf/amoeba.xml

28-30行

83行

85行

5)与后端服务器对接

vi /usr/local/amoeba/conf/dbServers.xml

26-29行

43-56行

64行

service amoeba restart //服务重启

6)在三台mysql数据库中(一主两从)为amoeba授权

GRANT ALL ON *.* TO test@’192.168.30.%’ IDENTIFIED BY ‘123.com’;//为代理授权链接

flush privileges; //刷新权限

2 配置客户端

yum install -y mysql // 安装mysql客户端

mysql -u amoeba -p123456 -h 192.168.30.32 -P8066 //用代理地址登录数据库

3、测试读写分离

1) 在MASTER上新建的数据库或者里面的表,两台从服务器会同步

use test;

create table zhang (id int(10),name varchar(10),address varchar(20));

show tables; //三台数据库服务器上查看会是相同结果

2)在两台从服务器上停止从服务后

stop slave;

在主主服务器插入内容

use test

insert into zhang values(‘1′,’hahahha’,’this_is_master’);

在从服务器1上输入内容

use test;

insert into zhang values(‘2′,’zhang’,’this_is_slave1′);

在从服务器2上出入内容

use test;

insert into zhang values(‘3′,’zhang’,’this_is_slave2′);

3)在客户端上面测试从服务器只读数据

Select from test.zhang;

4)在客户端上面测试主服务器只写数据

insert into zhang values(‘4′,’zhang’,’write_test’);

在客户端查看

select from zhang;

在主服务器查看

在从服务1上查看

在从服务2上查看

三、结论

以上实验在主从同步的基础上验证了mysql的读写分离,而amoeba充当代理服务器,负责将客户的请求进行转发,分配到相应的服务器。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131408.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
workerman 签名验证中间件 timestamp+nonce+sign 时间戳 + 随机数 + 签名参数接口验证
对参数进行签名,防止参数被非法篡改。sign一般是将所有非空参数按照升序排序然后+token+key+timestamp拼接在一起,然后使用加密算法进行加密,作为接口中的一个参数sign来传递,也可以将sign放到请求头中。
OwenZhang
2022/05/30
2.2K0
workerman 签名验证中间件 timestamp+nonce+sign 时间戳 + 随机数 + 签名参数接口验证
如何保证API接口安全?
在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。当你的公司体量上来了时候,这个时候可能有一些公司开始找你进行技术对接了,转变成由你来提供api接口,那这个时候,我们应该如何设计并保证API接口安全呢?
老K博客
2024/12/10
1730
如何保证API接口安全?
如何保证API接口安全?
在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。
纯洁的微笑
2021/07/01
1.6K0
如何保证API接口安全?
SpringBoot 如何保证接口安全?老鸟们都是这么玩的!
对于互联网来说,只要你系统的接口暴露在外网,就避免不了接口安全问题。 如果你的接口在外网裸奔,只要让黑客知道接口的地址和参数就可以调用,那简直就是灾难。
闻说社
2023/03/13
1.4K0
公司来了个大神,三方接口调用方案设计的真优雅~~
在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。
程序员蜗牛
2024/04/22
2.2K0
公司来了个大神,三方接口调用方案设计的真优雅~~
安全|API接口安全性设计(防篡改和重复调用)
API接口的安全性主要是为了保证数据不会被篡改和重复调用,实现方案主要围绕Token、时间戳和Sign三个机制展开设计。
黄小怪
2018/12/07
10.1K0
openresty实现接口签名安全认证
一)需求背景 现在app客户端请求后台服务是非常常用的请求方式,在我们写开放api接口时如何保证数据的安全, 我们先看看有哪些安全性的问题 请求来源(身份)是否合法? 请求参数被篡改? 请求的唯一性(不可复制) 二)为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证 案例: 我们通过给某 [移动端(app)] 写 [后台接口(api)] 的案例进行分析:      客户端: 以下简称app 后台接口:以下简称api 我们通过app查询产品列表这个操作来进行分析: app中点击查询按
小勇DW3
2020/08/13
2.3K0
【JS 逆向百例】有道翻译接口参数逆向
逆向目标 目标:有道翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.youdao.com/translate_o?smartresult=di
K哥爬虫
2021/08/05
1.5K0
【JS 逆向百例】有道翻译接口参数逆向
探讨三方接口调用方案设计
三方接口设计是实现系统功能的关键环节。设计一个安全、高效且易于维护的接口调用方案,对于保障系统稳定性、数据安全性和用户体验至关重要。
公众号:码到三十五
2024/11/25
1970
[系列] - go-gin-api 路由中间件 - 签名验证(七)
上篇文章分享了,路由中间件 - Jaeger 链路追踪(实战篇),文章反响真是出乎意料, 「Go中国」 公众号也转发了,有很多朋友加我好友交流,直呼我大神,其实我哪是什么大神,只不过在本地实践了而已,对于 Go 语言的使用,我还是个新人,在这里感谢大家的厚爱!
新亮
2019/10/14
2.7K0
[系列] - go-gin-api 路由中间件 - 签名验证(七)
微信小程序支付服务端.net core实现,简单直接
做小程序的支付时,在翻阅了大量的别人分享的代码后,感觉写的简直就是一堆垃圾,不敢苟同,要是代码都那么写,维护性简直了,于是才有了这篇文章。
FreeTimeWorker
2020/08/31
9300
企业API接口设计(token、timestamp、sign)之具体实现
Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。
lyb-geek
2019/11/30
2.9K0
iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【上篇】
背景:如果商家平台侧服务出现问题,商家需要一个备选方案进行正常的收退款;因此在POS机新增一个开关进行切换支付通道,智能机app直接与银联对接。并在本地维护产生的订单数据和维护订单状态。
公众号iOS逆向
2022/08/22
1K0
iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【上篇】
微信公众号支付,JSAPI支付方法,ThinkPHP5+微信支付
总结:开发微信公众号,接入微信支付功能,附上微信支付API接口的实现逻辑图以及相关代码。JSAPI支付:是指在微信内置浏览器内调用微信支付模块支付,比如可用于微信公众号内的微信商城之类的。 首先得在微
用户5745385
2020/05/09
2.6K0
微信公众号支付,JSAPI支付方法,ThinkPHP5+微信支付
API 接口的安全设计验证,我是这么做的!
与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据,我主要围绕时间戳,token,签名三个部分来保证API接口的安全性
架构师修炼
2021/05/17
9780
API 接口的安全设计验证,我是这么做的!
如何有效提升 API 接口的安全性?
在如今的互联网应用中,API 接口的安全性已经成为了开发过程中不可忽视的一环。越来越多的应用服务通过 API 进行数据交换,而 API 的安全性直接关系到应用的数据安全与用户隐私。因此,我们需要采取一系列措施来确保 API 的安全。
南山竹
2024/07/04
1960
如何有效提升 API 接口的安全性?
三方接口调用设计方案
为保障三方接口的安全性,可采取多方面措施,包括使用 HTTPS 协议确保数据传输安全,利用 AK 和签名进行身份验证以及对请求验签来防止非法请求与重放攻击,还有对敏感数据进行加密传输等。不过具体实现细节会因项目需求而存在差异,并且在实际开发中,还需兼顾错误处理、异常情况处理以及日志记录等方面内容。
用户1142828
2024/12/08
1270
Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)
    之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内部支付的流程,然而实际上微信小程序有一定的局限性,也就是用户范围仅限于小程序内部生态圈,在生活中真正具有广泛性、高效性、使用方便性的支付方式还得是扫码支付,扫码的优点在于推广成本低,上至钓鱼台国宾馆,下至发廊地摊都能用,打印出来就完事了,而相比其他支付方式,现金的找零及假钞问题,信用卡的办理门槛、pos机的沉没成本,就算微信可集成的h5支付和小程序支付,奈何很多老年人根本不会用小程序和手机浏览器,更别说再进行支付操作了,所以基于二维码的扫码支付的确是非常符合国情的。
用户9127725
2022/08/08
6420
Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略)
WebApi与手机客户端通信安全机制
最近公司有几个项目需要开发手机客户端,服务器端选用WebApi,那么如何保证手机客户端在请求服务器端时数据不被篡改,如何保证一个http请求的失效机制,下面总结一下我们在项目中针对这两个问题的解决方案。
写代码的猿
2019/04/11
1.9K0
从零玩转系列之微信支付实战PC端支付微信回调接口搭建 | 技术创作特训营第一期
此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端),至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端)
杨不易呀
2023/08/14
8790
从零玩转系列之微信支付实战PC端支付微信回调接口搭建 | 技术创作特训营第一期
推荐阅读
相关推荐
workerman 签名验证中间件 timestamp+nonce+sign 时间戳 + 随机数 + 签名参数接口验证
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文