Lacak Kueri MySQL dengan mysqlsniffer di Ubuntu
Anda memiliki server basis data produksi, dan Anda tidak dapat mengaktifkan pencatatan kueri ... jadi bagaimana Anda melihat kueri yang dieksekusi terhadap basis data?
Jawabannya: gunakan sniffer jaringan yang dimodifikasi untuk mengurai paket-paket MySQL dan mendekode mereka. Anda harus melakukan kompilasi sedikit, tetapi itu akan sia-sia. Perhatikan bahwa ini biasanya tidak akan berfungsi untuk koneksi lokal, meskipun Anda dapat mencobanya.
Pertama, Anda perlu menginstal libpcap-dev, yang merupakan pustaka pengembangan yang memungkinkan aplikasi untuk mengendus paket jaringan.
sudo apt-get install libpcap-dev
Sekarang mari kita membuat direktori, unduh kode sumber dan kompilasi
mkdir mysqlsniffer
cd mysqlsniffer
wget hackmysql.com/code/mysqlsniffer.tgz
tar xvfz mysqlsniffer.tgz
gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c package_handlers.c misc.c
Pada titik ini, kami memiliki executable mengkilap baru bernama mysqlsniffer di direktori sumber kami. Anda dapat menyalinnya di mana saja Anda suka (suatu tempat di jalan akan bermanfaat)
Untuk menjalankan mysqlsniffer, Anda perlu menentukan antarmuka jaringan tempat MySQL mendengarkan. Bagi saya, ini eth0.
sudo / path / ke / mysqlsniffer eth0
Banyak barang mulai terbang dengan ... mari kita saring sedikit lebih banyak sehingga kita bisa mendapatkan kueri dan tidak semua kelebihan data.
$ sudo / path / ke / mysqlsniffer -no-mysql-hdrs eth0 | grep COM_QUERY
192.168.73.1.2622> server: COM_QUERY: SELECT @@ sql_mode
192.168.73.1.2622> server: COM_QUERY: SET SESSION sql_mode = ”
192.168.73.1.2622> server: COM_QUERY: SET NAMES utf8
192.168.73.1.1636> server: COM_QUERY: SELECT @@ SQL_MODE
192.168.73.1.1636> server: COM_QUERY: TAMPILKAN KOLOM PENUH DARI 'db2842_howto'. 'Wp_users'
Ah, sekarang kita di sini ... semua jenis informasi permintaan, tanpa harus me-restart MySQL.
Berikut adalah opsi lengkap untuk perintah:
Penggunaan: INTERFACE mysqlsniffer [PILIHAN]
PILIHAN:
-port N Dengarkan MySQL pada nomor port N (default 3306)
-verbose Tampilkan informasi paket tambahan
-tcp-ctrl Tampilkan paket kontrol TCP (SYN, FIN, RST, ACK)
-net-hdrs Tampilkan nilai IP utama dan header TCP
-no-mysql-hdrs Jangan tampilkan tajuk MySQL (paket ID dan panjangnya)
-state Tampilkan state
-v40 MySQL server adalah versi 4.0
-dump Dump semua paket dalam hex
-bantu Cetak ini
Kode sumber asli dan informasi lebih lanjut di:
http://hackmysql.com/mysqlsniffer
Jika Anda menjalankan pada server pengembangan, akan lebih mudah untuk hanya mengaktifkan pencatatan permintaan.