开启全量日志,会有一些性能损耗,因此需要按需合理使用。

    默认情况下,全量日志功能是不开启的。该功能提供了3个命令、8个可配置参数和3个统计变量,下面依次介绍:

    2.1 命令

    可以登录Cetus的admin端口,开启全量日志、关闭全量日志、或是查看全量日志模块的状态。

    • 开启全量日志

    成功开启全量日志,需要提前将sql-log-switch参数设置为ON,然后执行上述命令,否则会报错如下:

    mysql> sql log start;

    ERROR 1105 (07000): can not start sql log thread, because sql-log-switch = OFF

    成功开启后,查看统计变量sql-log-state的状态变为:running,表示已经开启该功能。

    sql log stop;

    上述命令可以随时关闭全量日志,减少大量日志输出所带来的性能损耗。

    • 查看全量日志状态

    sql log status

    上述命令可以将全量日志相关的变量进行汇总显示。

    2.2 参数

    参数分为动态(Dynamic)变量和静态(Static)变量。动态变量可以动态修改,修改命令如下:

    • sql-log-buffersize

    该参数可以指定全量日志的缓存大小,默认值为1M,该参数单位是B,不能动态配置。

    • sql-log-switch

    该参数控制全量日志功能是否可用,默认为OFF。该参数可配置的值有:OFF、ON和REALTIME。启动时若配置该参数为ON或是REALTIME,则启动后启动开启全量日志功能,该参数可以动态配置。ON和REALTIME的区别在于,REALTIME不仅将日志写入OS的缓存,同时调用fsync函数,将日志落盘。

    • sql-log-prefix

    该参数定义全量日志的文件名前缀,后缀默认均为.clg。该值默认为cetus,该参数不能动态配置。全量日志文件名组成为:前缀-进程号.后缀

    • sql-log-path

    该参数可以指定全量日志输出的路径,该值默认与basedir/logs/路径相同,如果路径不存在,尝试创建该目录,该参数不能动态配置。

    • sql-log-maxsize

    该值控制每个全量日志的最大容量,默认值为1024,0表示不限制文件大小,单位是M,该参数不能动态配置。如果当前日志量超过该值,则会rotate成历史日志文件。

    • sql-log-mode

    该值控制输出的全量日志的类型,默认为backend。该参数可配置的值包括:connect、client、front、backend、all,该参数支持动态配置。

    • sql-log-idletime

    该值控制全量日志的线程在没有日志可以写入文件的情况下,等待下写入的时间,默认500ms,单位毫秒,该参数支持动态设置。

    保留的历史文件的个数,默认为3,0表示不限制文件个数。

    2.3 统计信息

    • sql-log-state

    该统计变量表示当前全量日志线程是否启动,running表示启动,stopped表示未启动。

    • sql-log-cached

    该统计变量表示当前全量日志仍旧在内存中的大小,单位B。

    • sql-log-cursize

    该统计变量表示当前全量日志文件,写入的字节数,单位B。

    可以通过参数sql-log-mode来设置不同模式的日志,各种模式的日志格式均不同。基本的模式有三种:connect、client和backend。如果希望同时打印connect、client,则可以设置为:front,如果希望打印所有日志,则可以设置为:all。

    connect模式打印的是客户端连接Cetus时,客户端发送的auth认证包的主要内容。

    client模式打印的是客户端发送的原始SQL语句等相关内容,该模式下,当Cetus接收到客户端的SQL请求后,立即打印该日志。

    backend模式打印的是发送到SQL的语句等相关内容,该模式下,当MySQL将全部结果集发送回Cetus后才会打印该日志。

    • connect模式下日志格式

    C_id:客户端当前连接的ID,可以通过其来确定哪些是同一个连接

    C_db:客户端auth认证包中携带的database信息

    C_auth_plugin: 使用的认证插件

    C_ssl: 是否启用了ssl

    C_cap: 客户端发送的权值信息

    S_cap: Cetus发送的权值信息

    • client模式下日志格式

    C_ip: 客户端的IP、Port

    C_db: 客户端当前的database信息

    C_usr: 客户端的用户名

    C_tx: 是否在事务中

    C_retry: 客户端连接重试测试

    C_id: 客户端当前连接的ID,可以通过其来确定哪些是同一个连接

    type: SQL类型

    • backend模式下 读写分离版本日志格式

    C_ip: 客户端的IP、Port

    C_db: 客户端当前的database信息

    C_usr: 客户端的用户名

    C_tx: 是否在事务中

    C_id: 客户端当前连接的ID,可以通过其来确定哪些是同一个连接

    S_ip: MySQL端的IP、Port

    S_db: MySQL端当前的database信息

    S_usr: MySQL端的用户名

    S_id: MySQL当前连接的ID,可以通过其来确定哪些是同一个MySQL连接

    inj-type: 语句的类型

    inj-bytes: 结果集字节数

    inj-rows: 影响行数

    latency: 延迟

    type: SQL类型

    • backend模式下 分片版本日志格式

    xa_state的类型包括如下内容:

    UNKNOWN

    NEXT_ST_XA_START

    NEXT_ST_XA_QUERY

    NEXT_ST_XA_END

    NEXT_ST_XA_PREPARE

    NEXT_ST_XA_COMMIT

    NEXT_ST_XA_ROLLBACK

    NEXT_ST_XA_CANDIDATE_OVER

    NEXT_ST_XA_OVER

    分片版本下,当调整连接状态时候,会打印如下日志:

    C_ip: 客户端的IP、Port

    C_db: 客户端当前的database信息

    C_usr: 客户端的用户名

    C_tx: 是否在事务中

    C_id: 客户端当前连接的ID,可以通过其来确定哪些是同一个连接

    in_xa: 是否在XA事务中

    xa_state: 所处的XA事务的阶段

    attr_adj_state: 调整的属性信息

    attr_adj_state属性信息包括如下内容:

    ATTR_START = 0

    ATTR_DIF_CHANGE_USER = 1

    ATTR_DIF_DEFAULT_DB = 2

    ATTR_DIF_SQL_MODE = 4

    ATTR_DIF_CHARSET = 8

    ATTR_DIF_SET_OPTION = 16

    ATTR_DIF_SET_AUTOCOMMIT = 32

    • 启动时开启关闭全量日志功能

    启动前,配置sql-log-switch=ON或是sql-log-switch=REALTIME,Cetus启动后会自动开启全量日志功能。

    Cetus运行后可以在设置sql-log-switch=ON或是sql-log-switch=REALTIME的情况下,通过执行sql log start;动态的开启全量日志功能;当然也可以通过执行sql log stop;动态关闭该功能。如果暂时不希望使用该功能,尽量配置sql-log-switch=OFF。

    • 设置日志自动rotate