連線屬性是應用程式在連線時可以傳遞給伺服器的鍵值組。對於基於 libmysqlclient
用戶端程式庫實作的 C API 的應用程式,mysql_options()
和 mysql_options4()
函式定義連線屬性集。其他 MySQL 連接器可能會提供自己的屬性定義方法。
這些 Performance Schema 表格會公開屬性資訊
session_account_connect_attrs
:目前工作階段以及與工作階段帳戶關聯的其他工作階段的連線屬性session_connect_attrs
:所有工作階段的連線屬性
此外,寫入稽核日誌的連線事件可能包含連線屬性。請參閱第 8.4.5.4 節「稽核日誌檔案格式」。
開頭為底線 (_
) 的屬性名稱保留供內部使用,不應由應用程式建立。此慣例允許 MySQL 引入新屬性,而不會與應用程式屬性衝突,並讓應用程式定義自己的屬性,而不會與內部屬性衝突。
可用的連線屬性
在給定連線中可見的連線屬性集會因您的平台、用於建立連線的 MySQL 連接器或用戶端程式等因素而有所不同。
libmysqlclient
用戶端程式庫會設定這些屬性
_client_name
:用戶端名稱(用戶端程式庫的libmysql
)。_client_version
:用戶端程式庫版本。_os
:作業系統(例如,Linux
、Win64
)。_pid
:用戶端程序 ID。_platform
:機器平台(例如,x86_64
)。_thread
:用戶端執行緒 ID(僅限 Windows)。
其他 MySQL 連接器可能會定義它們自己的連線屬性。
MySQL Connector/C++ 為使用 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)。
_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)。
Connector/Python 實作定義了這些屬性;某些值和屬性取決於 Connector/Python 的實作(純 Python 或 c-ext)
_client_license
:連接器的授權類型;GPL-2.0
或Commercial
。(僅限純 Python)_client_name
:設定為mysql-connector-python
(純 Python) 或libmysql
(c-ext)_client_version
:連接器版本 (純 Python) 或 mysqlclient 程式庫版本 (c-ext)。_os
:執行連接器的作業系統(例如,Linux
、Win64
)。_pid
:來源機器上的程序識別碼(例如,26955
)_platform
:機器平台(例如,x86_64
)。_source_host
:連接器正在從其連線的機器的的主機名稱。_connector_version
:連接器版本(例如,9.0.0
)(僅限 c-ext)。_connector_license
:連接器的授權類型;GPL-2.0
或Commercial
(僅限 c-ext)。_connector_name
:一律設定為mysql-connector-python
(僅限 c-ext)。
PHP 定義的屬性取決於其編譯方式
使用
libmysqlclient
編譯:先前描述的標準libmysqlclient
屬性。使用
mysqlnd
編譯:只有_client_name
屬性,值為mysqlnd
。
許多 MySQL 用戶端程式會設定一個 program_name
屬性,其值等於用戶端名稱。例如,mysqladmin 和 mysqldump 分別將 program_name
設定為 mysqladmin
和 mysqldump
。MySQL Shell 將 program_name
設定為 mysqlsh
。
某些 MySQL 用戶端程式會定義其他屬性
連線屬性限制
從用戶端傳輸到伺服器的連線屬性資料量有限制
用戶端在連線之前強制執行的固定限制。
伺服器在連線時強制執行的固定限制。
效能綱要 (Performance Schema) 在連線時強制執行的可設定限制。
對於使用 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
屬性新增至工作階段屬性,其值指出遺失了多少位元組。這使效能綱要能夠在連線屬性表格中公開每個連線的截斷資訊。可以檢查此資訊,而無需檢查錯誤記錄檔。