5

mysql-proxy をダウンロードして、このスクリプト lua を作成しました (Mysql docs にあります):

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」など) を実行すると、「failed: .\lua-scope.c:241: stat(C:...\profile.lua) failed: No error」というエラーが報告されます。 (0)」

注: lua スクリプトを使用せずに mysql-proxy を実行しても、エラーは発生しません。

mysql-proxy とクエリ トレースを機能させるには、何かをインストールする必要がありますか?

私の環境は Windows 7 Professional x64 です。

悪い英語でごめんなさい。

4

2 に答える 2

7

あなたが得ているエラーは、 --proxy-lua-script が mysql-proxy が見つけられないファイルを指していることが原因です。名前を間違って入力したか、パスを間違って入力したか、CWD で期待していたのにそこにないかのいずれかです。または実際には、エラー全体をもう少し詳しく見てみると、mysql-proxy 自体が CWD 自体のファイルを正常に認識している可能性があるようですが、基になるモジュールの 1 つがそれを気に入らない可能性があります (おそらく、mysql-proxy が何らかの方法で CWD を変更するため)。 ?)

profile.lua を C: ドライブのルートに保存し、次のように別のバージョンのオプションを試してみてください。

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

それらの1つはおそらく機能するでしょう

于 2011-03-07T20:28:08.477 に答える
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
于 2011-04-01T09:34:26.487 に答える