2014-09-20 48 views
0

如果我有用戶,主機,命令類型,線程ID和參數(來自mysql通用日誌的數據),我該如何確定命令的來源,因爲它來自哪個腳本或應用程序?只知道這些信息並沒有給我多大的提示。我試圖找出它來自哪裏。有沒有辦法跟蹤mysql連接請求?

我檢查了我的php和apache日誌,但無法確定可能發出的命令。我需要某種直接的追蹤。

回答

3

不,沒有辦法知道MySQL服務器端連接來自哪個應用程序。 MySQL服務器可以記錄的唯一標識信息是用戶和連接源自的主機。

有些人設計自己的應用程序添加註釋的SQL查詢和註釋添加到查詢日誌:

SELECT ... FROM mytable /* ShoppingCart.java, method cancelOrder() */ 

但如果你的應用程序不這樣做,信息當然不是可用。

此外,mysql客戶端在提交查詢前剝離註釋,因此如果您有SQL腳本或用戶進行即席查詢,則此方法無效。

+0

該死的。我遇到了這個問題,我一直在獲取「連接」命令,每秒約3個用戶爲root。 root是我的網站用來連接數據庫的用戶 - 但我不確定它是否真的是我網站上發佈命令的腳本。我想唯一的方法來確定它是否是我的網站上的東西將刪除整個網站,檢查,並重新上傳。我想盡量避免這樣做。 – 2014-09-20 19:57:22

+0

@ChrisScott如果你有一個用於連接的包含,你可以創建一個新用戶,授予這個用戶所需的權限並更改這個包含的憑證。如果它被傳播,那麼一個搜索和替換文件的編輯器會很方便。 – VMai 2014-09-20 20:34:57

+0

我已經發現了它的起源。從字面上看,任何時候我服務器上的任何東西都連接到mysql,當mysql仍在運行時,用戶使用的命令將不斷髮出這些「連接」命令。這是bizzare:http://community.bitnami.com/t/help-keep-getting-connection-commands-to-mysql-slows-down-my-server/26037 – 2014-09-20 20:54:41

0

也許試試php函數名爲debug_backtrace()? 它返回一個數組,其中包含具有文件名稱行和函數名稱的回溯函數調用。

像這樣:

$trace = debug_backtrace(); 
var_dump($trace); 

我只能回答這是因爲你在你的問題有PHP代碼,所以這是可以用PHP做最我猜。

+0

但我會把這個放在哪裏?在我的服務器上的任何ol php文件?我只能懷疑這是php發佈的命令。 – 2014-09-20 19:51:25

相關問題