计算机技术点滴, rotatelogs, awk

1. Apache HTTPD 2.4+ 的 rotatelogs 新功能 很贴心

原来的 rotatelogs 就被挪到别处用做日志的归集与管理。现在遇到新的需求。比如将某个日志文件视为一个有始无终的缓冲池,一边顺序写入,一边顺序读出,而且希望还能按天分文件,不然尺寸会大到不好操作。

按天归集,rotatelogs提供了完备的支持,前面的顺序写入不是问题,而后面的顺序读出就有难度了。在?nix上,通常会用到 tail 这个利器,但tail本身无法对更换文件名的现象做处理。

也许是Apapche HTTPD也遇到这样的问题,在2.4+的版本中,rotatelogs中增加了 -L 参数:

-L linknameCauses a hard link to be made from the current logfile to the specified link name. This can be used to watch the log continuously across rotations using a command like tail -F linkname.

甚好。真发困呢,递个枕头。

在一边读出的一段,这样:

shell> tail –follow=name –max-unchanged-stats=5 –retry –sleep-interval=3 my_file

2. 数据挪移需细节

-ufqi 在改版并挪到 VPS 之前,增加做了全量备份,但数据库的备份是MySQL的目前全拷贝,留的是MySQL格式的.MYI, .MYD等文件。加上新版的数据库统一将数据表及程序运行时环境都改成 UTF-8,原来的数据就面临转库、转码的问题。

综合使用Shell、AWK和Iconv等工具,将数据从一个临时的旧库中转出来成txt,然后再将txt转码,转码之后将txt拼写成新的SQL,然后再倒入到新数据库中,并不是难事。

但奇怪的现象发现了,我之前一直有印象的一篇文章,”最长的一夜“,记录留学事件的文章死活查不到。经过进一步地查看,发现数据在新旧数据库中不一致,再到转码及新SQL生成的程序中核查,发现SQL里的数据量也对,SQL语句被执行,但新生成的记录条数与原来不符,有短缺。

进一步地细心观察发现,存储单引号和双引号的转义问题。

有两个细节在第一次做时忽略了,需纠正:

1)awk在切分由MySQL导出的数据txt时,需增加 -F “\t”, 使用制表符做字段分割;

2)如果在新组装的SQL中,使用”作为字段的边界,则需要使用 gsub(“\””, “\\\””, $4); 这样的形式,对某些字段中的”做转义操作。

—-

海量计算机资源下载地址: -R/L2SW  (5GB) 甚至包含了《计算机程序设计艺术》的1-4卷!

 

此条目发表在服务器运维, 编程技术分类目录。将固定链接加入收藏夹。

计算机技术点滴, rotatelogs, awk》有2条回应

  1. Pingback引用通告: 计算机技术点滴, rotatelogs, awk | -wordpress-wadelau

  2. Pingback引用通告: 计算机技术点滴, rotatelogs, awk | wadelau.net

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code