Uma aplicação web moderna e responsiva para visualizar e analisar os logs gerais do MySQL de forma intuitiva e organizada.
Interface moderna e intuitiva para análise de logs MySQL
- 🎨 Design gradiente moderno com animações suaves
- 🔐 Código auditado e protegido contra vulnerabilidades
- 💾 Configuração persistente (sem necessidade de reconfigurar)
- 🎯 Filtragem inteligente de usuários
- 📱 100% responsivo (desktop, tablet, mobile)
- ✨ Interface Moderna: Design limpo e responsivo com gradientes e animações
- 🔐 Seguro: Proteção contra SQL Injection e XSS
- 💾 Configurável: Salve credenciais do banco no navegador (localStorage)
- 🎯 Filtros de Usuários: Whitelist/Blacklist de usuários MySQL
- 📱 Responsivo: Funciona perfeitamente em desktop e mobile
- ⚡ Single Page: Carregamento dinâmico via AJAX
- 🎨 Visual Atraente: Gradientes modernos e ícones emoji
- Lista de threads ordenados por data
- Agrupamento de queries idênticas
- Contador de execuções por query
- Visualização completa de SQL
- Copiar queries com um clique
- Habilitar/Desabilitar general_log
- Limpar logs com um clique
- Testar conexão antes de salvar
- Configuração persistente no navegador
- Nenhum: Mostra todos os usuários
- Incluir apenas (Whitelist): Mostra SOMENTE usuários específicos
- Excluir (Blacklist): Remove usuários específicos da visualização
- PHP 7.0 ou superior
- MySQL 5.7 ou superior / MariaDB 10.2+
- Extensão PDO MySQL habilitada
- Navegador moderno com suporte a localStorage
git clone https://github.com/domwal/mysql-general-log-viewer.git
cd mysql-general-log-viewerEdite o arquivo de configuração do MySQL:
Windows (XAMPP):
C:\xampp\mysql\bin\my.ini
Windows (WAMP - MariaDB):
C:\wamp\bin\mariadb\mariadb10.6.22\my.ini
Linux:
/etc/mysql/mariadb.conf.d/50-server.cnf
Adicione as seguintes linhas na seção [mysqld]:
[mysqld]
general_log = 1
log_output = TABLE
general_log_file = mysql_query.logOu configure via linha de comando:
SET GLOBAL general_log = 1;
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log_file = 'mysql_general_query.log';Execute os seguintes comandos no MySQL:
-- Criar usuário
CREATE USER 'userlog'@'%' IDENTIFIED BY 'userlog';
GRANT SELECT ON mysql.general_log TO 'userlog'@'%';
-- Permissão para limpar logs (opcional)
GRANT DROP ON mysql.general_log TO 'userlog'@'%';
FLUSH PRIVILEGES;
-- Criar procedure para habilitar/desabilitar log
DELIMITER //
CREATE PROCEDURE mysql.ToggleGeneralLog (IN log_state BOOLEAN)
BEGIN
IF log_state THEN
SET GLOBAL general_log = 1;
SET GLOBAL log_output = 'table';
ELSE
SET GLOBAL general_log = 0;
END IF;
END //
DELIMITER ;
-- Permissão para executar a procedure
GRANT EXECUTE ON PROCEDURE mysql.ToggleGeneralLog TO 'userlog'@'%';Abra o arquivo mysql_log_view.php e ajuste as credenciais padrão (linhas 94-97):
// Valores padrão
$mySqlServerName = "127.0.0.1";
$mySqlUserName = "root";
$mySqlPassword = "";
$mySqlDbName = 'mysql';Coloque o arquivo em seu servidor web e acesse:
http://localhost/mysql_log_view.php
- Clique no botão ⚙️ Configurar no topo da página
- Preencha os dados de conexão:
- Host: Endereço do servidor MySQL (ex: localhost, 127.0.0.1)
- Usuário: Nome de usuário do MySQL (ex: root, userlog)
- Senha: Senha do usuário
- (Opcional) Clique em 🔌 Testar Conexão para verificar
- Clique em 💾 Salvar para armazenar no navegador
As credenciais ficarão salvas no localStorage do navegador e serão carregadas automaticamente na próxima vez!
- Clique no botão 👥 Filtros no topo da página
- Selecione o tipo de filtro:
- Nenhum: Mostra todos os usuários/conexões
- Incluir apenas (Whitelist): Mostra SOMENTE os usuários que você listar
- Excluir (Blacklist): Mostra todos EXCETO os usuários listados
- Se escolheu include ou exclude, adicione os user_host:
- Digite um user_host por linha
- Formato:
usuario[usuario] @ host [ip] - Exemplo:
root[root] @ localhost [127.0.0.1]
- Clique em 💾 Salvar Filtro
💡 Dica: Use o botão 👤 Copiar User Host (ao visualizar logs de um thread) para copiar o formato exato!
- Na barra lateral esquerda, você verá a lista de Thread IDs
- Clique em qualquer Thread para ver os detalhes
- Você verá:
- Tipo de comando (Query, Execute, etc)
- Total de execuções (queries idênticas agrupadas)
- Horário da execução
- Query SQL completa
- Clique em qualquer query para copiar para a área de transferência
- Use 📄 Ver SQL Completa para ver todas as queries do thread em sequência
- 🗑️ Limpar Todo o Log: Remove TODOS os registros da tabela general_log
- ✅ Habilitar General Log: Ativa o registro de logs (cuidado com performance!)
- ❌ Desabilitar General Log: Desativa o registro (recomendado quando não usar)
- 🔄 Atualizar: Recarrega a página com dados mais recentes
Este projeto foi auditado e protegido contra:
- ✅ SQL Injection - Prepared statements e validação
- ✅ XSS - Escape completo de outputs
- ✅ DoS - Limites de entrada
- ✅ Input Validation - Whitelist e sanitização
Se você descobrir uma vulnerabilidade de segurança:
- NÃO abra uma issue pública
- Envie um email privado descrevendo o problema
- Aguarde resposta antes de divulgar publicamente
- Será creditado pela descoberta (se desejar)
NÃO use em produção sem:
- HTTPS obrigatório
- Sistema de autenticação
- Headers de segurança (CSP, X-Frame-Options, etc)
- Rate limiting
- Configuração externa de credenciais (não deixe no código)
- Firewall e restrição de IPs
- Logs de auditoria
Recomendações:
- Use este projeto apenas em ambiente de desenvolvimento
- Configure credenciais específicas (não use root)
- Crie usuário MySQL com privilégios mínimos
- Monitore o uso e desabilite general_log quando não estiver usando
- Mantenha o PHP e MySQL atualizados
mysql-general-log-viewer/
├── mysql_log_view.php # Aplicação principal
├── README.md # Este arquivo
├── LICENSE # Licença MIT
├── .gitignore # Arquivos ignorados pelo Git
├── LEIA-ME.txt # Instruções em português
└── PRIVACIDADE-GITHUB.md # Análise de privacidade
Contribuições são bem-vindas! Por favor:
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
- PHP: Use PSR-12, indentação de 4 espaços
- JavaScript: Use const/let, indentação de 4 espaços
- SQL: Palavras-chave em UPPERCASE
- Segurança: Sempre use prepared statements e escape de outputs
- ✨ Interface moderna com gradientes
- 🔐 Correções de segurança (SQL Injection, XSS)
- 💾 Configuração persistente no navegador
- 🎯 Sistema de filtros de usuários
- 📱 Design responsivo
- ⚡ Single page com AJAX
- 📊 Versão inicial básica
- localStorage não funciona em modo anônimo/privado
- Requer JavaScript habilitado
- Senhas armazenadas em base64 (não é criptografia real)
Erro de Conexão:
- Verifique se o MySQL está rodando
- Confirme host, usuário e senha
- Teste se a extensão PDO MySQL está habilitada:
php -m | grep pdo_mysql
Nenhum Log Aparece:
- Verifique se general_log está habilitado:
SHOW VARIABLES LIKE 'general_log'; - Confirme que log_output está como 'TABLE'
- Execute algumas queries para gerar logs
Página em Branco:
- Verifique erros no console do navegador (F12)
- Ative error_reporting no PHP
- Verifique permissões de arquivo
Filtros Não Funcionam:
- Limpe o cache do navegador
- Verifique se o user_host está no formato correto
- Use o botão "Copiar User Host" para garantir o formato
P: É seguro usar este projeto? R: Sim, o código foi auditado e protegido contra SQL Injection e XSS. Porém, para produção, adicione autenticação e HTTPS.
P: Posso usar em produção? R: Não recomendado. Este projeto é ideal para desenvolvimento e debug local. Para produção, implemente autenticação, HTTPS e outras camadas de segurança.
P: O general_log impacta a performance? R: Sim! O general_log registra TODAS as queries e pode impactar significativamente a performance. Use apenas para debug e desabilite quando não precisar.
P: Como faço backup dos logs?
R: Use o botão de exportar (quando implementado) ou execute: SELECT * FROM mysql.general_log INTO OUTFILE '/tmp/backup.csv';
P: Posso ver logs de outros bancos além do MySQL? R: Não. Este projeto é específico para MySQL/MariaDB general_log.
P: As credenciais salvas no navegador são seguras? R: São codificadas em base64 (não criptografadas). Não use em computadores compartilhados. Para mais segurança, não salve as credenciais.
P: Funciona com MySQL 8.0? R: Sim! Compatível com MySQL 5.7+, 8.0+ e MariaDB 10.2+.
P: Posso contribuir com o projeto? R: Sim! Pull requests são bem-vindos. Veja a seção "Contribuindo" acima.
- Sistema de autenticação básico
- Exportar logs (CSV, JSON, SQL)
- Pesquisa/filtro de queries
- Gráficos de estatísticas e performance
- Análise de queries lentas
- Favoritar/salvar queries importantes
- Comparação de queries
- Modo escuro
- Múltiplos idiomas (i18n)
- API REST para integração
- Dashboard com widgets personalizáveis
- Alertas e notificações
- Integração com ferramentas de monitoramento
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Desenvolvido com ❤️ para facilitar a análise de logs MySQL
- Comunidade PHP
- Comunidade MySQL/MariaDB
- Todos os contribuidores
Se encontrar problemas:
- Revise a documentação neste README
- Verifique as credenciais do MySQL
- Teste a conexão usando o botão "Testar Conexão"
- Consulte as issues existentes
- Abra uma nova issue com detalhes do problema
⚡ Tip: Use em ambiente de desenvolvimento para debugar queries! Nunca deixe general_log habilitado em produção - impacta performance.
🔒 Security: Este é um projeto open-source. Revise o código antes de usar em produção!