ProxySQL安装与配置
####安装
- 从github上(https://github.com/sysown/proxysql/releases)下载相应的rpm包
- 使用 yum localinstall proxysql-1.4.1-1-centos7.x86_64.rpm 安装
####启动
- Service proxysql start
####配置文件
- 文本配置文件
- ProxyQSL使用一个配置文件的(/etc/proxysql.cnf),但是这个配置文件只在第一次启动时使用,一般不需要修改
- SQLite配置文件
- ProxySQL在第一次启动后就会使用SQLite文件(/var/lib/proxysql/proxysql.db)来加载和持久化配置项,并且这种配置方式支持在线修改
####登录
- ProxySQL默认的管理端口是6032
- ProxySQL默认的服务端口是6033
- ProxySQL默认的用户名和密码都是admin
####库结构
登录到管理端口,使用show databases;
在管理端口中有4个库,分别是:
Admin:默认数据库,存放服务器、用户、路由等的配置信息。以”runtime_“开头的表是当前运行中的配置,不能直接修改。通过修改没有前缀的表,使用”LOAD“加载配置,使用”SAVE“持久化配置。
Disk:存储配置的SQLite数据库
Stats:各种命令的统计信息
Monitor:对于后端数据库的监控信息
####配置表
各种配置所使用到的表都在main库中
mysql> show tables from main;
+——————————————–+
| tables |
+——————————————–+
| global_variables |全局变量,,具体可见https://github.com/sysown/proxysql/wiki/Global-variables
| mysql_collations |字符集相关
| mysql_group_replication_hostgroups |MySQL Group Replication信息
| mysql_query_rules |路由规则信息
| mysql_replication_hostgroups |定义hostgroup的主从信息
| mysql_servers |后端MySQL节点
| mysql_users |用户配置
| proxysql_servers |
| runtime_global_variables |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers |
| runtime_mysql_users |
| runtime_proxysql_servers |
| runtime_scheduler |
| scheduler |定时器
+——————————————–+
17 rows in set (0.00 sec)
数据库节点设置(mysql_servers)
- 这张表主要配置hostgroup的相关信息。路由时会根据设置的规则将相关SQL路由到指定的hostgroup。而在同一hostgroup中又根据权重分发SQL语句。
用户设置(mysql_users)
- 配置客户端连接proxysql(frontend)和proxysql连接数据库(backend)的用户。目前这两个值都默认为1。以后可能会分开。
主从关系设置(mysql_replication_hostgroups)
- 根据read_only值来判断主从。可以不配置。
路由规则设置(mysql_query_rules)
Proxysql会根据主键rule_id的顺序加载路由规则。
Username/client_addr/schemaname:只有用户、地址和schema匹配时规则才会生效。
Proxysql会先检查flagIN=0的规则
如果规则匹配,且flagIN=flagOUT或者flagOUT=NULL或者apply=1,则应用这条规则
否则,根据flagOUT的值,去匹配下一条flagIN等于该值的规则
Digest/match_digest/match_pattern:这三个值都是用来匹配查询的。
Digest匹配的值类似于stats_mysql_query_digest表中的digest列
Match_digest匹配的值类似于stats_mysql_query_digest中的digest_text列
Match_pattern匹配的是未经修改过的SQL语句
Negate_match_pattern:对match_digest/match_pattern的匹配值取反
重写SQL:重写SQL最好使用match_pattern作为匹配项,使用replace_pattern作为重写后的SQL,二者都遵循正则表达式