SET PERSIST
および SET PERSIST_ONLY
を使用すると、グローバルシステム変数をデータディレクトリ内の mysqld-auto.cnf
オプションファイルに永続化できます (セクション13.7.6.1「変数代入の SET 構文」 を参照)。 ただし、すべてのシステム変数を永続化できるわけではありません。または、特定の制限条件下でのみ永続化できるわけではありません。 システム変数が永続的または永続的に制限されない理由を次に示します:
セッションシステム変数は永続化できません。 セッション変数はサーバーの起動時に設定できないため、永続化する理由はありません。
グローバルシステム変数には、サーバーホストへの直接アクセス権を持つユーザーのみが設定できるような機密データが含まれる場合があります。
グローバルシステム変数は読取り専用の場合があります (つまり、サーバーによってのみ設定されます)。 この場合、サーバーの起動時でも実行時でも、ユーザーが設定することはできません。
グローバルシステム変数は、内部使用のみを目的としている場合があります。
永続的でないシステム変数は、どのような状況でも永続化できません。 MySQL 8.0.14 の時点では、永続制限付きシステム変数は SET PERSIST_ONLY
で永続化できますが、次の条件を満たすユーザーのみが永続化できます:
persist_only_admin_x509_subject
システム変数は、SSL 証明書の X.509 サブジェクト値に設定されます。ユーザーは暗号化された接続を使用してサーバーに接続し、指定されたサブジェクト値で SSL 証明書を提供します。
ユーザーには、
SET PERSIST_ONLY
を使用するための十分な権限があります (セクション5.1.9.1「システム変数権限」 を参照)。
たとえば、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_subject
および persisted_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
daemon_memcached_engine_lib_name
daemon_memcached_engine_lib_path
daemon_memcached_option
datadir
default_authentication_plugin
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
keyring_encrypted_file_data
keyring_encrypted_file_password
lc_messages_dir
log_error
mecab_rc_file
named_pipe
pid_file
plugin_dir
port
relay_log
relay_log_info_file
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
永続的に制限されたシステム変数を保持できるようにサーバーを構成するには、次の手順を使用します:
MySQL が暗号化された接続をサポートするように構成されていることを確認します。 セクション6.3.1「暗号化接続を使用するための MySQL の構成」を参照してください。
永続的に制限されたシステム変数を保持する機能を示す SSL 証明書の X.509 サブジェクト値を指定し、そのサブジェクトを持つ証明書を生成します。 セクション6.3.3「SSL および RSA 証明書とキーの作成」を参照してください。
-
persist_only_admin_x509_subject
を指定されたサブジェクト値に設定してサーバーを起動します。 たとえば、サーバーのmy.cnf
ファイルに次の行を挿入します:[mysqld] persist_only_admin_x509_subject="subject-value"
Subject 値の形式は、
CREATE USER ... REQUIRE SUBJECT
で使用されるものと同じです。 セクション13.7.1.3「CREATE USER ステートメント」を参照してください。persist_only_admin_x509_subject
自体は実行時に永続化できないため、このステップは MySQL サーバーホストで直接実行する必要があります。 サーバーを再起動します。
指定された Subject 値を持つ SSL 証明書を、永続的に制限されたシステム変数の永続化を許可されるユーザーに配布します。
myclient-cert.pem
が、永続的に制限されたシステム変数を保持できるクライアントで使用される SSL 証明書であるとします。 openssl コマンドを使用して、証明書の内容を表示します:
shell> 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 出力には、証明書サブジェクトの値が次のように表示されます:
C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN
MySQL のサブジェクトを指定するには、次の形式を使用します:
/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN
サブジェクト値を使用してサーバー 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
も指定することをお薦めしますが、必須ではありません。 例:
shell> 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