千家信息网

Mysql中怎么读写分离

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Mysql中怎么读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是读写分离?在Mysql中读写分离实际上就是让主数据库处理
千家信息网最后更新 2026年11月01日Mysql中怎么读写分离

Mysql中怎么读写分离,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

什么是读写分离?

在Mysql中读写分离实际上就是让主数据库处理主动写操作,让从数据库处理主动读操作。我们可以使用mysql-proxy中间件实现Mysql的读写分离,mysql-proxy在这里是作为什么角色呢?实际上我们可以将mysql-proxy理解为一个主从数据库之间的代理,它负责接受客户端的请求,然后判断请求SQL是属于写操作还是读操作,如果属于读操作则转发给从数据库处理请求,如果处于写操作则转发给主数据库处理请求。

实现Mysql读写分离

其实实现Mysql读写分离最简单的方案就是开启主从同步,在后端配置主数据库的连接和从数据库的连接,如果需要处理更新数据操作,就是用主数据库连接完成更新操作,如果只是select查询数据,则使用从数据库连接从从数据库获取数据。但是通过代码来管理连接不同的主从数据库太过于繁琐了,所以Mysql提供了官方的中间件mysql-proxy实现代理,客户端只需要请求mysql-proxy的连接池取到一个连接,至于根据读写操作来选择不同的主从数据库这些工作就只需要交给mysql-proxy来处理就可以了。所以本篇文章重点介绍如何使用mysql-proxy来实现Mysql的读写分离。


lua安装

由于mysql-proxy读写分离主要通过rw-splitting.lua脚本去实现,所以需要先装一下lua:
/*下载lua并且解压*/wget http://www.lua.org/ftp/lua-5.1.4.tar.gz && tar zxvf lua-5.1.4.tar.gz/*进入lua并且install*/cd lua-5.1.4 && make linux && make install/*导出*/export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"

mysql-proxy安装
                 /*下载mysql-proxy并且解压*/              wget mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz && tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.g
由于默认情况下。数据库连接数最少要达到4,才会开启读写分离。由于mysql-proxy读写分离主要通过rw-splitting.lua脚本去实现,所以需要先修改下rw-splitting.lua配置信息,rw-splitting.lua配置文件所处路径:
                 /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

可以看到我将最小启动读写分离连接数改成1,然后下一步就可以启动mysql-proxy,启动时需要指定主从服务器:
./mysql-proxy \--proxy-read-only-backend-addresses=49.232.154.38:3306 \--proxy-backend-addresses=49.235.28.88:3306 \--log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log \--proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &


接下来我们可以先看下几个配置参数的含义:
  • --proxy-read-only-backend-addresses:配置只读从数据库

  • --proxy-backend-addresses:配置主服务器

  • --proxy-lua-script:rw-splitting.lua脚本路径

  • &:表示后台执行mysql-proxy。

  • --log-file:日志文件存放路径

可以看到上面截图中,我们成功将mysql-proxy启动,接下来我们就需要测试下读写分离是否可以生效。首先我们需要保证主从同步已经成功配置,而这步操作上一篇我们测试完全没问题了。首先我们登录从数据库关闭主从同步并查看当前test1数据表中的现有数据:


mysql-proxy 端口配置在4040,接下来使用昨天创建用于主从同步的root账号登录4040端口,插入几条数据:

接下来查看主数据库test1数据表的数据:

然后再查看从数据库test1数据表的数据:
所以可以发现我们写数据的时候是写入到主数据库中,也就是写操作已经成功分离了。
然后接着继续使用root账号查询test1数据表的数据:

可以看到查出来的数据是从数据库的数据,因为结果只有一条,如果来自于主数据库应该有我们刚才新插入的三条数据,所以可以证明我们的读操作分离也成功了,到这里我们主从同步和读写分离全部配置成功,我们在项目中就可以使用这个4040端口的root用户来代理数据库操作,如果是写操作则代理到主数据库去执行,如果属于读操作则代理到从数据库去执行,实现Mysql读写分离。

mysql-proxy执行流程简析

我们这里测试是为了方便采取一主一从的架构去测试,但是很多时候后端Mysql服务不止一个,我们最后来大致了解下mysql-proxy的工作流程:

  • 实际上客户端向mysql-proxy发起连接时会调用connect_server()函数,如果没有实现这个函数,则mysql-proxy默认使用轮询方式找到合适的客户端代理请求给客户端。

  • 用户进行账号权限验证时传递账号密码等信息,mysql-proxy会调用read_auth()函数,当后端mysql服务向mysql-proxy认证结果时,mysql-proxy则会调用read_auth_result()然后给客户端返回认证结果。

  • 认证成功。客户端每次发起请求mysql-proxy都会调用read_query()来处理中间具体转发的业务逻辑,然后在后端mysql服务向mysql-proxy传递查询结果时,调用read_query_result()对结果集进行一系列处理,最后将结果集返回给客户端。

关于Mysql中怎么读写分离问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 数据库 主从 配置 客户 处理 客户端 成功 结果 代理 同步 服务 接下来 数据表 账号 问题 测试 函数 实际 实际上 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网和科技技术 科技企业和互联网企业 金融科技创新监管互联网金融 朗涯互联网科技 宜安科技 互联网金融 奔汉互联网科技 互联网金融 科技创新 互联网科技大会案例 华脉科技工业互联网产品 青海科技产业互联网发展 互联网企业科技类企业如何做账 智帮互联网科技公司最近动向 黑云互联网科技有限公司 杭州披云加互联网科技有限公司 四川互联网展示科技馆设计 东营紫格互联网科技 广州梦谷互联网科技有限公司领导 互联网界的黑科技 玉溪新华互联网科技怎么选 知域互联网科技有限公司官网 互联网科技会 与互联网科技公司 卓越科技(互联网 ) 互联网金融科技创新 山东吉时兔互联网科技有限公司 承德科技产业互联网发展 互联网科技人工智能实验室 锡山区互联网智能科技产品供应 广州百诚互联网科技有限公司官网 互联网科技平台产品运营
0