runtime_mysql_users_ProxySQL 系统库的介绍 一

ProxySQL 介绍

详细介绍,可以参照下面的网址:

# show databases;

The purposes of these databases are as follows:

main: the in-memory configuration database. Using this database,

it's easy to query and update the configuration of ProxySQL in an

automated manner. Using the LOAD MYSQL USERS FROM MEMORY and

similar commands, the configuration stored in here can be

propagated to the in-memory data structures used by ProxySQL at

runtime.

disk: the disk-based mirror of "main". Across restarts, "main" is

not persisted and is loaded either from the "disk" database or from

the config file, based on startup flags and the existence of not of

an on-disk database.

stats: contains runtime metrics collected from the internal

functioning of the proxy. Example metrics include the number of

times each query rule was matched, the currently running queries,

etc.

monitor: contains monitoring metrics related to the backend servers

to which ProxySQL connects. Example metrics include the minimal and

maximal time for connecting to a backend server or for pinging

it.

myhostgroupm: only enabled in debug builds

# main 数据库

内存配置数据库,表里存放后端db实例、用户验证、路由规则等信息。表名以runtime_开头的表示proxysql当前运行的配置内容,不能通过dml语句修改,只能修改对应的不以

runtime_ 开头的表,然后LOAD使其生效。

# disk 数据库

# disk 是持久化到硬盘的配置,sqlite数据文件。

# stats 数据库

# stats 是proxysql运行抓取的统计信息,包括到后端各命令的执行次数、流量、processlist、查询种类汇总/执行时间等等。

# monitor 数据库

# monitor 库存储 monitor 模块收集的信息,主要是对后端db的健康/延迟检查。

# main数据库:

+--------------------------------------+

| tables

|

+--------------------------------------+

| global_variables

|

| mysql_collations

|

| mysql_query_rules

|

| mysql_replication_hostgroups

|

| mysql_servers

|

| mysql_users

|

| runtime_global_variables

|

| runtime_mysql_query_rules

|

| runtime_mysql_replication_hostgroups |

| runtime_mysql_servers

|

| runtime_mysql_users

|

| runtime_scheduler

|

| scheduler

|

+--------------------------------------+

# global_variables 数据表

# 设置变量,包括监听的端口、管理账号等

# 相关字符集和校验规则

# 定义查询路由规则

# rule_id:表主键,自增。规则处理是以 rule_id 的顺序进行。

# active:只有 active=1 的规则才会参与匹配。

# username:如果非 NULL,只有连接用户是 username 的值才会匹配

# schemaname:如果非 NULL,只有查询连接使用的db是 schemaname 的值才会匹配。注意如果是

NULL,不代表连接没有使用schema,而是不伦任何schema都进一步匹配。

# client_addr:匹配客户端来源IP

# proxy_addr, proxy_port:匹配本地proxysql的IP、端口。

# digest:精确的匹配一类查询。

# match_digest:正则匹配一类查询。query digest 是指对查询去掉具体值后进行“模糊化”后的查询。

# match_pattern:正则匹配查询。

# negate_match_pattern:反向匹配,相当于对 match_digest/match_pattern 的匹配取反。

# re_modifiers:修改正则匹配的参数,比如默认的:忽略大小写CASELESS、禁用GLOBAL。上面都是匹配规则,下面是匹配后的行为:

# replace_pattern:查询重写,默认为空,不rewrite。

# destination_hostgroup:路由查询到这个hostgroup。当然如果用户显式start

transaction且 transaction_persistent=1,那么即使匹配到了,也依然按照事务里第一条sql的路由规则去走。

# cache_ttl:查询结果缓存的毫秒数。proxysql这个Query Cache与MySQL自带的query cache不是同一个。proxysql query

cache也不会关心后端数据是否被修改,它所做的就是针对某些特定种类的查询结果进行缓存,比如一些历史数据的count结果。一般不设。

# timeout:这一类查询执行的最大时间(毫秒),超时则自动kill。这是对后端DB的保护机制,默认mysql-default_query_timeout给的是10 h。

# retries:语句在执行时失败时,重试次数。默认由 mysql-query_retries_on_failure变量指定,默认为1 。

# delay:查询延迟执行,这是ProxySQL提供的限流机制,会让其它的查询优先执行。

# error_msg:默认为NULL,如果指定了则这个查询直接被

block 掉,马上返回这个错误信息。这个功能也很实用,比如线上突然冒出一个

“坏查询”,应用端不方便马上发版解决,我们就可以在这配置一个规则,把查询屏蔽掉,想正常的mysql报错那样抛异常。

# multiplex:连接是否复用。

# log:是否记录查询日志。

# flagIN,flagOUT,apply

flagIN, flagOUT, apply:用来定义路由链 chains of rules

首先会检查 flagIN=0 的规则,以rule_id的顺序;如果都没匹配上,则走这个用户的 default_hostgroup

当匹配一条规则后,会检查 flagOUT

如果不为NULL,并且

flagIN != flagOUT ,则进入以flagIN为上一个flagOUT值的新规则链

如果不为NULL,并且

flagIN = flagOUT,则应用这条规则

如果为NULL,或者

apply=1,则结束,应用这条规则

如果最终没有匹配到,则找到这个用户的

default_hostgroup

# 监视指定主机组中所有服务器的read_only值,并且根据read_only的值将服务器分配给写入器或读取器主机组。

# 定义hostgroup的主从关系。ProxySQL monitor模块会监控hostgroup后端所有servers 的read_only变量,如果发现从库的

read_only 变为0、主库变为1,则认为角色互换了,自动改写 mysql_servers 表里面

hostgroup 关系,达到自动 Failover

效果。

# 设置后端MySQL的表

# hostgroup_id:ProxySQL通过hostgroup的形式组织后端db实例。一个 hostgroup代表同属于一个角色,该表的主键是

(hostgroup_id, hostname,

port),可以看到一个 hostname:port 可以在多个hostgroup里面,这样可以避免从库全都不可用时,依然可以把读请求发到主库上。一个 hostgroup可以有多个实例,即多个从库,可以通过

weight 分配权重。hostgroup_id 0

是一个特殊的hostgroup,路由查询的时候,没有匹配到规则则默认选择 hostgroup0

# status:ONLINE:当前后端实例状态正常SHUNNED:临时被剔除,可能因为后端

too many connections error,或者超过了可容

忍延迟阀值 max_replication_lagOFFLINE_SOFT:“软离线”状态,不再接受新的连接,但已建立的连接会等待活跃事

务完成。OFFLINE_HARD:“硬离线”状态,不再接受新的连接,已建立的连接或被强制中断。

当后端实例宕机或网络不可达,会出现。

# max_connections:允许连接到该后端实例的最大连接数。不要大于MySQL设置的 max_connections,如果后端实例

hostname:port在多个hostgroup里,以较大者为准,而不是各自独立允许的最大连接数。

# max_replication_lag:允许的最大延迟,主库不受这个影响,默认0。如果> 0,monitor模块监控主从延迟大于阀值时,会临时把它变为 SHUNNED

# max_latency_ms:mysql_ping响应时间,大于这个阀值会把它从连接池剔除(即使是ONLINE),默认0。

# comment: 备注。

# 配置后端数据库的账号和监控的账号

# username, password:连接后端db的用户密码。这个密码你可以插入明文,也可以插入hash加密后的密文,proxysql会检查你插入的时候密码是否以

* 开头来判断,而且密文要在其它地方使用 PASSWORD()生成。但到runtime_mysql_users里,都统一变成了密文所以可以明文插入,再SAVE MYSQL

USERS TO MEM,此时看到的也是HASH密文。

# active:是否生效该用户。

# default_hostgroup:这个用户的请求没有匹配到规则时,默认发到这个hostgroup,默认0

# default_schema:这个用户连接时没有指定 database name 时,默认使用的schema注意表面上看默认为NULL,但实际上受到变量mysql-default_schema的影响,默认为

information_schema。

# transaction_persistent:如果设置为1,连接上ProxySQL的会话后,如果在一个hostgroup上开启了事务,那么后续的sql都继续维持在这个hostgroup上,不伦是否会匹配上其它路由规则,直到事务结束。虽然默认是0。

# frontend, backend:目前版本这两个都需要使用默认的1,将来有可能会把 Client -> ProxySQL(frontend)与ProxySQL -> BackendDB

(backend)的认证分开。从runtime_mysql_users 表内容看到,记录数比mysql_users多了一倍,就是把前端认证与后端认证独立出来的结果。

# fast_forward:忽略查询重写/缓存层,直接把这个用户的请求透传到后端DB。相当于只用它的连接池功能,一般不用,路由规则

.* 就行了。

# 调度器是一个类似于cron的实现,集成在ProxySQL中,具有毫秒的粒度。通过脚本检测来设置ProxySQL。

# id:调度器唯一标识,自增主键。

# active:是否开启,默认开启。

# interval_ms:工作的开始频率(以毫秒为单位)。 最小interval_ms为100毫秒

# filename:执行的可执行文件的绝对路径

# arg1 to arg5:传递给执行文件的参数,最大允许5个参数

# comment:备注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值