ProxySQL官檔翻譯__09_ProxySQL配置之系統庫_01_main庫

09_ProxySQL配置之系統庫_01_main庫MEMORY層表和RUNTIME層表

備註:文章編寫時間201904-201905期間,後續官方在github的更新沒有被寫入
~
~

main庫(RUNTIME層表)[Main (runtime)]

一、列出main庫表[Listing all tables]

main庫中的表(除去runtime_類表)都是MEMORY層的表;

查看main庫包含的表:

Admin> SHOW TABLES FROM main;
+--------------------------------------------+
| tables                                     |
+--------------------------------------------+
| global_variables                           |
| mysql_collations                           |
| mysql_galera_hostgroups                    |
| mysql_group_replication_hostgroups         |
| mysql_query_rules                          |
| mysql_query_rules_fast_routing             |
| mysql_replication_hostgroups               |
| mysql_servers                              |
| mysql_users                                |
| proxysql_servers                           |
| runtime_checksums_values                   |
| runtime_global_variables                   |
| runtime_mysql_galera_hostgroups            |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules                  |
| runtime_mysql_query_rules_fast_routing     |
| runtime_mysql_replication_hostgroups       |
| runtime_mysql_servers                      |
| runtime_mysql_users                        |
| runtime_proxysql_servers                   |
| runtime_scheduler                          |
| scheduler                                  |
+--------------------------------------------+
22 rows in set (0.00 sec)

二、關鍵配置表[Key Configuration Tables]

1、mysql_servers表

表mysql_servers定義了所有MySQL服務器:

Admin> SHOW CREATE TABLE mysql_servers\G;
*************************** 1. row ***************************
       table: mysql_servers
Create Table: CREATE TABLE mysql_servers (
    hostgroup_id INT CHECK (hostgroup_id>=0) NOT NULL DEFAULT 0,
    hostname VARCHAR NOT NULL,
    port INT CHECK (port >= 0 AND port <= 65535) NOT NULL DEFAULT 3306,
    gtid_port INT CHECK (gtid_port <> port AND gtid_port >= 0 AND gtid_port <= 65535) NOT NULL DEFAULT 0,
    status VARCHAR CHECK (UPPER(status) IN ('ONLINE','SHUNNED','OFFLINE_SOFT', 'OFFLINE_HARD')) NOT NULL DEFAULT 'ONLINE',
    weight INT CHECK (weight >= 0 AND weight <=10000000) NOT NULL DEFAULT 1,
    compression INT CHECK (compression IN(0,1)) NOT NULL DEFAULT 0,
    max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 1000,
    max_replication_lag INT CHECK (max_replication_lag >= 0 AND max_replication_lag <= 126144000) NOT NULL DEFAULT 0,
    use_ssl INT CHECK (use_ssl IN(0,1)) NOT NULL DEFAULT 0,
    max_latency_ms INT UNSIGNED CHECK (max_latency_ms>=0) NOT NULL DEFAULT 0,
    comment VARCHAR NOT NULL DEFAULT '',
    PRIMARY KEY (hostgroup_id, hostname, port) )
1 row in set (0.00 sec)

這些字段具有以下語義:
hostgroup_id:包含此mysqld實例所在的主機組。請注意,同一實例可以是多個主機組的一部分;
hostname, port:連接mysqld實例的TCP的IP和端口;
gtid_port:供ProxySQL Binlog Reader跟蹤GTID的端口;
status:
1)ONLINE - 後端服務器狀態正常,可執行正常操作;
2)SHUNNED -後端服務器暫時停止使用,因爲在短時間內出現太多連接錯誤或複製延遲超過了允許的閾值;
3)OFFLINE_SOFT -當服務器進入OFFLINE_SOFT模式時,不再接受新的傳入連接,而現有連接將保持不變,直到它們變爲非活動狀態。換句話說,已有連接可以繼續使用,直到它們的事務完成。這是安全地進行後端分離操作。
4)OFFLINE_HARD - 當服務器進入OFFLINE_HARD模式時,現有連接將被丟棄,而傳入的新連接也不被接受。這相當於從主機組中刪除服務器,或暫時將其從主機組中剔除以進行維護工作。
5)weight - 服務器相對權重;權重越大,從主機組中被選中進行處理事務的概率就越高。
6)compression -壓縮傳輸,如果該值大於0,則與該後端服務器的新連接將使用壓縮傳輸。
7)max_connections -ProxySQL將向此後端服務器開啓連接的最大連接數。即使此服務器具有最高權重,但一旦達到此限制,就不會向其指定新連接。請確保後端MySQL配置了正確的max_connections值,以避免ProxySQL指定的該數量超出後端限制。
8)max_replication_lag -ProxySQL允許的最大複製延時;如果該值大於0,ProxySQL將定期監視複製延遲,如果延時超出這個閾值,ProxySQL將暫時忽略該主機(不指派新任務),直到複製進度趕上。
9)use_ssl -如果設置爲1,則與後端的連接將使用SSL。
10)max_latency_ms -定時ping監測結果的最大延時(ms)。如果主機的ping延時大於max_latency_ms,則該主機將從連接池中排除(儘管服務器保持ONLINE狀態)
11)comment -註釋、說明;可用於用戶定義的任何目的的文本字段。可以是主機存儲內容的描述,添加或禁用主機的提醒,或某些檢查器腳本處理的JSON。

2、mysql_replication_hostgroups表

該表定義了用於傳統主/從複製的ASYNC(異步)或SEMI-SYNC(半同步)複製的複製主機組。如果使用了Group Replication/InnoDB Cluster或Galera/Percona XtraDB Cluster進行復制,則應使用mysql_group_replication_hostgroups或mysql_galera_hostgroups(在版本2.x中提供)。

Admin> 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')) NOT NULL DEFAULT 'read_only',
    comment VARCHAR NOT NULL DEFAULT '', 
    UNIQUE (reader_hostgroup))
1 row in set (0.00 sec)

mysql_replication_hostgroups中的每一行代表一對writer_hostgroup和reader_hostgroup。ProxySQL將監視指定主機組中所有服務器的read_only值,並根據read_only的值將服務器分配給writer或reader的主機組。字段註釋可用於存儲任意數據。

這些字段具有以下語義:
1)writer_hostgroup -讀寫組;在MySQL中read_only = 0的節點將分配給該主機組,默認情況下將發送所有流量到該主機組。
2)reader_hostgroup -只讀組:將在MySQL中具有read_only = 1的節點分配給該主機組,只能將讀取流量發送到該主機組;可以通過定義查詢規則或單獨的只讀用戶來將讀取流量路由到該主機組。
3)check_type -指定執行只讀檢查時被檢查的MySQL參數名,默認情況下爲read_only(也可以使用super_read_only)。對於AWS Aurora(亞馬遜MySQL雲服務),應使用innodb_read_only。
4)comment -註釋、說明;可用於用戶定義的任何目的的文本字段。可以是主機存儲內容的描述,添加或禁用主機的提醒,或某些檢查器腳本處理的JSON。

3、mysql_group_replication_hostgroups表

該表用於定義Oracle Group Replication(mgr)/InnoDB Cluster的主機組。

Admin> show create table mysql_group_replication_hostgroups\G;
*************************** 1. row ***************************
       table: mysql_group_replication_hostgroups
Create Table: CREATE TABLE mysql_group_replication_hostgroups (
    writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
    backup_writer_hostgroup INT CHECK (backup_writer_hostgroup>=0 AND backup_writer_hostgroup<>writer_hostgroup) NOT NULL,
    reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND backup_writer_hostgroup<>reader_hostgroup AND reader_hostgroup>0),
    offline_hostgroup INT NOT NULL CHECK (offline_hostgroup<>writer_hostgroup AND offline_hostgroup<>reader_hostgroup AND backup_writer_hostgroup<>offline_hostgroup AND offline_hostgroup>=0),
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    max_writers INT NOT NULL CHECK (max_writers >= 0) DEFAULT 1,
    writer_is_also_reader INT CHECK (writer_is_also_reader IN (0,1,2)) NOT NULL DEFAULT 0,
    max_transactions_behind INT CHECK (max_transactions_behind>=0) NOT NULL DEFAULT 0,
    comment VARCHAR,
    UNIQUE (reader_hostgroup),
    UNIQUE (offline_hostgroup),
    UNIQUE (backup_writer_hostgroup))
1 row in set (0.00 sec)

這些字段具有以下語義:
1)writer_hostgroup -讀寫組;在MySQL中read_only = 0的節點將分配給該主機組,默認情況下將發送所有流量到該主機組。
2)backup_writer_hostgroup -如果集羣有多個具有read_only = 0和max_writers的節點,則ProxySQL會將其他(超過max_writes數量)的節點放入backup_writer_hostgroup中。
3)reader_hostgroup -只讀組:將在MySQL中具有read_only = 1的節點分配給該主機組,只能將讀取流量發送到該主機組;可以通過定義查詢規則或單獨的只讀用戶來將讀取流量路由到該主機組。
4)offline_hostgroup -當ProxySQL的監控確定節點爲OFFLINE時,它將被放入offline_hostgroup。
5)active -當節點爲啓用時,ProxySQL會監控主機組並在適當的主機組之間移動節點。
6)max_writers - 此值確定writer_hostgroup中應允許的最大節點數,超過此值的節點將放入backup_writer_hostgroup中。
7)writer_is_also_reader -確定是否應將節點添加到reader_hostgroup以及writer_hostgroup。
8)max_transactions_behind -在忽略節點之前爲防止過時數據的讀取,指定的ProxySQL允許後端writers服務執行的最大事務數(這是通過查詢MySQL中sys.gr_member_routing_candidate_status表的transactions_behind字段來確定的,但該表需要自建,連接地址:https://github.com/lefred/mysql_gr_routing_check/下得addition_to_sys.sql腳本)。
9)comment -註釋、說明;可用於用戶定義的任何目的的文本字段。可以是主機存儲內容的描述,添加或禁用主機的提醒,或某些檢查器腳本處理的JSON。

4、mysql_galera_hostgroups表

該表(在ProxySQL 2.x及更高版本中可用)用於定義Galera Cluster/Percona XtraDB Cluster的主機組。

Admin> show create table mysql_galera_hostgroups\G;
*************************** 1. row ***************************
       table: mysql_galera_hostgroups
Create Table: CREATE TABLE mysql_galera_hostgroups (
    writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
    backup_writer_hostgroup INT CHECK (backup_writer_hostgroup>=0 AND backup_writer_hostgroup<>writer_hostgroup) NOT NULL,
    reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND backup_writer_hostgroup<>reader_hostgroup AND reader_hostgroup>0),
    offline_hostgroup INT NOT NULL CHECK (offline_hostgroup<>writer_hostgroup AND offline_hostgroup<>reader_hostgroup AND backup_writer_hostgroup<>offline_hostgroup AND offline_hostgroup>=0),
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    max_writers INT NOT NULL CHECK (max_writers >= 0) DEFAULT 1,
    writer_is_also_reader INT CHECK (writer_is_also_reader IN (0,1,2)) NOT NULL DEFAULT 0,
    max_transactions_behind INT CHECK (max_transactions_behind>=0) NOT NULL DEFAULT 0,
    comment VARCHAR,
    UNIQUE (reader_hostgroup),
    UNIQUE (offline_hostgroup),
    UNIQUE (backup_writer_hostgroup))
1 row in set (0.00 sec)

這些字段具有以下語義:
1)writer_hostgroup -讀寫組;在MySQL中read_only = 0的節點將分配給該主機組,默認情況下將發送所有流量到該主機組。
2)backup_writer_hostgroup -如果集羣有多個具有read_only = 0和max_writers的節點,則ProxySQL會將其他(超過max_writes數量)的節點放入backup_writer_hostgroup中。
3)reader_hostgroup -只讀組:將在MySQL中具有read_only = 1的節點分配給該主機組,只能將讀取流量發送到該主機組;可以通過定義查詢規則或單獨的只讀用戶來將讀取流量路由到該主機組。
4)offline_hostgroup -當ProxySQL的監控確定節點爲OFFLINE時,它將被放入offline_hostgroup。
5)active -當節點爲啓用時,ProxySQL會監控主機組並在適當的主機組之間移動節點。
6)max_writers -此值確定writer_hostgroup中應允許的最大節點數,超過此值的節點將放入backup_writer_hostgroup中。
7)writer_is_also_reader -確定是否應將節點添加到reader_hostgroup以及writer_hostgroup。
8)max_transactions_behind -在忽略節點之前爲防止過時數據的讀取,指定的ProxySQL允許後端writers服務執行的最大事務數(這是通過查詢查詢wsrep_local_recv_queue Galera參數來確定的)。
9)comment -註釋、說明;可用於用戶定義的任何目的的文本字段。可以是主機存儲內容的描述,添加或禁用主機的提醒,或某些檢查器腳本處理的JSON。

5、mysql_users表

該表用於定義連接後端MySQL服務的MySQL用戶;

Admin> 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)

這些字段具有以下語義:
1)username, password -用於連接mysqld或ProxySQL實例的憑據。
2)active -對於active = 0的用戶將在數據庫中被記錄,但永遠不會被加載到內存數據結構中。
3)default_hostgroup -如果此用戶發送的查詢沒有匹配規則,則生成的流量將發送到此處指定的主機組。
4)default_schema -默認情況下連接使用的數據庫。
5)schema_locked -目前還不支持(TODO:check)
6)transaction_persistent -如果這是爲MySQL客戶端連接到ProxySQL的用戶設置的(是"前端"用戶),則在主機組內啓動的事務將保留在該主機組內,而不管其他任何規則。
7)fast_forward -如果設置該值,則該用戶的查詢將繞過ProxySQL的查詢處理層(重寫,緩存),直接將查詢傳遞給後端服務器。
8)frontend -如果設置爲1,則此(用戶名,密碼)對用於對ProxySQL實例進行身份驗證。
9)backend -如果設置爲1,則此(用戶名,密碼)對用於針對主機組中mysqld服務器進行身份驗證。
10)max_connections -定義該用戶被允許的最大的前端連接數。
11)comment -註釋、說明;可用於用戶定義的任何目的的文本字段。可以是主機存儲內容的描述,添加或禁用主機的提醒,或某些檢查器腳本處理的JSON。

注意,目前所有用戶都需要將fast_forward(前端)和backend(後端)設置爲1。未來版本的ProxySQL將在前端和後端之間進行分離認證。通過這種方式,前端永遠不會知道直接連接到後端的憑證,這將增強ProxySQL的安全性。

Fast forward功能提示:
1)它不需要不同的端口:因爲完整功能的proxy邏輯和"Fast forward"邏輯在同一代碼/模塊中實現。
2)Fast forward功能是基於每個用戶實現的:取決於連接到ProxySQL的用戶,啓用或禁用Fast forward功能。
3)在用戶驗證後啓用Fast forward算法:ProxySQL仍然對客戶端進行身份驗證,當客戶端開始發送流量時,ProxySQL將創建連接。這意味着在連接階段仍然會處理連接錯誤。
4)Fast forward功能不支持SSL
5)如果使用壓縮,則必須在兩端同時啓用壓縮。

注意:mysql_users中的用戶也不應該用於參數admin-admin_credentials和admin-stats_credentials設置使用。

6、mysql_query_rules

該表定義了路由策略和屬性。

Admin> SHOW CREATE TABLE mysql_query_rules\G ;
*************************** 1. row ***************************
       table: mysql_query_rules
Create Table: CREATE TABLE mysql_query_rules (
    rule_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 0,
    username VARCHAR,
    schemaname VARCHAR,
    flagIN INT CHECK (flagIN >= 0) NOT NULL DEFAULT 0,
    client_addr VARCHAR,
    proxy_addr VARCHAR,
    proxy_port INT CHECK (proxy_port >= 0 AND proxy_port <= 65535), digest VARCHAR,
    match_digest VARCHAR,
    match_pattern VARCHAR,
    negate_match_pattern INT CHECK (negate_match_pattern IN (0,1)) NOT NULL DEFAULT 0,
    re_modifiers VARCHAR DEFAULT 'CASELESS',
    flagOUT INT CHECK (flagOUT >= 0), replace_pattern VARCHAR CHECK(CASE WHEN replace_pattern IS NULL THEN 1 WHEN replace_pattern IS NOT NULL AND match_pattern IS NOT NULL THEN 1 ELSE 0 END),
    destination_hostgroup INT DEFAULT NULL,
    cache_ttl INT CHECK(cache_ttl > 0),
    cache_empty_result INT CHECK (cache_empty_result IN (0,1)) DEFAULT NULL,
    cache_timeout INT CHECK(cache_timeout >= 0),
    reconnect INT CHECK (reconnect IN (0,1)) DEFAULT NULL,
    timeout INT UNSIGNED CHECK (timeout >= 0),
    retries INT CHECK (retries>=0 AND retries <=1000),
    delay INT UNSIGNED CHECK (delay >=0),
    next_query_flagIN INT UNSIGNED,
    mirror_flagOUT INT UNSIGNED,
    mirror_hostgroup INT UNSIGNED,
    error_msg VARCHAR,
    OK_msg VARCHAR,
    sticky_conn INT CHECK (sticky_conn IN (0,1)),
    multiplex INT CHECK (multiplex IN (0,1,2)),
    gtid_from_hostgroup INT UNSIGNED,
    log INT CHECK (log IN (0,1)),
    apply INT CHECK(apply IN (0,1)) NOT NULL DEFAULT 0,
    comment VARCHAR)
1 row in set (0.00 sec)

這些字段具有以下語義:
1)rule_id -該規則的唯一ID。規則以rule_id順序被處理、匹配。
2)active -該規則狀態;查詢處理模塊將僅考慮具有active = 1的規則,並且僅將活動規則加載到運行時。
3)username -該規則匹配的用戶名。如果爲非NULL,則僅當使用正確的用戶名建立連接時,查詢纔會匹配。
4)schemaname -該規則匹配的庫名。如果爲非NULL,則僅當連接使用schemaname作爲默認庫時,查詢纔會被匹配(在mariadb/mysql schemaname中等效於databasename)
5)flagIN, flagOUT, apply - 該規則匹配的輸入標誌、輸出標誌、應用標誌;這些設置將允許我們創建一個接一個地可被應用的"規則鏈"。輸入標誌flagIN值設置爲0,則在開始時僅考慮flagIN = 0的規則。此時當爲查詢找到匹配規則時,會對flagOUT進行評估,如果flagOUT爲NOT NULL,則將使用flagOUT中指定的標誌來標記該查詢。接着出現如下2個方向:

  • 如果flagOUT與flagIN不同,則該查詢將退出當前規則鏈並輸入/匹配下一個新的規則鏈,其中flagIN指作爲新的輸入標誌。
  • 如果flagOUT與flagIN匹配,則該查詢將針對下一個規則鏈繼續前面所述的flagIN匹配評估。如此反覆,直到沒有規則要匹配了,或者被匹配到的規則的apply設置爲1(這意味着這是要應用的最後一條規則)。

6)client_addr -該規則流量過濾時要匹配的客戶端。
7)proxy_addr - 該規則流量過濾時要匹配的本地指定IP。
8)proxy_port -該規則流量過濾時要匹配的本地port。
9)digest -該規則要過濾的查詢語句概要(用?替換參數後的SQL語句)形式的哈希值匹配,結果體現在統計表stats.stats_mysql_query_digest的digest列對於的記錄上。
10)match_digest -該規則要過濾的查詢語句文本概要內容的正則表達式。可查看mysql-query_processor_regex參數設置。(形式往往是對用?替換參數後的SQL語句的整個語句的匹配,如^SELECT c FROM sbtest1 WHERE id=\?$ )
11)match_pattern -該規則要過濾的查詢原始語句的正則表達式(非?處理後的語句),可參看mysql-query_processor_regex參數設置。(針對原始SQL文本,形如DISTINCT(.*) ORDER BY c ==>匹配所有包含DISTINCT ORDER BY c的查詢)
12)negate_match_pattern -如果將其設置爲1,則只有與查詢文本不匹配的查詢纔會被視爲匹配項。這相當於在match_pattern或match_digest匹配的正則表達式前面設置了NOT運算符。
13)re_modifiers -逗號分隔的選項列表,用於修改RE引擎(正則表達式)的行爲。使用CASELESS,匹配不區分大小寫。使用GLOBAL,替換則是全局的(替換所有匹配而不僅僅是第一個匹配)。爲了向後兼容,默認情況下僅啓用CASELESS。可參看mysql-query_processor_regex參數設置。
14)replace_pattern -指定模式爲替換匹配的模式。它是使用RE2 :: Replace完成的,因此可以參看有關的在線文檔:https://github.com/google/re2/blob/master/re2/re2.h#L378。請注意,該參數是可選的,當缺少此選項時,查詢處理器將僅緩存、路由或設置其他參數而不重寫(不替換/no replace)。
15)destination_hostgroup -將匹配的查詢路由到此主機組,除非存在已啓動的事務且登錄用戶將transaction_persistent標誌設置爲1,否則會發生這種情況。(請參閱mysql_users表)
16)cache_ttl -將查詢結果存儲在緩存中的毫秒數。注意:在ProxySQL 1.1中,cache_ttl單位是秒。
17)cache_empty_result -控制是否緩存沒有行記錄(記錄爲空)的結果集。
18)reconnect -該功能未使用。
19)timeout -執行匹配或重寫查詢的最大超時(以毫秒爲單位)。如果查詢運行的時間超過特定閾值,則會自動終止查詢。如果未指定timeout,則使用全局參數mysql-default_query_timeout的設置。
20)retries -在執行查詢期間檢測到失敗的情況下需要重新執行查詢的最大次數。如果未指定,則使用全局參數mysql-query_retries_on_failure的設置。
21)delay -延遲執行查詢的毫秒數。這本質上是一種限制機制和QoS(服務質量),允許優先考慮某些查詢。此值會覆蓋適用於所有查詢的mysql-default_query_delay全局參數值。未來版本的ProxySQL將提供更高級的限制機制。
22)mirror_flagOUT and mirror_hostgroup -與mirroring模塊相關的設置,參看後續mirroring章節的內容。
23)error_msg -指定查詢即將被阻塞時,返回給客戶端的error_msg。
24)OK_msg -爲使用該規則的查詢,返回的成功信息。
25)sticky_conn -該功能未使用。
26)multiplex -如果爲0,則禁用Multiplex(多路複用,禁止多個查詢同時來匹配該規則)。如果爲1,則在沒有任何其他條件的阻止下(如用戶變量或事務),則可以重新啓用Multiplex。如果爲2,則不會僅針對當前查詢禁用多路複用。默認爲NULL,因此不會修改多路複用策略,更多請參閱後續的《17_Multiplexing.txt》章節,
27)gtid_from_hostgroup -定義哪個主機組應該用作GTID一致性讀取的leader(通常是複製組[replication hostgroup]中定義的WRITER主機組)。
28)log -指定查詢是否被記錄。
29)apply -設置爲1時,在匹配和處理此規則後,不會再評估其他篩選規則,即到此爲止,立即執行。(注意:這類的查詢不會被記錄到mysql_query_rules_fast_routing中)
30)comment -自由格式文本字段,可用於查詢規則的描述性註釋。

7、mysql_query_rules_fast_routing

表mysql_query_rules_fast_routing是mysql_query_rules的擴展,是針對之後版本的快速路由策略和屬性進行評估設定的(適合ProxySQL 1.4.7+)。

Admin>SHOW CREATE TABLE mysql_query_rules_fast_routing\G;
*************************** 1. row ***************************
       table: mysql_query_rules_fast_routing
Create Table: CREATE TABLE mysql_query_rules_fast_routing (
    username VARCHAR NOT NULL,
    schemaname VARCHAR NOT NULL,
    flagIN INT NOT NULL DEFAULT 0,
    destination_hostgroup INT CHECK (destination_hostgroup >= 0) NOT NULL,
    comment VARCHAR NOT NULL,
    PRIMARY KEY (username, schemaname, flagIN) )
1 row in set (0.00 sec)

這些字段具有以下語義:
1)username - 該規則匹配的用戶名。僅當使用正確的用戶名建立連接時,查詢纔會匹配。
2)schemaname - 該規則匹配的庫名。僅當連接使用該schemaname作爲默認庫時,查詢纔會被匹配(在mariadb/mysql schemaname中等效於databasename)
3)flagIN - 以與flagin在mysql_query_rules中相同的方式進行評估,並與mysql_query_rules表中指定的flagout/apply相關聯
4)destination_hostgroup - 將匹配的查詢路由到此主機組。除非存在已啓動的事務且登錄用戶將transaction_persistent標誌設置爲1,否則查詢將會路由到此主機組(請參閱mysql_users表)
5)comment - 自由格式文本字段,可用於查詢規則的描述性註釋。

8、global_variables

表global_variables定義全局變量。這是一個很簡單的表,基本上存儲的是一個個鍵值對。這些都是ProxySQL使用的全局變量,它們用於調整ProxySQL的行爲。
全局變量是根據它們的前綴進行分組的。目前有兩類全局變量(儘管路線圖中有很多類):
1)以admin爲前綴的變量是與Admin模塊相關的,允許通過它們來調整admin接口特性,例如:更改管理接口地址(admin-mysql_ifaces)或管理員憑據(admin-admin_credentials)
2)以mysql爲前綴的變量是與MySQL模塊相關的,允許通過它們來調整與MySQL相關的功能。
具體來說,它們包了用以調整與以下功能相關的變量:
a.MySQL流量處理;
b.對MySQL進行的監控操作(將來版本中將以mysql-monitor_爲前綴)
b.查詢緩存

有關特定變量的更多信息,請參閱有關全局變量的專有部分:
global variables(03_ProxySQL配置之Global參數.txt==>https://github.com/sysown/proxysql/wiki/Global-variables)

Admin>SHOW CREATE TABLE global_variables\G;
*************************** 1. row ***************************
       table: global_variables
Create Table: CREATE TABLE global_variables (
    variable_name VARCHAR NOT NULL PRIMARY KEY,
    variable_value VARCHAR NOT NULL)
1 row in set (0.00 sec)

以下爲global_variables參數樣例(version 2.0.2):

Admin>select * from global_variables;
+-----------------------------------------------------+--------------------+
| variable_name                                       | variable_value     |
+-----------------------------------------------------+--------------------+
| admin-stats_credentials                             | stats:stats        |
| admin-stats_mysql_connections                       | 60                 |
| admin-stats_mysql_connection_pool                   | 60                 |
| admin-stats_mysql_query_cache                       | 60                 |
| admin-stats_system_cpu                              | 60                 |
................

9、scheduler

表scheduler定義了要定期執行的作業(腳本)。

Admin>SHOW CREATE TABLE scheduler\G;
*************************** 1. row ***************************
       table: scheduler
Create Table: CREATE TABLE scheduler (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
    filename VARCHAR NOT NULL,
    arg1 VARCHAR,
    arg2 VARCHAR,
    arg3 VARCHAR,
    arg4 VARCHAR,
    arg5 VARCHAR,
    comment VARCHAR NOT NULL DEFAULT '')
1 row in set (0.00 sec)

有關調度程序的更多詳細信息,請參見:07_ProxySQL配置之調度.txt(https://github.com/sysown/proxysql/wiki/Scheduler)

10、mysql_collations

用於存放ProxySQL支持的字符集信息列表。以下是用於創建mysql_collations表的語句:

Admin>show create table mysql_collations\G;
*************************** 1. row ***************************
       table: mysql_collations
Create Table: CREATE TABLE mysql_collations (
    Id INTEGER NOT NULL PRIMARY KEY,
    Collation VARCHAR NOT NULL,
    Charset VARCHAR NOT NULL,
    `Default` VARCHAR NOT NULL)
1 row in set (0.00 sec)

ProxySQL支持的可用(charset,collat??ion)對。原則上,ProxySQL將驗證傳入連接是否使用了受支持的字符集,並確保在使用它們之前將池化後端連接切換到正確的字符集(池指連接池)。

三、RUNTIME層表[Runtime tables]

上面列出的所有配置表在RUNTIME層都有一個與之匹配的runtime_表:
1) runtime_global_variables:global_variables的運行時版本
2) runtime_mysql_replication_hostgroups:mysql_replication_hostsgroups的運行時版本
3) runtime_mysql_galera_hostgroups:mysql_replication_hostsgroups的運行時版本
4)runtime_mysql_group_replication_hostgroups:mysql_replication_hostsgroups的運行時版本
5) runtime_mysql_query_rules:mysql_query_rules的運行時版本
6) runtime_mysql_query_rules_fast_routing:mysql_query_rules_fast_routing的運行時版本
7) runtime_mysql_servers:mysql_servers的運行時版本
8) runtime_mysql_users:mysql_users的運行時版本
9) runtime_proxysql_servers:proxysql_servers的運行時版本
10) runtime_scheduler:scheduler的運行時版本

關於main模式的說明
請注意,如果ProxySQL重新啓動,如果內容未保存在磁盤數據庫中,則內存表(main數據庫)的所有內容都將丟失。

~
~
完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章