基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

Jan Kneschke在《MySQL Proxy learns R/W Splitting》中详细的介绍了这种技巧以及连接池问题:

为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当进入到查询/返回结果的阶段再认证新连接就太晚了。我们必须保证拥有足够的打开的连接才能保持运作正常。

实现读写分离的LUA脚本:

-- 读写分离

--

-- 发送所有的非事务性Select到一个从数据库

if is_in_transaction == 0 and

packet:byte() == proxy.COM_QUERY and

packet:sub(2, 7) == "SELECT" then

local max_conns = -1

local max_conns_ndx = 0

for i = 1, #proxy.servers do

local s = proxy.servers[i]

-- 需要选择一个拥有空闲连接的从数据库

if s.type == proxy.BACKEND_TYPE_RO and

s.idling_connections > 0 then

if max_conns == -1 or

s.connected_clients < max_conns then

max_conns = s.connected_clients

max_conns_ndx = i

end

end

end

-- 至此,我们找到了一个拥有空闲连接的从数据库

if max_conns_ndx > 0 then

proxy.connection.backend_ndx = max_conns_ndx

end

else

-- 发送到主数据库

end

return proxy.PROXY_SEND_QUERY

注释:此技巧还可以用来实现其他的数据分布策略,例如分片(Sharding)。

mysql 读写分离 事务_mysql 读写分离(基础篇)相关推荐

  1. mysql读写分离实现事务_Mysql读写分离后的事务ce

    1 .概述 很多人会有这样的疑问,mysql读写分离后,我的事务怎么处理呢. 不是说mysql不支持跨库事务吗? 那我引入mycat这个中间件后事务是否是安全的呢,它是怎么运作的呢. 今天我们就来实验 ...

  2. mysql的读写分离技术_mysql 读写分离方法

    数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案. 比较常见的读写分离方案如下: 1 基于查询分离 最简单的分离方法是将读和写分发到主和从服务器上,这种策略很容易实现,但是仅限于一 ...

  3. mysql中的事务_mysql中的事务,你理解嘛?

    事务又叫做TCL,全称是transaction control language,意思是事务控制语言.这篇文章还是属于我的mysql基础文章,在前面我们介绍了下面这些基础知识: 1.数据库的增查改删操 ...

  4. mysql读写分离 存储过程_MySQL读写分离 · wang-y/Technical-Information Wiki · GitHub

    MySQL读写分离 1.主(master)从(slave)服务器上安装mysql; 2.配置步骤 主服务器master 配置: mysql 配置文件添加:(windows: my.ini;linux: ...

  5. linux mysql io压力大_MySQL 调优基础(四) Linux 磁盘IO_MySQL

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  6. mysql会话和事务_MySQL事务熟练使用就够?和腾讯大佬的一席对话,原来考点都在这些方面!...

    苍茫大地一剑尽挽破,何处繁华笙歌落. 难道这普天之下尽没我容纳之处?为何这面试官总要与我争风相对,这不是难为人吗? 每次经历痛领悟,总会悠然南山下,独自愁楚.记录心中一片大海,唯有独自努力,方能实现行 ...

  7. mysql sql 语句事务_MySQL: 3、SQL语言 ②约束、事务

    一.SQL 约束 1.约束的作用: 对表中的数据进行进一步的限制,从而保证数据的正确性.有效性.完整性.违反约束的不正确数据将无法插入到表中 2.常见的约束: 3.主键约束: -- 特点: 不可重复. ...

  8. mysql 自定义函数 事务_MySQL存储过程、触发器、自定义函数、事务

    1.存储过程 MySQL中存储过程的参数中有IN.OUT.INOUT类型,但是函数的参数只能是IN类型的. "in" 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过 ...

  9. mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)

    试想,事务如果都是串行的,那么就不需要锁了,但是性能肯定没法接受.加锁只是为了提高事务并行度,并且解决并发事务执行过程中引起的脏写.脏读.不可重复读.幻读这些问题的一种解决方案(MVCC算是一种解决脏 ...

  10. mysql索引和事务_MySQL事务和索引

    课程描述: 先修条件 所有对数据库感兴趣的人群,建议先学习或掌握以下技能: MySQL数据库操作  课程 技能描述 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACI ...

最新文章

  1. 转载模板声明中template typename T和template class T
  2. Part8 多态性 8.2虚函数
  3. 面向对象三大特性,六个原则
  4. 大牛书单 | 数据库专题好书分享
  5. myeclipse导入项目报错Target runtime Apache Tomcat v8.0 is not defined
  6. os和shutil模块
  7. 掌握MySQL数据库这些优化技巧,事半功倍!
  8. python中队列的应用用场景_消息队列使用的四种场景介绍
  9. 3.以每行一个单词的形式打印其输入
  10. 使用Tasker和企业微信实现在安卓手机自动转发短信至微信
  11. 单月销量破万台,FITURE治好了健身镜的“水土不服”?
  12. 使用ADB 查看模拟器得日志,unity得日志 以及保存
  13. 【torch.optim】优化器的使用 / 学习率的调整 / SWA策略
  14. python 通过tif文件生成经度和纬度的二维矩阵
  15. v90绝对值编码器回零_由“V90使用绝对值编码器掉电后位置丢失”所想到的
  16. 不带头结点的单链表c语言,数据结构:C语言实现----不带头结点单链表总结
  17. Vue 点击文字改变文字颜色
  18. 360网站卫士常用前端公共库CDN服务
  19. UVM中的TLM机制
  20. jenkins插件下载地址

热门文章

  1. 在linux系统下忘记了root密码,教你在Linux系统中解决忘记root口令密码的方法
  2. 纯js油猴插件版GUI页面助手
  3. 如何将word图片粘贴到动易CMS里面
  4. php uchome,Uchome1.2 1.5 代码学习 common.php
  5. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(7):信号通讯
  6. 鼎利软件测试终端刷机,你怎样把鼎利路测设备调试好?
  7. 磁带非但没被淘汰,容量还比硬盘大了???
  8. openGL 例子:创建一个二十面体
  9. AutoRunner不能录制脚本的解决办法
  10. 我的前半生之十一,创业维艰,人生百态