Jak wyświetlić ostatnie zapytania wykonane w MySQL?

Czy Jest jakiś sposób na pokazanie ostatnich zapytań wykonanych na wszystkich serwerach?

 404
Author: Good-bye, 2009-03-16

10 answers

Dla osób obdarzonych MySQL > = 5.1.12, możesz kontrolować tę opcję globalnie w czasie wykonywania:

  1. Execute SET GLOBAL log_output = 'TABLE';
  2. wykonaj SET GLOBAL general_log = 'ON';
  3. spójrz na tabelę mysql.general_log

Jeśli wolisz wypisać plik zamiast tabeli:

  1. SET GLOBAL log_output = "FILE"; domyślne .
  2. SET GLOBAL general_log_file = "/path/to/your/logfile.log";
  3. SET GLOBAL general_log = 'ON';

Wolę tę metodę niż edycję .pliki cnf ponieważ:

  1. nie edytujesz pliku my.cnf i możliwość trwałego włączenia logowania
  2. nie łowisz po systemie plików szukając dziennika zapytań - lub co gorsza, rozpraszasz się potrzebą idealnego miejsca docelowego. /var/log /var/data/log /opt /home/mysql_savior/var
  3. ponowne uruchomienie serwera pozostawia cię tam, gdzie rozpocząłeś (dziennik jest domyślnie nadal wyłączony)
  4. nie musisz ponownie uruchamiać serwera i przerywać żadnych bieżących połączeń z nim.

Aby uzyskać więcej informacji, zobacz MySQL 5.1 Reference Manual - Serwerowe Zmienne Systemowe - general_log

 677
Author: FlipMcF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 22:20:41

Możesz włączyć ogólny dziennik zapytań dla tego rodzaju diagnostyki. Generalnie nie rejestrujesz wszystkich zapytań SELECT na serwerze produkcyjnym, jest to zabójca wydajności.

Edytuj konfigurację MySQL, np. /etc / mysql / my.cnf-Wyszukaj lub dodaj taką linię

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

Uruchom ponownie mysql, aby odebrać tę zmianę, teraz możesz

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

Hej presto, możesz obserwować zapytania, gdy przychodzą.

 39
Author: Paul Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-17 07:33:39

Możesz zrobić płynną rzecz do monitorowania dzienników zapytań mysql.

Otwórz plik konfiguracyjny mysql my.cnf

sudo nano /etc/mysql/my.cnf

Przeszukaj następujące linie pod nagłówkiem [mysqld] i odkomentuj te linie, aby włączyć log

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

Uruchom ponownie serwer mysql dla zmian

sudo service mysql start

Monitoruj dziennik serwera mysql za pomocą następującego polecenia w terminalu

tail -f /var/log/mysql/mysql.log
 14
Author: Rokibul Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 22:22:11
SELECT * FROM  mysql.general_log  WHERE command_type ='Query' LIMIT total;
 11
Author: zloctb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 17:49:01

1) Jeśli ogólne logowanie mysql jest włączone, to możemy sprawdzić zapytania w pliku dziennika lub tabeli na podstawie tego, co wspomnieliśmy w konfiguracji. Sprawdź, co jest włączone za pomocą następującego polecenia

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

Jeśli potrzebujemy historii zapytań w tabeli to

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

Spójrz na tabelę mysql.general_log

Jeśli preferujesz wyjście do pliku:

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) możemy również sprawdzić zapytania w .plik mysql_history kot ~/mysql_history

 6
Author: minhas23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 07:02:31

Jeśli mysql binlog jest włączony możesz sprawdzić polecenia uruchamiane przez użytkownika wykonując wykonując polecenie w konsoli Linuksa, przeglądając katalog mysql binlog

mysqlbinlog binlog.000001 >  /tmp/statements.sql

Enabling

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

Lub ogólny log będzie miał wpływ na wydajność mysql

 4
Author: Avinash Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 12:40:08

Może mógłbyś to sprawdzić, patrząc na query log .

 3
Author: cherouvim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-16 12:39:03

Możesz spojrzeć na następujące rzeczy w Linuksie

cd /root

ls -al

vi .mysql_history może pomóc

 2
Author: Avinash Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-17 10:22:58

Po przeczytaniu odpowiedzi Pawła, zacząłem kopać po więcej informacji na temat https://dev.mysql.com/doc/refman/5.7/en/query-log.html

Znalazłem naprawdę przydatny Kod przez osobę. Oto podsumowanie kontekstu.

(Uwaga: poniższy kod nie jest mój)

Ten skrypt jest przykładem utrzymania tabeli w czystości, co pomoże Ci zmniejszyć rozmiar tabeli. Jak po dniu, będzie około 180K zapytań dziennika. (w pliku byłoby to 30MB na dzień)

Musisz dodać dodatkową kolumnę (event_unix), a następnie możesz użyć tego skryptu, aby utrzymać dziennik w czystości... zaktualizuje znacznik czasu do znacznika czasu Uniksa, usunie dzienniki starsze niż 1 dzień, a następnie zaktualizuje event_time do znacznika czasu z event_unix... brzmi trochę myląco, ale działa świetnie.

Polecenia dla nowej kolumny:

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';

Skrypt czyszczenia:

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';

Podziękowania należą się Sebastianowi Kaiserowi (pierwowzorowi kod).

Mam nadzieję, że komuś się przyda, tak jak ja.
 2
Author: Dev Aggarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 17:44:35

Jeśli nie masz ochoty na zmianę konfiguracji MySQL możesz użyć SQL profiler jak "Neor Profile SQL" http://www.profilesql.com .

 1
Author: Bitclaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 00:13:21