MySQL On Air。 SQLクエリを監視する

画像

これまたはそのCMSの仕組みを理解するには、さまざまなツールを使用して作業を促進する必要があります。

最も興味深いトピックは、データのデータベース(s | s)の操作です。 当然、クエリとクエリ結果を調べるには、普遍的なものを使用する必要があります。 よく知られているエンジンと自己記述システムの両方で安定して動作するもの。

コンテンツ管理システムがあり、新しいユーザーの追加またはパスワードの変更の実装がどのように実装されているかを確認する必要があるとします。



データベースでの作業の監視を可能にするツールのほとんどは、有償です[ 1、2 ]。 もっと簡単で便利なものが欲しかったので、mysql-proxyを選びました。 ユーティリティの機能は必要以上に広いですが、主なものだけを説明します。 WindowsとUnixシステムの両方で機能します。





ここからダウンロードできます: dev.mysql.com/downloads/mysql-proxy

配布の選択を決定するために最初に必要なこと。 現時点では、最新バージョンは「MySQL Proxy 0.8.3 alpha」であり、OSとしてWindows 7を使用しているため、すべてのテストが実行されます。



[ダウンロード]ボタンをクリックすると、承認または登録するように求められますが、下には不要なアクションのないダウンロードリンクがあります。 (UbuntuおよびDebianリポジトリには既製のパッケージがあるため、sudo apt-get install mysql-proxy)

画像



7.9 MBのサイズの配布キットには、メインモジュールをサポートするLuaが含まれています。



アーカイブをダウンロードした後、便利なディレクトリに解凍する必要があります。C:\ mysql-proxyを例に取ります

アプリケーションを実行するには、パラメーターを決定する必要があります。



このコンテキストでは、インストールしたものに大きく依存します。 LAMPとして、Winginxを使用しています。この束については、 winginx.ruをご覧ください。

デフォルトでは、MySQLはポート3306で実行されますが、それには触れません。

phpをデータベースに接続するためのポートを変更する必要があります。 これを行うには、php.iniを修正します

文字列「mysql.default_port」を見つけて、ポート(デフォルトでは4040)を設定します。 より普遍的な作業を行うには、「mysqli.default_port」を4040に変更します



画像



準備の部分は終わりました。ビジネスに取り掛かりましょう。



オプション1.リクエストの監視。


単純な監視を行うには、Luaスクリプトを使用する必要があります。 前にも言ったように、Luaはバンドルされているので、新しいものをインストールする必要はありません。

C:\ mysql-proxy \ディレクトリに次の内容の簡単なview.luaスクリプトを作成します。



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







これで結果を確認できます。

便宜上、C:\ mysql-proxyディレクトリに次の内容を含むview.batファイルを作成します。



 C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script=C:\mysql-proxy\view.lua --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306
      
      







--proxy-backend-addresses-リクエストをプロキシするMySQLサーバーのアドレス。



Webサーバーを起動し、データベースへのクエリを実行すると、次のように表示されます。

画像



リクエストが表示されます。



オプション2.リクエストの監視とファイルへの書き込み。


ファイルにリクエストを書き込むには、Luaの標準機能を使用します。

C:\ mysql-proxy \ディレクトリに内容を含むview-write.luaファイルを作成します。



 function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write(string.sub(packet, 2) .. "\n") file:close() print(string.sub(packet, 2)) end end
      
      





batファイルは「view-write.bat」です

 C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-write.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306
      
      







クエリ実行後の結果(アドレス「C:\ mysql-proxy \ sql-log.txt」で)

画像



クエリ自体を表示することに加えて、これらのクエリの結果を表示する必要がある場合があります。



オプション3.クエリと結果


同じスキームを使用して、スクリプト「view-result.lua」を作成します。

 function read_query( packet ) if packet:byte() == proxy.COM_QUERY then print("Query: " .. string.sub(packet, 2)) local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Query: " .. string.sub(packet, 2) .. "\n") file:close() proxy.queries:append(2, string.char(proxy.COM_QUERY) .. string.sub(packet, 2), {resultset_is_needed = true} ) proxy.queries:append(1, packet, {resultset_is_needed = true}) return proxy.PROXY_SEND_QUERY end end function read_query_result(inj) if inj.id == 1 then for row in inj.resultset.rows do local i = 1 local fields = {} while row[i] do if row[i] == row then break end local file = io.open("C:\\mysql-proxy\\sql-log.txt", "a") file:write("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i] .. "\n") file:close() print("Response field: " .. inj.resultset.fields[i].name .. " => " .. row[i]) i = i + 1 end end return proxy.PROXY_IGNORE_RESULT end end
      
      







そして、view-result.bat

 C:\mysql-proxy\bin\mysql-proxy.exe --proxy-lua-script="C:\mysql-proxy\view-result.lua" --log-file="C:\mysql-proxy\mysql-proxy-log.txt" --proxy-backend-addresses=localhost:3306
      
      







その結果、リクエストとレスポンスの完全なログを読み取り可能な形式で取得します

画像







All Articles