2011-01-12 1 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 

나는 실행 \ lua-scope.c : 241 : stat (C : ... \ profile.lua) failed : No error (0) "간단한 쿼리 ("select * from table1 ")와 같은 오류가보고됩니다.

참고 : lua 스크립트없이 mysql-proxy를 실행하면 오류가 발생하지 않습니다.

mysql-proxy 및 쿼리 추적 기능을 사용하려면 뭔가를 설치해야합니까?

내 환경은 Windows 7 Professional x64입니다.

죄송합니다.

답변

7

오류는 mysql-proxy가 찾을 수없는 파일을 가리키는 --proxy-lua-script로 인해 발생합니다. 이름을 잘못 입력했거나 잘못된 경로를 입력했거나 CWD에서 경로를 입력했지만 거기에 있지 않습니다. 또는 실제로 전체 오류를 좀 더 자세히 살펴보면 mysql-proxy 자체에서 CWD 자체의 파일을 확인하는 것이 가능하지만 기본 모듈 중 하나가 그 모듈을 좋아하지 않을 수 있습니다 (mysql-proxy가 CWD를 어떻게 든 변경하기 때문일 수도 있습니다 ?)

당신의 C의 루트에 profile.lua을 저장해보십시오 :과 같이 옵션의 다른 버전을 구동하고 시도 : 사람들의

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

하나는 아마도

+0

작품입니다! _-- proxy-lua-script = c : \ profile.lua_ ** 고마워요! ** – Maico

2

간단한 쿼리 로그 루아를 작동합니다 스크립트 :

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