接続属性は、アプリケーションプログラムが接続時にサーバーに渡すことができるキーと値のペアです。 libmysqlclient
クライアントライブラリによって実装される C API に基づくアプリケーションの場合、mysql_options()
および mysql_options4()
関数によって接続属性セットが定義されます。 他の MySQL コネクタは、独自の属性定義メソッドを提供する場合があります。
「これらのパフォーマンススキーマ」テーブルでは、属性情報が公開されます:
session_account_connect_attrs
: 現在のセッションおよびセッションアカウントに関連付けられている他のセッションの接続属性session_connect_attrs
: すべてのセッションの接続属性。
また、監査ログに書き込まれる接続イベントには、接続属性が含まれる場合があります。 セクション6.4.5.4「監査ログファイル形式」を参照してください。
アンダースコア (_
) で始まる属性名は内部使用のために予約されているため、アプリケーションプログラムで作成しないでください。 この規則により、アプリケーション属性と競合せずに MySQL で新しい属性を導入でき、内部属性と競合しない独自の属性をアプリケーションプログラムで定義できます。
使用可能な接続属性
特定の接続内に表示される接続属性のセットは、プラットフォーム、接続の確立に使用される MySQL Connector、クライアントプログラムなどの要因によって異なります。
libmysqlclient
クライアントライブラリは、次の属性を設定します:
_client_name
: クライアント名 (クライアントライブラリのlibmysql
)。_client_version
: クライアントライブラリのバージョン。_os
: オペレーティングシステム (Linux
、Win64
など)。_pid
: クライアントプロセス ID。_platform
: マシンプラットフォーム (例:x86_64
)。_thread
: クライアントスレッド ID (Windows のみ)。
他の MySQL コネクタでは、独自の接続属性を定義できます。
MySQL Connector/C++ 8.0.16 以上では、X DevAPI または X DevAPI for C を使用するアプリケーションに対して次の属性が定義されます:
_client_license
: コネクタライセンス (GPL-2.0
など)。_client_name
: コネクタ名 (mysql-connector-cpp
)。_client_version
: コネクタバージョン。_os
: オペレーティングシステム (Linux
、Win64
など)。_pid
: クライアントプロセス ID。_platform
: マシンプラットフォーム (例:x86_64
)。_source_host
: クライアントが実行されているマシンのホスト名。_thread
: クライアントスレッド ID (Windows のみ)。
MySQL Connector/J では、次の属性が定義されます:
_client_name
: クライアント名_client_version
: クライアントライブラリバージョン_os
: オペレーティングシステム (Linux
、Win64
など)_client_license
: コネクタライセンスタイプ_platform
: マシンプラットフォーム (x86_64
など)_runtime_vendor
: Java ランタイム環境 (JRE) ベンダー_runtime_version
: Java ランタイム環境 (JRE) のバージョン
MySQL Connector/NET では、次の属性が定義されます:
_client_version
: クライアントライブラリのバージョン。_os
: オペレーティングシステム (Linux
、Win64
など)。_pid
: クライアントプロセス ID。_platform
: マシンプラットフォーム (例:x86_64
)。_program_name
: クライアント名。_thread
: クライアントスレッド ID (Windows のみ)。
PHP は、コンパイル方法に依存する属性を定義します:
libmysqlclient
を使用してコンパイル: 前に説明した標準のlibmysqlclient
属性。mysqlnd
を使用してコンパイル:mysqlnd
の値を持つ_client_name
属性のみ。
多くの MySQL クライアントプログラムは、クライアント名と等しい値を持つ program_name
属性を設定します。 たとえば、mysqladmin および mysqldump は、program_name
を mysqladmin
および mysqldump
にそれぞれ設定します。MySQL Shell は、program_name
を mysqlsh
に設定します。
一部の MySQL クライアントプログラムでは、追加の属性が定義されます:
-
mysql (MySQL 8.0.17 の時点):
値が空の mysql 接続属性は送信されません。
-
mysqlbinlog:
_client_role
:binary_log_listener
-
レプリカ接続:
program_name
:mysqld
_client_role
:binary_log_listener
_client_replication_channel_name
: チャネル名。
-
FEDERATED
ストレージエンジン接続:program_name
:mysqld
_client_role
:federated_storage
接続属性制限
クライアントからサーバーに送信される接続属性データの量には制限があります:
接続時間の前にクライアントによって課される固定制限。
接続時にサーバーによって課される固定制限。
接続時にパフォーマンススキーマによって課される構成可能な制限。
C API を使用して開始された接続の場合、libmysqlclient
ライブラリでは、クライアント側の接続属性データの集計サイズに 64KB の制限が課されます: この制限を超える mysql_options()
をコールすると、CR_INVALID_PARAMETER_NO
エラーが発生します。 他の MySQL コネクタでは、サーバーに送信できる接続属性データの量に独自のクライアント側制限が課される場合があります。
サーバー側では、接続属性データに対する次のサイズチェックが行われます:
サーバーは、受け入れる接続属性データの集計サイズに 64KB の制限を課します。 クライアントが 64KB を超える属性データを送信しようとすると、サーバーは接続を拒否します。 それ以外の場合、サーバーは属性バッファが有効であるとみなし、
Performance_schema_session_connect_attrs_longest_seen
ステータス変数で最も長いバッファのサイズを追跡します。-
受け入れられる接続の場合、パフォーマンススキーマは
performance_schema_session_connect_attrs_size
システム変数の値に対して集約属性サイズをチェックします。 属性サイズがこの値を超えると、次のアクションが実行されます:パフォーマンススキーマは属性データを切り捨て、
Performance_schema_session_connect_attrs_lost
ステータス変数を増分します。これは、属性の切り捨てが発生した接続の数を示します。-
log_error_verbosity
システム変数が 1 より大きい場合、パフォーマンススキーマはエラーメッセージをエラーログに書き込みます:Connection attributes of length N were truncated (N bytes lost) for connection N, user user_name@host_name (as user_name), auth: {yes|no}
警告メッセージの情報は、DBA が属性の切捨てが発生したクライアントを識別するのに役立ちます。
属性バッファに十分な領域がある場合は、失われたバイト数を示す値とともに
_truncated
属性がセッション属性に追加されます。 これにより、パフォーマンススキーマは接続属性テーブルで接続ごとの切り捨て情報を公開できます。 この情報は、エラーログを確認せずに調べることができます。