Code:General log: Różnice pomiędzy wersjami

Z Motława
Linia 14: Linia 14:
  
 
Jeśli w odpowiedzi otrzymujemy:
 
Jeśli w odpowiedzi otrzymujemy:
<code>
+
<pre>
 
+---------------+-------+
 
+---------------+-------+
 
| log_output    | FILE  |
 
| log_output    | FILE  |
 
+---------------+-------+
 
+---------------+-------+
</code>
+
</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
Linia 24: Linia 24:
 
Rejestrowanie logu jest włączane zmienną '''general_log''':
 
Rejestrowanie logu jest włączane zmienną '''general_log''':
  
<code>
+
<pre>
 
mysql> show variables like "general_log";
 
mysql> show variables like "general_log";
 
+---------------+-------+
 
+---------------+-------+
Linia 44: Linia 44:
 
1 row in set (0.01 sec)
 
1 row in set (0.01 sec)
  
</code>
+
</pre>
  
 
Po uaktywnieniu logu trzeba określić numer połączenia, które chcemy sledzić, tak by zapytania innych użytkowników nie zaciemniały obrazu.
 
Po uaktywnieniu logu trzeba określić numer połączenia, które chcemy sledzić, tak by zapytania innych użytkowników nie zaciemniały obrazu.
<code>
+
<pre>
 
mysql> show processlist;
 
mysql> show processlist;
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
Linia 56: Linia 56:
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
 
1 row in set (0.00 sec)
 
1 row in set (0.00 sec)
</code>
+
</pre>
  
 
a następnie odpytać tabelę o np ostatnie 5 zapytań:
 
a następnie odpytać tabelę o np ostatnie 5 zapytań:
  
<code>
+
<pre>
 
mysql> select event_time,left(argument,100) as query from mysql.general_log where thread_id=548 order by event_time desc limit 5;
 
mysql> select event_time,left(argument,100) as query from mysql.general_log where thread_id=548 order by event_time desc limit 5;
 
+---------------------+------------------------------------------------------------------------------------------------------+
 
+---------------------+------------------------------------------------------------------------------------------------------+
Linia 75: Linia 75:
 
5 rows in set (0.60 sec)
 
5 rows in set (0.60 sec)
  
</code>
+
</pre>
  
 
lub np. szczegóły ostatniego czwartego od końca
 
lub np. szczegóły ostatniego czwartego od końca
  
<code>
+
<pre>
 
mysql> select * from mysql.general_log where thread_id=548 order by event_time desc limit 3,1\G
 
mysql> select * from mysql.general_log where thread_id=548 order by event_time desc limit 3,1\G
 
*************************** 1. row ***************************
 
*************************** 1. row ***************************
Linia 90: Linia 90:
 
1 row in set (0.71 sec)
 
1 row in set (0.71 sec)
  
</code>
+
</pre>

Wersja z 13:34, 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)