Code:General log: Różnice pomiędzy wersjami
Z Motława
Linia 20: | Linia 20: | ||
</pre> | </pre> | ||
to konieczna jest ustawienie parametru w ''/etc/my.cnf'': | to konieczna jest ustawienie parametru w ''/etc/my.cnf'': | ||
− | log-output=TABLE | + | |
+ | '''log-output=TABLE''' | ||
Rejestrowanie logu jest włączane zmienną '''general_log''': | Rejestrowanie logu jest włączane zmienną '''general_log''': | ||
Linia 90: | Linia 91: | ||
1 row in set (0.71 sec) | 1 row in set (0.71 sec) | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == WAŻNE == | ||
+ | |||
+ | Po zakończonym śledzeniu warto wyłączyć general_log, żeby nie spowodować przepełnienia dysku: | ||
+ | |||
+ | <pre> | ||
+ | mysql> set global general_log=OFF; | ||
+ | Query OK, 0 rows affected (0.00 sec) | ||
+ | |||
+ | mysql> show variables like "general_log"; | ||
+ | +---------------+-------+ | ||
+ | | Variable_name | Value | | ||
+ | +---------------+-------+ | ||
+ | | general_log | OFF | | ||
+ | +---------------+-------+ | ||
+ | 1 row in set (0.01 sec) | ||
</pre> | </pre> |
Wersja z 13:38, 18 mar 2010
Często przydatna jest możliwość śledzenia wykonywanych przez aplikację zapytań. Można do tego wykorzystać tabelę mysql.general_log.
Przede wszystkim należy sprawdzić, czy general_log jest przechowywany w tabeli czy w pliku:
mysql> show variables like "log_output"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | +---------------+-------+
Jeśli w odpowiedzi otrzymujemy:
+---------------+-------+ | log_output | FILE | +---------------+-------+
to konieczna jest ustawienie parametru w /etc/my.cnf:
log-output=TABLE
Rejestrowanie logu jest włączane zmienną general_log:
mysql> show variables like "general_log"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+ 1 row in set (0.01 sec) mysql> set global general_log=ON; Query OK, 0 rows affected (0.00 sec) mysql> show variables like "general_log"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | ON | +---------------+-------+ 1 row in set (0.01 sec)
Po uaktywnieniu logu trzeba określić numer połączenia, które chcemy sledzić, tak by zapytania innych użytkowników nie zaciemniały obrazu.
mysql> show processlist; +-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+ | 541 | root | localhost | ht | Query | 0 | NULL | show processlist | | 548 | int | 192.168.0.3:4331 | ht | Query | 4 | Writing to net | SELECT SUBSTRING(PL.Symbol, 1, LENGTH(PL.Symbol) - 1 - LENGTH(SUBSTRING_INDEX(PL.Symbol, '|', -1))) | +-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
a następnie odpytać tabelę o np ostatnie 5 zapytań:
mysql> select event_time,left(argument,100) as query from mysql.general_log where thread_id=548 order by event_time desc limit 5; +---------------------+------------------------------------------------------------------------------------------------------+ | event_time | query | +---------------------+------------------------------------------------------------------------------------------------------+ | 2010-03-18 14:06:32 | update `profile` set `valuex` = '>/object GLLayout_FGL: TGLLayout\r\n Stored_IdStored = \'FDBCSp | | 2010-03-18 14:06:32 | update `profile` set `valuex` = '>/<?xml version=\"1.0\" standalone=\"yes\"?> <DATAPACKET Versio | | 2010-03-18 14:06:32 | COMMIT | | 2010-03-18 14:06:32 | UPDATE profile p, osoby o SET p.OwnerGUID=o.GUID WHERE p.useridn = o.idnuser AND p.ownerGUID='' AND | | 2010-03-18 14:06:32 | | +---------------------+------------------------------------------------------------------------------------------------------+ 5 rows in set (0.60 sec)
lub np. szczegóły ostatniego czwartego od końca
mysql> select * from mysql.general_log where thread_id=548 order by event_time desc limit 3,1\G *************************** 1. row *************************** event_time: 2010-03-18 14:06:32 user_host: int[int] @ [192.168.0.3] thread_id: 548 server_id: 1 command_type: Query argument: UPDATE profile p, osoby o SET p.OwnerGUID=o.GUID WHERE p.useridn = o.idnuser AND p.ownerGUID='' AND o.idnuser<>'' 1 row in set (0.71 sec)
WAŻNE
Po zakończonym śledzeniu warto wyłączyć general_log, żeby nie spowodować przepełnienia dysku:
mysql> set global general_log=OFF; Query OK, 0 rows affected (0.00 sec) mysql> show variables like "general_log"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+ 1 row in set (0.01 sec)