2011-01-12 25 views
5

我剛剛下載的MySQL的代理,並創造了這個腳本盧阿(在MySQL文檔中找到):如何使用MySql-Proxy來跟蹤MySql查詢?

function read_query(packet) 
    if string.byte(packet) == proxy.COM_QUERY then 
    print("QUERY: " .. string.sub(packet, 2)) 
    end 
end 

這是我使用的命令行:

mysql-proxy -P localhost:1234 -b localhost:3306 --proxy-lua-script=profile.lua --plugins=proxy 

當我運行簡單查詢(如「select * from table1」),報告此錯誤:「失敗:。\ lua-scope.c:241:stat(C:... \ profile.lua)失敗:無錯誤(0)」

注:如果我運行沒有lua腳本的mysql-proxy,則不會發生錯誤。

我需要安裝一些東西才能使mysql-proxy和查詢跟蹤工作?

我的環境是Windows 7 Professional x64。

對不起,英語不好。

回答

7

您遇到的錯誤是由--proxy-lua-script指向mysql-proxy無法找到的文件引起的。要麼你輸入了錯誤的名稱,你輸入了錯誤的路徑,或者你在CWD期待它,它不在那裏。或者實際上,仔細查看整個錯誤,似乎可能的是,mysql-proxy本身在CWD中看到該文件本身沒問題,但其中一個底層模塊不喜歡它(可能是因爲mysql-proxy以某種方式更改了CWD ?)

嘗試保存profile.lua到C的根:驅動器,並嘗試不同版本的選項,如下所示:

--proxy-lua-script=c:\profile.lua 
--proxy-lua-script=\profile.lua 
--proxy-lua-script=/profile.lua 

其中一人可能會工作

+0

它的作品! _-- proxy-lua-script = c:\ profile.lua_ **謝謝!** – Maico 2011-03-08 16:51:59

2

簡單的查詢日誌LUA腳本:

require("mysql.tokenizer") 

local fh = io.open("/var/log/mysql/proxy.query.log", "a+") 
fh:setvbuf('line',4096) 
local the_query = ""; 
local seqno = 0; 

function read_query(packet) 
    if string.byte(packet) == proxy.COM_QUERY then 
     seqno = seqno + 1 
     the_query = (string.gsub(string.gsub(string.sub(packet, 2), "%s%s*", ' '), "^%s*(.-)%s*$", "%1")) 
     fh:write(string.format("%s %09d %09d : %s (%s) -- %s\n", 
      os.date('%Y-%m-%d %H:%M:%S'), 
      proxy.connection.server.thread_id, 
      seqno, 
      proxy.connection.client.username, 
      proxy.connection.client.default_db, 
      the_query)) 
     fh:flush() 
     return proxy.PROXY_SEND_QUERY 
    else 
     query = "" 
    end 
end