一、ProxySQL的Admin管理接口

当Proxysql启动后,将监听两个端口:

  • admin管理接口,默认端口为6032。该端口用于查看、配置ProxySQL。
  • 接收SQL语句的接口,默认端口为6033,这个接口类似于MySQL的3306端口。

mysql 接口限流 mysql接口是多少_mysql

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的等效命令。