Apache MySQL · 5 min read · Feb 03, 2026

Apache2: Registro en una base de datos MySQL con mod_log_sql (Debian Etch)

Apache2: Registro en una base de datos MySQL con mod_log_sql (Debian Etch)

Versión 1.0
Autor: Falko Timme

Esta guía muestra cómo puedes escribir el registro de acceso de Apache2 en una base de datos MySQL en lugar de un archivo. Para lograr esto, utilizo el módulo de Apache2 mod_log_sql. Estoy usando un servidor Debian Etch en este tutorial.

¡No emito ninguna garantía de que esto funcione para ti!

1 Instalando Apache2, MySQL, mod_log_sql

Desafortunadamente, libapache2-mod-log-sql-mysql está disponible como un paquete de Debian solo para Debian Lenny (testing) y Sid (inestable), pero no para Etch. Por lo tanto, instalaremos el paquete libapache2-mod-log-sql-mysql de Lenny. Para hacer esto, abre /etc/apt/sources.list y agrega la línea deb http://ftp2.de.debian.org/debian/ lenny main; tu /etc/apt/sources.list podría verse así:

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 |

Por supuesto (para no desordenar nuestro sistema), queremos instalar paquetes de Lenny solo si no hay un paquete apropiado de Etch; si hay paquetes de Etch y Lenny, queremos instalar el de Etch. Para hacer esto, damos a los paquetes de Etch una mayor prioridad en /etc/apt/preferences:

vi /etc/apt/preferences

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

(Los términos etch y lenny se refieren a los términos apropiados en /etc/apt/sources.list; si estás usando stable y testing allí, debes usar stable y testing en lugar de etch y lenny en /etc/apt/preferences también.)

Después, actualizamos nuestra base de datos de paquetes:

apt-get update

Si obtienes un error como este:

Segmentation faultsts... 96%

o este:

E: Dynamic MMap ran out of room

abre /etc/apt/apt.conf y agrega una línea para APT::Cache-Limit con un valor muy alto, por ejemplo así:

vi /etc/apt/apt.conf 

| APT::Cache-Limit "100000000"; |

Luego ejecuta

apt-get update

nuevamente y actualiza los paquetes instalados:

apt-get upgrade 

(Si ves alguna pregunta, puedes aceptar los valores predeterminados.)

Para instalar Apache2, MySQL y mod_log_sql, ejecutamos:

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

Crea una contraseña para el usuario root de MySQL (reemplaza yourrootsqlpassword con la contraseña que deseas usar):

mysqladmin -u root password yourrootsqlpassword

Luego verifica con

netstat -tap | grep mysql

en qué direcciones está escuchando MySQL. Si la salida se ve así:

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

lo que significa que MySQL está escuchando solo en localhost.localdomain, entonces estás seguro con la contraseña que configuraste antes. Pero si la salida se ve así:

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

debes establecer una contraseña de MySQL para tu nombre de host también, porque de lo contrario cualquiera puede acceder a tu base de datos y modificar datos:

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

mod_log_sql se habilitó automáticamente cuando lo instalamos, pero hay otro módulo que debemos habilitar: mod_uique_id (no es necesario, pero sin él, mod_log_sql dejará la columna id en la tabla MySQL para el registro de acceso vacía). La columna id contendrá el ID de solicitud único proporcionado por el módulo estándar de Apache mod_unique_id.

a2enmod unique_id

Recarga Apache:

/etc/init.d/apache2 force-reload

2 Creando un Host Virtual

Ahora crearé un vhost de Apache predeterminado en el directorio /var/www/web1/web. Para este propósito, modificaré la configuración del vhost predeterminado de Apache en /etc/apache2/sites-available/default. Si ya tienes un vhost para el cual te gustaría habilitar el registro de MySQL, debes ajustar este tutorial a tu situación.

Primero, creamos el directorio /var/www/web1/web y hacemos que el usuario de Apache (www-data) sea el propietario de ese directorio:

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

Luego hacemos una copia de seguridad de la configuración del vhost predeterminado de Apache (/etc/apache2/sites-available/default) y creamos el nuestro:

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 |

Luego recarga Apache:

/etc/init.d/apache2 reload

3 Configurar el Host Virtual para el Registro de MySQL

Puedes encontrar la documentación para mod_log_sql en el archivo HTML /usr/share/doc/libapache2-mod-log-sql/manual.html. Deberías copiarlo a tu estación de trabajo (por ejemplo, con WinSCP) y estudiarlo.

Habiendo leído este archivo, creamos una base de datos MySQL llamada apachelogs que contendrá las tablas para nuestros registros de acceso (puede contener múltiples tablas de registro de acceso, por ejemplo, una para cada host virtual que tengas). Además de eso, creamos el usuario de MySQL loguser - este usuario será utilizado por mod_log_sql para conectarse a MySQL más adelante. loguser tendrá privilegios de CREATE e INSERT para que pueda crear automáticamente tablas para los registros de acceso (si las tablas no existen ya) e insertar registros en estas tablas:

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;

(Reemplaza loguser_password con una contraseña de tu elección.)

Luego salimos de la consola de MySQL:

quit;

Ahora modificamos nuestro vhost en /etc/apache2/sites-available/default para que se vea como sigue:

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 |

Las directivas LogSQLLoginInfo (que contiene las credenciales de inicio de sesión a la base de datos), LogSQLCreateTables (que le dice a mod_log_sql que cree tablas si no existen), LogSQLDBParam socketfile (que especifica el socket de MySQL), y LogSQLTransferLogFormat (que especifica qué se registra en la base de datos) van en la configuración global de Apache. La directiva LogSQLTransferLogTable va en la configuración del vhost; de esa manera puedes especificar diferentes tablas de registro de acceso para cada host virtual (por ejemplo, web1_access_log, web2_access_log, web3_access_log, etc.).

La directiva LogSQLTransferLogFormat se explica con más detalle en el archivo /usr/share/doc/libapache2-mod-log-sql/manual.html.

Recarga Apache después:

/etc/init.d/apache2 reload

4 Probando mod_log_sql

Ahora accede a algunas páginas de tu vhost en un navegador y verifica la base de datos apachelogs después:

mysql -u root -p

use apachelogs;
show tables;

Ahora deberías ver que la tabla web1_access_log ha sido creada por mod_log_sql:

mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log      |
+———————-+
1 row in set (0.00 sec)

mysql>

Ahora verifiquemos qué hay en esa tabla:

select * from web1_access_log;

Si todo salió bien, deberías encontrar registros de acceso en esa tabla:

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>

Escribe

quit;

para salir de la consola de MySQL.

5 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.