Belirli bir tabloya veya belirli tabloların listesine erişen tüm SQL deyimlerini günlüğe kaydetmek istiyorum, ancak TÜM tablolar.mysql oturum açma tablo sql deyiminde nasıl etkinleştirilir
Bu, MySQL'de bile mümkün mü?
Belirli bir tabloya veya belirli tabloların listesine erişen tüm SQL deyimlerini günlüğe kaydetmek istiyorum, ancak TÜM tablolar.mysql oturum açma tablo sql deyiminde nasıl etkinleştirilir
Bu, MySQL'de bile mümkün mü?
Hayır - general query log günlüğü sorguları için tek seçenek - ve bir tabloya giriş ve sonra yok sonuçları Percona Toolkit en pt-query-digest kullanarak bu mümkündür
gerektiren silebilir, ancak bu ... geniş sunucusudur .
tüm SELECT
s, UPDATE
s izlemek isterseniz ve JOIN
s dokunmadan table_one
, hile olacaktır veritabanı sunucusu üzerinde böyle bir şey çalışan table_two
ve my_database
üzerine table_three
:
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 |
pt-query-digest --type tcpdump \
--run-time 5s \
--iterations 0 \
--filter '$event->{fingerprint} =~ m/\b(from|join|into)\s+(`?my_database`?\.)`?(table_one|table_two|table_three)`?\b/' \
--output slowlog \
--no-report
Bu, tüm gelen veritabanı trafiğini tcpdump
kullanarak izler ve pt-query-digest
aracına bağlar ve ardından bu tablolardaki sorguları filtrelemeyi dener. Çıktı MySQL'in yavaş sorgulama günlüğü gibi bir şey görünecek.
Gereksinimlerinize uyacak şekilde --filter
argümanındaki normal ifadeyi ayarlamanız gerekecektir. Çoğu normal ifadede olduğu gibi, çok sayıda kenar durumu olacak. Bir kaçını kapsamaya çalıştım ama normal ifadeler söz konusu olduğunda hiçbir şekilde uzman değilim.
Bu mükemmel bir çözüm değildir, ancak genel sorgu günlüğünü kullanmanın yasak olduğu belirli durumlarda bana hile yaptı.