Skip to content

关于kunlun_cluster的mysql变量通道及后端存储节点的权限赋予

david zhao edited this page Nov 4, 2021 · 2 revisions

_由于我们kunlun_cluster的计算节点用的是postgresql,而存储节点使用的是mysql,为了方便用户可以在计算节点中设置操作存储节点的系统变量,需要一个计算节点和存储节点之间的通道,于是便有了该功能 _

目前为止都做了什么:

对应脚本从https://gitee.com/zettadb/kunlun.git 上面拉下来,有一个vars.sql文件。

  1. 使 set [shard] global/session/local/PERSIST/PERSIST_only VARNAME=VALUE的语法 生效;总是假设VARNAME是mysql的;他会发送语句给所有的存储节点去执行,且session 变量中值会在计算节点里面缓存,在切换主节点时,新的主节点会校正session状态。

set session innodb_lock_wait_timeout = 3;

set shard global innodb_lock_wait_timeout = 4;

示例出现的问题???将在后续版本修复

set shard persist_only innodb_lock_wait_timeout = 11;(该错误是因为后端存储节点的权限缺失引起的,若出现该问题可以参考此文章的后半段)

2.set VARNAME=VALUE 语句,在pg客户端连接的时候会默认以pg的变量名来看待他们,如果变量名不存在,则会把他们看成是mysql的session变量。在mysql客户端连接时,会默认把他们视为mysql的session变量,如果变量名不存在则把他们视为pg变量。

set innodb_lock_wait_timeout = 2;

3.除了debug_sync之外,总是缓存mysql配对的session var-value,且如果shard连接被重新设置或者重新连接会把他们发送给mysql。

4.也支持 set @@global/session/local/persist/persist_only.varname=value 语句,且总是假定为mysql变量,但因 ‘shift/reduce’冲突而不支持set @@VARNAME=VALUE。

set @@global.innodb_lock_wait_timeout = 4;

示例的问题???会在后续版本修复

set @@innodb_lock_wait_timeout = 2;(不支持该语法)

5.支持 show [session/local/global] variables like 'wildcard-filter' 语法且总是假定是mysql变量,自从pg私有语法且不再共享语法,为了默认'show varname' 语法总是先假定是pg变量。如果变量名不是pg变量,则被假定是mysql变量

show global variables like 'innodb_lock_wait_timeout';

show session variables like 'innodb_lock_wait_timeout';

show local variables like 'innodb_lock_wait_timeout';

6.支持在kunlun 计算节点里面的选项 'show [session/global/local] variables like ' 里选择 'STRICT' 来展示只有mysql识别或者支持的变量。

show local variables like 'innodb_lock_wait_timeout' strict;

show session variables like 'innodb_lock_wait_timeout' strict;

show global variables like 'innodb_lock_wait_timeout' strict;

7.当执行'show' 语句时会取得一个变量的值,直接发送给任意存储shard来获取他的值。

_由于set @varname=value 可能会导致 ‘shift/reduce’冲突且该功能相对来说比较少地被使用,所以我们不支持该语法 _

Clone this wiki locally