Mysql 中间件 oneProxy总结

article/2025/10/6 4:06:38

建议使用之前把官方的文档全部通读一遍 这里提供一个我的网盘地址oneproxy 百度网盘

0. 先对 oneproxy 有个大概的了解,知道他所处的位置

这里写图片描述
这里写图片描述

1. MySQL服务器

  1. 创建test用户,密码test
  2. 存在test数据库
  3. 确认oneproxy能登录

1.1 注意事项

  1. 所有MySQL节点有相同的用户名和口令
  2. 所有MySQL节点有相同的数据库名
  3. 所有MySQL节点使用相同的字符集设置
  4. 前端应用程序可以切换操作集群
    • 命令:use groupname
  5. 前端应用程序不能切换MySQL数据库

2. OneProxy 服务器

  1. 可以和Mysql共同一台机器
  2. 默认client port 3307
    1. mysql -utest -ptest -h 127.0.0.1 -P3307
  3. 默认admin port 4041
    1. mysql -uadmin -pOneProxy -h 127.0.0.1 -P4041

2.1 OneProxy 单机多实例

  1. OneProxy 单实例占用两个端口33074041,所有只要保证端口不重复, 就可以保证单机启动多个实例
  2. 多实例只要换不同端口即可

2.2 关闭OneProxy

  1. 后台运行
    1. –keepalive 启动守护进程
    2. 遇到内存Bug Crash 时候,可以自动重启,应用自动重新连接(开启keepalive后,会有一个单独的进程来监控oneproxy
  2. 杀死进程
    1. ps -ef | grep oneproxy
    2. kill -9 所有oneproxy 进程号
  3. 管理端口里面
    1. shutdown force

3. OneProxy 需要自己的验证机制

3.1 链接后端和client的配置

--proxy-user-list=username/password@dbname
--proxy-database: 指定默认数据库
--proxy-charset: 指定数据库字符集, 查看支持的字符集可以登陆到4041的命令窗口执行 list charset; 查看

这里的用户名和密码是提供oneproxy 链接后端mysql使用的,同时也是 client(php,java, python。。。)链接oneproxy 使用的

3.2 管理接口的用户名和密码配置

admin-user=  admin
admin-password=  OneProxy
admin-address=ip:port

密码必须加密,使用管理端口passwd命令生成
mysql -uadmin -pOneProxy -P4041 -c -h ip:port
> passwd test

4. 健康检查

  1. 每秒钟Proxy会和后端进行通信,检测后端数据库状态。
    1. Markup: 正常状态,可以提供服务
    2. Markdown:异常状态,不可以提供服务
  2. 查看状态
    1. 查看后端机器: list backend;
    2. 查看组:list group;
    3. 查看链接池: list pool;
    4. 查看日志文件:tail -100f oneproxy.log

5. 多个数据库

  1. OneProxy的use命令变成切换集群
  2. OneProxy不支持数据库切换
    1. 程序里不可以有use命令(不良习惯)
  3. 可以设定多个用户(不同的默认库)
    1. --proxy-user-list.1=user/pass@数据库名
    2. --proxy-user-list.2=user/pass@数据库名
  4. 如果不指定,则默认的数据库名为
    1. --proxy-database (默认为test)

6. 连接回收

  1. OneProxy 10秒钟检一次连接池。
  2. 自动回收5分钟不使用的连接。
  3. 要求数据库的超时设置大于300秒 + 10秒

    • 确认interactive_timeout设置 [mysqld]
    • 确认net_read_timeout设置
    • 确认net_write_timeout设置

7. 配置主从

proxy-master-addresses.1  = 192.168.2.190:3306@server1:2
proxy-master-addresses.2  = 192.168.2.190:3306@server1:1
proxy-slave-addresses.1  = 192.168.2.190:3306@server1:1
proxy-slave-addresses.2  = 192.168.2.190:3306@server1:1
proxy-slave-addresses.3  = 192.168.2.190:3306@server1:1

addresses.(1,2,3,4): 这代表指定多台主从,
server1:(1,2,3,4): 这个代表该节点的power, 可以理解为负载均衡中的weight值

8. 常用命令

COMMANDSUMMARYSAMPLE
LIST HELPDisplay the command list.list
LIST CHARSETDisplay the charset list.list charset
LIST POLICYDisplay the traffic policy for server group.list policy
LIST BACKENDDisplay info for all the backends.list backend
LIST SEQUENCEDisplay info for all the sequences.list sequence
LIST GROUPDisplay info for all the server groups.list group
LIST POOLDisplay info for all the connection pools.list pool
LIST THREADSDisplay statitics data for all the threads.list threads
LIST TABLEMAPDisplay the map of tables and server groups.list tablemap
LIST USERSDisplay the user list.list users
LIST SQLSTATSDisplay the sql statistics.list sqlstats
LIST TABSTATSDisplay the table statistics.list tabstats
LIST USERSTATSDisplay the user statistics.list userstats
LIST IPSTATSDisplay the IP based perfstats .list ipstats
LIST IPQOSDisplay the IP based request for last 10 seconds .list IPQOS
LIST DBQOSDisplay the backend request for last 10 seconds .list DBQOS
LIST IPTABSTATSDisplay the IP based table statistics.list iptabstats
LIST IPSQLSTATSDisplay the IP based SQL statistics.list ipsqlstats
LIST SQLTEXTDisplay the sql text.list sqltext
LIST DMLTEXTDisplay the sql text of dml operation.list dmltext
LIST NEWTEXTDisplay the sql text gathered by runtime.list newtext
LIST OLDTEXTDisplay the sql text loaded by firewall.list oldtext
LIST SQLFAILDisplay the failed sql in dry run.list sqlfail
LIST BLACKSQLDisplay the black sql text loaded by firewall.list blacksql
LIST TRANS_DEBUGDisplay the table map of transaction.list trans_debug
LIST TABLESDisplay the partition tables.list tables
LIST PARTITIONSDisplay the table partitions.list partitions
LIST OPTIONDisplay the current options.list option
SET MASTERSet a given backend as master backend.set master ‘192.168.1.119:3306’
SET SLAVESet a given backend as slave backend.set slave ‘192.168.1.119:3306’
SET OFFLINESet a given backend as offline backend.set offline ‘192.168.1.119:3306’
SET ONLINESet a given backend as online backend.set online ‘192.168.1.119:3306’
SET POWERSet the power/capacity number for a given backend.set power ‘192.168.1.119:3306’ [1-5]
SET DBQOSSet the QoS limit for a given backend.set power ‘192.168.1.119:3306’ num
SET GPOLICYSet a feature policy for given server group.set gpolicy default 1
SET GMASTERSet the master backend for given server group.set gmaster default 1
SET GACCESSSet the security level for given server group.set gaccess default 1
SET GDELAYSet the maximum slave delay for given server group.set gdelay default 1
SET GMANUALSet manual master mode for given server group.set gmanual default 1
SET POOLMINSet the min idle connections for given backend.set poolmin ‘192.168.1.119:3306’ 5
SET POOLMAXSet the max idle connections for given backend.set poolmax ‘192.168.1.119:3306’ 300
SET SQLSTATSEnable or disable the sql statistics feature.set sqlstats {on
SET IPSTATSClear the ip statistics data.set ipstats {clear}
SET TABSTATSEnable or disable the table statistics feature.set tabstats {on
SET USERSTATSEnable or disable the user statistics feature.set userstats {on
SET TRANS_DEBUGEnable or disable the transaction debug mode.set trans_debug {on
SET LOG_SQLERROREnable or disable the sql error log feature.set log_sqlerror {on
SET SQL_DEBUGEnable or disable the sql debug mode.set sql_debug {on
SET SECURITY_LEVELset the security level of the proxy.set security_level {0-maximum}
SET SQL_FIREWALLEnable or disable the SQL Firewall feature.set sql_firewall {on
SET DML_FIREWALLEnable or disable the DML only Firewall feature.set dml_firewall {on
SET WATCH_MODEEnable or disable the Firewall watch mode.set watch_mode {on
SET SQL_SIGNATUREEnable or disable the SQL signature feature.set sql_signature {on
SET IP_FIREWALLEnable or disable the IP Firewall feature.set ip_firewall {on
SET LOGIN_RESTRICTEnable or disable the login restrict mode.set login_restrict {on
SET STRICT_POOLMAXEnable or disable the stricted pool max mode.set strict_poolmax {on
SET UNSAFE_RESULTEnalbe or disable the unsafe result operation.set unsafe_group {on
SET MULTI_INSERTSEnalbe or disable cross partition operation.set multi_inserts {on
SET FORWARD_CLIENTIPComment the client ip into the SQL text.set forward_clientip {on
SET BLACKIPDisable the access of specific ip address.set blackip ‘192.168.0.1’
SET GREENIPEnable the access of specific ip address.set greenip ‘192.168.0.1’
SET READ_ONLYPut a partition into read only mode.set read_only ‘my_range_0’
SET READ_WRITEPut a partition into writable mode.set read_write ‘my_range_0’
SET PARALLEL_DEGREESet the maximum degree for parallel query.set parallel_degree 8
SET PARALLEL_REQUESTSSet the maximum requests for parallel query.set parallel_requests 512
SET MAX_CACHE_ROWSSet the maximum rows for cache resultset.set max_cache_rows 8
SET MAX_IDLE_TIMESet the maximum idle time for pooled connection.set max_idle_time 60
ADD MASTERAdd a new master(rw) backend to oneproxy.add master ‘192.168.1.120:3306@default’
ADD SLAVEAdd a new slave(ro) backend to oneproxy.add slave ‘192.168.1.120:3306@default’
ADD SEQUENCEAdd a new sequence into oneproxy.add sequence ‘seq_name’
SAVE TABLESsave partition tables to a text file.save tables ‘/tmp/part.txt’
SAVE SQLsave sql list to a text file.save sql ‘/tmp/firewall.sql’
SAVE BLACKSQLsave black sql list to a text file.save blacksql ‘/tmp/blacksql.sql’
SAVE DMLsave dml sql list to a text file.save dml ‘/tmp/firewall_dml.sql’
SAVE NEWsave new sql list to a text file.save new ‘/tmp/firewall_new.sql’
SAVE IPsave ip list to a text file.save ip ‘/tmp/firewall.sql’
LOAD TABLESload partition tables from text file.load tables ‘/tmp/part.txt’
LOAD SQLload firewall sql from text file.load sql ‘/tmp/firewall.sql’
LOAD BLACKSQLload black sql from text file.load blacksql ‘/tmp/blacksql.sql’
LOAD IPload firewall ip list from text file.load ip ‘/tmp/firewall_ip.sql’
MAPMap a table name to a given server group.map my_test1_0 default
UNMAPRemove the server gruop for a given table.unmap my_test1_0
PASSWDEncrypt the password of command options.passwd test
SHUTDOWNShutdown the proxy.shutdown force

9. 开发中的注意事项 (这个是在网上找的,可供参考)

1、不支持 Server Side Cursor 接口,比如 mysql C API 里的 Prepare、Bind、 Execute调用接口

2、不支持 use命令切换数据库

3、默认禁止 CALL, PREPARE, EXECUTE, DEALLOCATE 命令,也就是说不能用存储过程

4、单库(单实例)分表–insert/update/delete要加字段名,如insert into t1(id,name) values(1,’张三’);

5、单库(单实例)分表–目前分了N张表,如果以自增id做关联查询,那么每张表的自增id都是从1开始,在与其他表join关联查询时,数据会不准确

6、单库(单实例)分表–当where条件有分区列时,值不能有函数转换,也不能有算术表达式,必须是原子值,否则结果不准确

7、分库分表(多实例)–不支持垮库join,例如user_0表在10.0.0.1机器里,现在要join关联查询10.0.0.2机器里的money_detail表,不支持

8、分库分表(多实例)–不支持分布式事务,例如user_0表在10.0.0.1机器里,user_1表在10.0.0.2机器里,现在想同时update更新两张表,不支持

9、读写分离 –默认读操作全部访问slave,如果想强制走主库,例如涉及金钱类的查询操作,SQL改为select /master/ from t1 where id=1;

10、分库分表/分表 –where条件带分区列时,直接命中该表,如果未带分区列,会逐一扫描所有分表(单线程),考虑性能问题,要加并行查询(多线程),SQL改为select /parallel/ from t1 where name=’李四’; 并行查询会增加额外的CPU消耗

11、分表规则:支持range(范围),hash(取模),hash规则要提前规划好,具体分多少张表,如前期分64张表,1年后想扩容128张表,数据需要重新导出导入,成本非常高,目前二级分表还不支持。


http://chatgpt.dhexx.cn/article/EUjtMQGG.shtml

相关文章

mysql几种中间件对比

网上找到的图 重点比较几个 1.atlas 基于mysql-proxy,360团队 优点: 配置简单,支持读写分离 缺点: 年份久,功能有限 地址:https://github.com/Qihoo360/Atlas/wiki/Atlas%E5%8A%9F%E8%83%BD%E7%89%B9%E7%82%B9FAQ 2.my…

Mysql中间件研究

转自:https://blog.csdn.net/kingzone_2008/article/details/51513910 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源…

mysql中间件研究( Atlas,cobar,TDDL,mycat,heisenberg,Oceanus,vitess,OneProxy )

mysql中间件研究( Atlas,cobar,TDDL,mycat,heisenberg,Oceanus,vitess,OneProxy ) mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其…

mysql中间件 拦截sql

对mysql进行读写分离的中间件有哪些 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。 其他mysql开源中间件产品有:Atlas,cobar,td…

数据库中间件mysql-proxy细节【mysql官方的中间件】

一、mysql-proxy简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server,它使用mysql协议,任何连接mysql的上游无需任何更改即可迁移至mysql-proxy上。 mysql-proxy最基…

数据库中间件概述

1.为什么需要数据库中间件,何为数据库中间件 不同的应用程序有不同的数据存储方式和组网。数据量小的普通的应用程序一般采用单机数据库来持久化数据,如下图。 当数据的并发读写超过数据库服务器的处理能力时,需要进行读写分离来分离读写压力…

数据库访问中间件

数据库访问中间件 什么是ORM框架 对象关系映射(Obiect Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的…

MySQL中间件Atlas

MySQL中间件Atlas atlas简介 Mysql 的 proxy 中间件有比较多的工具,例如,mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等。 而Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在…

【MySQL】数据库(分库分表)中间件对比

分区:对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm。 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张…

数据库中间件详解

数据库中间件详解 原创: 田守枝 田守枝的技术博客 3月24日 1 数据库拆分过程及挑战 互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)。每个拆分过程都能解决业务上的一些问题,但同时也面临了一些挑战。…

mysql优化---如何搭建mysql的主从关系和mycat中间件

1. 如何搭建mysql的主从关系 解决mysql高并发的瓶颈。 1.1 复制概述 复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQ…

什么是中间件

一、什么是中间件 中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平…

mysql的中间件比较

mysql分布式数据库中间件对比 目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的系列,希望可以对大家有帮助。 1. 什么是中间件 传统的架构模式就是 应用连…

MySQL 中间件汇总比较

360 Atlas 较为活跃,Atlas 是由 360 Web平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用 Atlas 运行的 MySQL 务,每…

MySQL-中间件mycat(一)

目录 🍁mycat基础概念 🍁Mycat安装部署 🍃初始环境 🍃测试环境 🍃下载安装 🍃修改配置文件 🍃启动mycat 🍃测试连接 🦐博客主页:大虾好吃吗的博客 &#x1f9…

MySQL 分表方案及中间件介绍

背景 什么情况下需要分表?这里归纳了3点: (1)某个表被操作的频率过于频繁的时候(可以查看某个表的访问频繁),在流量越来越大的时,可以考虑分表。 (2)某个表的数据量过于庞大的时候(我给自己设…

中间件之MYSQL

体系结构 server层 负责建立连接、分析和执行 SQL 连接器:与客户端进行TCP三次握手;校验用户名和密码;读取权限。查询缓存:key-value缓存在mysql8.0后默认将其关闭;高级版本默认采用页缓存。解析器:词法…

mysql优化——mycat数据库中间件

文章目录 目录 文章目录 前言 一、mycat原理 二、mycat完成读写分离 2.1搭建MySQL的主从模式 2.2实现读写分离 三、mycat垂直分库 四、水平分表 五、水平拆分表的连表操作 六、全局表 总结 前言 Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以…

mysql中间件汇总

一、写在前面 mysql作为互联网公司都会用到的数据库,在使用过程中。会用主从复制来提高性能。会用分库分表解决写入问题。以下介绍mysql中间件的一些实现方案 二、Atlas Atlas时 360 公司开发维护的一个基于MySQL协议的数据中间层项目。 2.1 atlas架构 Atlas是一…

makfile的编译选项:CFLAGS、CPPFLAGS、LDFLAGS、LIBS

1、LDFLAGS & LIBS 关于makefile的依赖规则以及目标生成的步骤,这篇先不介绍,这里主要关注我在看makefile时遇到的一堆CFLAGS与LDFLAGS定义进行说明。 费了牛劲,才查到GNUmake中文手册中关于CFLAGS与LDFLAGS的说明,他们都是…