mysql中间件有哪些?

mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。

Atlas

Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

Altas架构:

Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

以下是一个可以参考的整体架构,LVS前端做负载均衡,两个Altas做HA,防止单点故障。

Altas的一些新特性:

1.主库宕机不影响读

主库宕机,Atlas自动将宕机的主库摘除,写操作会失败,读操作不受影响。从库宕机,Atlas自动将宕机的从库摘除,对应用没有影响。在mysql官方的proxy中主库宕机,从库亦不可用。

2.通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线。

3.自己实现读写分离

(1)为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加/*master*/就可以将读请求强制发往主库。

主库可设置多项,用逗号分隔,从库可设置多项和权重,达到负载均衡。

4.自己实现分表

(1)需带有分表字段。

(2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。

(3)支持多个子表查询结果的合并和排序。

这里不得不吐槽Atlas的分表功能,不能实现分布式分表,所有的子表必须在同一台DB的同一个database里且所有的子表必须事先建好,Atlas没有自动建表的功能。

5.之前官方主要功能逻辑由使用lua脚本编写,效率低,Atlas用C改写,QPS提高,latency降低。

6.安全方面的提升

(1)通过配置文件中的pwds参数进行连接Atlas的用户的权限控制。

(2)通过client-ips参数对有权限连接Atlas的ip进行过滤。

(3)日志中记录所有通过Altas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行成功与否、执行所耗费的时间,如下面例子。

sqlserver读写分离中间件_mysql读写分离中间件

mysql读写分离,应用层分离好还是中间层好

应用层分离:控制上的灵活度更高,实现也简单,随时可以调整策略。但带来的问题就是增加应用层的复杂性以及额外的开发工作,均衡设置、安全防护、分流什么的,不太好加强。适合中小型项目吧,毕竟到后期的扩容方面有点麻烦。

中间层分离:专业的事还是专业的proxy来负责,应用层专心做应用层的事,中间层按规则做读写的分离。扩容均衡起来得心应手,连接池、健康切换,这样都是应用层无法实现的。适合大型超大型项目

本回答由提问者推荐

目前有什么优秀的实现mysql读写分离的方案

这个要分开来看

1.高可用且性能稳定可靠;

这个属于架构上的,架构上要做高可用,和中间件没关系

2.能够很好的解决脑裂问题;

架构上可以解决

3.能够解决主从数据库之间的数据同步时的延迟导致数据访问不一致的问题。

这个中间件没办法解决,要不你买san,要不你使用DRBD,但是DRBD效率比较差,还有就是确认数据复制到从库后,主库事务再提交,网易开源的一个mysql分支有这个功能

目前个人认为比较好的是dbware,atlas没用过,但是我看是基于MySQL-Proxy,这玩意配置有的复杂mysql读者分离可以通过存储过程来实现。 除了数据库管理员外设置其他用户只有读数据表的权限,而写数据表则通过后存储过程实施,将运行存储过程的权限赋予普通用户就行了。或者干脆将所有的数据表权限收起来,应用程序端只能通过存储过程读写数据库,这样做更加彻底。 使用存储过程不仅可以很好的实现读写分离、便于编制和实现复杂的企业规则与业务逻辑,而且它可以有效的防止sql注入。当然这样会加大服务器端的系统开销,作为系统开发者应根据实际情况做出取舍。

sqlserver读写分离中间件_mysql读写分离中间件_02

mysql读写分离原理是什么?要如何操作?

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。

而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。

当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。

而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。slave从服务器(ubuntu)

(1)找到mysql安装文件夹修改my.cnf文件,vim my.cnf

(2) ./support-files/myql.server restart 重启mysql服务 , ./bin/mysql 进入mysql命令窗口

(3)连接master

change master to master_host='192.168.0.104', //master 服务器ip

master_port=3306,

master_user='repl',

master_password='mysql',

master_log_file='master-bin.000001',//master服务器产生的日志

master_log_pos=0;

(4)启动slave

start slave;要了解mysql读写分离,首先要了解MySQL-Proxy。

MySQL-Proxy是处在你的MySQL数据库客户和服务端之间的程序,这个代理可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:

(1)负载平衡和故障转移处理

(2)查询分析和日志

(3)SQL宏(SQL macros)

(4)查询重写(query rewriting)

(5)执行shell命令

MySQL Proxy更强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

MySQL读写分离

数据库Master主服务器:192.168.10.130

数据库Slave从服务器:192.168.10.131

内容太多。。。。请楼主自行到该文章中查看吧,百度搜索“急速蚂蚁”或者“jisumayi.com”即可