1. 程式人生 > 實用技巧 >MySQL中介軟體之ProxySQL(2):Admin管理介面

MySQL中介軟體之ProxySQL(2):Admin管理介面

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

因為有悔,所以披星戴月;因為有夢,所以奮不顧身! 個人部落格首發:easydb.net 微信公眾號:easydb 關注我,不走丟!