MySQL Enterprise Plugin for Connector/J を使用すると、Connector/J JDBC ドライバを使用するどのアプリケーションでも、Query Analyzer の情報を自動的に直接 MySQL Enterprise Service Manager へ提供できるようになります。既存の Connector/J ドライバと組み合わせてプラグインライブラリをインストールすると、情報が MySQL Enterprise Service Manager に送信されて解析されます。 この機能を有効にするために、使用するアプリケーションを修正したり変更したりする必要はありません。
表3.2 Query Analyzer Connector/J の概要
| Feature | C/Java |
|---|---|
| Uses Aggregator | No |
| Uses Proxy | No |
| Supports EXPLAIN | Yes |
必要条件
MySQL Connector/J version 5.1.12 以降
JDK-1.5.0 以降
MySQL Enterprise Service Manager version 2.2 以降
使用されている MySQL インスタンスは、MySQL Enterprise 監視エージェントによって監視される必要があります。mysql.inventory テーブルは、監視対象サーバーの UUID を取得するためにアクセスできる必要があります。
解析対象アプリケーションの CLASSPATH 内の Apache Commons Logging。Commons Logging が使用されていない場合、アプリケーションの CLASSPATH 内に展開する必要のあるバージョンがこの製品に含まれています。
インストール
使用中の MySQL Connector/J のバージョンから見えるアプリケーションの CLASSPATH 内に、jar ファイル lib/cj-query-analyzer-plugin-[version].jar を配置します。 この場所は、可能であれば MySQL Connector/J の jar ファイルと同じ場所か、MySQL Connector/J の jar ファイルの場所の親クラスローダー内にしてください。
解析対象アプリケーションの CLASSPATH に Apache Commons Logging がない場合、アプリケーションの CLASSPATH 内に lib/required/commons-logging-1.1.1.jar ファイルもインストールします。アプリケーションのほかのコンポーネントがどれも Apache Commons Logging を使用しない場合、Query Analyzer プラグインをインストールした場所と同じ場所にインストールします。
構成
必須 jar ファイルが配備されたら、Query Analyzer プラグインを使用および設定するために、jdbc の接続 URL を修正する必要があります。解析対象アプリケーションが使用する URL に、次のプロパティおよび対応する値を追加する必要があります。
Connector/J プロパティの詳細については、Connector/J (JDBC) Referenceを参照してください。
表3.3 Connector/J 用 MySQL Monitor プラグインのオプション
| Property Name | Property Type | Default |
|---|---|---|
mysqlenterprise.disableSourceLocation |
boolean | false |
mysqlenterprise.serviceManagerConnectTimeout |
numeric | |
mysqlenterprise.serviceManagerPassword |
string | |
mysqlenterprise.serviceManagerResponseTimeout |
numeric | |
mysqlenterprise.serviceManagerUrl |
string | |
mysqlenterprise.serviceManagerUser |
string |
statementInterceptors=com.mysql.etools.jdbc.StatementPerformanceCounters
プラグインの動作を有効にします。この設定オプションを使用しないと、クエリ情報が MySQL Enterprise Service Manager に提供されません。
mysqlenterprise.serviceManagerUrl
| Permitted Values | |||
| Type | string |
||
サービスマネージャの URL を指定します。この情報は、MySQL Enterprise Service Manager のインストール時に作成された設定ファイルから取得できます。ポート番号を含む、絶対 URL を含める必要があります。たとえば、「http://monitor.example.com:18080」のようにします。
mysqlenterprise.serviceManagerUser
| Permitted Values | |||
| Type | string |
||
MySQL Enterprise Service Manager と情報を通信するときに使用されるエージェントのユーザ名を指定します。
mysqlenterprise.serviceManagerPassword
| Permitted Values | |||
| Type | string |
||
MySQL Enterprise Service Manager と情報を通信するときに使用されるエージェントのパスワードを指定します。
省略可能
mysqlenterprise.httpSocketTimeoutMillis
| Permitted Values | |||
| Type | numeric |
||
サービスマネージャと通信するときに待機するミリ秒数。
SSL を使用して MySQL Enterprise Service Manager とクエリ情報を通信する場合、次のプロパティを使用して設定できます。初期設定では、プラグインは Enterprise Monitor に含まれる自己署名付き証明書で機能するように設定されています。このため、サービスマネージャの URL が https:// で始まっている場合、プラグインから送信される情報の機密性が確保されます。しかし、この構成では、プラグインは中間者攻撃を防げず、またクライアント側の証明書による認証もサポートしていません。これらの機能を有効にするには、次のパラメータのデフォルト以外の値を参照してください。
表3.4 Connector/J 用 MySQL Monitor プラグインの SSL オプション
| Property Name | Property Type | Default |
|---|---|---|
mysqlenterprise.clientCertificateKeystorePassword |
string | |
mysqlenterprise.clientCertificateKeystoreType |
string | |
mysqlenterprise.clientCertificateKeystoreUrl |
string | |
mysqlenterprise.trustCertificateKeystorePassword |
string | |
mysqlenterprise.trustCertificateKeystoreType |
numeric | |
mysqlenterprise.trustCertificateKeystoreUrl |
string | |
mysqlenterprise.verifySslCerts |
boolean | false |
mysqlenterprise.verifySslHostnames |
boolean | false |
mysqlenterprise.verifySslHostnames
| Permitted Values | |||
| Type | boolean |
||
| Default | false |
||
「true」に設定した場合、SSL サーバー証明書に示されているホスト名は、BrowserCompatHostnameVerifier にリストされているスキーマに従って検証されます。このスキーマは、Firefox および Curl によって使用され、RFC 2818 で指定されているものと同じものです。
mysqlenterprise.verifySslCerts
| Permitted Values | |||
| Type | boolean |
||
| Default | false |
||
サーバーによって示された証明書が、trustCertificateKeystore 内の CA によって署名されたことを検証するかどうかを指定します。
mysqlenterprise.trustCertificateKeystoreUrl
| Permitted Values | |||
| Type | string |
||
信頼できる root 証明書キーストアの URL (指定しない場合は Java のデフォルトが使用される)。
mysqlenterprise.trustCertificateKeystorePassword
| Permitted Values | |||
| Type | string |
||
証明書ストアのパスワード。
mysqlenterprise.trustCertificateKeystoreType
| Permitted Values | |||
| Type | numeric |
||
信頼された root 証明書のキーストアタイプ (NULL または空にすると JKS のデフォルトを使用する。JVM でサポートされる標準的な KeyStore タイプは JKS と PKCS12。使用環境によっては、JVM にインストールされていて使用可能なセキュリティ製品に応じて、ほかのものも選択できる場合がある)。
mysqlenterprise.clientCertificateKeystoreUrl
| Permitted Values | |||
| Type | string |
||
クライアント証明書キーストアの URL (指定しない場合は Java のデフォルトが使用される)。
mysqlenterprise.clientCertificateKeystorePassword=[password]
| Permitted Values | |||
| Type | string |
||
クライアント証明書ストアのパスワード。
mysqlenterprise.clientCertificateKeystoreType
| Permitted Values | |||
| Type | string |
||
クライアント証明書のキーストアタイプ (NULL または空にすると JKS のデフォルトを使用する。JVM でサポートされる標準的なキーストアタイプは JKS と PKCS12。使用環境によっては、JVM にインストールされていて使用可能なセキュリティ製品に応じて、ほかのものも選択できる場合がある)。
たとえば、ポート 18080 で、エージェントユーザ名「agent」とパスワード「PASSWORD」を使用して、MySQL Enterprise Service Manager のローカルホストと通信するように Connector/J を設定するには、次のオプションを接続文字列に追加します。
statementInterceptors=com.mysql.etools.jdbc.StatementPerformanceCounters»
&serviceManagerUrl=http://localhost:18080/»
&serviceManagerUser=agent»
&serviceManagerPassword=PASSWORD
JDBC URLにアプリケーションに固有のオプションを指定しなければならないことに注意してください。たとえば、次のコードの一部は、localhostのMySQLデータベースtestにmysqltestのユーザーとパスワードを使用して接続し、クエリデータを収集しそれをlocalhostの MySQL Enterprise Service Manager へ送信します。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
Connection conn = null;
...
try {
conn =
DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=mysqltest" +
"&password=mysqltest" +
"&statementInterceptors=com.mysql.etools.jdbc.StatementPerformanceCounters" +
"&serviceManagerUrl=http://localhost:18080/" +
"&serviceManagerUser=agent" +
"&serviceManagerPassword=PASSWORD"
);
// Do something with the Connection
...
} catch (SQLException ex) {
// handle any errors
}
DataSource が使用中の場合 (通常は Glassfish、Weblogic、または Websphere の使用時)、これらのプロパティは URL プロパティの一部として渡される必要があり、DataSource 設定自体に追加することはできません。
Connector/J に代わりのロギングシステムが選択されていない場合、URL または DataSource に次のプロパティを追加して、Connector/J のログファクトリが標準ロガー以外のものを使用するように設定することをお勧めします。
logger=Log4JLogger (Log4J を使用するアプリケーションの場合)
logger=CommonsLogger (Apache Commons Logging を使用するアプリケーションの場合)
logger=JDK14Logger (Java 1.4 以降のロギングを使用するアプリケーションの場合)
Enterprise Service Manager ユーザインタフェースの「Query Analyzer」タブを使用して、プラグインに関するほかの設定が行えます。ここから、プラグインが存在する特定の MySQL インスタンスに対して、クエリパフォーマンスデータの取り込みを有効または無効にできます。さらに、取り込むレベルの詳細、要約、例 (ソースコードの場所付き)、および EXPLAIN 計画も設定できます。
Query Analyzer プラグインは、1 分に 1 回 (収集したデータの報告中に) 設定を確認するため、設定の変更はすぐには反映されません。
使用上の注意
MySQL Enterprise Plugin for Connector/Jを使用する場合、以下のことに注意する必要があります。
クエリをレポートするJavaアプリケーションが終了すると、待ち行列内のクエリ情報は MySQL Enterprise Service Managerへ送られていないため、クエリの情報を失う可能性があります。アプリケーションにスリープ時間を追加し、通常のレポートスケジュールで未処理のクエリを送信するようにすることで、この問題を回避することができます。例えば、
Thread.sleep(60000);
を、アプリケーションが終了する前に、アプリケーションに追加します。
