10_ProxySQL配置之Configuration_file

备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入

~ ~ 配置文件[Configuration file] ProxySQL配置文件是使用libconfig进行解析的,其语法在这里描述:http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-File-Grammar中的(6 Configuration File Grammar) 作为参考,上面的语法说明也被拷贝在了配置文件末尾。 例如,可以查看这个简单的案例:https://github.com/sysown/proxysql/blob/v1.4.4/src/proxysql.cfg

一、[常规参数]General variables

datadir ==>它定义了ProxySQL的datadir(数据存放)的路径,其中存储了数据库文件,日志和其他文件。 restart_on_missing_heartbeats ==>(在1.4.4中新增)如果 MySQL 线程丢失了 restart_on_missing_heartbeats 次的心跳;ProxySQL 将引发SIGABRT信号并重新启动服务。默认值为10。 execute_on_exit_failure ==>(在1.4.4中新增)如果设置了该参数,ProxySQL父进程将在每次ProxySQL崩溃时执行定义的脚本。建议使用此设置生成警报或记录事件。请注意,在崩溃的情况下,ProxySQL能够在几毫秒内重新启动,因此其他监视工具可能无法检测到正常故障。 errorlog ==>(在2.0.0中新增)如果设置,ProxySQL将使用定义的文件作为错误日志。如果未设置该参数,则errolog将位于datadir/proxysql.log中。

二、Modules variables

在配置文件中,各个特定模块需要在名为 module_variables 的部分中配置其变量。例如,admin_variables用于与admin模块相关的变量,mysql_variables用于与mysql模块相关的变量。

在配置变量的每个部分中,不得为变量指定前缀(mysql-,admin-或其他)。将变量加载到global_variables表时,管理模块会自动添加相对于该部分的前缀。 1)admin-前缀将被添加到 admin_variables 中定义的所有变量中。 2)mysql-前缀将添加到 mysql_variables 中定义的所有变量中。

以下是如何在配置文件中定义变量的示例(不能指定前缀):

mysql_variables=
{
    threads=4
    max_connections=2048
    default_query_delay=0
    default_query_timeout=36000000
    have_compress=true
}

以上内容在被加载到global_variables表时,它们将具有mysql-前缀。例如:

Admin> SELECT * FROM global_variables WHERE variable_name IN ('mysql-threads','mysql-max_connections', 'mysql-default_query_delay','mysql-default_query_timeout','mysql-have_compress');
+-----------------------------+----------------+
| variable_name               | variable_value |
+-----------------------------+----------------+
| mysql-default_query_delay   | 0              |
| mysql-default_query_timeout | 36000000       |
| mysql-have_compress         | true           |
| mysql-max_connections       | 2048           |
| mysql-threads               | 4              |
+-----------------------------+----------------+
5 rows in set (0,00 sec)

三、libconfig grammar

以下是配置文件的BNF语法。注释和include指令不是语法的一部分,因此它们不包含在此处。

configuration = setting-list | empty
setting-list = setting | setting-list setting
setting = name (":" | "=") value (";" | "," | empty)
value = scalar-value | array | list | group
value-list = value | value-list "," value
scalar-value = boolean | integer | integer64 | hex | hex64 | float | string
scalar-value-list = scalar-value | scalar-value-list "," scalar-value
array = "[" (scalar-value-list | empty) "]"
list = "(" (value-list | empty) ")"
group = "{" (setting-list | empty) "}"
empty =

Terminals are defined below as regular expressions:

boolean		([Tt][Rr][Uu][Ee])|([Ff][Aa][Ll][Ss][Ee])
string		\"([^\"\\]|\\.)*\"
name		[A-Za-z\*][-A-Za-z0-9_\*]*
integer		[-+]?[0-9]+
integer64	[-+]?[0-9]+L(L)?
hex		0[Xx][0-9A-Fa-f]+
hex64		0[Xx][0-9A-Fa-f]+L(L)?
float		([-+]?([0-9]*)?\.[0-9]*([eE][-+]?[0-9]+)?)|([-+]([0-9]+)(\.[0-9]*)?[eE][-+]?[0-9]+)

~ ~ 完毕!