Logovanie vykonaných dopytov v MySQL

V jednom z projektov používame v databázovej vrstve MyBatis (niekdajší Apache iBatis). SQL dopyty lietajú hore dole, ale takmer každý z nich je dynamický: použitie PreparedStatementov je temer štandardnom a neraz sa konkrétny dopyt vyskladá „za jazdy” z viacerých častí. Ako sa dá zistiť konkrétny vyskladaný dopyt, ktorý dostala databáza?

MyBatis vás napríklad obveselí logovacou hláškou (teraz vynechávam stotisíc inicializačných vecí)

22:29:30.855 [main] DEBUG java.sql.PreparedStatement - ==>  Executing: UPDATE resource SET `load` = ? WHERE id = ? 
22:29:30.855 [main] DEBUG java.sql.PreparedStatement - ==> Parameters: 56.65(Float), 16(Long)

„Pozorný čitateľ” si ľahko domyslí, že v skutočnosti sa poslal:

UPDATE resource SET `load` = 56.65 WHERE id = 16

Ak musíte ladiť komplikovaný dopyt, rozhodne vás prejde chuť si to vyskladávať ručne niekde v separátnom textovom editore.

Množstvo vývojárov sa utieka k proxy JDBC ovládaču P6Spy, ale na to dnes nie je čas.

Ak však máte MySQL, je to veľmi jednoduché.

Konfigurácia na Windowse editovaním

Toto je príklad situácie, kde konzoláci-textoví editovači vyhrávajú nad klikačmi

Na Windowse stačí vyhrabať konfigurák: pri štandardnej inštalácii sa nachádza v

C:\Program Files\MySQL\MySQL Server 5.5\my.ini

a dodať direktívy

general-log
general_log_file = c:\var\log\mysql\localhost_query.log

Prvá direktíva nemá žiadne parametre: ňou zapneme logovanie dopytov. Druhá direktíva udáva cestu k súboru, do ktorého sa budú pchať logy.

Do verzie 5.1 stačila direktíva log=c:\var\log\mysql\localhost_query.log. Odporúča sa však použiť uvedený novší formát: ten má viacero možností, o ktorých je viac v dokumentácii.

Súbor uložíme, reštartneme službu:

net stop mysql
net start mysql

a obdivujeme zalogované dopyty:

9 Query UPDATE resource_d
    SET `load` = 56.65,     
    WHERE id = 16

Samozrejme, dopytov je veľa a treba sa v nich pohrabať.

Konfigurácia na Windowse klikaním

  1. Ak máte MySQL Workbench, tak sa stačí pripojiť k Server Administration (v štartovacej obrazovke ten najpravejší panel).
  2. V strome nájsť sekciu Configuration a Options File
  3. Na karte Log Files zakliknite general-log a o niečo nižšie vyplňte/nabrowsujte k general_log_file. Aplikujte zmeny, poobdivujte zoznam úprav.
  4. Reštartnite MySQL: tlačidlo Štart, spustiť services.msc, nájsť službu MySQL a reštartnúť.

ilustrácia MySQL Workbench