ProxySQL Main库
转载自:https://www.jianshu.com/p/eee03c5ec879
Main库表清单
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表用于定义后端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_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
表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 - 该字段用于说明、注释,可随便定义。
(译注:MGR上的系统视图sys.gr_member_routing_candidate_status需要额外创建,可从addition_to_sys.sql下载sql脚本进行创建)
mysql_galera_hostgroups
表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_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
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 - 当流入的查询是在本地某地址上时,将匹配。
proxy_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 - 如果设置为0,将禁用multiplexing。如果设置为1,则启用或重新启用multiplexing,除非有其它条件(如用户变量或事务)阻止启用。如果设置为2,则只对当前查询不禁用multiplexing。默认值为NULL,表示不会修改multiplexing的策略。详细内容见wiki。
log - 查询将记录日志。
apply - 当设置为1后,当匹配到该规则后,将立即应用该规则,不会再评估其它的规则(注意:应用之后,将不会评估mysql_query_rules_fast_routing中的规则)。
comment - 注释说明字段,例如描述规则的意义。
mysql_query_rules_fast_routing
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
global_variables表用于定义全局变量(https://github.com/malongshuai/proxysql/wiki/Global-variables)。这是一个非常简单的表,本质上是一个key/value存储系统。这些全局变量是ProxySQL所使用的,且很容易根据它们调整ProxySQL的行为。
全局变量根据它们的分类,使用前缀进行区分。当前有两类全局变量,但在未来的计划中已经有更多类别的全局变量:
以admin-开头的全局变量是Admin模块相关的变量,用于调整admin管理接口的行为。例如,修改admin接口的监听地址(admin-mysql_ifaces),修改admin的用户凭据(amdin-admin_credentials)。
以mysql-开头的全局变量是MySQL模块相关的变量,用于调整MySQL相关的特性。具体来说,它们包括了与以下相关的调优变量:
处理MySQL请求
监控操作(以mysql-monitor_开头)
查询缓存
有关特定变量的更多信息,请查看专门描述全局变量(https://github.com/malongshuai/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"是在编写该文档时(版本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
scheduler表定义了每隔一段时间运行一次的调度任务(https://github.com/malongshuai/proxysql/wiki/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
下面是创建排序规则表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 tables
以上所列出的所有的表都有一个与之对应的runtime_表
runtime_global_variables
runtime_mysql_replication_hostgroups
runtime_mysql_servers
runtime_mysql_users
runtime_scheduler
需要注意main schema的一点
以上main中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。
disk database
"disk"数据库和main数据库中拥有的表完全一致(除了runtime_版的表),且字段也完全相同。唯一的区别是disk数据库中的数据都是已经持久化到磁盘上的,而main数据库中的数据都是内存数据库中的内容。当重启ProxySQL时,main数据库将根据disk数据库中的内容进行填充。
以上main中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。