ProxySQL 基礎篇


1、ProxySQL 介紹

ProxySQL 是基於 MySQL 的一款開源的中間件的產品,是一個靈活的 MySQL 代理層,可以實現讀寫分離,支持 Query 路由功能,支持動態指定某個 SQL 進行緩存,支持動態加載(無需重啟 ProxySQL 服務),故障切換和一些 SQL 的過濾功能。 
介紹:相關 ProxySQL 的網站

https://www.proxysql.com/
https://github.com/sysown/proxysql/wiki

  

2、環境准備

全新初始化的實例

IP server-id 數據庫版本 備注
10.0.0.160 1603306 MySQL 8.0.18 Master(主庫)+ ProxySQL2.0.8
10.0.0.161 1613306 MySQL 8.0.18 Slave1(從庫)
10.0.0.162 1623306 MySQL 8.0.18 Slave2(從庫)

 

 

ProxySQL 2.0.x 版本支持 MGR 
注:我的 ProxySQL 和 主庫放在一起的,我已近配置好了主從復制狀態。這是我的實驗環境,實際環境注意實際情況。一般的代理環境結構如上圖。 
slave 節點的read_only=1
 

3、ProxySQL 安裝與啟動

下載

wget https://github.com/sysown/proxysql/releases/download/v2.0.8/proxysql-2.0.8-1-centos7.x86_64.rpm

安裝 ProxySQL

[root@mysql-160 ~]# rpm -ivh proxysql-2.0.8-1-centos7.x86_64.rpm 
# 查看相應安裝文件路徑,有哪些文件
[root@mysql-160 ~]# rpm -ql proxysql
/etc/logrotate.d/proxysql
/etc/proxysql.cnf
/etc/systemd/system/proxysql.service
/usr/bin/proxysql
/usr/share/proxysql/tools/proxysql_galera_checker.sh
/usr/share/proxysql/tools/proxysql_galera_writer.pl

/etc/proxysql.cnf 是 ProxySQL 的配置文件

 啟動 ProxySQL

[root@mysql-160 ~]# systemctl start proxysql.service 
# 查看是否啟動
[root@mysql-160 ~]# netstat -anlp | grep proxysql
[root@mysql-160 ~]# netstat -anlp | grep proxysql
tcp        0      0 0.0.0.0:6032            0.0.0.0:*               LISTEN      2989/proxysql       
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      2989/proxysql

 

 

6032 是 ProxySQL 的管理端口號,6033是對外服務的端口號 
ProxySQL 的用戶名和密碼都是默認的 admin

查看 ProxySQL 的版本

 

[root@mysql-160 ~]# proxysql --version

管理員登錄 ProxySQL

[root@mysql-160 ~]# /usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

 

 

 可見有五個庫: main、disk、stats 、monitor 和 stats_history 
main: 內存配置數據庫,即 MEMORY,表里存放后端 db 實例、用戶驗證、路由規則等信息。main 庫中有如下信息:

 

 

 庫下的主要表: 
mysql_servers: 后端可以連接 MySQL 服務器的列表 
mysql_users: 配置后端數據庫的賬號和監控的賬號。 
mysql_query_rules: 指定 Query 路由到后端不同服務器的規則列表。

注: 表名以 runtime_開頭的表示 ProxySQL 當前運行的配置內容,不能通過 DML 語句修改。

只能修改對應的不以 runtime 開頭的表,然后 “LOAD” 使其生效,“SAVE” 使其存到硬盤以供下次重啟加載。 
disk :持久化的磁盤的配置 
stats: 統計信息的匯總 
monitor:一些監控的收集信息,比如數據庫的健康狀態等 
stats_history: 這個庫是 ProxySQL 收集的有關其內部功能的歷史指標

4、配置 ProxySQL 所需賬戶

在 Master (10.0.0.160) 的MySQL 上創建 ProxySQL 的監控賬戶和對外訪問賬戶

#proxysql 的監控賬戶
create user 'monitor'@'10.0.0.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'10.0.0.%' with grant option;

#proxysql 的對外訪問賬戶
create user 'proxysql'@'10.0.0.%' identified by '123456';
grant all privileges on *.* to 'proxysql'@'10.0.0.%' with grant option;

flush privileges;

 

 

 注意 8.0.x 用戶認證的方式需要修改為 mysql_native_password 
需要在my.cnf 加上這個用戶認證方式,再來創建用戶

[mysqld]
default_authentication_plugin=mysql_native_password

 

 

 

5、ProxySQL 的多層配置系統

配置結構如下:

 

 

 

https://github.com/sysown/proxysql/wiki/Configuring-ProxySQL

整套配置系統分為三層:頂層為 RUNTIME ,中間層為 MEMORY , 底層也就是持久層 DISK 和 CONFIG FILE 。

RUNTIME : 代表 ProxySQL 當前生效的正在使用的配置,無法直接修改這里的配置,必須要從下一層 “load” 進來。 
MEMORY: MEMORY 層上面連接 RUNTIME 層,下面連接持久層。這層可以正常操作 ProxySQL 配置,隨便修改,不會影響生產環境。修改一個配置一般都是現在 MEMORY 層完成的,確認正常之后在加載達到 RUNTIME 和 持久化的磁盤上。

DISK 和 CONFIG FILE:持久化配置信息,重啟后內存中的配置信息會丟失,所需要將配置信息保留在磁盤中。重啟時,可以從磁盤快速加載回來。

5.1 在不同層次間移動配置

為了將配置持久化到磁盤或者應用到 runtime,在管理接口下有一系列管理命令來實現它們。 
要重新配置 MySQL 用戶,可執行下面的其中一個命令:

1、LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
 將內存數據庫中的配置加載到 runtime 數據結構,反之亦然。
2、SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
 將 MySQL 用戶從 runtime 持久化到內存數據庫。
3、LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
 從磁盤數據庫中加載 MySQL 用戶到內存數據庫中。
4、SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
 將內存數據庫中的 MySQL 用戶持久化到磁盤數據庫中。
5、LOAD MYSQL USERS FROM CONFIG
 從配置文件中加載 MySQL 用戶到內存數據庫中。

要處理 MySQL server:

1、LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
 將 MySQL server 從內存數據庫中加載到 runtime。
2、SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
 將 MySQL server 從 runtime 持久化到內存數據庫中。
3、LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
 從磁盤數據庫中加載 MySQL server 到內存數據庫。
4、SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
 從內存數據庫中將 MySQL server 持久化到磁盤數據庫中。
5、LOAD MYSQL SERVERS FROM CONFIG
 從配置文件中加載 MySQL server 到內存數據庫中

要處理 MySQL 的查詢規則(mysql query rules):

1、 LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
 將 MySQL query rules 從內存數據庫加載到 runtime 數據結構。
2、 SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
 將 MySQL query rules 從 runtime 數據結構中持久化到內存數據庫。
3、 LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
 從磁盤數據庫中加載 MySQL query rules 到內存數據庫中。
4、 SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
 將 MySQL query rules 從內存數據庫中持久化到磁盤數據庫中。
5、 LOAD MYSQL QUERY RULES FROM CONFIG
 從配置文件中加載 MySQL query rules 到內存數據庫中。

  

要處理 MySQL 變量(MySQL variables):

1、 LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
 將 MySQL variables 從內存數據庫加載到 runtime 數據結構。
2、 SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
 將 MySQL variables 從 runtime 數據結構中持久化到內存數據中。
3、 LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
 從磁盤數據庫中加載 MySQL variables 到內存數據庫中。
4、 SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
 將 MySQL variables 從內存數據庫中持久化到磁盤數據庫中。
5、 LOAD MYSQL VARIABLES FROM CONFIG
 從配置文件中加載 MySQL variables 到內存數據庫中。

要處理管理變量(admin variables):

1、 LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
 將 admin variables 從內存數據庫加載到 runtime 數據結構。
2、 SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
 將 admin variables 從 runtime 持久化到內存數據庫中。
3、 LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
 從磁盤數據庫中加載 admin variables 到內存數據庫中。
4、 SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
 將 admin variables 從內存數據庫中持久化到磁盤數據庫。
5、 LOAD ADMIN VARIABLES FROM CONFIG
 從配置文件中加載 admin variables 到內存數據庫中。

 

 

 

 

 

 一般在內存那層修改 ,然后保存到運行系統,保存到磁盤數據庫系統

load xxx to runtime;
save xxx to disk;

5.2 管理配置

  • disk and config file 持久化配置文件
 disk -> 是sqlite3 數據庫 ,默認位置是$DATADIR/proxysql.db( /var/lib/proxysql/proxysql.db)
 config file 是一個傳統配置文件:一般不更改
  • 在內存中動態更改配置,如果重啟,沒進行持久化(save) 則會丟失。

三則之間關系

  • proxysql 啟動時,首先去找/etc/proxysql.cnf 找到它的datadir,如果datadir下有proxysql.db 就加載proxysql.db的配置

  • 如果啟動proxysql時帶有--init標志,會用/etc/proxsql.cnf的配置,把Runtime,disk全部初始化一下

  • 在調用是調用--reload 會把/etc/proxysql.cnf 和disk 中配置進行合並。如果沖突需要用戶干預。disk會覆蓋config file。

關於傳統的配置文件 
傳統配置文件默認路徑為/etc/proxysql.cnf,也可以在二進制程序proxysql上使用-c或–config來手動指定配置文件。 
默認情況下:幾乎不需要手動去配置proxysql.cnf。端口號,管理proxysql用戶明嗎,可以在這里修改

 

5.2 小結

這里有幾個最常用的命令:如何讓修改的配置生效(runtime),以及如何持久化到磁盤上(disk)。記住,只要不是加載到 runtime,修改的配置就不會生效。

 

LOAD MYSQL USERS TO RUNTIME;  將內存數據庫中的配置加載到 runtime 數據結構
SAVE MYSQL USERS TO DISK;   將內存數據庫中的 MySQL 用戶持久化到磁盤數據庫中。
LOAD MYSQL SERVERS TO RUNTIME;  將 MySQL server 從內存數據庫中加載到 runtime。
SAVE MYSQL SERVERS TO DISK;   從內存數據庫中將 MySQL server 持久化到磁盤數據庫中。
LOAD MYSQL QUERY RULES TO RUNTIME;  將 MySQL query rules 從內存數據庫加載到 runtime 數據結構。
SAVE MYSQL QUERY RULES TO DISK;  將 MySQL query rules 從內存數據庫中持久化到磁盤數據庫中。
LOAD MYSQL VARIABLES TO RUNTIME;  將 MySQL variables 從內存數據庫加載到 runtime 數據結構。
SAVE MYSQL VARIABLES TO DISK;   將 MySQL variables 從內存數據庫中持久化到磁盤數據庫中。
LOAD ADMIN VARIABLES TO RUNTIME;   將 admin variables 從內存數據庫加載到 runtime 數據結構。
SAVE ADMIN VARIABLES TO DISK;  將 admin variables 從內存數據庫中持久化到磁盤數據庫。

注意:只有加載到 runtime 狀態時才會去做最后的有效性驗證。在保存到內存數據庫或持久化到磁盤上時,都不會發生任何警告或錯誤。當加載到 runtime 時,如果出現錯誤,將恢復為之前保存得狀態,這時可以去檢查錯誤日志。  

6、配置 ProxySQL 主從分組信息

用到 這個表 mysql_replication_hostgroup,表結構信息如下

admin@127.0.0.1 [main]>show create table mysql_replication_hostgroups\G;
*************************** 1. row ***************************
       table: mysql_replication_hostgroups
Create Table: CREATE TABLE mysql_replication_hostgroups (
    writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
    reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),
    check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only','read_only|innodb_read_only','read_only&innodb_read_only')) NOT NULL DEFAULT 'read_only',
    comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))
1 row in set (0.00 sec)

 

 

 writer_hostgroup 和reader_hostgroup 寫組和讀組都要大於0且不能相同,我的環境下,寫組定義與10,讀組定義為20

6.1 創建組

insert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (10,20,'proxy');

load mysql servers to runtime;
save mysql servers to disk;

確定三種配置系統是否都已近寫入了數據

 

 

 ProxySQL 會根據server 的read _only 的取值將服務器進行分組。 read_only=0 的server,master被分到編號為10的寫組,read_only=1 的server,slave則被分到編號20的讀組

 

6.2 添加主從服務器節點

用到mysql_servers 這個表

 

 

 

insert into mysql_servers(hostgroup_id,hostname,port) values (10,'10.0.0.160',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.161',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'10.0.0.162',3306);
注:嚴格需要寫明comment
load mysql servers to runtime;
save mysql servers to disk;

 

 

 

添加了節點,三台機器都是online 狀態

6.3 ProxySQL監控 MySQL 后端節點

為 ProxySQL 配置監控賬號

admin@127.0.0.1 [monitor]>set mysql-monitor_username='monitor';
Query OK, 1 row affected (0.00 sec)

admin@127.0.0.1 [monitor]>set mysql-monitor_password='123456';
Query OK, 1 row affected (0.00 sec)

上面這兩句是修改變量的方式還可以在main庫下面用sql語句方式修改

UPDATE global_variables SET variable_value='monitor'
 WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='123456'
 WHERE variable_name='mysql-monitor_password';

修改后,保存到runtime和disk

admin@127.0.0.1 [monitor]>load mysql variables to runtime;
Query OK, 0 rows affected (0.01 sec)

admin@127.0.0.1 [monitor]>save mysql variables to disk;
Query OK, 139 rows affected (0.00 sec)

admin@127.0.0.1 [monitor]>select * from monitor.mysql_server_connect_log;

驗證監控信息,ProxySQL 監控模塊的指標都保存在monitor庫的log表中 
以下是連接是否正常的監控,對connect指標的監控 ,在前面可能會有很多connect_error,這是因為沒有配置監控信息時的錯誤,配置后如果connect_error的結果為NULL則表示正常

 

 

 對心跳信息的監控(對ping 指標的監控)

admin@127.0.0.1 [monitor]>select * from mysql_server_ping_log limit 10;

 

 

看看read_only的日志監控

 

admin@127.0.0.1 [monitor]>select * from mysql_server_read_only_log limit 10;

 

 

 Monitor 模塊就會開始監控后端的read_only值,當監控到read_only值,就會按照read_only的值將某些節點自動移到讀寫組 
一些監控的狀態斗志在log相關,都在monitor庫下面的 global_variables 變量。

6.4 為 ProxySQL 配置對外訪問賬號

SQL 請求所使用的用戶配置,都需要在 MySQL 節點創建上。在步驟4:配置ProxySQL 賬戶,我創建的對外訪問賬戶是:用戶:proxysql,密碼:123456 
配置mysql_users 這個表

表結構信息如下:
admin@127.0.0.1 [main]>show create table mysql_users\G;
*************************** 1. row ***************************
       table: mysql_users
Create Table: CREATE TABLE mysql_users (
    username VARCHAR NOT NULL,
    password VARCHAR,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    use_ssl INT CHECK (use_ssl IN (0,1)) NOT NULL DEFAULT 0,
    default_hostgroup INT NOT NULL DEFAULT 0,
    default_schema VARCHAR,
    schema_locked INT CHECK (schema_locked IN (0,1)) NOT NULL DEFAULT 0,
    transaction_persistent INT CHECK (transaction_persistent IN (0,1)) NOT NULL DEFAULT 1,
    fast_forward INT CHECK (fast_forward IN (0,1)) NOT NULL DEFAULT 0,
    backend INT CHECK (backend IN (0,1)) NOT NULL DEFAULT 1,
    frontend INT CHECK (frontend IN (0,1)) NOT NULL DEFAULT 1,
    max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 10000,
    comment VARCHAR NOT NULL DEFAULT '',
    PRIMARY KEY (username, backend),
    UNIQUE (username, frontend))
1 row in set (0.00 sec)

配置mysql_users 表,將proxysql用戶添加到該表中。

insert into mysql_users (username,password,default_hostgroup) values ('proxysql','123456',10);

load mysql users to runtime;
save mysql users to disk;
admin@127.0.0.1 [admin]>select * from mysql_users\G
*************************** 1. row ***************************
              username: proxysql
              password: 123456
                active: 1  #是否啟用該賬戶,為0表示禁用
               use_ssl: 0
     default_hostgroup: 10
        default_schema: NULL
         schema_locked: 0
transaction_persistent: 1  #事務透明化
          fast_forward: 0
               backend: 1
              frontend: 1
       max_connections: 10000  #用戶鏈接10000,可以修改
               comment: 
1 row in set (0.00 sec)

 

 

 mysql_users 表有不少字段,最主要的三個字段username,password,default_hostgroup 
username: 前端鏈接ProxySQL ,以及ProxySQL 將SQL 語句路由給MySQL所使用的的用戶名 
password:用戶名對應的密碼,。可以是明文密碼,也可以是hash密碼。如果想使用hash密碼,可以先在某個MySQL節點上執行select password(PASSWORD),然后將加密結果復制到該字段。 
default_hostgroup:該用戶名默認的路由目標。例如,指定root用戶的該字段值為10時,則使用 proxysql 用戶發送的SQL語句默認情況下將路由到hostgroup_id=10 組中的某個節點。 
我這里 hostgroup_id = 10的組中只有一個節點就是 master : 10.0.0.160

在161(從庫)端,用 proxysql 用戶 測試是否sql路由能默認到 hostgroup_id=10,它是一個寫組(讀寫數據)。

proxysql@10.0.0.160 [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

proxysql@10.0.0.160 [(none)]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|     1603306 |
+-------------+
1 row in set (0.00 sec)
#通過proxysql用戶,創建一個keme庫
proxysql@10.0.0.160 [(none)]>create database keme;
Query OK, 1 row affected (0.03 sec)

在slave2:10.0.0.162 上去驗證一下,是否同步過去keme這個庫

 

 

到這里主從分組信息都配置完了、

 

7、配置讀寫分離策略:路由規則

配置讀寫分離,就是配置ProxySQL 路由規則,ProxySQL 的路由規則非常靈活,可以基於用戶,基於schema,以及單個sql語句實現路由規則定制。

注意:我這只是試驗,只是配置了幾個簡單的路由規則,實際情況配置路由規則,不應該是就根據所謂的讀、寫操作來進行讀寫分離,而是從收集(慢日志)的各項指標找出壓力大,執行頻繁的語句單獨寫規則,做緩存等等。比如 先在測試幾個核心sql語句,分析性能提升的百分比,在逐漸慢慢完善路由規則。 
生產中使用讀寫分離 :建議基於hash code 值做讀寫分離,不要建太多的規則

和查詢規則有關的表有兩個:mysql_query_rulesmysql_query_rules_fast_routing 
表mysql_query_rules_fast_routing是mysql_query_rules的擴展,並在以后評估快速路由策略和屬性(僅在ProxySQL 1.4.7+中可用)。

介紹一下改表mysql_query_rules的幾個字段: 
active:是否啟用這個規則,1表示啟用,0表示禁用 
match_pattern 字段就是代表設置規則 
destination_hostgroup 字段代表默認指定的分組, 
apply 代表真正執行應用規則。

7.1 創建規則

這里我創建兩個規則: 
1、把所有以select 開頭的語句全部分配到讀組中,讀組編號是20 
2、把 select .. for update 語句,這是一個特殊的select語句,會產生一個寫鎖(排他鎖),把他分到編號為10 的寫組中,其他所有操作都會默認路由到寫組中

insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);

insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);
load mysql query rules to runtime;
save mysql query rules to disk;

  

select … for update規則的rule_id必須要小於普通的select規則的rule_id,因為ProxySQL是根據rule_id的順序進行規則匹配的。  

7.2 測試讀寫分離

由於是新實例,先在master 10.0.0.160 實例上,生成幾條數據

 

 

 

測試讀 
通過proxysql 連接看看讀操作,是否路由給了讀組:

[root@mysql-160 ~]# mysql -uproxysql -p123456 -P 6033 -h 127.0.0.1 -e "select @@server_id;"

 

 

 

 只要是select 操作都分給了讀組

測試寫

proxysql@127.0.0.1 [keme]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|     1623306 |
+-------------+
1 row in set (0.00 sec)

proxysql@127.0.0.1 [keme]>start transaction;
Query OK, 0 rows affected (0.00 sec)

proxysql@127.0.0.1 [keme]>select * from beta1 for update;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | yj       |
|  3 | ss       |
|  4 | hc       |
|  5 | km       |
+----+----------+
5 rows in set (0.00 sec)

proxysql@127.0.0.1 [keme]>select @@server_id;
+-------------+
| @@server_id |
+-------------+
|     1603306 |
+-------------+
1 row in set (0.00 sec)

 

 

 

 在測試insert 操作

 

 

 

也分配到寫組了,一切都正常。

如果想在 ProxySQL 中查看SQL請求路由信息stats_mysql_query_digest

admin@127.0.0.1 [stats]>select hostgroup,schemaname,username,digest_text,count_star from  stats_mysql_query_digest;

count_start 統計sql 語句次數,可以分析哪些 sql ,頻繁執行

讀寫分離設置成功后,還可以調權重,比如讓某台機器承受更多的讀操作 

列:

update mysql_servers set weight=10 hostname='10.0.0.161';
load mysql servers to runtime;
save mysql servers to disk;

8、文章參考

https://www.cnblogs.com/f-ck-need-u/p/9278839.html
https://github.com/sysown/proxysql/wiki


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM