1、ProxySQL配置系统
ProxySQL有一个完备的配置系统,配置ProxySQL是基于SQL命令的方式进行的。ProxySQL支持配置修改之后的在线保存、应用,不需要重启即可使配置生效。
ProxySQL配置系统使用层级体系,分为以下三个层级:
- RUNTIME
- MEMORY
- DISK/CONFIG FILE
ProxySQL将配置系统分为三个层级的目的:
- 自动更新
- 尽可能的不重启ProxySQL就可以修改配置
- 方便回滚错误配置
每个层级的功能与含义如下:
- RUNTIME:ProxySQL当前生效的正在使用的配置,是整个ProxySQL的顶层;在main库中的以runtime_开头的表就是RUNTIME层;RUNTIME中的配置是无法修改的,必须从下一层load进来
- MEMORY:ProxySQL配置系统的中间层,上面承接生产层RUNTIME,下面承接持久化层DISK和CONFIG FILE;用户可以通过MySQL客户端连接到此接口(admin接口),然后可以通过命令查询不同的数据库和表,并修改各种配置,MEMORY可以认为是SQLite数据库在内存中的镜像;MEMORY是用户修改ProxySQL的唯一入口,一般来说修改一个配置时首先修改MEMORY,确认无误后接入RUNTIME层,最后持久化到DISK
- DISK/CONFIG FILE:持久存储的配置,DISK对应的是ProxySQL数据目录下的proxysql.db,在ProxySQL启动时会从proxysql.db中加载信息;而ProxySQL的配置文件/etc/proxysql.cnf文件只在ProxySQL初次启动进行初始化时使用;配置修改完后必须save到硬盘,否则重启后配置将会丢失
注意:ProxySQL每一个配置项在三层中都存在,但是这三层是相互独立的,三份配置可能一样,也可能不一样。
2、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无法启动。
3、ProxySQL配置修改和保存
ProxySQL配置的新增和修改都是通过SQL语句在相关的表中添加或修改数据实现的,新增使用insert,修改使用update。
新增或修改的配置需要使用以下命令load到RUNTIME层:
load 配置表 to runtime;
永久保存配置:
save 配置表 to disk;
将RUNTIME层运行的配置拉取到MEMORY层:
load 配置表 to memory;
加载配置文件/etc/proxysql.cnf到MEMORY:
load 配置表 from config;
ProxySQL更多的配置帮助查看:https://github.com/sysown/proxysql/wiki。