2014-07-07 65 views
0

我使用的客戶端系統是(192.168.YY.YY),我已經在MySQL的代理提到的後臺地址爲(192.168.XX.XX)。我使用以下LuaScript登錄查詢using mysql-proxy存儲記錄的查詢到mysql客戶端

function read_query(packet) 
    b={} 
    j=1 
     if string.byte(packet) == proxy.COM_QUERY then 
     local query = string.sub(packet, 2) 
     table.insert(b,query) 
     print(b[j]) 
     end 
end 

而且上面的腳本記錄來自後端服務器的 MySQL的(192.168.XX.XX)以下結果:

select @@version_comment limit 1 
SELECT DATABASE() 
select @@version_comment limit 1 
select USER() 
SELECT DATABASE() 
show tables 

我需要將這些記錄的查詢存儲到客戶端系統的數據庫中(192.168.YY.YY)。如何將記錄的查詢存儲到客戶端系統的數據庫中。有人請幫我解決這個問題issue.Thanks !!

+1

由於b和j在每次查詢時被初始化爲空/ 1,所以打印工作正常,但b總是隻有一個條目。另外,客戶端請求執行腳本的mysql-proxy,然後轉發到後端mysql服務器,而你的帖子則表明反過來,所以你不清楚你想要做什麼。最後,在本地系統(運行mysql代理的機器上的那個系統上的那個)上,你試圖登錄哪種類型的數據庫以及爲什麼不使用簡單文件甚至是SQLite數據庫,最重要的是,你嘗試了什麼? – Schollii

+0

@Schollii我需要在客戶端系統(192.168.YY.YY)上的數據庫來登錄查詢。我比數據庫更喜歡數據庫而不是文件,因爲它很容易從數據庫檢索數據作爲查詢,還有幾個用戶訪問同一數據庫在這種情況下同一時間文件不起作用。 – robin

回答

1

我不知道如何從mysql代理腳本打開數據庫連接,但是您可以非常輕鬆地創建一個單獨的Lua腳本,該腳本使用luasocket監聽udp端口上的日誌消息,以便將其寫入文件,代理腳本寫入該端口,則不存在導致競爭條件進行日誌文件寫入的同時查詢的風險。相同的Lua腳本可以在不同的端口上偵聽獲取日誌文件的命令。或者通過http訪問文件。你甚至可以通過http post消息添加日誌消息,然後甚至不需要單獨的Lua腳本來進行日誌文件管理。我沒有看到需要分貝。

要寫入客戶端機器上的文件,您的腳本將使用Lua的io.open函數和file:write方法。閱讀這些。正如我在答覆開始時所說的那樣,並且我認爲您在其中一條評論中暗示,如果多個查詢同時發生,您可能必須對日誌進行協調,但您應該先嚐試一下簡單的方法,但這可能沒有問題。

+0

我只需要一個數據庫,寫入文件並沒有多大幫助。如果我們將查詢登錄到文件中,可以將文件保留在客戶端系統(192.168.YY.YY),而不是保留在後端服務器?? – robin

+0

@robin將文件存儲在客戶端系統上實際上是最簡單的。 – Schollii

+0

如何將文件存儲在客戶端系統上?可以使用一下來解釋一下嗎? – robin