GBase 8a支持多节点的集群,每个节点都可以连接,每个连接可以发送执行多个SQL, 那如何唯一标识一条用户SQL呢?
主机
唯一标识一台主机,通过主机名或者设定的IP。 建议主机名。
主机名@@hostname
标识当前节点的名字,如果你集群所有节点都没有修改主机名,而是默认的localhost,那么就无法区分了。
gbase> select @@hostname; +------------+ | @@hostname | +------------+ | rh6-1 | +------------+ 1 row in set (Elapsed: 00:00:00.00)
复制
主机IP@@bind_address
GBase 8a服务默认侦听本地所有IP, 但其本身是支持只侦听必要的IP的,通过参数bind_address指定。默认值是::
gbase> show variables like '%bind%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | bind_address | :: | +---------------+-------+ 1 row in set (Elapsed: 00:00:00.00)
复制
修改配置文件,增加或编辑bind_address参数,设置为IP地址后就可以查询到了。
gbase> select @@bind_address; +----------------+ | @@bind_address | +----------------+ | 10.0.2.201 | +----------------+ 1 row in set (Elapsed: 00:00:00.00)
复制
同时对比前后的操作系统端口差异也能看出不同。
默认侦听的是*,全部 [gbase@rh6-1 ~]$ lsof -i:5258 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME gclusterd 2779 gbase 16u IPv6 12567 0t0 TCP *:5258 (LISTEN) 修改参数重启后是 [gbase@rh6-1 gcinstall_862B43R30]$ lsof -i:5258 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME gclusterd 4568 gbase 16u IPv4 27721 0t0 TCP rh6-1:5258 (LISTEN)
复制
连接(ID)
标识在某个节点的数据库连接。 在登录数据库时,会记录连接方的IP,端口,登录用户等信息,服务端则指定一个sessinId进行服务。
show processlist 里面的ID列。
审计日志audit_log里面的thread_id列。
一个连接,可以指定多个SQL。
任务(TaskID)
标识某一个具体的SQL,包括创建存储过程,调用存储过程,都只算一个task。
可以从审计日志audit_log的taskid列获得。
注意taskid为0的,是数据库内部通讯,不是用户发起的,当然也包括语法错误,根本没执行的。
开始时间(Start_time)
理论上前面几个已经可以唯一标识一个SQL任务了。但如果服务重启了,所有序列都会重置,所以可以加上这个开始时间。
审计日志的start_time列
show processlist里的time列是执行的时间,用now()的秒数减去time列,也可以计算出start_time。
审计日志样例
gbase> select thread_id,taskid,start_time,uid,host_ip,sql_text,status from audit_log order by start_time; +-----------+--------+---------------------+-----+------------+-------------------------------------------------------------------------------------------------------------------+---------+ | thread_id | taskid | start_time | uid | host_ip | sql_text | status | +-----------+--------+---------------------+-----+------------+-------------------------------------------------------------------------------------------------------------------+---------+ | 13 | 0 | 2022-05-25 10:23:19 | 1 | 10.0.2.201 | Ping | SUCCESS | | 13 | 0 | 2022-05-25 10:23:19 | 1 | 10.0.2.201 | set SELF global audit_log=1 | SUCCESS | | 12 | 131092 | 2022-05-25 10:23:19 | 1 | | set global audit_log=1 | SUCCESS | | 12 | 0 | 2022-05-25 10:23:22 | 1 | | set a=1 | FAILED | | 12 | 131093 | 2022-05-25 10:23:26 | 1 | | set @a=1 | SUCCESS | | 12 | 131094 | 2022-05-25 10:23:30 | 1 | | set @b=2 | SUCCESS | | 6 | 0 | 2022-05-25 10:49:55 | 1 | 10.0.2.201 | Ping | SUCCESS | | 6 | 0 | 2022-05-25 10:49:55 | 1 | 10.0.2.201 | set SELF global audit_log=1 | SUCCESS | | 3 | 147471 | 2022-05-25 10:49:55 | 1 | | set global audit_log=1 | SUCCESS | | 3 | 147472 | 2022-05-25 10:49:58 | 1 | | set @aa=1 | SUCCESS | | 3 | 147473 | 2022-05-25 10:49:58 | 1 | | set @bb=2 | SUCCESS | | 6 | 0 | 2022-05-25 10:50:06 | 1 | 10.0.2.201 | Ping | SUCCESS | | 6 | 0 | 2022-05-25 10:50:06 | 1 | 10.0.2.201 | set SELF global log_output='TABLE' | SUCCESS | | 3 | 147474 | 2022-05-25 10:50:06 | 1 | | set global log_output='TABLE' | SUCCESS | | 6 | 0 | 2022-05-25 10:52:55 | 1 | 10.0.2.201 | Ping | SUCCESS | | 6 | 0 | 2022-05-25 10:52:55 | 1 | 10.0.2.201 | set SELF global audit_log=1 | SUCCESS | | 3 | 147477 | 2022-05-25 10:52:55 | 1 | | set global audit_log=1 | SUCCESS | | 3 | 147478 | 2022-05-25 10:52:59 | 1 | | drop procedure if exists testdb.p_test | SUCCESS | | 6 | 0 | 2022-05-25 10:52:59 | 1 | 10.0.2.201 | Ping | SUCCESS | | 6 | 147480 | 2022-05-25 10:52:59 | 1 | 10.0.2.201 | SET NAMES utf8 | SUCCESS | | 6 | 0 | 2022-05-25 10:52:59 | 1 | 10.0.2.201 | Init DB | SUCCESS | | 6 | 0 | 2022-05-25 10:52:59 | 1 | 10.0.2.201 | CREATE SELF DEFINER="root"@"%" PROCEDURE "testdb"."p_test" () begin select 1; select 2; select 3; end | SUCCESS | | 3 | 147479 | 2022-05-25 10:52:59 | 1 | | create procedure testdb.p_test() begin select 1; select 2; select 3; end | SUCCESS | | 3 | 147484 | 2022-05-25 10:53:07 | 1 | | call testdb.p_test() | SUCCESS | +-----------+--------+---------------------+-----+------------+-------------------------------------------------------------------------------------------------------------------+---------+ 24 rows in set (Elapsed: 00:00:00.00)
复制
总结
组合上面的列,就可以唯一标识一个【用户】发起的SQL。
主机+连接+任务+开始时间
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。