golang mysql proxy_mixer: 一个用go实现的mysql proxy
介绍
mixer是一个用go实现的mysql proxy,支持基本的mysql代理功能。
mysql的中间件很多,对于市面上面现有的功能强大的proxy,我主要考察了如下几个:
mysql-proxy,mysql官方的代理,使用起来并不友好,需要进行lua定制,而且本人对其稳定性和性能存疑。
Cobar,阿里的东西,品质没的说,但对于我们项目,有点杀鸡用牛刀的感觉,另外我们都不会java。
Atlas,360出品的基于mysql-proxy的增强版,几乎用c重写了核心框架,性能和稳定性都没话说。
当然,还有很多强大的proxy,我不可能一一涉及,而现阶段我们项目中使用的是Atlas(这算不算给Atlas打了一个广告?)。
既然有这么多的proxy,为什么我还想自己实现一个呢?可能最主要的原因在于兴趣使然吧。
mysql功能支持
当开始着手进行mixer开发的时候,我就知道,mixer不是mysql,它不可能proxy所有mysql的功能。所以,我决定mixer只支持如下mysql命令:
COM_QUERY
select, insert, update, delete, replace
set autocommit
set names
begin, commit, rollback
COM_PING
COM_INIT_DB
COM_STMT_PREPARE, COM_STMT_EXEC等COM_STMT_*命令,仅支持上述COM_QUERY命令的prepare
[mixer](https://github.com/siddontang/mixer不支持命令挺多的,列举一些:
set variable。如果支持,mixer需要维护每一个变量的状态,增加了复杂度。但mixer支持autocommit和names的设置。
sql text模式的prepare statement。
show命令。
存储过程。
虽然很多功能现阶段没有,但不排除后续支持。
高可用方案
mixer提供了一套mysql高可用使用方案,现阶段主要功能如下:
读写分离,将select发送到slave,其余发送到master执行,事物所有在master执行。现阶段只支持一主一备。
主备自动切换,当主mysql不可用,根据相关规则切换到backup mysql执行。
Todo
mixer还不完善,很多功能需要实现,后续优先需要实现的功能:
parser,将sql进行语法解析,构建AST,在proxy层面就防止一些mysql隐患,譬如注入攻击,delete没有where等。
自定义路由,根据路由规则将sql路由到不同mysql执行。譬如根据主键将select语句hash到不同的slave上面执行。
统计功能。
代码在这里https://github.com/siddontang/mixer。非常希望对proxy感兴趣的童鞋参与进来,共同完善mixer,使其成为另一个mysql中间件解决方案。
golang mysql proxy_mixer: 一个用go实现的mysql proxy相关推荐
- mysql的sql执行原理图_性能测试MySQL之SQL运行原理
一,MySQL运行原理 两个一样的图 1,SQL语句执行的过程详细说明 如上图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么: a, 客户端发送一条查询给服务器. b, 服务器先检查查 ...
- centos mysql 实战 第一节课 安全加固 mysql安装
centos mysql 实战 第一节课 安全加固 mysql安装 percona名字的由来=consultation 顾问+performance 性能=per con a mysql ...
- mysql到底是什么_MySQL数据库之MySQL到底是什么
本文主要向大家介绍了MySQL数据库之MySQL到底是什么 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Mysql是一个数据库系统. 为了理解Mysql到底是什么,我们可以把 ...
- 查看mysql临时密码_MySQL修改密码,查看MySQL临时密码
一.查看MySQL临时密码 Linux安装好MySQL后,为了增加数据库的安全性,在安装时会为root用户生成一个临时的随机密码,存放在/var/log/mysqld.log 中. [root@loc ...
- MySQL监控:MySQL监控指标、MySQL监控界面实现、Python监控MySQL
本文概要: 0.前言: 1.监控MySQL的哪些指标: 2.一目了然的MySQL监控的UI界面: 3.Python代码获取MySQL监控状态. 0.前言 ...
- mysql2013年8月怎么打出来_2020年8月31日,上周完成了一个查询接口来检查mysql的数据,速度很慢,20200831,从,MySQL,中查,贼...
2020-08-31 上周完成一个查询接口,从MySQL中查数据,速度贼慢, 原因是数据5000万+,所以真正接触优化的机会来了,所以决定好好研究一下,做一个记录. 事情是这样的,mysql表中只有两 ...
- php mysql多重筛选,如何使用php、html、mysql构建一个多重分类选择列表
不适用javascript,完全通过php实现多级列表选择,列表数据从数据库获取 A very simple way to build and do a hierarchical html categ ...
- mysql中一个表最多能有几个auto_mysql--一个表上可以指定几个auto_increment
auto_increment测试: 一个表是否可以有多个列使用auto_increment? 只有一个列使用auto_increment: mysql> create table tab_aut ...
- 数据由SqlServer2008转移到MySQL的一个方法
数据由SqlServer2008转移到MySQL的一个方法 1.将数据从SqlServer导出到Excel文件中,方法http://www.cnblogs.com/hewenwu/p/3684629. ...
最新文章
- SVM(支持向量机)之Hinge Loss解释
- 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )
- Web.config详解
- 钉钉微应用怎么进入_钉钉微应用开发免登流程
- Fedora 18 下安装 mplayer
- 如何落地云原生DevOps?
- CCF201809-2 买菜
- SpringBoot 优雅的配置拦截器方式
- 亚马逊CEO贝索斯将飞往太空;字节跳动获得“字节汽车”商标;谷歌被法国反垄断机构罚款 2.2 亿欧元|极客头条...
- Java给树加子节点个数统计
- c语言考试笔试技巧,全国二级C语言,要考试了这些技巧你知道么?
- 这些年,我身边的那些人和事
- 运用PS制作3G、4G、5G、6G矢量图方法
- 【计算机网络】Stanford CS144 学习笔记
- 计算机硬件系统的主要性能指标
- grok java_Java Grok.match方法代码示例
- Linux安全原理简介
- 家用路由器技术深入剖解
- 基于matlab的傅里叶变换
- 《简约之美-软件设计之道》- 笔记
热门文章
- Java中的构造函数和重载
- CentOs Linux 文件位置标记
- view里文书删除时报错的解决案
- paho.mqtt.embedded-c-master c语言版本架构
- V3S中换2.0寸LCD时MINIGUI无显示的问题的解决过程
- AB1601定时器timer0,timer1简介
- 区块链BaaS云服务(33)印度国家支付 Vajra Platform
- (chap1 网络基础知识)网络的构成要素
- C++ Primer 5th笔记(9)chapter9 顺序容器 构造和赋值
- 近世代数--素理想--I是R的素理想↔R/I是整环