Log toutes les requêtes dans mysql
est-il possible pour moi d'activer la journalisation d'audit sur ma base de données mysql?
je veux essentiellement surveiller toutes les requêtes pendant une heure, et vider le journal dans un fichier.
9 réponses
Démarrer mysql avec l'option --log:
mysqld --log=log_file_name
ou placez ce qui suit dans votre fichier my.cnf
:
log = log_file_name
L'un ou l'autre logera toutes les requêtes dans log_file_name.
vous pouvez également enregistrer uniquement les requêtes lentes en utilisant l'option --log-slow-queries
au lieu de --log
. Par défaut, les requêtes qui prennent 10 secondes ou plus sont considérées comme lentes, vous pouvez changer cela en réglant long_query_time
sur le nombre de secondes a la requête doit être exécutée avant d'être journalisée.
( Note : pour mysql-5.6+ cela ne marchera pas. Il ya une solution qui s'applique à mysql-5.6+ si vous faire défiler vers le bas ou Cliquez ici .)
si vous ne voulez pas ou ne pouvez pas redémarrer le serveur MySQL, vous pouvez procéder comme ceci sur votre serveur courant:
- Créez vos tables de log sur la
mysql
base de données
CREATE TABLE `slow_log` (
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`query_time` time NOT NULL,
`lock_time` time NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
- Activer la journalisation des Requêtes sur la base de données
SET global general_log = 1;
SET global log_output = 'table';
- Afficher le journal
select * from mysql.general_log
- Désactiver la journalisation des Requêtes sur la base de données
SET global general_log = 0;
en plus de ce que j'ai trouvé ici, exécuter ce qui suit était la manière la plus simple de décharger des requêtes dans un fichier log sans redémarrer
SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;
peut être éteint avec
SET global general_log = 0;
Top réponse ne fonctionne pas dans mysql 5.6+. Utilisez ceci à la place:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
dans votre mon.cnf / ma.fichier ini
Ubuntu/Debian : /etc/mysql/my.cnf
Windows : c:\ProgramData\MySQL\MySQL serveur 5.x
wamp : c:\wamp\bin\mysql\mysqlx.y.z\mon.151980920 "151990920 xampp : c:\xampp\mysql\bin\my.ini.
activer le log pour la table
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Afficher le journal par la requête select
select * from mysql.general_log
méthode rapide pour activer MySQL General Query Log sans redémarrer.
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';
j'ai installé mysql via homebrew, version mysql : mysql Ver 14.14 Distrib 5.7.15, pour osx10.11 (x86_64) en utilisant EditLine wrapper
pour le record, general_log et slow_log ont été introduits en 5.1.6:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. La sélection de l'interrogation Générale et Slow Query Log Destinations de Sortie
à partir de MySQL 5.1.6, le serveur MySQL offre un contrôle flexible sur le destination de la sortie vers le journal de requête général et le journal de requête lent, si ces journaux sont permettre. Les destinations possibles pour les entrées de journal sont log files ou les tables general_log et slow_log dans le mysql base de données
Vous devez être conscient que mysql journalisation sur un réel impact sur les performances, mais il peut être une chose sage à faire.
j'ai l'habitude de le laisser sur le serveur de dev (sauf quand il nous pousse fou :))
en cas d'utilisation de AWS RDS MYSQL, guide étape par étape ici.
lorsque défini comme sortie 'file', vous pouvez voir le journal directement depuis la Console AWS RDS" Log".