我需要创建一个日志表来存储与外部网络的连接(过去 3 年,之后日志将进入备份)。使用的硬件/软件是专有的,为了记账,它只需使用一些参数调用我们的自定义脚本,如下所示:
our_script START user mac ip);our_script STOP user mac ip in_bytes out_bytes more)有时我们不会收到断开连接消息。所以我们需要适应这种情况。
到目前为止,我为会计表提出了这个结构:
CREATE TABLE `accounting` (
`user` varchar(50) NOT NULL DEFAULT '',
`mac` varchar(20) NOT NULL DEFAULT '',
`ip` varchar(15) NOT NULL DEFAULT '',
`ipv6` varchar(39) DEFAULT NULL,
`start_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`stop_datetime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`in_bytes` bigint(32) unsigned DEFAULT '0',
`out_bytes` bigint(32) unsigned DEFAULT '0',
`more_columns` varchar(255) default NULL,
PRIMARY KEY (`user`,`mac`,`ip`,`start_datetime`,`stop_datetime`), …Run Code Online (Sandbox Code Playgroud) 我尝试使用 pt-query-digest 解析一个大型日志文件,但它给出了“内存不足!” 当我尝试读取文件时。我有 3GB 内存,40GB 硬盘空间,文件是 20GB。我没有在有关内存的文档中找到任何内容。
我减少命令:
pt-query-digest --group-by fingerprint --print --no-report /path/to/largeLogFile.log
pt-query-digest --table-access /path/to/largeLogFile.log
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
如何从 general_log 生成的大型日志文件中提取查询指纹?
如何提取所有使用过的表?
编辑:
尝试@DTest --sample 选项(带有 2 和 1),但结果相同。就在它在 htop 中达到 50% 内存之前,它每次都会死亡(请参阅 screnshoot):
我在它死之前做了一个 strace 我得到:
read(3, "phone from teams as t ri"..., 4096) = 4096
mremap(0x5b27a000, 1543499776, 1543503872, MREMAP_MAYMOVE) = -1 ENOMEM (Cannot allocate memory)
mmap2(NULL, 1543503872, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
brk(0x64c2d000) = 0x8c2e000
mmap2(NULL, 1543634944, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = …Run Code Online (Sandbox Code Playgroud)