服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - mysql 读写分离(基础篇)

mysql 读写分离(基础篇)

2019-10-26 19:14mysql教程网 Mysql

MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。

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

  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)。 

延伸 · 阅读

精彩推荐
  • MysqlMySQL删除表时I/O错误的原因分析与解决

    MySQL删除表时I/O错误的原因分析与解决

    这篇文章主要给大家介绍了关于MySQL删除表时I/O错误的原因分析与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    腾讯云加社区1922019-06-30
  • MysqlMySQL里面的子查询实例

    MySQL里面的子查询实例

    最近学习php+mysql执行操作,发现了这一篇实例代码 ...

    mysql技术网1732019-10-21
  • Mysqlmysql中的锁机制深入讲解

    mysql中的锁机制深入讲解

    对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能例外。下面这篇文章主要给大家介绍了关于mysql中锁机制的相关资料,文中通过示例...

    木瓜芒果3852019-06-16
  • Mysqlgolang实现mysql数据库备份的操作方法

    golang实现mysql数据库备份的操作方法

    这篇文章主要介绍了golang实现mysql数据库备份的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    zhoutk2242019-07-08
  • Mysql如何提高MySQL Limit查询性能的方法详解

    如何提高MySQL Limit查询性能的方法详解

    今天小编就为大家分享一篇关于如何提高MySQL Limit查询性能的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    CODETC2192019-06-24
  • MysqlMySQL SQL 语法参考

    MySQL SQL 语法参考

    MySQL SQL 语法参考...

    mysql技术网1952019-10-15
  • Mysql数据库性能测试之sysbench工具的安装与用法详解

    数据库性能测试之sysbench工具的安装与用法详解

    sysbench是一个很不错的数据库性能测试工具,这篇文章主要给大家介绍了关于数据库性能测试之sysbench工具的安装与用法的相关资料,文中通过示例代码介绍...

    骏马金龙2542019-07-02
  • MysqlMySQL5.0存储过程教程

    MySQL5.0存储过程教程

    Introduction 简介 MySQL 5.0 新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的。简单的来说是介绍了“存储过程、触发器、视图、信息架构视图”,在此...

    mysql教程网3892019-10-22