Apache2:使用mod_log_sql(Debian Etch)记录到MySQL数据库

版本1.0

作者:Falko Timme

本指南介绍如何将Apache2访问日志写入MySQL数据库而不是文件。 要实现这一点,我使用Apache2模块mod_log_sql。 我在本教程中使用Debian Etch服务器。

我不会保证这将为您工作!

1安装Apache2,MySQL,mod_log_sql

不幸的是, libapache2-mod-log-sql-mysql可用作Debian软件包,仅适用于Debian Lenny(测试)和Sid(unstable),但不适用于Etch。 因此我们将从Lenny安装libapache2-mod-log-sql-mysql包。 为此,打开/etc/apt/sources.list并添加行deb http://ftp2.de.debian.org/debian/ lenny main ; 您的/etc/apt/sources.list可能看起来像这样:

vi /etc/apt/sources.listdeb http://ftp2.de.debian.org/debian/ etch main

deb-src http://ftp2.de.debian.org/debian/ etch main

deb http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ etch/updates main contrib

deb-src http://security.debian.org/ etch/updates main contrib

当然(为了不弄乱我们的系统),如果Etch没有适当的软件包,我们希望从Lenny安装软件包 - 如果有Etch和Lenny的软件包,我们要安装Etch软件包。 为了做到这一点,我们在Etch中给/ etc / apt / preferences中优先级较高的软件包:

vi /etc/apt/preferencesPackage: *

Pin: release a=etch

Pin-Priority: 700

Package: *

Pin: release a=lenny

Pin-Priority: 650

(术语etch和lenny参考/etc/apt/sources.list中的适当术语;如果您在那里使用稳定和测试 ,则必须在/ etc / apt / preferences中使用稳定和测试,而不是使用etch和lenny好。)

之后,我们更新我们的包数据库:

apt-get update

如果您收到以下错误:

Segmentation faultsts... 96%

或这一个:

E: Dynamic MMap ran out of room

打开/etc/apt/apt.conf并为APT :: Cache-Limit添加一行非常高的值,例如:

vi /etc/apt/apt.confAPT::Cache-Limit "100000000";

然后跑

apt-get update

再次升级安装的软件包:

apt-get upgrade

(如果您看到任何问题,您可以接受默认值。)

要安装Apache2,MySQL和mod_log_sql,我们运行:

apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysql

为MySQL用户root创建密码(将yourrootsql密码替换为您要使用的密码):

mysqladmin -u root password yourrootsqlpassword

然后检查

netstat -tap | grep mysql

MySQL正在监听哪个地址。 如果输出如下所示:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     2713/mysqld

这意味着MySQL只监听localhost.localdomain ,那么你以前设置的密码是安全的。 但如果输出如下所示:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

您也应该为您的主机名设置一个MySQL密码,因为否则任何人都可以访问您的数据库并修改数据:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

mod_log_sql在安装时自动启用,但是还有另一个模块,我们应该启用:mod_uique_id(没有必要,但是没有它,mod_log_sql将把访问日志的MySQL表中的id列留空)。 id列将包含由标准Apache模块mod_unique_id提供的唯一请求ID。

a2enmod unique_id

重新加载Apache:

/etc/init.d/apache2 force-reload

2创建虚拟主机

现在我将在目录/ var / www / web1 / web中创建一个默认的Apache vhost。 为此,我将修改/ etc / apache2 / sites-available / default中的默认Apache vhost 配置 。 如果您已经拥有要启用MySQL日志记录的vhost,则必须根据您的情况调整本教程。

首先,我们创建目录/ var / www / web1 / web ,并使Apache用户( www-data )成为该目录的所有者:

mkdir -p /var/www/web1/web

chown www-data /var/www/web1/web

然后我们备份默认的Apache vhost配置( / etc / apache2 / sites-available / default )并创建我们自己的配置:

mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig

vi /etc/apache2/sites-available/defaultNameVirtualHost *

ServerAdmin webmaster@localhost

DocumentRoot /var/www/web1/web/

Options Indexes MultiViews

AllowOverride None

Order allow,deny

allow from all

然后重新加载Apache:

/etc/init.d/apache2 reload

3配置虚拟主机进行MySQL日志记录

您可以在HTML文件/usr/share/doc/libapache2-mod-log-sql/manual.html中找到mod_log_sql的文档 。 您应该将其复制到工作站(例如使用WinSCP )并学习。

读取这个文件后,我们创建一个名为apachelogs的MySQL数据库,它将包含我们访问日志的表(它可以包含多个访问日志表,例如每个虚拟主机一个)。 除此之外,我们还创建了MySQL用户loguser - 此用户将被mod_log_sql用于稍后连接到MySQL。 loguser将具有CREATE和INSERT权限,以便它可以自动为访问日志创建表(如果表不存在)并在这些表中插入记录:

mysql -u root -p

create database apachelogs;

grant insert,create on apachelogs.* to loguser@localhost identified by 'loguser_password';

grant insert,create on apachelogs.* to loguser@localhost.localdomain identified by 'loguser_password';

FLUSH PRIVILEGES;

(用您选择的密码替换loguser_password 。)

然后我们离开MySQL shell:

quit;

现在我们在/ etc / apache2 / sites-available / default中修改vhost,看起来如下:

vi /etc/apache2/sites-available/defaultLogSQLLoginInfo mysql://loguser:loguser_password@localhost/apachelogs

LogSQLCreateTables on

LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock

LogSQLTransferLogFormat AbHhmRSsTUuvI

NameVirtualHost *

ServerAdmin webmaster@localhost

DocumentRoot /var/www/web1/web/

Options Indexes MultiViews

AllowOverride None

Order allow,deny

allow from all

LogSQLTransferLogTable web1_access_log

LogSQLLoginInfo (将数据库的登录凭据保存), LogSQLCreateTables (它告诉mod_log_sql创建表,如果它们不存在), LogSQLDBParam socketfile (它指定了MySQL套接字)和LogSQLTransferLogFormat (它指定了什么被登录到数据库中) )指令进入全局Apache配置。 LogSQLTransferLogTable指令进入vhost配置 - 这样可以为每个虚拟主机指定不同的访问日志表(例如web1_access_log , web2_access_log , web3_access_log等)。

LogSQLTransferLogFormat指令在/usr/share/doc/libapache2-mod-log-sql/manual.html文件中有更详细的解释 。

之后重新加载Apache:

/etc/init.d/apache2 reload

4测试mod_log_sql

现在,您可以在浏览器中从vhost访问一些页面,然后检查apachelogs数据库:

mysql -u root -p

use apachelogs;

show tables;

您现在应该看到, web1_access_log表已由mod_log_sql创建:

mysql> show tables;

+----------------------+

| Tables_in_apachelogs |

+----------------------+

| web1_access_log      |

+----------------------+

1 row in set (0.00 sec)

mysql>

现在我们检查一下表中的内容:

select * from web1_access_log;

如果一切顺利,您应该在该表中找到访问日志:

mysql> select * from web1_access_log;

+---------------------+---------------------------------------------------------------------------------------------...

| id                  | agent                                                                                       ...

+---------------------+---------------------------------------------------------------------------------------------...

| JpEF8MCoAGQAAFyuEBU | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14...

| JpPHIMCoAGQAAFyuEBY | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14...

| JpTj0MCoAGQAAFyuEBc | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14...

+---------------------+---------------------------------------------------------------------------------------------...

3 rows in set (0.00 sec)

mysql>

类型

quit;

离开MySQL shell。

5链接

debian mysql 日志_Apache2:使用mod_log_sql(Debian Etch)记录到MySQL数据库相关推荐

  1. mysql 日志文件 自动_教你自动恢复MySQL数据库的日志文件

    如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据."mysqlbinlog:用 ...

  2. mysql日志文件转存_【转】Mysql日志文件

    查看默认MySQL数据库数据目录: mysqladmin -u root -p variables | grep datadir Linux下MySQL数据库数据目录多了好多Mysql-bin.000 ...

  3. kettle 分析mysql日志_Kettle实战100篇 第20篇 MySQL数据库导出到ElasticSearch

    业务需求:在系统上线后,原系统的日志信息是存储到MySQL数据库中,但是随着日志数据越来越大,导致数据查询缓慢,加上日志数据并非业务系统关键数据,因此,系统考虑改版升级,使用ElasticSearch ...

  4. dz mysql日志清理_Discuz教程:如何准确的清理数据库

    随着网站的发展占用的数据库是非常大的而且成本也越来越高如何清理数据库的无用数据是非常有效的减少成本的方法.清理周期不要太长也不需要太短的时间(特殊情况:网站被灌水需要做好防护并且随时清理).一定要提前 ...

  5. 【MySQL】MySQL日志系统以及InnoDB背后的技术(MySQL专栏启动)

  6. 开启mysql日志记录_Mysql开启日志记录

    vim /etc/my.conf.d/server.cnf: #lower_case_tables_name = 1 #错误日志 log_error = /var/log/mysql_error.lo ...

  7. Mysql日志知多少?

    前言 最近在看<高性能Mysql>-宁海元版一书的时候,本来想找关于mysql所有日志的介绍,深入了解这些日志在整个mysql中扮演的角色和作用,但是没有发现这块的汇总,零散的在书中分布, ...

  8. mysql 日志分类详解

    前言 对于IT从业人员来说,日志是日常开发和问题排查过程中非常重要的信息,通过日志可以了解到很多有用的信息,很多奇怪的不好定位的问题,往往可以通过分析日志找到答案. 在mysql中,也提供了多种类型的 ...

  9. Mysql - 日志

    目录 Mysql日志: Mysql日志是什么,有什么用? 一.重做日志(redo log),回滚日志(undo log)的简单介绍 二.Mysql错误日志:(默认是开启的) 作用: 当然我们也可以自己 ...

最新文章

  1. 【计算机网络复习 数据链路层】3.5.2 ALOHA协议
  2. 关于Paralle.For和Paralle.ForEach
  3. java代码中获取classpath路径
  4. 协同办公 团队协作网站推荐(一)
  5. 没有计算机基础可以学python-零基础,没有编程和计算机基础,究竟该怎么自学python?...
  6. 项目结构设计 java_Java项目架构设计
  7. java core 之 IO流
  8. 关于Spring,所有的都在这了,具有收藏价值
  9. acs510使用技巧_ABBACS510系列变频器通用接线图和参数表【借鉴实操】
  10. 论文发表费用一般是多少
  11. MSN的聊天记录在哪里找到?
  12. 每天好心情——Python画一棵樱花树
  13. Excel自动化数据报表制作
  14. 复制pdf文字到word
  15. 纸的大小图解_纸张的尺寸标准
  16. 聊聊故事点背后的故事
  17. HCIA网络基础9-VRP文件系统管理
  18. 作为南方人,python教你怎么样看雪
  19. JAVA第八课:集合(CollectionMap)
  20. Android 监听屏幕唤醒、关闭和解锁的广播

热门文章

  1. 未来架构:从服务化到云原生
  2. OpenWrt操作系统移植SIM7600CE驱动及调试
  3. 对于现在毕业之后,大部分找不到合适的工作,转行到软件开发(大部分是JAVA)的人来说,分享下自己的经验
  4. uboot研读笔记 | 13 - uboot编译构建Makefile分析研读(2016.03版本)
  5. 颜色和移动物体识别系统
  6. Python分析薛之谦与李雨桐互撕微博
  7. HTML吸引人眼球的网页,优秀网页设计:35个吸引眼球的精美作品集网站
  8. matlab批量修改图片的大小_MATLAB实现批量处理图像图片的两种方法
  9. bug:点击element的级联选择器 级联面板偶尔不显示 触发条件未知
  10. jquery触屏幻灯片