2012-06-29 51 views
1

我面臨着記錄LAMP(Debian/PHP/MySQL)網站數據庫活動的問題。在查詢繁重的網站查詢日誌記錄情況

這很複雜,因爲我希望每個查詢都記錄在用戶的啓動環境中,讓我們知道,「誰做了什麼」。我承認不太瞭解MySQL的日誌記錄功能,但我在查找有關特定場景的信息時遇到了問題。

現在我們已經實現了一個mysql_query()更換(我知道,我知道,代碼PDO和準備語句改寫正在路上!)執行在日誌表的查詢,並與INSERT DELAYED其記錄。

問題是,人們可以很容易地預測日誌表達到數百萬行,其中最古老的行是無用的。其他問題是,對於每個需要的查詢,都會執行兩個查詢。部分解決方案一直不記錄SELECT

另一種解決方案是登錄文本文件,花式日誌旋轉和gzipping和東西。但是如何瞭解運行查詢的用戶上下文?

是否有人實現了一個成功的查詢記錄器,該記錄器還記錄了登錄的用戶並且性能感知?

+0

會記錄mysql進程列表爲你工作嗎? – user1190992

回答

2

那麼它是一個權衡。如果你想記錄用戶活動,它將佔用大量的空間,並使用更多的處理。

我個人記錄了PHP文件(包括GET,POST,COOKIE等)的所有HTTP請求,而不是SQL查詢。但是,這仍然導致數百萬行。由於硬盤空間普遍便宜,我也將它們永久保存。當我需要做審計時,可能會很慢,但我不需要經常審計。

寫入文件只會使分析變得更加困難,並且您仍然會在每個請求中處理額外的IO。

如果空間有問題,您可以運行一個cron作業來刪除X時間以前的所有行。

+1

真正的問題是,你在做什麼日誌?可以使用POST和GET數據爲請求的腳本頁面生成查詢,並且如果您跟蹤人們在做什麼,那麼這將是理想的。通過SQL跟蹤用戶非常困難。如果要備份數據庫,請使用二進制日誌文件http://dev.mysql.com/doc/refman/5.0/en/binary-log.html – Waygood