Apache, MySQL · 5 min read · Feb 03, 2026

Apache2: Запись логов в базу данных MySQL с помощью mod_log_sql (Debian Etch)

Apache2: Запись логов в базу данных MySQL с помощью mod_log_sql (Debian Etch)

Версия 1.0
Автор: Фалко Тимме

Этот гид показывает, как вы можете записывать журнал доступа Apache2 в базу данных MySQL вместо файла. Для этого я использую модуль Apache2 mod_log_sql. В этом руководстве я использую сервер Debian Etch.

Я не даю никаких гарантий, что это сработает для вас!

1 Установка Apache2, MySQL, mod_log_sql

К сожалению, libapache2-mod-log-sql-mysql доступен как пакет Debian только для Debian Lenny (testing) и Sid (unstable), но не для Etch. Поэтому мы установим пакет libapache2-mod-log-sql-mysql из Lenny. Для этого откройте /etc/apt/sources.list и добавьте строку deb http://ftp2.de.debian.org/debian/ lenny main; ваш /etc/apt/sources.list может выглядеть следующим образом:

vi /etc/apt/sources.list

| deb 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 |

Конечно, (чтобы не испортить нашу систему), мы хотим устанавливать пакеты из Lenny только в том случае, если нет подходящего пакета из Etch - если есть пакеты из Etch и Lenny, мы хотим установить пакет из Etch. Для этого мы задаем пакетам из Etch более высокий приоритет в /etc/apt/preferences:

vi /etc/apt/preferences

| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |

(Термины etch и lenny относятся к соответствующим терминам в /etc/apt/sources.list; если вы используете stable и testing, вы должны использовать stable и testing вместо etch и lenny в /etc/apt/preferences также.)

После этого мы обновляем базу данных пакетов:

apt-get update

Если вы получаете ошибку, подобную этой:

Segmentation faultsts... 96%

или этой:

E: Dynamic MMap ran out of room

откройте /etc/apt/apt.conf и добавьте строку для APT::Cache-Limit с очень высоким значением, например, так:

vi /etc/apt/apt.conf 

| APT::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 (замените yourrootsqlpassword на желаемый пароль):

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 оставит столбец id в таблице MySQL для журнала доступа пустым). Столбец id будет содержать уникальный идентификатор запроса, предоставленный стандартным модулем Apache mod_unique_id.

a2enmod unique_id

Перезагрузите Apache:

/etc/init.d/apache2 force-reload

2 Создание виртуального хоста

Теперь я создам виртуальный хост Apache по умолчанию в каталоге /var/www/web1/web. Для этого я изменю конфигурацию виртуального хоста Apache по умолчанию в /etc/apache2/sites-available/default. Если у вас уже есть виртуальный хост, для которого вы хотите включить ведение логов MySQL, вы должны адаптировать это руководство к вашей ситуации.

Сначала создадим каталог /var/www/web1/web и сделаем пользователя Apache (www-data) владельцем этого каталога:

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

Затем мы создаем резервную копию конфигурации виртуального хоста Apache по умолчанию (/etc/apache2/sites-available/default) и создаем свою:

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

| NameVirtualHost * 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

Вы можете найти документацию для mod_log_sql в HTML-файле /usr/share/doc/libapache2-mod-log-sql/manual.html. Вы должны скопировать его на свой рабочий стол (например, с помощью WinSCP) и изучить его.

Прочитав этот файл, мы создадим базу данных MySQL под названием apachelogs, которая будет содержать таблицы для наших журналов доступа (она может содержать несколько таблиц журналов доступа, например, одну для каждого виртуального хоста, который у вас есть). В дополнение к этому мы создадим пользователя 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 [email protected] identified by ‘loguser_password’;
FLUSH PRIVILEGES;

(Замените loguser_password на пароль по вашему выбору.)

Затем мы выходим из оболочки MySQL:

quit;

Теперь мы изменим наш виртуальный хост в /etc/apache2/sites-available/default так, чтобы он выглядел следующим образом:

vi /etc/apache2/sites-available/default

| LogSQLLoginInfo 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 идет в конфигурацию виртуального хоста - таким образом, вы можете указывать разные таблицы журналов доступа для каждого виртуального хоста (например, 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

Теперь получите доступ к некоторым страницам вашего виртуального хоста в браузере и проверьте базу данных 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.

5 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.