Come mostrare le ultime query eseguite su MySQL?

Esiste una query / modo per mostrare le ultime query eseguite su TUTTI i server?

Per chi ha fortuna con MySQL> = 5.1.12, è ansible controllare questa opzione a livello globale in fase di runtime:

  1. Esegui SET GLOBAL log_output = 'TABLE';
  2. Esegui SET GLOBAL general_log = 'ON';
  3. Dai un’occhiata alla tabella mysql.general_log

Se preferisci eseguire l’output su un file anziché su una tabella:

  1. SET GLOBAL log_output = "FILE"; l’impostazione predefinita
  2. SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  3. SET GLOBAL general_log = 'ON';

Preferisco questo metodo per modificare file .cnf perché:

  1. non stai modificando il file my.cnf e potenzialmente my.cnf permanentemente la registrazione
  2. non stai pescando attorno al filesystem alla ricerca del log delle query – o peggio ancora, distratto dalla necessità di una destinazione perfetta. /var/log /var/data/log /opt /home/mysql_savior/var
  3. riavviare il server ti lascia dove hai iniziato (il log è di default ancora spento)
  4. Non è necessario riavviare il server e interrompere qualsiasi connessione corrente ad esso.

Per ulteriori informazioni, consultare il Manuale di riferimento di MySQL 5.1 – Variabili di sistema del server – general_log

È ansible abilitare un log di query generale per quel tipo di diagnostica. Generalmente non si registrano tutte le query SELECT su un server di produzione, si tratta di un killer delle prestazioni.

Modifica la tua configurazione MySQL, ad es. /Etc/mysql/my.cnf – cerca o aggiungi una linea come questa

 [mysqld] log = /var/log/mysql/mysql.log 

Riavvia mysql per raccogliere quel cambiamento, ora puoi farlo

 tail -f /var/log/mysql/mysql.log 

Ehilà, puoi guardare le domande mentre arrivano.

Puoi fare la cosa fluente per monitorare i log delle query di mysql.

Apri il file di configurazione mysql my.cnf

 sudo nano /etc/mysql/my.cnf 

Cerca le seguenti righe sotto un’intestazione [mysqld] e decommenta queste righe per abilitare il registro

 general_log_file = /var/log/mysql/mysql.log general_log = 1 

Riavvia il tuo server mysql per riflettere le modifiche

 sudo service mysql start 

Monitorare il registro del server MySQL con il seguente comando nel terminale

 tail -f /var/log/mysql/mysql.log 
 SELECT * FROM mysql.general_log WHERE command_type ='Query' LIMIT total; 

1) Se la registrazione mysql generale è abilitata, possiamo controllare le query nel file di registro o nella tabella in base a ciò che abbiamo menzionato nella configurazione. Controlla cosa è abilitato con il seguente comando

 mysql> show variables like 'general_log%'; mysql> show variables like 'log_output%'; 

Se abbiamo bisogno della cronologia delle query nella tabella, allora

 Execute SET GLOBAL log_output = 'TABLE'; Execute SET GLOBAL general_log = 'ON'; 

Dai un’occhiata alla tabella mysql.general_log

Se preferisci eseguire l’output su un file:

 SET GLOBAL log_output = "FILE"; which is set by default. SET GLOBAL general_log_file = "/path/to/your/logfile.log"; SET GLOBAL general_log = 'ON'; 

2) Possiamo anche controllare le query nel file .mysql_history cat ~ / .mysql_history

Se mysql binlog è abilitato puoi controllare i comandi eseguiti dall’utente eseguendo il seguente comando nella console di linux sfogliando la directory mysql binlog

 mysqlbinlog binlog.000001 > /tmp/statements.sql 

abilitare

 [mysqld] log = /var/log/mysql/mysql.log 

o il registro generale avrà un effetto sulle prestazioni di mysql

Forse potresti scoprirlo guardando il registro delle query .

Puoi guardare quanto segue in linux

 cd /root ls -al 

vi .mysql_history Potrebbe essere d’aiuto

Dopo aver letto la risposta di Paul, ho continuato a scavare per ulteriori informazioni su https://dev.mysql.com/doc/refman/5.7/en/query-log.html

Ho trovato un codice veramente utile da una persona. Ecco il riassunto del contesto.

(Nota: il seguente codice non è mio)

Questo script è un esempio per mantenere pulito il tavolo che ti aiuterà a ridurre le dimensioni del tuo tavolo. Come dopo un giorno, ci saranno circa 180k query di registro. (in un file, sarebbe 30 MB al giorno)

È necessario aggiungere una colonna aggiuntiva (event_unix) e quindi è ansible utilizzare questo script per mantenere pulito il registro … aggiornerà il timestamp in un timestamp Unix, eliminerà i registri più vecchi di 1 giorno e quindi aggiornerà l’evento_time in Timestamp da event_unix … suona un po ‘confuso, ma funziona alla grande.

Comandi per la nuova colonna:

 SET GLOBAL general_log = 'OFF'; RENAME TABLE general_log TO general_log_temp; ALTER TABLE `general_log_temp` ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`; RENAME TABLE general_log_temp TO general_log; SET GLOBAL general_log = 'ON'; 

Script di pulizia:

 SET GLOBAL general_log = 'OFF'; RENAME TABLE general_log TO general_log_temp; UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time); DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400; UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix); RENAME TABLE general_log_temp TO general_log; SET GLOBAL general_log = 'ON'; 

Il merito va a Sebastian Kaiser (scrittore originale del codice).

Spero che qualcuno lo troverà utile come ho fatto io.

Se non hai voglia di modificare la configurazione di MySQL, potresti utilizzare un profiler SQL come “Neor Profile SQL” http://www.profilesql.com .