Coder Social home page Coder Social logo

meituan-dianping / dbproxy Goto Github PK

View Code? Open in Web Editor NEW
2.2K 202.0 562.0 15.7 MB

License: GNU General Public License v2.0

Makefile 11.49% Shell 10.51% C 55.58% M4 0.59% HTML 0.50% Lua 8.31% Lex 0.40% C++ 5.80% DTrace 0.04% PHP 4.40% SourcePawn 0.68% Assembly 1.70%

dbproxy's Introduction

###一、简介

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

dbproxy's People

Contributors

datoutie avatar fatelei avatar jixianliang avatar kenyh0926 avatar rj03hou avatar tangshd avatar tsthght avatar woihzh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dbproxy's Issues

更新文档注明glib的版本

使用centos:6.6默认yum源的glib2.x86_64的版本是2.28.8-4.el6,版本过低,导致DBProxy编译不通过。
make报错:

field has incomplete type

git 没有读取权限

vagrant@vagrant-ubuntu-trusty:~$ 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.

threadrunning限流时逻辑优化

1.threadrunning过高时,事务中的连接应该不受影响,可以继续执行
2.如果发现backend不可用并且事务没有开始,则重选backend

完善sql 日志中有关SQL流转的各个时间点

比如: 接收到SQL的时间点,开始发送给Mysql时间点, 发送mysql完成时间点,开始接收结果时间点,接收完成时间点,结果发送开始时间点,结果发送完成时间点。

连接池优化

前端连接断开,后端连接放回连接池;针对PHP短连接的场景

配置文件的错误提示信息不太好定位。

https://github.com/Meituan-Dianping/DBProxy/blob/master/doc/USER_GUIDE.md

这个里面:

 #日志缓冲大小(日志条数),默认500
 sql-log-buffer-size=

应该把 500 写进去。

否则:

Program received signal SIGSEGV, Segmentation fault.
0x000000000041093d in main_cmdline (argc=1, argv=0x7fffffffe478) at mysql-proxy-cli.c:866
866			g_critical("%s: %s", G_STRLOC, gerr->message);
(gdb) bt
#0  0x000000000041093d in main_cmdline (argc=1, argv=0x7fffffffe478) at mysql-proxy-cli.c:866
#1  0x00007ffff67b9f45 in __libc_start_main (main=0x40ec90 <main>, argc=2, argv=0x7fffffffe478, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe468) at libc-start.c:287
#2  0x000000000040ecbe in _start ()
(gdb) p argc_p
No symbol "argc_p" in current context.
(gdb) p argv
$1 = (char **) 0x7fffffffe478
(gdb) p *argv
$2 = 0x7fffffffe6db "/usr/local/mysql-proxy/bin/mysql-proxy"
(gdb) quit
A debugging session is active.

    Inferior 1 [process 26534] will be killed.

不好定位是那一个初始化失败。

SQL处理模块增强

  1. 简单SQL校验,如IN的后面数组过大检查
  2. 做一些SQL解析,对诸如IN、子查询、JOIN操作做一定的识别,高风险的预警甚至拒绝操作,保护server端
  3. 慢SQL黑名单,防止同一条慢SQL多次执行。同一条慢SQL第二次提交过来时,自动丢弃
  4. 返回结果集太大报警
    ...

发现俩个地方有点问题

  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)' 在执行语句时候出错

代码重构

  1. 某块之间解耦
  2. 提高性能和资源利用率(性能、内存、CPU等)

set character 出错

hi, dbproxy是很优秀的,公司在使用过程中,发现 set character 报错, 公司php框架是自带设置字符集的, 建议支持下 设置字符集,谢谢

check_state()中重试逻辑修正

  1. master的可用性靠MHA保证

  2. 不做threadrunning限流

  3. https://dev.mysql.com/doc/refman/5.7/en/error-messages-client.html

         /* what about mointor_user/pwd is NULL ? */
         m = j = k = 0;
         while (m < config->check_state_retry_times) {
         mysql_real_connect(&mysql, ip, monitor_user, monitor_pwd, NULL, port, NULL, 0);
             if (mysql_errno(&mysql) == 0) {
                 break;
             } else if (mysql_errno(&mysql) == CR_SERVER_LOST) {
                 m++;
                 g_warning("%s(%s): due to %s, retry %dth times to connect backend %s",
                                       G_STRLOC, __func__, mysql_error(&mysql),
                                       m, backend->addr->name->str);
                 sleep(config->check_state_sleep_delay);
             } else {
                 break;
             }
         }
    

用户管理查询优化

select * from pwds修改成select * from users
monitor 信息放在select * from pwds中展示

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.