一、ProxySQL的运行机制

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

配置系统分为三层的目的有三个:
(1).自动更新
(2).尽可能的不重启proxysql就可以修改配置
(3).方便回滚错误配置

每层的功能与含义如下:

   RUNTIME层
代表的是ProxySQL当前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。无法直接修改这里的配置,必须要从下一层load进来。也就是说RUNTIME这个顶级层,是proxysql运行过程中实际使用的那一份配置,这一份配置会直接影响到生产环境的,所以要将配置加载进RUNTIME层时需要三思而行。
   MEMORY层
用户可以通过MySQL客户端连接到此接口(admin接口),然后可以在mysql命令行查询不同的表和数据库,并修改各种配置,可以认为是SQLite数据库在内存的镜像。也就是说MEMORY这个中间层,上面接着生产环境层RUNTIME,下面接着持久化层DISK和CONFIG FILE。
   MEMORY层
是我们修改proxysql的唯一正常入口。一般来说在修改一个配置时,首先修改Memory层,确认无误后再接入RUNTIME层,最后持久化到DISK和CONFIG FILE层。也就是说memeory层里面的配置随便改,不影响生产,也不影响磁盘中保存的数据。通过admin接口可以修改mysql_servers、mysql_users、mysql_query_rules、global_variables等表的数据。
   DISK/CONFIG FILE层
表示持久存储的那份配置,持久层对应的磁盘文件是$(DATADIR)/proxysql.db,在重启ProxySQL的时候,会从proxysql.db文件中加载信息。而 /etc/proxysql.cnf文件只在第一次初始化的时候使用,之后如果要修改配置,就需要在管理端口的SQL命令行里进行修改,然后再save到硬盘。 也就是说DISK和CONFIG FILE这一层是持久化层,我们做的任何配置更改,如果不持久化下来,重启后,配置都将丢失。

需要注意的是:proxysql的每一个配置项在三层中都存在,但是这三层是互相独立的,也就是说,proxysql可以同时拥有三份配置,每层都是独立的,可能三份配置都不一样,也可能三份都一样。

下面总结下proxysql的启动过程:

当proxysql启动时,首先读取配置文件CONFIG FILE(/etc/proxysql.cnf),然后从该配置文件中获取datadir,datadir中配置的是sqlite的数据目录。如果该目录存在,且sqlite数据文件存在,那么正常启动,将sqlite中的配置项读进内存,并且加载进RUNTIME,用于初始化proxysql的运行。如果datadir目录下没有sqlite的数据文件,proxysql就会使用config file中的配置来初始化proxysql,并且将这些配置保存至数据库。sqlite数据文件可以不存在,/etc/proxysql.cnf文件也可以为空,但/etc/proxysql.cnf配置文件必须存在,否则,proxysql无法启动。

二、ProxySQL下添加与修改配置

1、添加配置

需要添加配置时,直接操作的是MEMORAY,例如:添加一个程序用户,在mysql_users表中执行一个插入操作:

MySQL [(none)]> insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('myadmin','mypass',1,0,1);

这样就完成了一个用户的添加。要让这个insert生效,还需要执行如下操作:

MySQL [(none)]>load mysql users to runtime;
表示将修改后的配置(MEMORY层)用到实际生产环境(RUNTIME层)

如果想保存这个设置永久生效,还需要执行如下操作:

MySQL [(none)]>save mysql users to disk;
表示将memoery中的配置保存到磁盘中去。

除了上面两个操作,还可以执行如下操作:

MySQL [(none)]>load mysql users to memory;
表示将磁盘中持久化的配置拉一份到memory中来。

MySQL [(none)]>load mysql users from config;
表示将配置文件中的配置加载到memeory中。

2、持久化配置

以上SQL命令是对mysql_users进行的操作,同理,还可以对mysql_servers表、mysql_query_rules表、global_variables表等执行类似的操作。
如对mysql_servers表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

MySQL [(none)]> load mysql servers to runtime;
MySQL [(none)]> save mysql servers to disk;

对mysql_query_rules表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

MySQL [(none)]> load mysql query rules to runtime;
MySQL [(none)]> save mysql query rules to disk;

对global_variables表插入完成数据后,要执行保存和加载操作,可执行如下SQL命令:

以下命令加载或保存mysql variables(global_variables):

MySQL [(none)]>load mysql variables to runtime
MySQL [(none)]>save mysql variables to disk

以下命令加载或保存admin variables(select * from global_variables where variable_name like 'admin-%'):

MySQL [(none)]> load admin variables to runtime
MySQL [(none)]>save admin variables to disk

待续!

觉得不过瘾,后续还有一些列文章在等着呢:

原新浪网、阿里云(原万网)系统架构师,Linux畅销书《循序渐进linux》作者、51CTO博客博客专家博主、51CTO特级讲师,我的最新专栏: 轻松玩转ELK海量可视化日志分析系统,连载更新中,猛戳查看:
《轻松玩转ELK海量可视化日志分析系统》

灵活强大的MySQL代理中间件ProxySQL应用实战(2)相关推荐

  1. 灵活强大的mysql代理层_ProxySQL--灵活强大的MySQL代理层

    本文是我在学习和验证ProxySQL的过程中,从初识(对其机制猜想或凭几次命令的结果臆断其原理),到逐渐深入(模拟各种场景测试.抓包分析.与作者交流)过程中的思路和方法和结论的记录. 笔者初识prox ...

  2. MySQL用中间件ProxySQL实现读写分离和主节点故障应用无感应

    昨天做的用proxysql实现的读写分离,但是在实际的应用中这样的结构还很不完整,如果主节点出现故障那么整个拓扑的数据库也无法通过proxysql来调用了,所以还需要增加主节点故障后proxysql能 ...

  3. mysql代理中间件_MySQL-ProxySQL中间件(二)

    彩蛋监控MGR,需要在MySQL实例中配置一些监控脚本(MySQL 5.7 和 MySQL 8.0略有不同) 该脚本需要配置到sys库下,因笔记web显示问题,无法显示折行,但是不影响复制,可以自行复 ...

  4. php mysql 代理_让PHP像C罗一样操作MySQL之ProxySQL

    ProxySQL 简介 ProxySQL是一个高性能的MySQL中间件,是灵活强大的MySQL代理层.像C罗一样的强大,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行cache, ...

  5. docker配置mysql 中间件 ProxySQL

    之前我们配置了mysql 一主二从模式,本文将利用mysql中间件ProxySQL 实现读写分离. 首先下载镜像 docker pull proxysql/proxysql 在home目录下创建pro ...

  6. mysql数据库预处理_一种MySQL数据库中间件预处理方法与流程

    本发明属于通信领域,特别涉及一种MySQL数据库中间件预处理方法. (二) 背景技术: 通常来说,MySQL集群和应用程序之间需要通过一个中间件来实现通信.中间件的作用是,对于应用程序来说,不需要关心 ...

  7. mysql数据采集中间件_开源 | MySQL数据传输中间件—DTLE

    目前,随着MySQL在各个行业的深入使用,在不同数据系统.不同数据中心.不同业务系统之间进行数据传输.数据订阅.形成数据总线等需求逐渐增多.爱可生推出的DTLE是一个针对MySQL的使用特点.支持多种 ...

  8. BaseRecyclerViewAdapterHelper: 灵活强大的循环适配器

    BRVAH:灵活强大的循环适配器. 官方网站:http://www.recyclerview.org/ BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它 ...

  9. Mysql访问中间件--Atlas初探

    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug ...

最新文章

  1. poj1286(纯Polya定理)
  2. 【Java Web开发指南】redis笔记
  3. 史蒂夫·乔布斯很懂团队建设
  4. TensorFlow(一)
  5. 图解尼科马修斯定理,你看懂了吗?
  6. ps aux grep java_linux命令ps-aux监控java进程
  7. 新手坐高铁怎么找车厢_一个新手怎么做直播卖衣服?找对货源供应商成功一半...
  8. 温度检测单片机c语言程序设计,基于STC89C52单片机的温度检测系统设计
  9. Latex 语法总结(持续更新)
  10. STAR:转录组数据比对工具简介
  11. application.yml文件
  12. 腾讯出了一款AI产品,早期癌症筛查准确率最高达90%
  13. Python 根据身份证号判断所属省份,生日与性别
  14. Linux修改文件出现错误E45:“readonly” option is set(add ! to override)退出不了vim
  15. Java第11次作业
  16. linux安装teamviewer黑屏,如何在CentOS 7上安装TeamViewer
  17. java单词排序_java中实现将输入的单词按首字母排序
  18. Mysql笔试题(转载)
  19. VB封装的WebSocket模块,拿来即用
  20. 解决新浪微博JSSDK, WB2.login()失效问题

热门文章

  1. 一般处理程序页ashx 序列化 Json数组
  2. 项目添加GPUImage
  3. jQuery中的$.grep()方法的使用
  4. ORACLE登录错误的解决方法
  5. WebSphere Message Boker 中调用jar包
  6. JPA还是JDBC?
  7. 10 Ways To Suck At Programming
  8. 深度学习的最新研究进展(三)
  9. shiro 与spring的集成
  10. 2018-06-29博客