DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层

Last update: Jul 31, 2022

###一、简介

DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性。目前DBProxy在美团点评广泛应用,包括美团支付、酒店旅游、外卖、团购等产品线,公司内部对DBProxy的开发全面转到github上,开源和内部使用保持一致。目前只支持MySQL(Percona)5.5和5.6。

主要功能:

  1. 读写分离
  2. 从库负载均衡
  3. IP过滤
  4. 分表
  5. DBA可平滑上下线DB
  6. 自动摘除宕机的DB
  7. 监控信息完备
  8. SQL过滤
  9. 从库流量配置

###二、DBProxy相对于奇虎360公司开源Atlas的改进

  1. 修改了部分bug并且新增了一些feature,详见release notes
  2. 提供了丰富的监控信息,大量参数可配置化并且支持动态修改
  3. 对原有的诸如日志等模块进行了优化,性能提升明显
  4. 开源版本即为目前美团点评内部使用版本,并将一直对源码及其文档进行维护

###三、DBProxy详细说明

  1. DBProxy快速入门教程
  2. DBProxy用户使用手册
  3. DBProxy开发手册
  4. DBProxy架构和实践
  5. DBProxy release notes
  6. DBProxy 测试手册
  7. FAQ
  8. DBProxy开发规范

###四、DBProxy的需求及Bug反馈方式

如果用户在实际的应用场景中对DBProxy有新的功能需求,或者在使用DBProxy的过程中发现了bug,在github上进行交流或是PullRequest,后续将会建立DBProxy的公众号以及讨论组/群方便大家的使用和版本的维护。

QQ

QQ

注意:QQ群1已经满员,请加入QQ群2(550320610)。

GitHub

https://github.com/Meituan-Dianping/DBProxy
Comments
  • 1. 发现俩个地方有点问题

    1. set names utf8 collate utf8_unicode_ci; 设置该字符集报错
    2. Exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[07000]: <>: 1105 Proxy Warning - Syntax Forbidden Prepare:select * from pt_client where pt_client.id = ? limit 1 (SQL: select * from pt_client where pt_client.id = 8005 limit 1)' 在执行语句时候出错
    Reviewed by arnolix at 2017-02-09 08:27
  • 2. 运行bootstrap.sh时提示--with-mysql=/path/to/mysql_config

    configure: error: mysql_config not exists or not executable, use $ ./configure --with-mysql=/path/to/mysql_config

    请教下mysql_config是指那个配置文件,/etc/my.cnf ,还是其他配置文件!

    Reviewed by huangmeng4520 at 2017-01-19 02:47
  • 3. 读写分离不生效,所有的查询全部执行到了主库上

    主从配置如下:

    mysql> select * from backends; +-------------+--------------------+----------+-------+------+--------+---------+-----------------+ | backend_ndx | address | hostname | state | type | weight | tag | threads_running | +-------------+--------------------+----------+-------+------+--------+---------+-----------------+ | 1 | 192.168.1.109:3306 | | up | rw | 0 | NULL | 0 | | 2 | 192.168.1.108:3306 | | up | ro | 10 | 252_108 | 0 | +-------------+--------------------+----------+-------+------+--------+---------+-----------------+ 2 rows in set (0.00 sec)

    抓取的sql日志如下:

    2018-01-03 19:13:04.14733: C:192.168.1.109:61231 C_db:xxxxxxx C_usr:xxxxxxx Query select * from adbasic where adID = '2196960568155587068' 2018-01-03 19:13:04.15501: C_begin:2018-01-03 19:13:04.14729 C:192.168.1.109:61231 C_db:xxxxxxx C_usr:store S:192.168.1.109:3306(thread_id:326231) S_db:xxxxxxx S_usr:xxxxxxx inj(type:4 bytes:267 rows:1) 0.713(ms) OK Query:select * from adbasic where adID = '2196960568155587068'

    Reviewed by k4124k at 2018-01-03 11:14
  • 4. git 没有读取权限

    [email protected]:~$ git clone [email protected]:Meituan-Dianping/DBProxy.git Cloning into 'DBProxy'... Permission denied (publickey). fatal: Could not read from remote repository.

    Please make sure you have the correct access rights and the repository exists.

    Reviewed by b0123456789 at 2017-01-19 01:57
  • 5. 安装和启动报错。

    ** (process:40117): CRITICAL **: chassis-frontend.c:79(chassis_frontend_init_glib)GLib version too old (micro mismatch), got: lib=2.42.0, headers=2.56.1

    我修改安装用 : lib=2.42.0 但是 make 会子又用glib 2.0?什么鬼啊?

    Reviewed by ShenHongKun at 2021-12-23 07:54
  • 6. 不支持mysql-connector-java 6.0.6 吗

    项目里用的JDBC驱动 mysql-connector-java 6.0.6,直连mysql是ok的,连接proxy报错: java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is require

    驱动版本改为mysql-connector-java 5.1.46 ,并将driverClassName由com.mysql.cj.jdbc.Driver改为com.mysql.jdbc.Driver就OK了

    但是有点担心驱动版本的变更并且固定死会有隐患,这个真的是不支持吗,还是我使用方式不对

    Reviewed by RaelLiu at 2019-05-17 03:43
  • 7. 支持多子表联合查询不?

    有两张表A, B, 他们都是大数据表,将他们按各自的分表键分表之后变成了A_0, A_1, B_0, B_1. select a.name, b.name as n2 from A a INNER JOIN B b on a.xx= b.yyy where a.shardingKey=xxx and b.shardingKey=yyy

    最终不会生成分表 的join语句类似(e.g. select a.name, b.name as n2 from A_0 a inner join B_1 b on a.xx=b.yyy)

    Reviewed by jmbkeyes at 2019-04-19 07:11
Related tags