Apache MySQL · 5 min read · Feb 03, 2026
Apache2: Registrando Em Um Banco De Dados MySQL Com mod_log_sql (Debian Etch)
Apache2: Registrando Em Um Banco De Dados MySQL Com mod_log_sql (Debian Etch)
Versão 1.0
Autor: Falko Timme
Este guia mostra como você pode gravar o log de acesso do Apache2 em um banco de dados MySQL em vez de um arquivo. Para conseguir isso, uso o módulo do Apache2 mod_log_sql. Estou usando um servidor Debian Etch neste tutorial.
Não dou nenhuma garantia de que isso funcionará para você!
1 Instalando Apache2, MySQL, mod_log_sql
Infelizmente, libapache2-mod-log-sql-mysql está disponível como um pacote Debian apenas para Debian Lenny (testing) e Sid (unstable), mas não para Etch. Portanto, vamos instalar o pacote libapache2-mod-log-sql-mysql do Lenny. Para fazer isso, abra /etc/apt/sources.list e adicione a linha deb http://ftp2.de.debian.org/debian/ lenny main; seu /etc/apt/sources.list poderia então parecer com isso:
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 |
Claro (para não bagunçar nosso sistema), queremos instalar pacotes do Lenny apenas se não houver um pacote apropriado do Etch - se houver pacotes do Etch e Lenny, queremos instalar o do Etch. Para fazer isso, damos aos pacotes do Etch uma prioridade mais alta em /etc/apt/preferences:
vi /etc/apt/preferences| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |
(Os termos etch e lenny referem-se aos termos apropriados em /etc/apt/sources.list; se você estiver usando stable e testing lá, deve usar stable e testing em vez de etch e lenny em /etc/apt/preferences também.)
Depois, atualizamos nosso banco de dados de pacotes:
apt-get updateSe você receber um erro como este:
Segmentation faultsts... 96%ou este:
E: Dynamic MMap ran out of roomabra /etc/apt/apt.conf e adicione uma linha para APT::Cache-Limit com um valor muito alto, por exemplo, assim:
vi /etc/apt/apt.conf | APT::Cache-Limit "100000000"; |
Então execute
apt-get updatenovamente e atualize os pacotes instalados:
apt-get upgrade (Se você ver alguma pergunta, pode aceitar os valores padrão.)
Para instalar Apache2, MySQL e mod_log_sql, executamos:
apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysqlCrie uma senha para o usuário root do MySQL (substitua yourrootsqlpassword pela senha que você deseja usar):
mysqladmin -u root password yourrootsqlpasswordEntão verifique com
netstat -tap | grep mysqlem quais endereços o MySQL está escutando. Se a saída parecer com isso:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqldo que significa que o MySQL está escutando apenas em localhost.localdomain, então você está seguro com a senha que definiu antes. Mas se a saída parecer com isso:
tcp 0 0 *:mysql *:* LISTEN 2713/mysqldvocê deve definir uma senha do MySQL para seu hostname também, porque caso contrário qualquer um pode acessar seu banco de dados e modificar dados:
mysqladmin -h server1.example.com -u root password yourrootsqlpasswordmod_log_sql foi habilitado automaticamente quando o instalamos, mas há outro módulo que devemos habilitar: mod_uique_id (não é necessário, mas sem ele, mod_log_sql deixará a coluna id na tabela MySQL para o log de acesso vazia). A coluna id conterá o ID de solicitação exclusivo fornecido pelo módulo padrão do Apache mod_unique_id.
a2enmod unique_idRecarregue o Apache:
/etc/init.d/apache2 force-reload2 Criando Um Host Virtual
Agora criarei um vhost Apache padrão no diretório /var/www/web1/web. Para isso, modificarei a configuração do vhost padrão do Apache em /etc/apache2/sites-available/default. Se você já tiver um vhost para o qual gostaria de habilitar o registro em MySQL, deve ajustar este tutorial à sua situação.
Primeiro, criamos o diretório /var/www/web1/web e tornamos o usuário do Apache (www-data) o proprietário desse diretório:
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
Então fazemos um backup da configuração do vhost padrão do Apache (/etc/apache2/sites-available/default) e criamos o nosso:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default
| NameVirtualHost * |
Então recarregue o Apache:
/etc/init.d/apache2 reload3 Configurando O Host Virtual Para Registro MySQL
Você pode encontrar a documentação para mod_log_sql no arquivo HTML /usr/share/doc/libapache2-mod-log-sql/manual.html. Você deve copiá-lo para sua estação de trabalho (por exemplo, com WinSCP) e estudá-lo.
Depois de ler este arquivo, criamos um banco de dados MySQL chamado apachelogs que conterá as tabelas para nossos logs de acesso (pode conter várias tabelas de log de acesso, por exemplo, uma para cada host virtual que você tem). Além disso, criamos o usuário MySQL loguser - este usuário será usado pelo mod_log_sql para se conectar ao MySQL mais tarde. loguser terá privilégios de CREATE e INSERT para que possa criar automaticamente tabelas para os logs de acesso (se as tabelas ainda não existirem) e inserir registros nessas tabelas:
mysql -u root -pcreate 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;
(Substitua loguser_password por uma senha de sua escolha.)
Então saímos do shell do MySQL:
quit;Agora modificamos nosso vhost em /etc/apache2/sites-available/default para que fique assim:
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 * |
As diretivas LogSQLLoginInfo (que contém as credenciais de login para o banco de dados), LogSQLCreateTables (que informa ao mod_log_sql para criar tabelas se não existirem), LogSQLDBParam socketfile (que especifica o socket do MySQL) e LogSQLTransferLogFormat (que especifica o que é registrado no banco de dados) vão na configuração global do Apache. A diretiva LogSQLTransferLogTable vai na configuração do vhost - dessa forma você pode especificar diferentes tabelas de log de acesso para cada host virtual (por exemplo, web1_access_log, web2_access_log, web3_access_log, etc.).
A diretiva LogSQLTransferLogFormat é explicada em mais detalhes no arquivo /usr/share/doc/libapache2-mod-log-sql/manual.html.
Recarregue o Apache depois:
/etc/init.d/apache2 reload4 Testando mod_log_sql
Agora acesse algumas páginas do seu vhost em um navegador e verifique o banco de dados apachelogs depois:
mysql -u root -puse apachelogs;
show tables;
Você deve agora ver que a tabela web1_access_log foi criada pelo mod_log_sql:
mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log |
+———————-+
1 row in set (0.00 sec)
mysql>
Agora vamos verificar o que há nessa tabela:
select * from web1_access_log;Se tudo correu bem, você deve encontrar logs de acesso nessa tabela:
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>
Digite
quit;para sair do shell do MySQL.
5 Links
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.