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

Z Motława
(Utworzył nową stronę „Często przydatna jest możliwość śledzenia wykonywanych przez aplikację zapytań. Można do tego wykorzystać tabelę '''mysql.general_log'''. Przede wszystkim na…”)
 
m
 
(Nie pokazano 4 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 4: Linia 4:
 
Przede wszystkim należy sprawdzić, czy general_log jest przechowywany w tabeli czy w pliku:
 
Przede wszystkim należy sprawdzić, czy general_log jest przechowywany w tabeli czy w pliku:
  
<code>
+
<pre>
 
mysql> show variables like "log_output";
 
mysql> show variables like "log_output";
 
+---------------+-------+
 
+---------------+-------+
Linia 11: Linia 11:
 
| log_output    | TABLE |
 
| log_output    | TABLE |
 
+---------------+-------+
 
+---------------+-------+
</code>
+
</pre>
  
 
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'''
  
 
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 45:
 
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 57:
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
 
+-----+---------+------------------+------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
 
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 76:
 
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 91:
 
1 row in set (0.71 sec)
 
1 row in set (0.71 sec)
  
</code>
+
</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>
 +
 
 +
[[Kategoria: MotlawaTech]]

Aktualna wersja na dzień 13:39, 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)