2008年12月06日 by 樂思蜀
访问分析是SEO的一项重要工作,但统计、分析工具毕竟功能是针对大众的,很多时候SEO需要一些特定的数据,是统计分析软件、程序所不能提供的。这样,直接的Web日志分析就是最合适的了,日志中会记录每一个访问情况,只要按自己的意愿提取、组合,就能得到想要的数据。
就这个问题与星箭聊了挺长时间,最后一致认为将日志导入到SQL数据库(MySQL & SQL Server)中,使用SQL语句分析是最方便的,需要什么样的数据,只要使用相应的SQL命令就能实现。
我的服务器是Linux的,没有 SQL Server,之前就没再继续这件事。今天聊到这个话题时认真的搜索了一下,找到了使用MySQL分析日志的第一步,记录在此。
下一步的分析方法我有心得后会发布在博客中,有兴趣的朋友可以留意;同时,征集精通于SQL语句的朋友,一起讨论分析的各种方法,并分享给其他朋友。
导入Web日志到MySQL数据库的实现
1、修改Apache日志格式
修改Web日志格式为:
Logformat combined %>a,%ui,%un,[%tl],"%rm %ru HTTP/%rv",%Hs,%h","%{User-Agent}>h",%Ss:%Sh
明白的朋友应该一看就知道了,SQL需要导入的内容有特定的分隔符,Apache的日志默认是以空格分隔的,而有些内容(如状态码中的 200 610)也包含空格,这就无法准确的导入。
将日志格式修改为以逗号分隔,就能准确的导入了。还可以根据自己的需要,取消日志格式中不需要的内容,减少日志文件大小。
2、建立MySQL数据表
drop table if exists weblog;
create table weblog (
id int unsigned auto_increment PRIMARY KEY not null,
l_date date,
l_time time,
c_ip varchar(15),
s_ip varchar(15),
s_port varchar(5),
method varchar(10),
path varchar(255),
query varchar(255),
status varchar(3),
domain varchar(50),
system varchar(200)
);
注:上面只是一个MySQL数据表结构范例,没有与上一步日志格式对应,请勿直接复制使用!
新建一个数据库,数据表结构与日志格式对应起来。
3、导入日志到MySQL中
LOAD DATA INFILE '/日志位置/日志文件' INTO TABLE weblog FIELDS TERMINATED BY ',';
weblog 对应上面的数据表名。
第二步就是分析了,如上所说,有心得后再分享。
另外,从网上找到一个将IIS日志导入到MySQL数据库的.pl程序,原理相通的,需要的点这里下载(Readme.txt为使用说明)。
2008年11月14日 by 樂思蜀
有时站内包含敏感词,会给我们带来麻烦,而在信息量较大的情况下,一篇篇查找、修改是不现实的。今天老樂被网监通知某站包含很多不允许字词,责令立即修改,就参考了专业人士的文章,用MySQL语句批量替换,甚是轻松。发布在这里供参考,以备不时之需。
MySQL批量替换指定字段字符串语句
UPDATE 数据表名 SET
字段名 = replace(字段名, '要替换的字符串', '替换为')
WHERE 设定条件;
如将WordPress文章中的“搜索引擎优化”全部替换成“搜索引擎营销”,替换语句为:
UPDATE wp_posts SET
post_content = replace(post_content, '搜索引擎优化', '搜索引擎营销');
语句中还可以加入替换条件,如只替换限定ID小于200的内容:
UPDATE wp_posts SET
post_content = replace(post_content, '搜索引擎优化', '搜索引擎营销')
WHERE ID < 200;
根据不同的需求,设定替换条件,妙用无穷。
最近老樂勤快了点,SEO博客发的文章多了些,很多采集、聚合也都上门了,故常刻意在内容中加入链接,望大家见谅!
2008年10月25日 by 樂思蜀
近日樂思蜀将服务器MySQL版本升级后,SEO论坛在后台优化数据库时出现下面提示信息,到PHPWind官方论坛上去查找,只见提同样问题的,不见一个可行的解决办法。
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXTENDED' at line 1 ( 1064 )
因不影响正常使用,也就没太在意。今日偶然想起,打开 PHPWind 程序的此文件,解决了问题,现分享方法如下。
打开“安装目录/admin/repair.php文件”,将下面一行中的 EXTENDED 删除:
$query = $db->query("OPTIMIZE TABLE $table EXTENDED ");
参考了相关资料,EXTENDED 参数用在 MySQL 数据库修复数据表时(只对MyISAM和ARCHIVE类型的表有效),起逐行重建索引的效果,同样的参数有:
老乐也是知其然不知其所以然,抱着试一试的想法去掉 OPTIMIZE 一行中的 EXTENDED 参数,一测试竟然好了。
难道 OPTIMIZE TABLE 不支持 EXTENDED 参数?希望熟悉的朋友留言告诉我一下,我的数据库版本是 5.0.67,谢谢!
2008年02月19日 by 樂思蜀
MYSQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。
1、创建备份文件夹
#cd /www
#makedir backup
2、编写运行脚本
#vi autobackup
写入以下内容:
filename=`date +%Y%m%d`
mysql_bin_dir/mysqldump –opt dataname -u user -ppassword | gzip > /www/mysqlbackup/name$filename.gz
保存退出
说明:
(1)mysql_bin_dir:mysql的bin路径;
(2)dataname:数据库名;
(3)user:数据库用户名;
(4)password:用户密码;
(5)name:自定义备份文件前缀标识。
如上例,将自动备份mysql数据库,并以gzip压缩方式存储,文件名为name20080101.gz的形式。
3、为脚本添加执行权限
#chmod +x autobackup
4、让crontab来完成定期执行的任务
这一步中,Redhat的方法会不一样,后面专门给出。
编辑crontab:
#vi /etc/crontab
在最后一行中加入:
01 5 * * * root /www/autobackup
每天5点运行脚本,也可以修改5为其他指定时间。
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5、重启crontab
#/etc/rc.d/init.d/crond restart
完成
其实原理很简单,自己制作一个脚本,让Linux系统自动运行。我们还可以再扩展一下,编辑一个自动备份网站文件的脚本,让Linux来完成,每天自动备份整个网站,等等……