一、ProxySQL的Admin管理接口
当Proxysql启动后,将监听两个端口:
- admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。
- 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。
ProxySQL的admin管理接口是一个使用MySQL协议的接口,所以,可以直接使用mysql客户端、navicat等工具去连接这个管理接口。
通过管理界面配置ProxySQL
例如:使用mysql客户端,并使用以下admin凭据在本地端口(6032)上进行连接。默认账号密码admin:admin
[root@mysql8 ~]# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Admin>
Admin> show databases;
+-----+---------------+-------------------------------------+
| seq | name | file |
+-----+---------------+-------------------------------------+
| 0 | main | |
| 2 | disk | /var/lib/proxysql/proxysql.db |
| 3 | stats | |
| 4 | monitor | |
| 5 | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.000 sec)
这些库的含义:
- main:内存配置数据库。使用此数据库,可以很容易地以自动化方式查询和更新ProxySQL的配置。使用从内存中加载MYSQL用户和类似命令,可以将存储在此处的配置传播到运行时ProxySQL使用的内存数据结构。
- disk:“ main”的基于磁盘的镜像。在重新启动过程中,“ main”不会保留,而是根据启动标志以及磁盘上是否存在数据库从“磁盘”数据库或从配置文件加载。
- stats:包含从代理的内部功能收集的运行时指标。指标示例包括每个查询规则匹配的次数,当前正在运行的查询等。
- monitor:包含与ProxySQL连接的后端服务器相关的监视指标。度量标准示例包括连接到后端服务器或对其进行ping操作的最小和最大时间。
二、和admin管理接口相关的变量
一般来说,admin接口基本不需要额外的配置,最有可能配置的是admin接口的管理员用户名、密码。
2.1 admin-admin_credentials
该变量控制的是admin管理接口的管理员账户。默认的管理员账户和密码为admin:admin,但是这个默认的用户只能在本地使用。如果想要远程连接到ProxySQL,例如用windows上的navicat连接Linux上的ProxySQL管理接口,必须自定义一个管理员账户。
例如:添加一个myuser:myuser
的用户和密码
Admin> select @@admin-admin_credentials;
+---------------------------+
| @@admin-admin_credentials |
+---------------------------+
| admin:admin |
+---------------------------+
1 row in set (0.001 sec)
Admin> set admin-admin_credentials='admin:admin;myuser:myuser';
Query OK, 1 row affected (0.000 sec)
Admin> select @@admin-admin_credentials;
+---------------------------+
| @@admin-admin_credentials |
+---------------------------+
| admin:admin;myuser:myuser |
+---------------------------+
1 row in set (0.001 sec)
Admin> load admin variables to runtime; # 使修改立即生效
Query OK, 0 rows affected (0.000 sec)
Admin> save admin variables to disk; # 使修改永久保存到磁盘
Query OK, 35 rows affected (0.004 sec)
修改后,我们就可以在其它主机使用改用户名和密码连接管理接口了。
mysql -umyuser -pmyuser -h 127.0.0.1 -P6032 --prompt='myuser> '
所有的配置操作都是在修改main库中对应的表。
myuser> select * from global_variables where variable_name='admin-admin_credentials';
+-------------------------+---------------------------+
| variable_name | variable_value |
+-------------------------+---------------------------+
| admin-admin_credentials | admin:admin;myuser:myuser |
+-------------------------+---------------------------+
1 row in set (0.001 sec)
所以,前面的set
语句和下面的update
语句是等价的:
myuser> update global_variables set variable_value='admin:admin;myuser:myuser' where variable_name='admin-admin_credentials';
2.2 admin-stats_credentials
该变量控制admin管理接口的普通用户,这个变量中的用户没有超级管理员权限,只能查看monitor库和main库中关于统计的数据,其它库都是不可见的,且没有任何写权限。
默认的普通用户名和密码为stats:stats
。
myuser> select @@admin-stats_credentials;
+---------------------------+
| @@admin-stats_credentials |
+---------------------------+
| stats:stats |
+---------------------------+
1 row in set (0.001 sec)
myuser> set admin-stats_credentials='stats:stats;mystats:mystats';
Query OK, 1 row affected (0.000 sec)
myuser> select @@admin-stats_credentials;
+-----------------------------+
| @@admin-stats_credentials |
+-----------------------------+
| stats:stats;mystats:mystats |
+-----------------------------+
1 row in set (0.001 sec)
[root@mysql8 ~]# mysql -ustats -pstats -P6032 -h127.0.0.1 --prompt 'mystats> '
mystats> show databases;
+-----+---------------+-------------------------------------+
| seq | name | file |
+-----+---------------+-------------------------------------+
| 0 | main | |
| 2 | monitor | |
| 3 | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
3 rows in set (0.000 sec)
mystats> show tables;
+--------------------------------------+
| tables |
+--------------------------------------+
| global_variables |
| stats_memory_metrics |
| stats_mysql_commands_counters |
| stats_mysql_connection_pool |
| stats_mysql_connection_pool_reset |
| stats_mysql_errors |
| stats_mysql_errors_reset |
| stats_mysql_free_connections |
| stats_mysql_global |
| stats_mysql_gtid_executed |
| stats_mysql_prepared_statements_info |
| stats_mysql_processlist |
| stats_mysql_query_digest |
| stats_mysql_query_digest_reset |
| stats_mysql_query_rules |
| stats_mysql_users |
| stats_proxysql_servers_checksums |
| stats_proxysql_servers_metrics |
| stats_proxysql_servers_status |
+--------------------------------------+
19 rows in set (0.001 sec)
2.3 admin-mysql_ifaces
该变量指定admin接口的监听地址,格式为分号分隔的hostname:port列表。默认监听在0.0.0.0:6032。
注意,允许使用UNIX的domain socket进行监听,这样本主机内的应用程序就可以直接被处理。
例如:
SET admin-mysql_ifaces='127.0.0.1:6032;/tmp/proxysql_admin.sock'
从配置文件重新初始化ProxySQL(首次启动后,将使用DB文件而不是配置文件):
systemctl start proxysql-initial.service
配置ProxySQL的最佳方法是通过其管理界面。通过SQL查询对其管理数据库进行联机配置(无需重新启动代理)。这是手动和自动配置它的有效方法。配置文件,作为配置它的辅助方法。
ProxySQL管理界面是使用MySQL协议的界面,任何能够通过该界面发送命令的客户端都可以轻松配置它。ProxySQL解析通过此接口发送的查询,以查询特定于ProxySQL的任何命令,并在适当的情况下将它们发送到嵌入式SQLite3引擎以运行查询。
请注意,SQLite3和MySQL使用的SQL语法不同,因此,并非所有在MySQL上运行的命令都可以在SQLite3上运行。例如,尽管USE命令已被管理界面接受,但它不会更改默认架构,因为此功能在SQLite3中不可用。
连接到ProxySQL管理界面时,我们可以看到有一些数据库可用。ProxySQL将SHOW DATABASES命令转换为SQLite3的等效命令。