Odpowiedzi:
Dla osób pobłogosławionych MySQL> = 5.1.12 możesz kontrolować tę opcję globalnie w czasie wykonywania:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
Jeśli wolisz wyprowadzać dane do pliku zamiast tabeli:
SET GLOBAL log_output = "FILE";
domyślne .SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
Wolę tę metodę od edycji plików .cnf, ponieważ:
my.cnf
pliku i potencjalnie na stałe włączasz rejestrowanie/var/log /var/data/log
/opt /home/mysql_savior/var
Aby uzyskać więcej informacji, zobacz Podręcznik referencyjny MySQL 5.1 - Zmienne systemowe serwera - rejestr_ogólny
Możesz włączyć ogólny dziennik zapytań dla tego rodzaju diagnostyki. Ogólnie jednak nie rejestrujesz wszystkich zapytań SELECT na serwerze produkcyjnym, jest to zabójca wydajności.
Edytuj swoją konfigurację MySQL, np. /Etc/mysql/my.cnf - wyszukaj lub dodaj taką linię
[mysqld]
log = /var/log/mysql/mysql.log
Zrestartuj mysql, aby zmienić tę zmianę, teraz możesz
tail -f /var/log/mysql/mysql.log
Hej presto, możesz oglądać zapytania, gdy się pojawiają.
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
Wyszukaj następujące wiersze pod [mysqld]
nagłówkiem i odkomentuj te wiersze, aby włączyć dziennik
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Uruchom ponownie serwer mysql, aby odzwierciedlić zmiany
sudo service mysql start
Monitoruj dziennik serwera mysql za pomocą następującego polecenia w terminalu
tail -f /var/log/mysql/mysql.log
1) Jeśli włączone jest ogólne rejestrowanie MySQL, możemy sprawdzić zapytania w pliku dziennika lub tabeli na podstawie tego, o czym 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 wolisz wyprowadzać dane 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 pliku .mysql_history cat ~ / .mysql_history
Być może możesz to sprawdzić, przeglądając dziennik zapytań .
Jeśli mysql binlog jest włączony, możesz sprawdzić polecenia uruchamiane przez użytkownika, wykonując następujące polecenie w konsoli Linux, przechodząc do katalogu binlog mysql
mysqlbinlog binlog.000001 > /tmp/statements.sql
włączanie
[mysqld]
log = /var/log/mysql/mysql.log
lub ogólny dziennik będzie miał wpływ na wydajność mysql
Jeśli nie masz ochoty zmieniać konfiguracji MySQL, możesz użyć narzędzia do profilowania SQL, takiego jak „Neor Profile SQL” http://www.profilesql.com .
Po przeczytaniu odpowiedzi Paula zacząłem szukać więcej informacji na 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 utrzymywania tabeli w czystości, co pomoże ci zmniejszyć jej rozmiar. Podobnie jak po dniu, będzie około 180 000 zapytań o log. (w pliku byłoby to 30 MB dziennie)
Musisz dodać dodatkową kolumnę (event_unix), a następnie możesz użyć tego skryptu, aby utrzymać dziennik w czystości ... zaktualizuje on znacznik czasu w uniksowy znacznik czasu, usunie dzienniki starsze niż 1 dzień, a następnie zaktualizuje czas zdarzenia w znacznik 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 (autorowi kodu).
Mam nadzieję, że ktoś uzna to za przydatne tak jak ja.
W Linuksie możesz spojrzeć na następujące elementy
cd /root
ls -al
vi .mysql_history
To może pomóc