转载自:https://www.jianshu.com/p/eee03c5ec879

  1. Main库表清单
  2. Admin> SHOW TABLES FROM main;
  3. +--------------------------------------------+
  4. | tables |
  5. +--------------------------------------------+
  6. | global_variables |
  7. | mysql_collations |
  8. | mysql_group_replication_hostgroups |
  9. | mysql_query_rules |
  10. | mysql_replication_hostgroups |
  11. | mysql_servers |
  12. | mysql_users |
  13. | proxysql_servers |
  14. | runtime_checksums_values |
  15. | runtime_global_variables |
  16. | runtime_mysql_group_replication_hostgroups |
  17. | runtime_mysql_query_rules |
  18. | runtime_mysql_replication_hostgroups |
  19. | runtime_mysql_servers |
  20. | runtime_mysql_users |
  21. | runtime_proxysql_servers |
  22. | runtime_scheduler |
  23. | scheduler |
  24. +--------------------------------------------+
  25. 18 rows in set (0.00 sec)
  26. 关键的配置表有如下几个:
  27. MySQL Servers
  28. MySQL Replication Hostgroups
  29. MySQL Query Rules
  30. MySQL Query Rules Fast Routing
  31. Global Variables
  32. Scheduler
  33. MySQL Collations
  34. 以及对应的Runtime Tables
  35. mysql_servers
  36. mysql_servers表用于定义后端MySQL Servers
  37. Admin> SHOW CREATE TABLE mysql_servers\G
  38. *************************** 1. row ***************************
  39. table: mysql_servers
  40. Create Table: CREATE TABLE mysql_servers (
  41. hostgroup_id INT NOT NULL DEFAULT 0,
  42. hostname VARCHAR NOT NULL,
  43. port INT NOT NULL DEFAULT 3306,
  44. status VARCHAR CHECK (UPPER(status) IN ('ONLINE','SHUNNED','OFFLINE_SOFT', 'OFFLINE_HARD')) NOT NULL DEFAULT 'ONLINE',
  45. weight INT CHECK (weight >= 0) NOT NULL DEFAULT 1,
  46. compression INT CHECK (compression >=0 AND compression <= 102400) NOT NULL DEFAULT 0,
  47. max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 1000,
  48. max_replication_lag INT CHECK (max_replication_lag >= 0 AND max_replication_lag <= 126144000) NOT NULL DEFAULT 0,
  49. use_ssl INT CHECK (use_ssl IN(0,1)) NOT NULL DEFAULT 0,
  50. max_latency_ms INT UNSIGNED CHECK (max_latency_ms>=0) NOT NULL DEFAULT 0,
  51. comment VARCHAR NOT NULL DEFAULT '',
  52. PRIMARY KEY (hostgroup_id, hostname, port) )
  53. 1 row in set (0.00 sec)
  54. 各字段意义如下:
  55. hostgroup_id:该后端MySQL实例所在的主机组。注意,同一MySQL节点可属于多个主机组。
  56. hostname, port:后端MySQL监听的地址和端口。(译注:就是默认3306端口的意义)
  57. status
  58. ONLINE - 该后端MySQL节点完全正常。
  59. SHUNNED - 该后端MySQL节点将暂时被ProxySQL自动避开(忽略),原因可能是一个较短时间内发生了大量连接错误,也可能是该slavemaster的数据延迟太大(replication lag)。
  60. OFFLINE_SOFT - 当某后端MySQL被设置为 OFFLINE_SOFT 时,ProxySQL将不会向它发送新的请求,但该节点正在执行的事务会继续执行,直到所有事务执行完毕后会进入非激活状态。也就是说,和该后端的连接会保持到事务执行完毕。这可以实现后端节点的graceful停止、重启。
  61. OFFLINE_HARD - 当某后端MySQL被设置为 OFFLINE_HARD 时,ProxySQL将不会向它发送新的请求,该节点正在执行的事务也会立即中断。也就是直接将该后端杀掉。等价于删除该节点,或临时将其移除出组(例如出于维护的目的)。
  62. weight - 节点在组中的权重值越高,ProxySQL会发送越多请求给它们。
  63. compression - 如果该字段的值设置为大于0ProxySQL和该后端新建的连接中,ProxySQL将会先压缩数据再传输。
  64. max_connections - 和该后端允许建立的最大连接数。当达到最大数量时,即使该后端的权重很大,也不会和它新建连接。请确保该后端的max_connections值是合理的,以避免MySQL超负荷时ProxySQL继续向其发送请求。
  65. max_replication_lag - 如果值大于0ProxySQLMonitor模块将会定期检查该slave的复制是否延后于master,如果延迟的值大于该字段的值,ProxySQL将会暂时避开该节点,直到该slave赶上master
  66. use_ssl - 如果设置为1,则和该后端MySQL建立SSL连接。
  67. max_latency_ms - Monitory模块定期向该后端发起ping检查,如果该节点的ping时间大于该字段的值,则将其排除在连接池之外(尽管该节点仍处于ONLINE状态)。
  68. comment - 该表的说明信息,可随便定义。
  69. mysql_replication_hostgroups
  70. mysql_replication_hostgroups定义传统的异步、半同步主从复制主机组。
  71. 如果是MySQL组复制(group replication)或者InnoDB Cluster,则使用mysql_group_replication_hostgroups表。
  72. 如果是Galera或者PXC(Percona XtraDB Cluster),则使用mysql_galera_hostgroups表。
  73. Admin> SHOW CREATE TABLE mysql_replication_hostgroups\G
  74. *************************** 1. row ***************************
  75. table: mysql_replication_hostgroups
  76. Create Table: CREATE TABLE mysql_replication_hostgroups (
  77. writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
  78. reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>0),
  79. comment VARCHAR,
  80. UNIQUE (reader_hostgroup))
  81. 1 row in set (0.00 sec)
  82. 该表中的每一行代表一组负责读的组和一组负责写的组。
  83. ProxySQL会监控特定组中所有主机的read_only值,并基于read_only的值来分配该组中的读、写请求。
  84. 各字段的意义如下:
  85. writer_hostgroup - 默认的写组。后端read_only=0的节点会分配到这个组中。
  86. reader_hostgroup - 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1的节点会分配到这个组中。
  87. comment - 该字段用于说明、注释,可随便定义。
  88. mysql_group_replication_hostgroups
  89. mysql_group_replication_hostgroups定义后端使用组复制或者InnoDB Cluster的主机组。
  90. Admin> show create table mysql_group_replication_hostgroups\G
  91. *************************** 1. row ***************************
  92. table: mysql_group_replication_hostgroups
  93. Create Table: CREATE TABLE mysql_group_replication_hostgroups (
  94. writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
  95. backup_writer_hostgroup INT CHECK (backup_writer_hostgroup>=0 AND backup_writer_hostgroup<>writer_hostgroup) NOT NULL,
  96. reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND backup_writer_hostgroup<>reader_hostgroup AND reader_hostgroup>0),
  97. 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),
  98. active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
  99. max_writers INT NOT NULL CHECK (max_writers >= 0) DEFAULT 1,
  100. writer_is_also_reader INT CHECK (writer_is_also_reader IN (0,1)) NOT NULL DEFAULT 0,
  101. max_transactions_behind INT CHECK (max_transactions_behind>=0) NOT NULL DEFAULT 0,
  102. comment VARCHAR,
  103. UNIQUE (reader_hostgroup),
  104. UNIQUE (offline_hostgroup),
  105. UNIQUE (backup_writer_hostgroup))
  106. 1 row in set (0.00 sec)
  107. 各字段的意义如下:
  108. writer_hostgroup - 默认的写组。后端read_only=0的节点会分配到这个组中。
  109. backup_writer_hostgroup - 如果后端MySQL集群有多个节点可写并设置了max_writes字段的值,ProxySQL将会把其余的所有节点(超出max_writes)都放进备写组backup_writer_hostgroup中作为备份节点。
  110. reader_hostgroup - 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1的节点会分配到这个组中。
  111. offline_hostgroup - ProxySQL监控并决定了某节点为OFFLINE后,会将其放进组offline_hostgroup中。
  112. active - 当启用后,ProxySQL会监控该主机组,并在不同组之间合理地移动节点。
  113. max_writers - 该字段的值决定写组writer_hostgroup中最大允许的节点数量,超出该数量的但允许写的节点都会放进备份组backup_writer_hostgroup中。
  114. writer_is_also_reader - 决定一个节点升级为写节点(放进writer_hostgroup)后是否仍然保留在reader_hostgroup组中提供读服务。
  115. max_transactions_behind - 当某节点延后于写节点时,为了防止读取到过期数据,ProxySQL可能会自动避开该节点。该字段决定最多延后写节点多少个事务(具体延后的事务数量可以从MySQLsys.gr_member_routing_candidate_status表中的transaction_behind字段获取),延后的事务数量超出该值时,ProxySQL就会自动避开这个节点。
  116. comment - 该字段用于说明、注释,可随便定义。
  117. (译注:MGR上的系统视图sys.gr_member_routing_candidate_status需要额外创建,可从addition_to_sys.sql下载sql脚本进行创建)
  118. mysql_galera_hostgroups
  119. mysql_galera_hostgroups定义后端使用Galera或者PXC(Percona XtraDB Cluster)的主机组。
  120. Admin> show create table mysql_galera_hostgroups\G
  121. *************************** 1. row ***************************
  122. table: mysql_galera_hostgroups
  123. Create Table: CREATE TABLE mysql_galera_hostgroups (
  124. writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,
  125. backup_writer_hostgroup INT CHECK (backup_writer_hostgroup>=0 AND backup_writer_hostgroup<>writer_hostgroup) NOT NULL,
  126. reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND backup_writer_hostgroup<>reader_hostgroup AND reader_hostgroup>0),
  127. 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),
  128. active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
  129. max_writers INT NOT NULL CHECK (max_writers >= 0) DEFAULT 1,
  130. writer_is_also_reader INT CHECK (writer_is_also_reader IN (0,1)) NOT NULL DEFAULT 0,
  131. max_transactions_behind INT CHECK (max_transactions_behind>=0) NOT NULL DEFAULT 0,
  132. comment VARCHAR,
  133. UNIQUE (reader_hostgroup),
  134. UNIQUE (offline_hostgroup),
  135. UNIQUE (backup_writer_hostgroup))
  136. 1 row in set (0.00 sec)
  137. 各字段的意义如下:
  138. writer_hostgroup - 默认的写组。后端read_only=0的节点会分配到这个组中。
  139. backup_writer_hostgroup - 如果后端MySQL集群有多个节点可写并设置了max_writes字段的值,ProxySQL将会把其余的所有节点(超出max_writes)都放进备写组backup_writer_hostgroup中作为备份节点。
  140. reader_hostgroup - 负责读的组。查询规则或者只具有只读权限的用户的读请求都会路由到该主机组中的节点。后端read_only=1的节点会分配到这个组中。
  141. offline_hostgroup - ProxySQL监控并决定了某节点为OFFLINE后,会将其放进组offline_hostgroup中。
  142. active - 当启用后,ProxySQL会监控该主机组,并在不同组之间合理地移动节点。
  143. max_writers - 该字段的值决定写组writer_hostgroup中最大允许的节点数量,超出该数量的但允许写的节点都会放进备份组backup_writer_hostgroup中。
  144. writer_is_also_reader - 决定一个节点升级为写节点(放进writer_hostgroup)后是否仍然保留在reader_hostgroup组中提供读服务。
  145. max_transactions_behind - 当某节点延后于写节点时,为了防止读取到过期数据,ProxySQL可能会自动避开该节点。该字段决定最多延后写节点多少个事务(具体延后的事务数量可以通过查询变量wsrep_local_recv_queue获取),延后的事务数量超出该值时,ProxySQL就会自动避开这个节点。
  146. comment - 该字段用于说明、注释,可随便定义。
  147. mysql_users
  148. mysql_users表定义MySQL用户,用于连接到后端。
  149. Admin> SHOW CREATE TABLE mysql_users\G
  150. *************************** 1. row ***************************
  151. table: mysql_users
  152. Create Table: CREATE TABLE mysql_users (
  153. username VARCHAR NOT NULL,
  154. password VARCHAR,
  155. active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
  156. use_ssl INT CHECK (use_ssl IN (0,1)) NOT NULL DEFAULT 0,
  157. default_hostgroup INT NOT NULL DEFAULT 0,
  158. default_schema VARCHAR,
  159. schema_locked INT CHECK (schema_locked IN (0,1)) NOT NULL DEFAULT 0,
  160. transaction_persistent INT CHECK (transaction_persistent IN (0,1)) NOT NULL DEFAULT 0,
  161. fast_forward INT CHECK (fast_forward IN (0,1)) NOT NULL DEFAULT 0,
  162. backend INT CHECK (backend IN (0,1)) NOT NULL DEFAULT 1,
  163. frontend INT CHECK (frontend IN (0,1)) NOT NULL DEFAULT 1,
  164. max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 10000,
  165. PRIMARY KEY (username, backend),
  166. UNIQUE (username, frontend))
  167. 1 row in set (0.00 sec)
  168. 各字段的意义:
  169. username, password - 前端连接到ProxySQL以及ProxySQL连接到后端时使用的用户凭据,见密码管理
  170. active - active = 0的用户会保留在库中,但不会加载到runtime数据结构中。
  171. default_hostgroup - 如果该用户发送的查询语句无法匹配任何规则,则该查询会路由到该字段指定的默认组中。
  172. default_schema - 建立连接时默认将切换到该schema
  173. schema_locked - 目前还不支持该功能。
  174. transaction_persistent - 如果正在和ProxySQL建立连接的客户端使用的用户设置了该字段,那么当该用户开启一个事务后,该客户端后续的请求都将路由到同一主机组中(无视查询规则),使得事务在这个组中是持久的,避免同一事务分散到其它组,直到事务结束才可能会路由到其它主机组。
  175. fast_forward - 如果设置了该字段,ProxySQL将绕过查询处理层(重写语句、缓存),直接将原请求语句转发给后端节点。
  176. frontend - 如果设置为1,前端将可以使用该行所代表的用户(username,password)连接到ProxySQL
  177. backend - 如果设置为1ProxySQL将可以使用该行所代表的用户(username,password)连接到后端节点。
  178. 注意,当前所有的用户均要求设置frontendbackend1(译注:即所有用户都可以进行frontend--> ProxySQL以及ProxySQL --> backend的连接认证)。将来版本中,ProxySQL将分离这两部分连接的用户凭据。这样前端将永远不知道后端的用户凭据,它们只能通过中间的ProxySQL发送请求,无法直接和后端节点建立连接,从而提高安全性。
  179. 关于快速转发fast_forward
  180. 不要求用一个不同的端口:正常的ProxySQL逻辑和"fast forward"的逻辑使用的是完全相同的代码/模块。
  181. fast forward是基于每用户的:根据连接到ProxySQL用户的设置,决定该用户是否启用、禁用fast forward功能。
  182. fast forward算法的启用是在用户认证之后:ProxySQL仍然需要先对客户端使用的用户进行认证,尽管客户端的请求会直接原样转发给后端,但ProxySQL仍然会和前端先建立好连接。这意味着,如果前端和ProxySQL的连接发生错误,也会被处理。
  183. fast forward不支持SSL连接。
  184. 如果使用压缩功能,必须在两端都启用压缩。
  185. 注意:mysql_users表中的用户不允许和admin-admin_credentials以及admin-stats_credentials中的用户重复。(译注:换句话说,它们是两套认证系统,且用户名不可重复)
  186. mysql_query_rules
  187. mysql_query_rules表用于定义路由规则和属性:
  188. Admin> SHOW CREATE TABLE mysql_query_rules\G
  189. *************************** 1. row ***************************
  190. table: mysql_query_rules
  191. Create Table: CREATE TABLE mysql_query_rules (
  192. rule_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  193. active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 0,
  194. username VARCHAR,
  195. schemaname VARCHAR,
  196. flagIN INT NOT NULL DEFAULT 0,
  197. client_addr VARCHAR,
  198. proxy_addr VARCHAR,
  199. proxy_port INT,
  200. digest VARCHAR,
  201. match_digest VARCHAR,
  202. match_pattern VARCHAR,
  203. negate_match_pattern INT CHECK (negate_match_pattern IN (0,1)) NOT NULL DEFAULT 0,
  204. re_modifiers VARCHAR DEFAULT 'CASELESS',
  205. flagOUT INT,
  206. replace_pattern VARCHAR,
  207. destination_hostgroup INT DEFAULT NULL,
  208. cache_ttl INT CHECK(cache_ttl > 0),
  209. reconnect INT CHECK (reconnect IN (0,1)) DEFAULT NULL,
  210. timeout INT UNSIGNED,
  211. retries INT CHECK (retries>=0 AND retries <=1000),
  212. delay INT UNSIGNED,
  213. mirror_flagOUT INT UNSIGNED,
  214. mirror_hostgroup INT UNSIGNED,
  215. error_msg VARCHAR,
  216. sticky_conn INT CHECK (sticky_conn IN (0,1)),
  217. multiplex INT CHECK (multiplex IN (0,1)),
  218. log INT CHECK (log IN (0,1)),
  219. apply INT CHECK(apply IN (0,1)) NOT NULL DEFAULT 0,
  220. comment VARCHAR)
  221. 1 row in set (0.00 sec)
  222. 各字段的意义:
  223. rule_id - 规则的id。规则是按照rule_id的顺序进行处理的。
  224. active - 只有该字段值为1的规则才会加载到runtime数据结构,所以只有这些规则才会被查询处理模块处理。
  225. username - 用户名筛选,当设置为非NULL值时,只有匹配的用户建立的连接发出的查询才会被匹配。
  226. schemaname - schema筛选,当设置为非NULL值时,只有当连接使用schemaname作为默认schema时,该连接发出的查询才会被匹配。(在MariaDB/MySQL中,schemaname等价于databasename)。
  227. 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)
  228. client_addr - 通过源地址进行匹配。
  229. proxy_addr - 当流入的查询是在本地某地址上时,将匹配。
  230. proxy_port - 当流入的查询是在本地某端口上时,将匹配。
  231. digest - 通过digest进行匹配,digest的值在stats_mysql_query_digest.digest中。
  232. match_digest - 通过正则表达式匹配digest。见mysql-query_processor_regex
  233. match_pattern - 通过正则表达式匹配查询语句的文本内容。见mysql-query_processor_regex
  234. negate_match_pattern - 设置为1时,表示未被match_digestmatch_pattern匹配的才算被成功匹配。也就是说,相当于在这两个匹配动作前加了NOT操作符进行取反。
  235. re_modifiers - RE正则引擎的修饰符列表,多个修饰符使用逗号分隔。指定了CASELESS后,将忽略大小写。指定了GLOBAL后,将替换全局(而不是第一个被匹配到的内容)。为了向后兼容,默认只启用了CASELESS修饰符。详见mysql-query_processor_regex
  236. replace_pattern - 将匹配到的内容替换为此字段值。它使用的是RE2正则引擎的Replace,所以有必要去看一下RE2的在线手册:https://github.com/google/re2/blob/master/re2/re2.h#L378 。注意,这是可选的,当未设置该字段,查询处理器将不会重写语句,只会缓存、路由以及设置其它参数。
  237. destination_hostgroup - 将匹配到的查询路由到该主机组。但注意,如果用户的transaction_persistent=1(见mysql_users表),且该用户建立的连接开启了一个事务,则这个事务内的所有语句都将路由到同一主机组,无视匹配规则。
  238. cache_ttl - 查询结果缓存的时间长度(单位毫秒)。注意,在ProxySQL 1.1中,cache_ttl的单位是秒。
  239. reconnect - 目前不使用该功能。
  240. timeout - 被匹配或被重写的查询执行的最大超时时长(单位毫秒)。如果一个查询执行的时间太久(超过了这个值),该查询将自动被杀掉。如果未设置该值,将使用全局变量mysql-default_query_timeout的值。
  241. retries - 当在执行查询时探测到故障后,重新执行查询的最大次数。如果未指定,则使用全局变量mysql-query_retries_on_failure的值。
  242. delay - 延迟执行该查询的毫秒数。本质上是一个限流机制和QoS,使得可以将优先级让位于其它查询。这个值会写入到mysql-default_query_delay全局变量中,所以它会应用于所有的查询。将来的版本中将会提供一个更高级的限流机制。
  243. mirror_flagOUT mirror_hostgroup - mirroring相关的设置。
  244. error_msg - 查询将被阻塞,然后向客户端返回error_msg指定的信息。
  245. sticky_conn - 当前还未实现该功能。
  246. multiplex - 如果设置为0,将禁用multiplexing。如果设置为1,则启用或重新启用multiplexing,除非有其它条件(如用户变量或事务)阻止启用。如果设置为2,则只对当前查询不禁用multiplexing。默认值为NULL,表示不会修改multiplexing的策略。详细内容见wiki
  247. log - 查询将记录日志。
  248. apply - 当设置为1后,当匹配到该规则后,将立即应用该规则,不会再评估其它的规则(注意:应用之后,将不会评估mysql_query_rules_fast_routing中的规则)。
  249. comment - 注释说明字段,例如描述规则的意义。
  250. mysql_query_rules_fast_routing
  251. mysql_query_rules_fast_routing表是mysql_query_rules表的一个扩展,在mysql_query_rules评估之后再评估fast routing策略和属性。(ProxySQL 1.4.7+ 才支持快速路由).
  252. Admin> SHOW CREATE TABLE mysql_query_rules_fast_routing\G
  253. *************************** 1. row ***************************
  254. table: mysql_query_rules_fast_routing
  255. Create Table: CREATE TABLE mysql_query_rules_fast_routing (
  256. username VARCHAR NOT NULL,
  257. schemaname VARCHAR NOT NULL,
  258. flagIN INT NOT NULL DEFAULT 0,
  259. destination_hostgroup INT CHECK (destination_hostgroup >= 0) NOT NULL,
  260. comment VARCHAR NOT NULL,
  261. PRIMARY KEY (username, schemaname, flagIN) )
  262. 1 row in set (0,00 sec)
  263. 各字段的意义:
  264. username - 用户名筛选,只有匹配的用户建立的连接发出的查询才会被匹配。
  265. schemaname - schema筛选,只有当连接使用schemaname作为默认schema时,该连接发出的查询才会被匹配。(在MariaDB/MySQL中,schemaname等价于databasename)。
  266. flagIN - mysql_query_rules中的flagin的评估方式一样,且会关联mysql_query_rules表中的flagout/apply值。
  267. destination_hostgroup - 将匹配到的查询路由到该主机组。但注意,如果用户的transaction_persistent=1(见mysql_users表),且该用户建立的连接开启了一个事务,则这个事务内的所有语句都将路由到同一主机组,无视匹配规则。
  268. comment - 注释说明字段,例如描述规则的意义。
  269. global_variables
  270. global_variables表用于定义全局变量(https://github.com/malongshuai/proxysql/wiki/Global-variables)。这是一个非常简单的表,本质上是一个key/value存储系统。这些全局变量是ProxySQL所使用的,且很容易根据它们调整ProxySQL的行为。
  271. 全局变量根据它们的分类,使用前缀进行区分。当前有两类全局变量,但在未来的计划中已经有更多类别的全局变量:
  272. admin-开头的全局变量是Admin模块相关的变量,用于调整admin管理接口的行为。例如,修改admin接口的监听地址(admin-mysql_ifaces),修改admin的用户凭据(amdin-admin_credentials)。
  273. mysql-开头的全局变量是MySQL模块相关的变量,用于调整MySQL相关的特性。具体来说,它们包括了与以下相关的调优变量:
  274. 处理MySQL请求
  275. 监控操作(以mysql-monitor_开头)
  276. 查询缓存
  277. 有关特定变量的更多信息,请查看专门描述全局变量(https://github.com/malongshuai/proxysql/wiki/Global-variables)的部分。
  278. Admin> SHOW CREATE TABLE global_variables\G
  279. *************************** 1. row ***************************
  280. table: global_variables
  281. Create Table: CREATE TABLE global_variables (
  282. variable_name VARCHAR NOT NULL PRIMARY KEY,
  283. variable_value VARCHAR NOT NULL)
  284. 1 row in set (0.00 sec)
  285. 作为参考,下面的显示的"global_variables"是在编写该文档时(版本1.2.4)的示例:
  286. Admin> SELECT * FROM global_variables ORDER BY variable_name;
  287. +----------------------------------------+-------------------------------------------------------------+
  288. | variable_name | variable_value |
  289. +----------------------------------------+-------------------------------------------------------------+
  290. | admin-admin_credentials | admin:admin |
  291. | admin-hash_passwords | true |
  292. | admin-mysql_ifaces | 0.0.0.0:6032 |
  293. | admin-read_only | false |
  294. | admin-refresh_interval | 2000 |
  295. | admin-stats_credentials | stats:stats |
  296. | admin-telnet_admin_ifaces | (null) |
  297. | admin-telnet_stats_ifaces | (null) |
  298. | admin-version | 1.2.4.0923 |
  299. | mysql-client_found_rows | true |
  300. | mysql-commands_stats | true |
  301. | mysql-connect_retries_delay | 1 |
  302. | mysql-connect_retries_on_failure | 5 |
  303. | mysql-connect_timeout_server | 10000 |
  304. | mysql-connect_timeout_server_max | 10000 |
  305. | mysql-connection_max_age_ms | 0 |
  306. | mysql-default_charset | utf8 |
  307. | mysql-default_max_latency_ms | 1000 |
  308. | mysql-default_query_delay | 0 |
  309. | mysql-default_query_timeout | 10000 |
  310. | mysql-default_reconnect | true |
  311. | mysql-default_schema | information_schema |
  312. | mysql-enforce_autocommit_on_reads | false |
  313. | mysql-eventslog_filename | file1.log |
  314. | mysql-eventslog_filesize | 104857600 |
  315. | mysql-free_connections_pct | 100 |
  316. | mysql-have_compress | true |
  317. | mysql-init_connect | (null) |
  318. | mysql-interfaces | 0.0.0.0:6033 |
  319. | mysql-long_query_time | 1000 |
  320. | mysql-max_allowed_packet | 4194304 |
  321. | mysql-max_connections | 2048 |
  322. | mysql-max_transaction_time | 14400000 |
  323. | mysql-monitor_connect_interval | 200000 |
  324. | mysql-monitor_connect_timeout | 500 |
  325. | mysql-monitor_enabled | true |
  326. | mysql-monitor_history | 60000 |
  327. | mysql-monitor_password | monitor |
  328. | mysql-monitor_ping_interval | 200000 |
  329. | mysql-monitor_ping_max_failures | 3 |
  330. | mysql-monitor_ping_timeout | 500 |
  331. | mysql-monitor_query_interval | 60000 |
  332. | mysql-monitor_query_timeout | 100 |
  333. | mysql-monitor_read_only_interval | 1000 |
  334. | mysql-monitor_read_only_timeout | 100 |
  335. | mysql-monitor_replication_lag_interval | 10000 |
  336. | mysql-monitor_replication_lag_timeout | 1000 |
  337. | mysql-monitor_slave_lag_when_null | 60 |
  338. | mysql-monitor_username | monitor |
  339. | mysql-monitor_writer_is_also_reader | true |
  340. | mysql-multiplexing | true |
  341. | mysql-ping_interval_server_msec | 10000 |
  342. | mysql-ping_timeout_server | 200 |
  343. | mysql-poll_timeout | 2000 |
  344. | mysql-poll_timeout_on_failure | 100 |
  345. | mysql-query_cache_size_MB | 512 |
  346. | mysql-query_digests | true |
  347. | mysql-query_processor_iterations | 0 |
  348. | mysql-query_retries_on_failure | 1 |
  349. | mysql-server_capabilities | 47626 |
  350. | mysql-server_version | 5.5.30 |
  351. | mysql-servers_stats | true |
  352. | mysql-session_debug | (null) |
  353. | mysql-sessions_sort | true |
  354. | mysql-shun_on_failures | 5 |
  355. | mysql-shun_recovery_time_sec | 10 |
  356. | mysql-ssl_p2s_ca | /home/vagrant/sandboxes/rsandbox_mysql-5_6_26/master/ca.pem |
  357. | mysql-ssl_p2s_cert | /home/vagrant/newcerts/client-cert.pem |
  358. | mysql-ssl_p2s_cipher | (null) |
  359. | mysql-ssl_p2s_key | /home/vagrant/newcerts/client-key.pem |
  360. | mysql-stacksize | 1048576 |
  361. | mysql-threads | 1 |
  362. | mysql-threshold_query_length | 524288 |
  363. | mysql-threshold_resultset_size | 4194304 |
  364. | mysql-wait_timeout | 28800000 |
  365. +----------------------------------------+-------------------------------------------------------------+
  366. 75 rows in set (0.01 sec)
  367. scheduler
  368. scheduler表定义了每隔一段时间运行一次的调度任务(https://github.com/malongshuai/proxysql/wiki/Scheduler)。
  369. Admin> SHOW CREATE TABLE scheduler\G
  370. *************************** 1. row ***************************
  371. table: scheduler
  372. Create Table: CREATE TABLE scheduler (
  373. id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  374. active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
  375. interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
  376. filename VARCHAR NOT NULL,
  377. arg1 VARCHAR,
  378. arg2 VARCHAR,
  379. arg3 VARCHAR,
  380. arg4 VARCHAR,
  381. arg5 VARCHAR,
  382. comment VARCHAR NOT NULL DEFAULT '')
  383. 1 row in set (0.00 sec)
  384. mysql_collations
  385. 下面是创建排序规则表mysql_collations的示例:
  386. CREATE TABLE mysql_collations (
  387. Id INTEGER NOT NULL PRIMARY KEY,
  388. Collation VARCHAR NOT NULL,
  389. Charset VARCHAR NOT NULL,
  390. `Default` VARCHAR NOT NULL
  391. )
  392. (charset, collation)必须是ProxySQL所支持的。原则上,ProxySQL将验证前端发起的请求使用的是受支持的字符集。此外,如果ProxySQL和后端的连接使用的是连接池中的连接时,需要确保该连接已经切换为正确的字符集。
  393. (译注:换句话说,ProxySQL前后两端的连接都必须使用相同的字符集)
  394. Runtime tables
  395. 以上所列出的所有的表都有一个与之对应的runtime_
  396. runtime_global_variables
  397. runtime_mysql_replication_hostgroups
  398. runtime_mysql_servers
  399. runtime_mysql_users
  400. runtime_scheduler
  401. 需要注意main schema的一点
  402. 以上main中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。
  403. disk database
  404. "disk"数据库和main数据库中拥有的表完全一致(除了runtime_版的表),且字段也完全相同。唯一的区别是disk数据库中的数据都是已经持久化到磁盘上的,而main数据库中的数据都是内存数据库中的内容。当重启ProxySQL时,main数据库将根据disk数据库中的内容进行填充。
  405. 以上main中的配置全都是内存数据库中的内容,如果没有将它们持久化到磁盘数据库中,在ProxySQL重启、崩溃时,这些配置将全部丢失。

ProxySQL Main库的更多相关文章

  1. ProxySQL Disk库和Stats库

    转载自:https://www.jianshu.com/p/9ef815162fe9 DISK库 disk schema 用于将配置持久化到磁盘上.配置持久化后,下次重启ProxySQL时就会读取这些 ...

  2. MySQL ProxySQL读写分离使用初探

    目的 在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异.具体的介绍可以看官网的相关说明,并且这个中间件也是percon ...

  3. mysql读写分离——中间件ProxySQL的简介与配置

    mysql实现读写分离的方式 mysql 实现读写分离的方式有以下几种: 程序修改mysql操作,直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配,需要开发人员协助. am ...

  4. MySQL中间件之ProxySQL(2):初试读写分离

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL ...

  5. MySQL中间件之ProxySQL(3):Admin管理接口

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的Admin管理接口 当ProxySQL启动后,将 ...

  6. MySQL中间件之ProxySQL(4):多层配置系统

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL中的库 使用ProxySQL的Admin管理接口连 ...

  7. MySQL中间件之ProxySQL(6):管理后端节点

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.配置后端节点前的说明 为了让ProxySQL能够找到后端的MySQ ...

  8. MySQL中间件之ProxySQL(15):ProxySQL代理MySQL组复制

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+组复制前言 在以前的ProxySQL版本中,要支 ...

  9. Proxysql读写分离配置

    ProxySQL是Percona主推的读写分离中间件,下载地址为: https://www.percona.com/downloads/proxysql/ 一.安装 1:下载 wget https:/ ...

随机推荐

  1. Linux 批量杀死进程(详细版本)

    使用场景 当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的ki ...

  2. labview入门到出家10(进阶)——CAN通讯

    ​          讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...

  3. elementplus轮播图初始空白

    问题表现 初始轮播图出现大块空白,在规定的时间间隔后才会正常轮播出下一章图片 问题解决 动态数据添加图片,初次渲染dom因为数据还没有请求回来,所以会出现这样的bug,需要添加v-fi="l ...

  4. MPI学习笔记(二):矩阵相乘的两种实现方法

    mpi矩阵乘法(C=αAB+βC) 最近领导让把之前安装的软件lapack.blas里的dgemm运算提取出来独立作为一套程序,然后把这段程序改为并行的,并测试一下进程规模扩展到128时的并行效率.  ...

  5. C# 虚方法、抽象方法

    一.虚方法(virtual) 作用:当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法. 示例: class Person { public virtual void XXX() { Con ...

  6. banner.txt的图案

    根据网上的图片的url生成图片: url的后缀是图片后缀(GIF, JPG, or PNG)才能转换,而像我图片下面的一般不能用(要靠运气,我就成功了) https://www.degraeve.co ...

  7. 完成 DolphinScheduler 新手任务赢好礼活动 | 倒计时3 天

    想轻松参与 DolphinScheduler 项目贡献吗? 想获得 500 元京东购物卡吗? 参与活动,有机会得更多活动奖励! 活动截止至6月30日 了解更多详情: 在你参与 DolphinSched ...

  8. vue自定义switch开关,使用less支持换肤

    实际项目用到了,记录一下,也方便以后使用,这样也可以避免为了使用一个switch,引入整个外部web框架: 也可以方便更好的理解是和使用less. 基础代码使用的是网上的,然后自己添加了less换肤, ...

  9. thinkphp 5 及一下或php项目里实现模糊查询

    想在thinkPHP或者PHP项目实现模糊查询怎么实现呢? 今天在网上搜了一下用 mysql里的 like 就可以实现 怎么用呢? 看代码: 错误用法: where('title','like',$s ...

  10. bbs项目解读

    1.注册功能 具体的效果图如下: 注册功能涉及到的逻辑步骤: 1.搭建前端html页面 2.向后端提交用户输入数据 3.对用户输入的数据格式进行校验 4.页面输入数据格式错误,及时向用户进行提示/正确 ...