-
Notifications
You must be signed in to change notification settings - Fork 980
Main (runtime)
Admin> SHOW TABLES FROM main;
+--------------------------------------------+
| tables |
+--------------------------------------------+
| global_variables |
| mysql_collations |
| mysql_group_replication_hostgroups |
| mysql_query_rules |
| mysql_replication_hostgroups |
| mysql_servers |
| mysql_users |
| proxysql_servers |
| runtime_checksums_values |
| runtime_global_variables |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers |
| runtime_mysql_users |
| runtime_proxysql_servers |
| runtime_scheduler |
| scheduler |
+--------------------------------------------+
18 rows in set (0.00 sec)
- MySQL Servers
- MySQL Replication Hostgroups
- MySQL Query Rules
- MySQL Query Rules Fast Routing
- Global Variables
- Scheduler
- MySQL Collations
- Runtime Tables
mysql_servers
表用于定义后端MySQL Servers:
Admin> SHOW CREATE TABLE mysql_servers\G
*************************** 1. row ***************************
table: mysql_servers
Create Table: CREATE TABLE mysql_servers (
hostgroup_id INT NOT NULL DEFAULT 0,
hostname VARCHAR NOT NULL,
port INT NOT NULL DEFAULT 3306,
status VARCHAR CHECK (UPPER(status) IN ('ONLINE','SHUNNED','OFFLINE_SOFT', 'OFFLINE_HARD')) NOT NULL DEFAULT 'ONLINE',
weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1,
compression INT CHECK (compression >=0 AND compression <= 102400) 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
:该后端MySQL实例所在的主机组。注意,同一MySQL节点可属于多个主机组。 -
hostname
,port
:后端MySQL监听的地址和端口。(译注:就是默认3306端口的意义) -
status
:- ONLINE - 该后端MySQL节点完全正常。
- SHUNNED - 该后端MySQL节点将暂时被ProxySQL自动避开(忽略),原因可能是一个较短时间内发生了大量连接错误,也可能是该slave与master的数据延迟太大(replication lag)。
- OFFLINE_SOFT - 当某后端MySQL被设置为 OFFLINE_SOFT 时,ProxySQL将不会向它发送新的请求,但该节点正在执行的事务会继续执行,直到所有事务执行完毕后会进入非激活状态。也就是说,和该后端的连接会保持到事务执行完毕。这可以实现后端节点的graceful停止、重启。
- OFFLINE_HARD - 当某后端MySQL被设置为 OFFLINE_HARD 时,ProxySQL将不会向它发送新的请求,该节点正在执行的事务也会立即中断。也就是直接将该后端杀掉。等价于删除该节点,或临时将其移除出组(例如出于维护的目的)。
-
weight
- 节点在组中的权重值越高,ProxySQL会发送越多请求给它们。 -
compression
- 如果该字段的值设置为大于0,ProxySQL和该后端新建的连接中,ProxySQL将会先压缩数据再传输。 -
max_connections
- 和该后端允许建立的最大连接数。当达到最大数量时,即使该后端的权重很大,也不会和它新建连接。请确保该后端的max_connections
值是合理的,以避免MySQL超负荷时ProxySQL继续向其发送请求。 -
max_replication_lag
- 如果值大于0,ProxySQL的Monitor模块将会定期检查该slave的复制是否延后于master,如果延迟的值大于该字段的值,ProxySQL将会暂时避开该节点,直到该slave赶上master。 -
use_ssl
- 如果设置为1,则和该后端MySQL建立SSL连接。 -
max_latency_ms
- Monitory模块定期向该后端发起ping检查,如果该节点的ping时间大于该字段的值,则将其排除在连接池之外(尽管该节点仍处于ONLINE状态)。 -
comment
- 该表的说明信息,可随便定义。
mysql_replication_hostgroups
定义传统的异步、半同步主从复制主机组。
如果是MySQL组复制(group replication)或者InnoDB Cluster,则使用mysql_group_replication_hostgroups
表。
如果是Galera或者PXC(Percona XtraDB Cluster),则使用mysql_galera_hostgroups
表。
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),
comment VARCHAR,
UNIQUE (reader_hostgroup))
1 row in set (0.00 sec)
该表中的每一行代表一组负责读的组和一组负责写的组。
ProxySQL会监控特定组中所有主机的read_only
值,并基于read_only
的值来分配该组中的读、写请求。
各字段的意义如下:
-
writer_hostgroup
- 默认的写组。后端read_only=0
的节点会分配到这个组中。 -
reader_hostgroup
- 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1
的节点会分配到这个组中。 -
comment
- 该字段用于说明、注释,可随便定义。
表mysql_group_replication_hostgroups
定义后端使用组复制或者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)) 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)
各字段的意义如下:
-
writer_hostgroup
- 默认的写组。后端read_only=0
的节点会分配到这个组中。 -
backup_writer_hostgroup
- 如果后端MySQL集群有多个节点可写并设置了max_writes
字段的值,ProxySQL将会把其余的所有节点(超出max_writes
)都放进备写组backup_writer_hostgroup
中作为备份节点。 -
reader_hostgroup
- 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1
的节点会分配到这个组中。 -
offline_hostgroup
- 当ProxySQL监控并决定了某节点为OFFLINE
后,会将其放进组offline_hostgroup
中。 -
active
- 当启用后,ProxySQL会监控该组机组,并再不同组之间合理地移动节点。 -
max_writers
- 该字段的值决定写组writer_hostgroup
中最大允许的节点数量,超出该数量的但允许写的节点都会放进备份组backup_writer_hostgroup
中。 -
writer_is_also_reader
- 决定一个节点升级为写节点(放进writer_hostgroup
)后是否仍然保留在reader_hostgroup
组中提供读服务。 -
max_transactions_behind
- 当某节点延后于写节点时,为了防止读取到过期数据,ProxySQL可能会自动避开该节点。该字段决定最多延后写节点多少个事务(具体延后的事务数量可以从MySQL的sys.gr_member_routing_candidate_status
表中的transaction_behind
字段获取),延后的事务数量超出该值时,ProxySQL就会自动避开这个节点。 -
comment
- 该字段用于说明、注释,可随便定义。
表mysql_galera_hostgroups
定义后端使用Galera或者PXC(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)) 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)
各字段的意义如下:
-
writer_hostgroup
- 默认的写组。后端read_only=0
的节点会分配到这个组中。 -
backup_writer_hostgroup
- 如果后端MySQL集群有多个节点可写并设置了max_writes
字段的值,ProxySQL将会把其余的所有节点(超出max_writes
)都放进备写组backup_writer_hostgroup
中作为备份节点。 -
reader_hostgroup
- 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1
的节点会分配到这个组中。 -
offline_hostgroup
- 当ProxySQL监控并决定了某节点为OFFLINE
后,会将其放进组offline_hostgroup
中。 -
active
- 当启用后,ProxySQL会监控该组机组,并再不同组之间合理地移动节点。 -
max_writers
- 该字段的值决定写组writer_hostgroup
中最大允许的节点数量,超出该数量的但允许写的节点都会放进备份组backup_writer_hostgroup
中。 -
writer_is_also_reader
- 决定一个节点升级为写节点(放进writer_hostgroup
)后是否仍然保留在reader_hostgroup
组中提供读服务。 -
max_transactions_behind
- 当某节点延后于写节点时,为了防止读取到过期数据,ProxySQL可能会自动避开该节点。该字段决定最多延后写节点多少个事务(具体延后的事务数量可以通过查询变量wsrep_local_recv_queue
获取),延后的事务数量超出该值时,ProxySQL就会自动避开这个节点。 -
comment
- 该字段用于说明、注释,可随便定义。
mysql_users
表定义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 0,
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,
PRIMARY KEY (username, backend),
UNIQUE (username, frontend))
1 row in set (0.00 sec)
个字段的意义:
-
username
,password
- 前端连接到ProxySQL以及ProxySQL连接到后端时使用的用户凭据,见密码管理 -
active
-active = 0
的用户会保留在库中,但不会加载到runtime数据结构中。 -
default_hostgroup
- 如果该用户发送的查询语句无法匹配任何规则,则该查询会路由到该字段指定的默认组中。 -
default_schema
- 建立连接时默认将切换到该schema。 -
schema_locked
- 目前还不支持该功能。 -
transaction_persistent
- 如果正在和ProxySQL建立连接的客户端使用的用户设置了该字段,那么当该用户开启一个事务后,该客户端后续的请求都将路由到同一主机组中(无视查询规则),使得事务在这个组中是持久的,避免同一事务分散到其它组,直到事务结束才可能会路由到其它主机组。 -
fast_forward
- 如果设置了该字段,ProxySQL将绕过查询处理层(重写语句、缓存),直接将原请求语句转发给后端节点。 -
frontend
- 如果设置为1,前端将可以使用该行所代表的用户(username,password)连接到ProxySQL。 -
backend
- 如果设置为1,ProxySQL将可以使用该行所代表的用户(username,password)连接到后端节点。
注意,当前所有的用户均要求设置frontend
和backend
为1(译注:即所有用户都可以进行frontend--> ProxySQL
以及ProxySQL --> backend
的连接认证)。将来版本中,ProxySQL将分离这两部分连接的用户凭据。这样前端将永远不知道后端的用户凭据,它们只能通过中间的ProxySQL发送请求,无法直接和后端节点建立连接,从而提高安全性。
关于快速转发fast_forward
:
- 不要求用一个不同的端口:正常的ProxySQL逻辑和"fast forward"的逻辑使用的是完全相同的代码/模块。
- fast forward是基于每用户的:根据连接到ProxySQL用户的设置,决定该用户是否启用、禁用fast forward功能。
- fast forward算法的启用是在用户认证之后:ProxySQL仍然需要先对客户端使用的用户进行认证,尽管客户端的请求会直接原样转发给后端,但ProxySQL仍然会和前端先建立好连接。这意味着,如果前端和ProxySQL的连接发生错误,也会被处理。
- fast forward不支持SSL连接。
- 如果使用压缩功能,必须在两端都启用压缩。
注意:mysql_users
表中的用户不允许和admin-admin_credentials
以及admin-stats_credentials
中的用户重复。(译注:换句话说,它们是两套认证系统,且用户名不可重复)
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 NOT NULL DEFAULT 0,
client_addr VARCHAR,
proxy_addr VARCHAR,
proxy_port INT,
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,
replace_pattern VARCHAR,
destination_hostgroup INT DEFAULT NULL,
cache_ttl INT CHECK(cache_ttl > 0),
reconnect INT CHECK (reconnect IN (0,1)) DEFAULT NULL,
timeout INT UNSIGNED,
retries INT CHECK (retries>=0 AND retries <=1000),
delay INT UNSIGNED,
mirror_flagOUT INT UNSIGNED,
mirror_hostgroup INT UNSIGNED,
error_msg VARCHAR,
sticky_conn INT CHECK (sticky_conn IN (0,1)),
multiplex INT CHECK (multiplex IN (0,1)),
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)
各字段的意义:
-
rule_id
- 规则的id。规则是按照rule_id的顺序进行处理的。 -
active
- 只有该字段值为1的规则才会加载到runtime数据结构,所以只有这些规则才会被查询处理模块处理。 -
username
- 用户名筛选,当设置为非NULL值时,只有匹配的用户建立的连接发出的查询才会被匹配。 -
schemaname
- schema筛选,当设置为非NULL值时,只有当连接使用schemaname
作为默认schema时,该连接发出的查询才会被匹配。(在MariaDB/MySQL中,schemaname等价于databasename)。 -
flagIN
,flagOUT
,apply
- 这些字段允许我们创建"链式规则"(chains of rules),一个规则接一个规则。An input flag value is set to 0, and only rules with flagIN=0 are considered at the beginning. When a matching rule is found for a specific query, flagOUT is evaluated and if NOT NULL the query will be flagged with the specified flag in flagOUT. If flagOUT differs from flagIN , the query will exit the current chain and enters a new chain of rules having flagIN as the new input flag. If flagOUT matches flagIN, the query will be re-evaluate again against the first rule with said flagIN. This happens until there are no more matching rules, or apply is set to 1 (which means this is the last rule to be applied) -
client_addr
- 通过源地址进行匹配。 -
proxy_addr
- match incoming traffic on a specific local IP -
proxy_port
- match incoming traffic on a specific local port -
digest
- 通过digest进行匹配,digest的值在stats_mysql_query_digest.digest
中。 -
match_digest
- 通过正则表达式匹配digest。见mysql-query_processor_regex。 -
match_pattern
- 通过正则表达式匹配查询语句的文本内容。见mysql-query_processor_regex。 -
negate_match_pattern
- 设置为1时,表示未被match_digest
或match_pattern
匹配的才算被成功匹配。也就是说,相当于在这两个匹配动作前加了NOT操作符进行取反。 -
re_modifiers
- RE正则引擎的修饰符列表,多个修饰符使用逗号分隔。指定了CASELESS
后,将忽略大小写。指定了GLOBAL
后,将替换全局(而不是第一个被匹配到的内容)。为了向后兼容,默认只启用了CASELESS
修饰符。详见mysql-query_processor_regex。 -
replace_pattern
- 将匹配到的内容替换为此字段值。它使用的是RE2正则引擎的Replace,所以有必要去看一下RE2的在线手册:https://github.com/google/re2/blob/master/re2/re2.h#L378 。注意,这是可选的,当未设置该字段,查询处理器将不会重写语句,只会缓存、路由以及设置其它参数。 -
destination_hostgroup
- 将匹配到的查询路由到该主机组。但注意,如果用户的transaction_persistent=1
(见mysql_users
表),且该用户建立的连接开启了一个事务,则这个事务内的所有语句都将路由到同一主机组,无视匹配规则。 -
cache_ttl
- 查询结果缓存的时间长度(单位毫秒)。注意,在ProxySQL 1.1中,cache_ttl的单位是秒。 -
reconnect
- 目前不使用该功能。 -
timeout
- 被匹配或被重写的查询执行的最大超时时长(单位毫秒)。如果一个查询执行的时间太久(超过了这个值),该查询将自动被杀掉。如果未设置该值,将使用全局变量mysql-default_query_timeout
的值。 -
retries
- 当在执行查询时探测到故障后,重新执行查询的最大次数。如果未指定,则使用全局变量mysql-query_retries_on_failure
的值。 -
delay
- 延迟执行该查询的毫秒数。本质上是一个限流机制和QoS,使得可以将优先级让位于其它查询。这个值会写入到mysql-default_query_delay
全局变量中,所以它会应用于所有的查询。将来的版本中将会提供一个更高级的限流机制。 -
mirror_flagOUT
和mirror_hostgroup
- mirroring相关的设置。 -
error_msg
- 查询将被阻塞,然后向客户端返回error_msg
指定的信息。 -
sticky_conn
- 当前还未实现该功能。 -
multiplex
- If 0, multiplex will be disabled. If 1, multiplex could be re-enabled if there are is not any other conditions preventing this (like user variables or transactions). If 2, multiplexing is not disabled for just the current query. See wiki Default isNULL
, thus not modifying multiplexing policies -
log
- 查询将记录日志。 -
apply
- 当设置为1后,当匹配到该规则后,将立即应用该规则,不会再评估其它的规则(注意:应用之后,将不会评估mysql_query_rules_fast_routing
中的规则)。 -
comment
- 注释说明字段,例如描述规则的意义。
mysql_query_rules_fast_routing
表是mysql_query_rules
表的一个扩展,在mysql_query_rules
评估之后再评估fast routing策略和属性。(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)
各字段的意义:
-
username
- 用户名筛选,只有匹配的用户建立的连接发出的查询才会被匹配。 -
schemaname
- schema筛选,只有当连接使用schemaname
作为默认schema时,该连接发出的查询才会被匹配。(在MariaDB/MySQL中,schemaname等价于databasename)。 -
flagIN
- 和mysql_query_rules
中的flagin
的评估方式一样,且会关联mysql_query_rules
表中的flagout/apply
值。 -
destination_hostgroup
- 将匹配到的查询路由到该主机组。但注意,如果用户的transaction_persistent=1
(见mysql_users
表),且该用户建立的连接开启了一个事务,则这个事务内的所有语句都将路由到同一主机组,无视匹配规则。 -
comment
- 注释说明字段,例如描述规则的意义。
global_variables
表用于定义全局变量。这是一个非常简单的表,本质上是一个key/value存储系统。这些全局变量是ProxySQL所使用的,且很容易根据它们调整ProxySQL的行为。
全局变量根据它们的分类,使用前缀进行区分。当前有两类全局变量,但在未来的计划中已经有更多类别的全局变量:
- 以
admin-
开头的全局变量是Admin模块相关的变量,用于调整admin管理接口的行为。例如,修改admin接口的监听地址(admin-mysql_ifaces
),修改admin的用户凭据(amdin-admin_credentials
)。 - 以
mysql-
开头的全局变量是MySQL模块相关的变量,用于调整MySQL相关的特性。具体来说,它们包括了与以下相关的调优变量:- 处理MySQL请求
- 监控操作(以
mysql-monitor_
开头) - 查询缓存
有关特定变量的更多信息,请查看专门描述全局变量的部分。
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"是在编写该文档时(版本1.2.4)的示例:
Admin> SELECT * FROM global_variables ORDER BY variable_name;
+----------------------------------------+-------------------------------------------------------------+
| variable_name | variable_value |
+----------------------------------------+-------------------------------------------------------------+
| admin-admin_credentials | admin:admin |
| admin-hash_passwords | true |
| admin-mysql_ifaces | 0.0.0.0:6032 |
| admin-read_only | false |
| admin-refresh_interval | 2000 |
| admin-stats_credentials | stats:stats |
| admin-telnet_admin_ifaces | (null) |
| admin-telnet_stats_ifaces | (null) |
| admin-version | 1.2.4.0923 |
| mysql-client_found_rows | true |
| mysql-commands_stats | true |
| mysql-connect_retries_delay | 1 |
| mysql-connect_retries_on_failure | 5 |
| mysql-connect_timeout_server | 10000 |
| mysql-connect_timeout_server_max | 10000 |
| mysql-connection_max_age_ms | 0 |
| mysql-default_charset | utf8 |
| mysql-default_max_latency_ms | 1000 |
| mysql-default_query_delay | 0 |
| mysql-default_query_timeout | 10000 |
| mysql-default_reconnect | true |
| mysql-default_schema | information_schema |
| mysql-enforce_autocommit_on_reads | false |
| mysql-eventslog_filename | file1.log |
| mysql-eventslog_filesize | 104857600 |
| mysql-free_connections_pct | 100 |
| mysql-have_compress | true |
| mysql-init_connect | (null) |
| mysql-interfaces | 0.0.0.0:6033 |
| mysql-long_query_time | 1000 |
| mysql-max_allowed_packet | 4194304 |
| mysql-max_connections | 2048 |
| mysql-max_transaction_time | 14400000 |
| mysql-monitor_connect_interval | 200000 |
| mysql-monitor_connect_timeout | 500 |
| mysql-monitor_enabled | true |
| mysql-monitor_history | 60000 |
| mysql-monitor_password | monitor |
| mysql-monitor_ping_interval | 200000 |
| mysql-monitor_ping_max_failures | 3 |
| mysql-monitor_ping_timeout | 500 |
| mysql-monitor_query_interval | 60000 |
| mysql-monitor_query_timeout | 100 |
| mysql-monitor_read_only_interval | 1000 |
| mysql-monitor_read_only_timeout | 100 |
| mysql-monitor_replication_lag_interval | 10000 |
| mysql-monitor_replication_lag_timeout | 1000 |
| mysql-monitor_slave_lag_when_null | 60 |
| mysql-monitor_username | monitor |
| mysql-monitor_writer_is_also_reader | true |
| mysql-multiplexing | true |
| mysql-ping_interval_server_msec | 10000 |
| mysql-ping_timeout_server | 200 |
| mysql-poll_timeout | 2000 |
| mysql-poll_timeout_on_failure | 100 |
| mysql-query_cache_size_MB | 512 |
| mysql-query_digests | true |
| mysql-query_processor_iterations | 0 |
| mysql-query_retries_on_failure | 1 |
| mysql-server_capabilities | 47626 |
| mysql-server_version | 5.5.30 |
| mysql-servers_stats | true |
| mysql-session_debug | (null) |
| mysql-sessions_sort | true |
| mysql-shun_on_failures | 5 |
| mysql-shun_recovery_time_sec | 10 |
| mysql-ssl_p2s_ca | /home/vagrant/sandboxes/rsandbox_mysql-5_6_26/master/ca.pem |
| mysql-ssl_p2s_cert | /home/vagrant/newcerts/client-cert.pem |
| mysql-ssl_p2s_cipher | (null) |
| mysql-ssl_p2s_key | /home/vagrant/newcerts/client-key.pem |
| mysql-stacksize | 1048576 |
| mysql-threads | 1 |
| mysql-threshold_query_length | 524288 |
| mysql-threshold_resultset_size | 4194304 |
| mysql-wait_timeout | 28800000 |
+----------------------------------------+-------------------------------------------------------------+
75 rows in set (0.01 sec)
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)
下面是创建排序规则表mysql_collations
的示例:
CREATE TABLE mysql_collations (
Id INTEGER NOT NULL PRIMARY KEY,
Collation VARCHAR NOT NULL,
Charset VARCHAR NOT NULL,
`Default` VARCHAR NOT NULL
)
(charset, collation)
必须是ProxySQL所支持的。原则上,ProxySQL将验证前端发起的请求使用的是受支持的字符集。此外,如果ProxySQL和后端的连接使用的是连接池中的连接时,需要确保该连接已经切换为正确的字符集。
(译注:换句话说,ProxySQL前后两端的连接都必须使用相同的字符集)
以上所列出的所有的表都有一个与之对应的runtime_
表:
- runtime_global_variables:runtime版的global_variables
- runtime_mysql_replication_hostgroups:runtime版的mysql_replication_hostsgroups
- runtime_mysql_servers:runtime版的mysql_servers
- runtime_mysql_users:runtime版的mysql_users
- runtime_scheduler:runtime版的scheduler
以上main
中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。
"disk"数据库和main
数据库中拥有的表完全一致(除了runtime_
版的表),且字段也完全相同。唯一的区别是disk数据库中的数据都是已经持久化到磁盘上的,而main
数据库中的数据都是内存数据库中的内容。当重启ProxySQL时,main
数据库将根据disk
数据库中的内容进行填充。
以上main
中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。