Come visualizzare i file di registro in MySQL?


176

Ho letto che il server Mysql crea un file di registro in cui registra tutte le attività, ad esempio quando e quali query vengono eseguite.

Qualcuno può dirmi dove esiste nel mio sistema? Come posso leggerlo?

Fondamentalmente, devo eseguire il backup del database con input diversi [backup tra due date], quindi penso di dover utilizzare il file di registro qui, ecco perché voglio farlo ...

Penso che questo registro debba essere protetto in qualche modo perché è possibile che vengano registrate informazioni sensibili come nomi utente e password [se una query lo richiede]; quindi può essere protetto, non facilmente visibile?

Ho accesso root al sistema, come posso vedere il registro?

Quando provo ad aprire /var/log/mysql.log è vuoto.

Questo è il mio file di configurazione:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

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

Risposte:


164

Ecco un modo semplice per abilitarli. In mysql abbiamo bisogno di vedere spesso 3 registri che sono per lo più necessari durante qualsiasi sviluppo del progetto.

  • The Error Log. Contiene informazioni sugli errori che si verificano durante l'esecuzione del server (anche avvio e arresto del server)

  • The General Query Log. Questa è una registrazione generale di ciò che sta facendo mysqld (connessione, disconnessione, query)

  • The Slow Query Log. È costituito da istruzioni SQL "lente" (come indicato dal suo nome).

Per impostazione predefinita, nessun file di registro è abilitato in MYSQL. Tutti gli errori verranno mostrati nel syslog ( /var/log/syslog).

Per abilitarli basta seguire i passaggi seguenti:

step1: vai a questo file ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) e rimuovi o commenta quella riga.

step2: Vai a mysql conf file ( /etc/mysql/my.cnf) e aggiungi le seguenti righe

Per abilitare il registro errori, aggiungere quanto segue

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

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

Per abilitare il registro generale delle query, aggiungere quanto segue

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

Per abilitare il Registro delle query lente aggiungere quanto segue

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

step3: salva il file e riavvia mysql usando i seguenti comandi

service mysql restart

Per abilitare i log in fase di esecuzione, accedi al client mysql ( mysql -u root -p) e dai:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Infine una cosa che vorrei menzionare qui è che ho letto questo da un blog . Grazie. Per me funziona.

Clicca qui per visitare il blog


2
Penso che tu abbia "dimenticato" di scrivere alcune cose. Il passaggio 1 è incompleto e manca la frase del link "blog"
Athafoud,

Ciao @Athafoud, per favore trova il link adesso.
Loyola,

3
L'articolo del blog collegato menziona la modifica /etc/mysql/conf.d/mysqld_safe_syslog.cnfsolo se il registro degli errori deve essere abilitato. Tuttavia, questa risposta, come è attualmente scritta, sembra suggerirla per qualsiasi registro.
Melebio

2
La mia versione del server è 5.6.35. La risposta di Ross Smith II qui funziona per me. Devo set slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.loge long_query_time = 60sotto [mysqld]. Quando provo a iniziare con la tua configurazione, il server si avvia, ma lentamente lento e con errori. Immagino davvero che le versioni differiscano e nelle versioni successive oracle voleva unificare i nomi delle variabili. Inoltre: IMHO 2 secondi non è così lungo.
JackLeEmmerdeur,

1
Che dire dell'autorizzazione per quei file? Ho visto in molti casi che i file di registro non sono stati creati.
MagoPsycho,

42

Devi attivare la registrazione delle query in mysql.

  1. modifica /etc/my.cnf

    [Mysqld]
    log = / tmp / mysql.log
    
  2. riavvia il computer o il servizio mysqld

    servizio mysqld restart
    
  3. apri phpmyadmin / qualsiasi applicazione che utilizza la console mysql / mysql ed esegui una query

  4. cat /tmp/mysql.log (dovresti vedere la query)


non importa, assicurati solo che una query venga eseguita sul db
danidacar il

6
percorso non valido. Hai /etc/my.cnf dovrebbe essere /etc/mysql/my.cnf
mystic cola

39

I log di MySQL sono determinati dalle variabili globali come:

  • log_error per il registro dei messaggi di errore;
  • general_log_fileper il file di registro delle query generale (se abilitato da general_log);
  • slow_query_log_fileper il file di registro delle query lente (se abilitato da slow_query_log);

Per visualizzare le impostazioni e la loro posizione, eseguire questo comando shell:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Per stampare il valore del registro errori, eseguire questo comando nel terminale:

mysql -e "SELECT @@GLOBAL.log_error"

Per leggere il contenuto del file di registro degli errori in tempo reale, eseguire:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Nota: Premi Control- Cal termine

Quando il registro generale è abilitato, provare:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

Per utilizzare mysqlcon l'accesso con password, aggiungere -po -pMYPASSparametro. Per ricordarlo, è possibile configurarlo nel proprio ~/.my.cnf, ad es

[client]
user=root
password=root

Quindi sarà ricordato per la prossima volta.


1
O se devi inserire una password, prova questo: mysql -p -se "MOSTRA VARIABILI" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch,

9

Nel mio (ho installato LAMP) / etc / mysql /my.cnf ho trovato le seguenti righe commentate nella sezione [mysqld]:

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

Ho dovuto aprire questo file come superutente, con il terminale:

sudo geany /etc/mysql/my.cnf

(Preferisco usare Geany invece di gedit o VI, non importa)

Li ho semplicemente decommentati e ho salvato il file, quindi ho riavviato mysql

sudo service mysql restart

Esegui diverse query, apri il file sopra (/var/log/mysql/mysql.log) e il registro era lì :)


mentre può funzionare per te, non per me, anche le principali eccezioni come "Index Corrupted" non vengono registrate. Solo problemi di avvio e arresto.
user3338098

8

Dal manuale di riferimento di MySQL:

Per impostazione predefinita, tutti i file di registro vengono creati nella directory dei dati.

Controlla la /var/lib/mysqlcartella.


1
ma non riesco ad aprire la cartella mysql. penso che il percorso del file di registro sia /var/log/mysql/mysql.log ma non riesco ad aprirlo, cosa devo fare?
Arjun,

2
come faccio a radicarmi, penso di essere il proprietario, installo il server, imposto la password, quindi dovrei essere il proprietario, eppure è bloccato per me, come posso aprirlo?
Arjun,

1
Ho forzato il cd in questa directory (ho dovuto creare un utente root, che ho eliminato in seguito), ma quando vedo questi file, ho pensato che fossero crittografati :) Quindi penso che non sia un buon modo.
Linea

usare sudo -squindi provare ad andare alla cartella mysql.
Rashedul Islam

il manuale di MySQL è pieno di numerose incongruenze, in entrambi i casi non esiste una directory di questo tipo su Windows.
user3338098

3

A complemento della risposta di loyola vale la pena ricordare che a partire da MySQL 5.1 log_slow_queriesè obsoleto e sostituitoslow-query-log

L'uso log_slow_queriescauserà il tuo service mysql restarto service mysql startfallire


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Benvenuto in StackOverflow. Si prega di prendere in considerazione l'idea di fornire ulteriori spiegazioni su come il codice nella risposta sia pertinente alla domanda del PO. Inoltre, il codice deve essere indentato da 4 spazi per consentire una formattazione corretta.
Politank-Z,

1

Oltre alle risposte di cui sopra, è possibile passare i parametri della riga di comando al processo mysqld per le opzioni di registrazione invece di modificare manualmente il file conf. Ad esempio, per abilitare la registrazione generale e specificare un file:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

Confermando altre risposte sopra, mysqld --help --verboseti dà i valori dal file conf (quindi l'esecuzione con le opzioni della riga di comando general-log è FALSE); mentre mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logdà:

general_log     ON
general_log_file        /var/log/mysql.general.log

Utilizzare una sintassi leggermente più compatta per il registro degli errori:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.