文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  不可持久化及限制持久化的系統變數

7.1.9.4 不可持久化及限制持久化的系統變數

SET PERSISTSET PERSIST_ONLY 可讓全域系統變數持久化到資料目錄中的 mysqld-auto.cnf 選項檔案(請參閱 章節 15.7.6.1,「用於變數指派的 SET 語法」)。不過,並非所有系統變數都可以持久化,或只能在某些限制條件下持久化。以下是一些系統變數可能無法持久化或限制持久化的原因:

  • 工作階段系統變數無法持久化。工作階段變數無法在伺服器啟動時設定,因此沒有理由將其持久化。

  • 全域系統變數可能涉及敏感資料,因此只能由可以直接存取伺服器主機的使用者設定。

  • 全域系統變數可能是唯讀的(也就是說,僅由伺服器設定)。在這種情況下,使用者無論在伺服器啟動時還是執行階段都無法設定它。

  • 全域系統變數可能僅供內部使用。

不可持久化的系統變數在任何情況下都無法持久化。限制持久化的系統變數可以使用 SET PERSIST_ONLY 持久化,但僅限於滿足以下條件的使用者:

例如,protocol_version 是唯讀的,且僅由伺服器設定,因此在任何情況下都無法持久化。另一方面,bind_address 是限制持久化的,因此可以由滿足上述條件的使用者設定。

下列系統變數是不可持久化的。此清單可能會隨著持續開發而變更。

audit_log_current_session
audit_log_filter_id
caching_sha2_password_digest_rounds
character_set_system
core_file
have_statement_timeout
have_symlink
hostname
innodb_version
keyring_hashicorp_auth_path
keyring_hashicorp_ca_path
keyring_hashicorp_caching
keyring_hashicorp_commit_auth_path
keyring_hashicorp_commit_ca_path
keyring_hashicorp_commit_caching
keyring_hashicorp_commit_role_id
keyring_hashicorp_commit_server_url
keyring_hashicorp_commit_store_path
keyring_hashicorp_role_id
keyring_hashicorp_secret_id
keyring_hashicorp_server_url
keyring_hashicorp_store_path
large_files_support
large_page_size
license
locked_in_memory
log_bin
log_bin_basename
log_bin_index
lower_case_file_system
ndb_version
ndb_version_string
persist_only_admin_x509_subject
persisted_globals_load
protocol_version
relay_log_basename
relay_log_index
server_uuid
skip_external_locking
system_time_zone
version_comment
version_compile_machine
version_compile_os
version_compile_zlib

限制持久化的系統變數是那些唯讀且可以在命令列或選項檔案中設定的變數,但 persist_only_admin_x509_subjectpersisted_globals_load 除外。此清單可能會隨著持續開發而變更。

audit_log_file
audit_log_format
auto_generate_certs
basedir
bind_address
caching_sha2_password_auto_generate_rsa_keys
caching_sha2_password_private_key_path
caching_sha2_password_public_key_path
character_sets_dir
datadir
ft_stopword_file
init_file
innodb_buffer_pool_load_at_startup
innodb_data_file_path
innodb_data_home_dir
innodb_dedicated_server
innodb_directories
innodb_force_load_corrupted
innodb_log_group_home_dir
innodb_page_size
innodb_read_only
innodb_temp_data_file_path
innodb_temp_tablespaces_dir
innodb_undo_directory
innodb_undo_tablespaces
lc_messages_dir
log_error
mecab_rc_file
named_pipe
pid_file
plugin_dir
port
relay_log
replica_load_tmpdir
secure_file_priv
sha256_password_auto_generate_rsa_keys
sha256_password_private_key_path
sha256_password_public_key_path
shared_memory
shared_memory_base_name
skip_networking
slave_load_tmpdir
socket
ssl_ca
ssl_capath
ssl_cert
ssl_crl
ssl_crlpath
ssl_key
tmpdir
version_tokens_session_number

若要設定伺服器以啟用持續性受限系統變數的持久化,請使用以下步驟。

  1. 確保 MySQL 已設定為支援加密連線。請參閱第 8.3.1 節,「設定 MySQL 以使用加密連線」

  2. 指定一個 SSL 憑證 X.509 Subject 值,表示具有持久化持續性受限系統變數的能力,並產生具有該 Subject 的憑證。請參閱第 8.3.3 節,「建立 SSL 和 RSA 憑證與金鑰」

  3. 啟動伺服器時,將 persist_only_admin_x509_subject 設定為指定的 Subject 值。例如,將以下幾行放入您的伺服器 my.cnf 檔案中。

    [mysqld]
    persist_only_admin_x509_subject="subject-value"

    Subject 值的格式與 CREATE USER ... REQUIRE SUBJECT 使用的格式相同。請參閱第 15.7.1.3 節,「CREATE USER 陳述式」

    您必須直接在 MySQL 伺服器主機上執行此步驟,因為 persist_only_admin_x509_subject 本身無法在執行階段持久化。

  4. 重新啟動伺服器。

  5. 將具有指定 Subject 值的 SSL 憑證分發給將被允許持久化持續性受限系統變數的使用者。

假設 myclient-cert.pem 是可持久化持續性受限系統變數的用戶端要使用的 SSL 憑證。使用 openssl 命令顯示憑證內容。

$> openssl x509 -text -in myclient-cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
    Signature Algorithm: md5WithRSAEncryption
        Issuer: C=US, ST=IL, L=Chicago, O=MyOrg, OU=CA, CN=MyCN
        Validity
            Not Before: Oct 18 17:03:03 2018 GMT
            Not After : Oct 15 17:03:03 2028 GMT
        Subject: C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN
...

openssl 的輸出顯示憑證的 Subject 值為

C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN

若要為 MySQL 指定 Subject,請使用此格式

/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN

使用 Subject 值設定伺服器 my.cnf 檔案。

[mysqld]
persist_only_admin_x509_subject="/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN"

重新啟動伺服器,以使新設定生效。

將 SSL 憑證(以及任何其他相關的 SSL 檔案)分發給適當的使用者。然後,該使用者使用憑證和建立加密連線所需的任何其他 SSL 選項連線到伺服器。

若要使用 X.509,用戶端必須指定 --ssl-key--ssl-cert 選項以進行連線。建議但非必要也指定 --ssl-ca,以便可以驗證伺服器提供的公開憑證。例如:

$> mysql --ssl-key=myclient-key.pem --ssl-cert=myclient-cert.pem --ssl-ca=mycacert.pem

假設使用者具有使用 SET PERSIST_ONLY 的足夠權限,則可以像這樣持久化持續性受限系統變數

mysql> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
Query OK, 0 rows affected (0.00 sec)

如果伺服器未設定為啟用持續性受限系統變數的持久化,或使用者不滿足該功能所需的條件,則會發生錯誤。

mysql> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
ERROR 1238 (HY000): Variable 'socket' is a non persistent read only variable