Puis-je 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.
Puis-je 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.
Réponses:
Démarrez mysql avec l'option --log:
mysqld --log=log_file_name
ou placez ce qui suit dans votre my.cnf
dossier:
log = log_file_name
L'un ou l'autre enregistrera toutes les requêtes dans log_file_name.
Vous pouvez également consigner uniquement les requêtes lentes en utilisant l' --log-slow-queries
option 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 définissant long_query_time
le nombre de secondes qu'une requête doit prendre pour s'exécuter avant d'être enregistrée.
( Remarque : pour mysql-5.6 +, cela ne fonctionnera pas. Il existe une solution qui s'applique à mysql-5.6 + si vous faites 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 en cours d'exécution:
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'
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log
SET global general_log = 0;
CREATE TABLE
commandes doivent (si les tables n'existent pas déjà) être exécutées sur la mysql
base de données, et non sur des bases de données créées par l'utilisateur. Peut-être que les instructions SQL pourraient être mises à jour pour refléter cela.
SELECT * FROM mysql.general_log order by (event_time) desc
fera mieux. juste dire. :-)
Outre ce que j'ai rencontré ici, l'exécution de ce qui suit était le moyen le plus simple de vider des requêtes dans un fichier journal 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 désactivé avec
SET global general_log = 0;
GRANT SUPER ON *.* TO user1@localhost
La meilleure réponse ne fonctionne pas dans mysql 5.6+. Utilisez-le à la place:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
dans votre fichier my.cnf / my.ini
Ubuntu / Debian : /etc/mysql/my.cnf
Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.
phpMyAdmin
?
general_log_file=filename.log
Activer le journal pour la table
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Afficher le journal par requête de sélection
select * from mysql.general_log
Un moyen rapide d'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 le wrapper EditLine
Pour mémoire, 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. Sélection des destinations de sortie du journal des requêtes générales et des requêtes lentes
Depuis MySQL 5.1.6, MySQL Server offre un contrôle flexible sur la destination de sortie vers le journal de requête général et le journal de requête lente, si ces journaux sont activés. Les destinations possibles pour les entrées de journal sont les fichiers journaux ou les tables general_log et slow_log dans la base de données mysql
Vous devez savoir que la connexion à mysql a vraiment un impact sur les performances, mais cela peut être une bonne chose à faire.
Je le laisse généralement allumé sur le serveur de développement (sauf quand cela nous rend fous :))
Version OS / mysql:
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using EditLine wrapper
Ajout de la journalisation (par exemple, je ne pense pas que ce /var/log/...
soit le meilleur chemin sur Mac OS mais cela a fonctionné:
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log
Mysql redémarré
Résultat:
$ sudo tail -f /var/log/mysql/mysqld_general.log
181210 9:41:04 21 Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results = NULL
21 Query SET autocommit=1
21 Query SELECT USER()
21 Query SELECT USER()
181210 9:41:10 21 Query show tables
181210 9:41:25 21 Query select count(*) from current_dept_emp
Si vous utilisez AWS RDS MYSQL, guide étape par étape ici.
Lorsqu'il est défini comme sortie «fichier», vous pouvez afficher le journal directement à partir de la console «Log» AWS RDS.