Jak wyświetlić pliki dziennika w MySQL?


176

Czytałem, że serwer MySQL tworzy plik dziennika, w którym przechowuje zapis wszystkich działań - np. Kiedy i jakie zapytania są wykonywane.

Czy ktoś może mi powiedzieć, gdzie istnieje w moim systemie? Jak mogę to przeczytać?

Zasadniczo muszę wykonać kopię zapasową bazy danych z innym wejściem [kopia zapasowa między dwiema datami], więc myślę, że muszę tutaj użyć pliku dziennika, dlatego chcę to zrobić ...

Myślę, że ten dziennik musi być w jakiś sposób zabezpieczony, ponieważ mogą być rejestrowane poufne informacje, takie jak nazwa użytkownika i hasło [jeśli wymaga tego jakiekolwiek zapytanie]; więc czy można go zabezpieczyć, aby nie był łatwo widoczny?

Mam uprawnienia roota do systemu, jak mogę zobaczyć dziennik?

Kiedy próbuję otworzyć /var/log/mysql.log, jest pusty.

To jest mój plik konfiguracyjny:

[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

Odpowiedzi:


164

Oto prosty sposób, aby je włączyć. W mysql musimy często zobaczyć 3 logi, które są potrzebne głównie podczas tworzenia każdego projektu.

  • The Error Log. Zawiera informacje o błędach jakie wystąpiły podczas działania serwera (także o uruchamianiu i zatrzymywaniu serwera)

  • The General Query Log. To jest ogólny zapis tego, co robi mysqld (łączenie, rozłączanie, zapytania)

  • The Slow Query Log. Ιt składa się z „powolnych” instrukcji SQL (jak wskazuje jej nazwa).

Domyślnie w MYSQL nie są włączone żadne pliki dziennika. Wszystkie błędy zostaną pokazane w syslog ( /var/log/syslog).

Aby je włączyć, wykonaj poniższe czynności:

krok 1: Przejdź do tego pliku ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) i usuń lub skomentuj tę linię.

Krok 2: Przejdź do pliku conf mysql ( /etc/mysql/my.cnf) i dodaj następujące wiersze

Aby włączyć dziennik błędów, dodaj następujące

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

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

Aby włączyć ogólny dziennik zapytań, dodaj następujące

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

Aby włączyć dziennik powolnych zapytań, dodaj następujące

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

krok 3: zapisz plik i zrestartuj mysql, używając następujących poleceń

service mysql restart

Aby włączyć dzienniki w czasie wykonywania, zaloguj się do klienta mysql ( mysql -u root -p) i podaj:

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

Na koniec chciałbym tutaj wspomnieć, że przeczytałem to z bloga . Dzięki. Mi to pasuje.

Kliknij tutaj, aby odwiedzić bloga


2
Myślę, że „zapomniałeś” napisać kilka rzeczy. Krok 1 jest niekompletny i brakuje zdania z linkiem do „blogu”
Athafoud

Cześć @Athafoud, znajdź link teraz.
loyola

3
W artykule na blogu, do którego prowadzi link, wspomniano o modyfikowaniu /etc/mysql/conf.d/mysqld_safe_syslog.cnftylko wtedy, gdy ma być włączony dziennik błędów. Jednak ta odpowiedź, tak jak jest obecnie napisana, wydaje się sugerować ją dla dowolnego dziennika.
Melebius

2
Moja wersja serwera to 5.6.35. Odpowiedź Rossa Smitha II tutaj działa dla mnie. Trzeba ustawić slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.loga long_query_time = 60w [mysqld]. Kiedy próbuję rozpocząć konfigurację, serwer się uruchamia, ale powolnie i z błędami. Wydaje mi się, że wersje się różnią iw późniejszych wersjach wyrocznia chciała ujednolicić nazwy zmiennych. Poza tym: IMHO 2 sekundy to nie tak długo.
JackLeEmmerdeur,

1
A co z pozwoleniem na te pliki? Widziałem w wielu przypadkach pliki dziennika nie są tworzone.
MagePsycho

42

Musisz aktywować zapytanie logując się do mysql.

  1. edytuj /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. uruchom ponownie komputer lub usługę mysqld

    usługa mysqld restart
    
  3. otwórz phpmyadmin / dowolną aplikację, która używa konsoli mysql / mysql i uruchom zapytanie

  4. cat /tmp/mysql.log (powinieneś zobaczyć zapytanie)


nie ma znaczenia, po prostu upewnij się, że zapytanie jest wykonywane przez
bazę

6
niewłaściwa ścieżka. Masz /etc/my.cnf powinno być /etc/mysql/my.cnf
mystic cola

39

Dzienniki MySQL są określane przez zmienne globalne, takie jak:

  • log_error dla dziennika komunikatów o błędach;
  • general_log_filedla ogólnego pliku dziennika zapytań (jeśli jest włączony przez general_log);
  • slow_query_log_filedla pliku dziennika powolnych zapytań (jeśli jest włączony przez slow_query_log);

Aby zobaczyć ustawienia i ich lokalizację, uruchom to polecenie powłoki:

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

Aby wydrukować wartość dziennika błędów, uruchom to polecenie w terminalu:

mysql -e "SELECT @@GLOBAL.log_error"

Aby odczytać zawartość pliku dziennika błędów w czasie rzeczywistym, uruchom:

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

Uwaga: Hit Control- Cpo zakończeniu

Gdy dziennik ogólny jest włączony, spróbuj:

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

Aby używać mysqlz hasłem dostępu, dodaj -plub -pMYPASSparametr. Aby go zapamiętać, możesz go skonfigurować w swoim ~/.my.cnfnp

[client]
user=root
password=root

Więc zostanie to zapamiętane następnym razem.


1
Lub jeśli potrzebujesz wprowadzić hasło, spróbuj tego: mysql -p -se "POKAŻ ZMIENNE" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

W moim (mam zainstalowaną LAMPę ) / etc / mysql /my.cnf znalazłem następujące, skomentowane linie w sekcji [mysqld]:

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

Musiałem otworzyć ten plik jako superużytkownik z terminalem:

sudo geany /etc/mysql/my.cnf

(Wolę używać Geany zamiast gedit lub VI, to nie ma znaczenia)

Po prostu odkomentowałem je i zapisałem plik, a następnie ponownie uruchomiłem mysql z

sudo service mysql restart

Uruchom kilka zapytań, otwórz powyższy plik (/var/log/mysql/mysql.log) i dziennik tam był :)


chociaż może to działać dla Ciebie, nie dla mnie, nawet główne wyjątki, takie jak „Uszkodzony indeks”, nie są rejestrowane. Tylko problemy z uruchamianiem i zamykaniem.
user3338098

8

Z podręcznika MySQL:

Domyślnie wszystkie pliki dziennika są tworzone w katalogu danych.

Sprawdź /var/lib/mysqlfolder.


1
ale nie mogę otworzyć folderu mysql. Myślę, że ścieżka do pliku dziennika to /var/log/mysql/mysql.log, ale nie mogę go otworzyć, co powinienem zrobić?
Arjun

2
jak mogę stać się rootem, myślę, że jestem właścicielem, instaluję serwer, ustawiam hasło, więc powinienem być właścicielem, nadal jest dla mnie zablokowane, jak mogę go otworzyć?
Arjun,

1
Zmusiłem cd do tego katalogu (musiałem utworzyć użytkownika root, którego później usunąłem), ale kiedy widzę te pliki, pomyślałem, że są zaszyfrowane :) Myślę więc, że to nie jest dobry sposób.
Linia

użyj, sudo -sa następnie spróbuj przejść do folderu mysql.
Rashedul Islam

podręcznik MySQL jest wypełniony wieloma niespójnościami, tak czy inaczej nie ma takiego katalogu w systemie Windows.
user3338098

3

Aby uzupełnić odpowiedź loyoli , warto wspomnieć, że od wersji MySQL 5.1 log_slow_queriesjest przestarzałe i zastąpione przezslow-query-log

Używanie log_slow_queriesspowoduje porażkę service mysql restartlub service mysql startniepowodzenie


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Witamy w stackoverflow. Proszę rozważyć podanie dokładniejszego wyjaśnienia, w jaki sposób kod w Twojej odpowiedzi ma związek z pytaniem PO. Ponadto kod powinien być wcięty o 4 spacje, aby umożliwić prawidłowe formatowanie.
Politank-Z

1

Oprócz powyższych odpowiedzi możesz przekazać parametry wiersza poleceń do procesu mysqld w celu uzyskania opcji logowania zamiast ręcznej edycji pliku conf. Na przykład, aby włączyć rejestrowanie ogólne i określić plik:

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

Potwierdzając inne odpowiedzi powyżej, mysqld --help --verbosepodaje wartości z pliku conf (więc uruchomienie z opcjami wiersza poleceń general-log jest FALSE); natomiast mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logdaje:

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

Użyj nieco bardziej zwartej składni dziennika błędów:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.