mysql proxy 事务支持_mysql ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)...

ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配置、故障切换和一些 SQL的过滤功能。还有一些同类产品比如 DBproxy、MyCAT、OneProxy 等。但经过反复对比和测试之后,还是觉得ProxySQL是一款性能不谙,靠谱稳定的MySQL 中间件产品 !

ProxySQL的亮点所在

-  几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql

-  基于正则和client_addr的强大和灵活的路由规则

-  详细的状态统计,统计结果和pt-query-digest对慢日志的分析结果类似,相当于有了统一的查看sql性能和sql语句统计的入口(Designed by a DBA for DBAs)

-  自动重连和重新执行机制(auto-reconnect and automatic re-execution of queries using it’s Connections Pool ): 若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作

-  query cache功能:比mysql自带QC更灵活,可在mysql_query_rules表中依据digest,match_pattern,client_addr等维度控制哪类语句可以缓存

-  支持连接池(connection pool)并且支持multiplexing,区别于atlas之流的连接池实现。

ProxySQL的特点

ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎。具有以下特性:

-  连接池,而且是 multiplexing;

-  主机和用户的最大连接数限制;

-  自动下线后端DB;

-  延迟超过阀值

-  ping 延迟超过阀值

-  网络不通或宕机

-  强大的规则路由引擎;

-  实现读写分离

-  查询重写

-  sql流量镜像

-  支持prepared statement;

-  支持Query Cache;

-  支持负载均衡,与gelera结合自动failover;

-  将所有配置保存写入到SQLit表中。

-  支持动态加载配置,即一般可以在线修改配置,但有少部分参数还是需要重启来生效。

-  支持query cache。

-  支持对query的路由,可以针对某个语句进行分配去哪个实例执行。

-  不支持分表,可以分库,但是利用规则配置实现分表。

如上可知,ProxySQL集合了很多优秀特性于一身,那么它的缺点呢就是项目不够成熟,好在官方网站一直在及时更新,并且受到 Percona 官方的支持。

ProxySQL多层管理配置设计 (有三层配置)

-  runtime:运行中使用的配置文件

-  memory:提供用户动态修改配置文件

-  disk:将修改的配置保存到磁盘SQLit表中(即:proxysql.db)

-  config:一般不使用它(即:proxysql.cnf)

ProxySQL运行机制草图如下:

ProxySQL有一个完备的配置系统,配置ProxySQL是基于sql命令的方式完成的。ProxySQL支持配置修改之后的在线保存、应用,不需要重启即可生效。整个配置系统分三层设计。

整个配置系统分为三层,如下图所示:

f94e1beaf044940e47b1e0c41f84dcb5.png

ProxySQL配置系统分为三层的目的:

1) 自动更新;

2) 尽可能的不重启proxysql就可以修改配置;

3) 方便回滚错误配置;

简单说就是配置proxysql分为三个级别,RUNTIME是即时生效的,MEMORY是保存在内存中但并不立即生效的,DISK|CONFIG FILE是持久化或写在配置文件中的。

这三个级别的配置文件互不干扰,在某个层级修改了配置文件,想要加载或保存到另一个层级,需要额外的LOAD或SAVE操作:"LOAD xx_config FROM xx_level | LOAD xx_config TO xx_level | SAVE xx_config TO xx_level | SAVE xx_config FROM xx_level",达到加载配置或者持久化配置的目的。这三层中每层的功能与含义如下:

-  RUNTIME层

代表的是ProxySQL当前生效的配置,包括 global_variables, mysql_servers, mysql_users, mysql_query_rules。无法直接修改这里的配置,必须要从下一层load进来。该层级的配置时在proxysql管理库(sqlite)的main库中以runtime_开头的表,这些表的数据库无法直接修改,只能从其他层级加载;该层代表的是ProxySQL当前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。无法直接修改这里的配置,必须要从下一层load进来。也就是说RUNTIME这个顶级层,是proxysql运行过程中实际使用的那一份配置,这一份配置会直接影响到生产环境的,所以要将配置加载进RUNTIME层时需要三思而行。

-  MEMORY层

是平时在mysql命令行修改的 main 里头配置,可以认为是SQLite数据库在内存的镜像。该层级的配置在main库中以mysql_开头的表以及global_variables表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值