Theo dõi truy vấn MySQL với mysqlsniffer trên Ubuntu
Bạn đã có một máy chủ cơ sở dữ liệu sản xuất và bạn không thể kích hoạt ghi nhật ký truy vấn, vậy làm thế nào để bạn thấy các truy vấn được thực thi đối với cơ sở dữ liệu?
Câu trả lời: sử dụng một trình thám thính mạng được sửa đổi để phân tích các gói MySQL và giải mã chúng. Bạn sẽ phải biên dịch một chút, nhưng nó sẽ có giá trị. Lưu ý rằng điều này thường không hoạt động đối với các kết nối cục bộ, mặc dù bạn được chào đón dùng thử.
Trước tiên, bạn cần cài đặt libpcap-dev, đây là thư viện phát triển cho phép ứng dụng đánh hơi các gói mạng.
sudo apt-get cài đặt libpcap-dev
Bây giờ hãy tạo một thư mục, tải mã nguồn và biên dịch nó
mkdir mysqlsniffer
cd mysqlsniffer
wget hackmysql.com/code/mysqlsniffer.tgz
tar xvfz mysqlsniffer.tgz
gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c pack_handlers.c misc.c
Tại thời điểm này, chúng tôi có một tệp thực thi mới sáng bóng có tên mysqlsniffer trong thư mục nguồn của chúng tôi. Bạn có thể sao chép nó bất cứ nơi nào bạn muốn (một nơi nào đó trong đường dẫn sẽ hữu ích)
Để chạy mysqlsniffer, bạn cần chỉ định giao diện mạng mà MySQL đang nghe. Đối với tôi, đó là eth0.
sudo / đường dẫn / đến / mysqlsniffer eth0
Hàng đống thứ bắt đầu bay bằng cách chúng ta hãy lọc nó ra thêm một chút để chúng ta có thể nhận được các truy vấn và không phải tất cả dữ liệu dư thừa.
$ sudo / đường dẫn / đến / mysqlsniffer -no-mysql-hdrs eth0 | grep COM_QUERY
192.168.73.1.2622> máy chủ: COM_QUERY: CHỌN @@ sql_mode
192.168.73.1.2622> máy chủ: COM_QUERY: SET SESSION sql_mode =
192.168.73.1.2622> máy chủ: COM_QUERY: THIẾT LẬP TÊN utf8
192.168.73.1.1636> máy chủ: COM_QUERY: CHỌN @@ SQL_MODE
192.168.73.1.1636> máy chủ: COM_QUERY: HIỂN THỊ ĐẦY ĐỦ TỪ 'db2842_howto'. 'Wp_users'
À, bây giờ chúng tôi có tất cả các loại thông tin truy vấn, mà không phải khởi động lại MySQL.
Dưới đây là các tùy chọn đầy đủ cho lệnh:
Cách sử dụng: mysqlsniffer [TÙY CHỌN] GIAO DIỆN
LỰA CHỌN:
-cổng N Nghe MySQL trên số cổng N (mặc định 3306)
-verbose Hiển thị thêm thông tin gói
-tcp-ctrl Hiển thị các gói điều khiển TCP (SYN, FIN, RST, ACK)
-net-hdrs Hiển thị giá trị tiêu đề IP và TCP chính
-no-mysql-hdrs Không hiển thị tiêu đề MySQL (ID gói và độ dài)
-trạng thái Hiển thị trạng thái
-Máy chủ v40 MySQL là phiên bản 4.0
-kết xuất tất cả các gói trong hex
-giúp in này
Mã nguồn gốc và nhiều thông tin hơn tại:
http://hackmysql.com/mysqlsniffer
Nếu bạn đang chạy trên một máy chủ phát triển, việc bật ghi nhật ký truy vấn sẽ dễ dàng hơn.