如果我有用戶,主機,命令類型,線程ID和參數(來自mysql通用日誌的數據),我該如何確定命令的來源,因爲它來自哪個腳本或應用程序?只知道這些信息並沒有給我多大的提示。我試圖找出它來自哪裏。有沒有辦法跟蹤mysql連接請求?
我檢查了我的php和apache日誌,但無法確定可能發出的命令。我需要某種直接的追蹤。
如果我有用戶,主機,命令類型,線程ID和參數(來自mysql通用日誌的數據),我該如何確定命令的來源,因爲它來自哪個腳本或應用程序?只知道這些信息並沒有給我多大的提示。我試圖找出它來自哪裏。有沒有辦法跟蹤mysql連接請求?
我檢查了我的php和apache日誌,但無法確定可能發出的命令。我需要某種直接的追蹤。
不,沒有辦法知道MySQL服務器端連接來自哪個應用程序。 MySQL服務器可以記錄的唯一標識信息是用戶和連接源自的主機。
有些人設計自己的應用程序添加註釋的SQL查詢和註釋添加到查詢日誌:
SELECT ... FROM mytable /* ShoppingCart.java, method cancelOrder() */
但如果你的應用程序不這樣做,信息當然不是可用。
此外,mysql
客戶端在提交查詢前剝離註釋,因此如果您有SQL腳本或用戶進行即席查詢,則此方法無效。
也許試試php函數名爲debug_backtrace()
? 它返回一個數組,其中包含具有文件名稱行和函數名稱的回溯函數調用。
像這樣:
$trace = debug_backtrace();
var_dump($trace);
我只能回答這是因爲你在你的問題有PHP代碼,所以這是可以用PHP做最我猜。
但我會把這個放在哪裏?在我的服務器上的任何ol php文件?我只能懷疑這是php發佈的命令。 – 2014-09-20 19:51:25
該死的。我遇到了這個問題,我一直在獲取「連接」命令,每秒約3個用戶爲root。 root是我的網站用來連接數據庫的用戶 - 但我不確定它是否真的是我網站上發佈命令的腳本。我想唯一的方法來確定它是否是我的網站上的東西將刪除整個網站,檢查,並重新上傳。我想盡量避免這樣做。 – 2014-09-20 19:57:22
@ChrisScott如果你有一個用於連接的包含,你可以創建一個新用戶,授予這個用戶所需的權限並更改這個包含的憑證。如果它被傳播,那麼一個搜索和替換文件的編輯器會很方便。 – VMai 2014-09-20 20:34:57
我已經發現了它的起源。從字面上看,任何時候我服務器上的任何東西都連接到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