最近发现了 percona 自家网站的个推荐的 ProxySQL howto 在github.com有开源,并且还在持续更新。感觉commit者就是 percona自家的员工或领他家工资资助的人才。
大概记录 对ProxySQL的了解。
- C++写的,性能应该不是问题。 github地址
- 运行时分admin进程与proxy进程, 一般 6032 端口是 admin 进程。6033是proxy。
- admin的目标是热配置生效,不必重启proxy。能直接使用mysql客户端简单的sql操作生效。
- 整体配置可以从proxysql.cnf读,admin配置可以从proxysql-admin.cnf 热load进来。
- 配置为runtime\memory\disk\config-file的多层管理概念,详看官方wiki有介绍
- 配置以mysql的内存表方式存于内存,能通过 SAVE、LOAD 指令保存配置与加载配置。
举个例子(坑):
第一次启动时,读取默认配置文件 /etc/proxysql.cnf 其中第一项是 datadir=”/var/lib/proxysql”
这时如何改了admin相关的变量,如:set admin-mysql_ifaces==”192.168.1.110:6032”;
这时要执行 SAVE ADMIN VARIABLES TO DISK; 指令,配置save到datadir目录的文件了。
以后启动都不会再读取proxysql.cnf的配置。这点要注意。
PS: 不要学我例子改 admin-mysql_ifaces, admin帐号只允许用127.0.0.1 IP连接。
如果真的改了,只能删除datadir目录,重启proxysql了。
说说几个关键有配置项(或叫表)
- mysql_servers – 后端真实的mysql实例
- mysql_users – 连接proxySQL的用户,以及连接后端mysql的用户;注意两者相同。
- mysql_query_rules — 查询规则,支持链式的多条规则。详细看query rules wiki
- global_variables — 如表名,不解释。wiki
三层配置生效关系指令:
save / local 指令 组合如下:
[SAVE | LOAD ]
[MYSQL USER | MYSQL SERVER | ADMIN VARIABLES | MYSQL VARIABLES | MYSQL QUERY RULES]
[ TO | FROM ]
[ MEMORY | RUNTIME | DISK | CONFIG];
总之,就是配置可以save或load。 方向上可以TO或FROM,目标与来源有4项。
想要配置生效(active),必需load进RUNTIME中。
- LOAD MYSQL USERS TO RUNTIME;
- LOAD MYSQL SERVERS TO RUNTIME;
- LOAD MYSQL QUERY RULES TO RUNTIME;
- LOAD MYSQL VARIABLES TO RUNTIME;
- LOAD ADMIN VARIABLES TO RUNTIME;
要持久化,必需SAVE进DISK:
- SAVE MYSQL USERS TO DISK;
- SAVE MYSQL SERVERS TO DISK;
- SAVE MYSQL QUERY RULES TO DISK;
- SAVE MYSQL VARIABLES TO DISK;
- SAVE ADMIN VARIABLES TO DISK;
配置 后端的 mysql,至少到配置2个表, 与授权一个moniter用户 的数据。
- mysql_servers
- mysql_users
- mysql_replication_hostgroups 最好连这个表也配置一下。
- grant select ON . TO ‘monitor ‘@’$proxysql_ip’ identified by ‘monitor’;
1与2项,直接使用insert sql 插入即可。插入后还要Load TO RUNTIME 才生效。
只有monitor正确了, 才能正常代理mysql协议到后端。
查看是否有monitor连接出错:
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;