連線屬性是應用程式在連線時可以傳遞給伺服器的鍵值對。對於基於 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 擴充)
_client_license
: 連接器的授權類型;GPL-2.0
或Commercial
。(僅限純 Python)_client_name
: 設定為mysql-connector-python
(純 Python)或libmysql
(C 擴充)_client_version
: 連接器版本(純 Python)或 mysqlclient 函式庫版本(C 擴充)。_os
: 連接器的作業系統(例如,Linux
、Win64
)。_pid
: 來源機器的程序識別碼(例如,26955
)_platform
:機器平台(例如,x86_64
)。_source_host
: 連接器從哪個機器連線的主機名稱。_connector_version
: 連接器版本(例如,8.4.0
)(僅限 C 擴充)。_connector_license
: 連接器的授權類型;GPL-2.0
或Commercial
(僅限 C 擴充)。_connector_name
: 始終設定為mysql-connector-python
(僅限 C 擴充)。
PHP 定義的屬性取決於它的編譯方式
使用
libmysqlclient
編譯:標準的libmysqlclient
屬性,如前所述。使用
mysqlnd
編譯:只有_client_name
屬性,值為mysqlnd
。
許多 MySQL 客戶端程式會設定一個 program_name
屬性,其值等於客戶端名稱。例如,mysqladmin 和 mysqldump 分別將 program_name
設定為 mysqladmin
和 mysqldump
。MySQL Shell 將 program_name
設定為 mysqlsh
。
有些 MySQL 客戶端程式定義了其他屬性
連線屬性限制
從客戶端傳送到伺服器的連線屬性資料量有上限
客戶端在連線前設定的固定限制。
伺服器在連線時設定的固定限制。
效能架構在連線時設定的可設定限制。
對於使用 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
屬性,其值表示遺失了多少位元組。這使效能架構能夠在連線屬性表中公開每個連線的截斷資訊。可以檢查此資訊,而無需檢查錯誤日誌。