介绍

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相关推荐

  1. mysql的sql执行原理图_性能测试MySQL之SQL运行原理

    一,MySQL运行原理 两个一样的图 1,SQL语句执行的过程详细说明 如上图所示,当向MySQL发送一个请求的时候,MySQL到底做了什么: a, 客户端发送一条查询给服务器. b, 服务器先检查查 ...

  2. centos mysql 实战 第一节课 安全加固 mysql安装

    centos mysql  实战  第一节课   安全加固  mysql安装 percona名字的由来=consultation 顾问+performance 性能=per  con  a mysql ...

  3. mysql到底是什么_MySQL数据库之MySQL到底是什么

    本文主要向大家介绍了MySQL数据库之MySQL到底是什么 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. Mysql是一个数据库系统. 为了理解Mysql到底是什么,我们可以把 ...

  4. 查看mysql临时密码_MySQL修改密码,查看MySQL临时密码

    一.查看MySQL临时密码 Linux安装好MySQL后,为了增加数据库的安全性,在安装时会为root用户生成一个临时的随机密码,存放在/var/log/mysqld.log 中. [root@loc ...

  5. MySQL监控:MySQL监控指标、MySQL监控界面实现、Python监控MySQL

    本文概要: 0.前言:         1.监控MySQL的哪些指标:         2.一目了然的MySQL监控的UI界面:         3.Python代码获取MySQL监控状态. 0.前言 ...

  6. mysql2013年8月怎么打出来_2020年8月31日,上周完成了一个查询接口来检查mysql的数据,速度很慢,20200831,从,MySQL,中查,贼...

    2020-08-31 上周完成一个查询接口,从MySQL中查数据,速度贼慢, 原因是数据5000万+,所以真正接触优化的机会来了,所以决定好好研究一下,做一个记录. 事情是这样的,mysql表中只有两 ...

  7. php mysql多重筛选,如何使用php、html、mysql构建一个多重分类选择列表

    不适用javascript,完全通过php实现多级列表选择,列表数据从数据库获取 A very simple way to build and do a hierarchical html categ ...

  8. mysql中一个表最多能有几个auto_mysql--一个表上可以指定几个auto_increment

    auto_increment测试: 一个表是否可以有多个列使用auto_increment? 只有一个列使用auto_increment: mysql> create table tab_aut ...

  9. 数据由SqlServer2008转移到MySQL的一个方法

    数据由SqlServer2008转移到MySQL的一个方法 1.将数据从SqlServer导出到Excel文件中,方法http://www.cnblogs.com/hewenwu/p/3684629. ...

最新文章

  1. SVM(支持向量机)之Hinge Loss解释
  2. 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )
  3. Web.config详解
  4. 钉钉微应用怎么进入_钉钉微应用开发免登流程
  5. Fedora 18 下安装 mplayer
  6. 如何落地云原生DevOps?
  7. CCF201809-2 买菜
  8. SpringBoot 优雅的配置拦截器方式
  9. 亚马逊CEO贝索斯将飞往太空;字节跳动获得“字节汽车”商标;谷歌被法国反垄断机构罚款 2.2 亿欧元|极客头条...
  10. Java给树加子节点个数统计
  11. c语言考试笔试技巧,全国二级C语言,要考试了这些技巧你知道么?
  12. 这些年,我身边的那些人和事
  13. 运用PS制作3G、4G、5G、6G矢量图方法
  14. 【计算机网络】Stanford CS144 学习笔记
  15. 计算机硬件系统的主要性能指标
  16. grok java_Java Grok.match方法代码示例
  17. Linux安全原理简介
  18. 家用路由器技术深入剖解
  19. 基于matlab的傅里叶变换
  20. 《简约之美-软件设计之道》- 笔记

热门文章

  1. Java中的构造函数和重载
  2. CentOs Linux 文件位置标记
  3. view里文书删除时报错的解决案
  4. paho.mqtt.embedded-c-master c语言版本架构
  5. V3S中换2.0寸LCD时MINIGUI无显示的问题的解决过程
  6. AB1601定时器timer0,timer1简介
  7. 区块链BaaS云服务(33)印度国家支付 Vajra Platform
  8. (chap1 网络基础知识)网络的构成要素
  9. C++ Primer 5th笔记(9)chapter9 顺序容器 构造和赋值
  10. 近世代数--素理想--I是R的素理想↔R/I是整环