【MySQL精通之路】系统变量-不持久和持久受限系统变量

SET PERSISTSET PERSIST_ONLY使全局系统变量能够持久化到数据目录中的mysqld-auto.cnf选项文件中

(请参阅"变量分配的SET语法")。

但是,并不是所有的系统变量都可以持久化,或者只能在某些限制条件下持久化。

1.受限原因

以下是系统变量可能不持久或持续受限的一些原因:

会话系统变量无法持久化。无法在服务器启动时设置会话变量,因此没有理由保留它们。

全局系统变量 可能涉及敏感数据 ,因此只能由直接访问服务器主机的用户进行设置。

全局系统变量 可能是只读的(即,仅由服务器设置)。在这种情况下,用户根本无法设置它,无论是在服务器启动时还是在运行时。

全局系统变量可能仅用于内部使用。

不可持久化的系统变量在任何情况下都不能持久化。

从MySQL 8.0.14开始,持久化受限系统变量可以使用SET PERSIST_ONLY持久化,但只能由满足以下条件的用户持久化:

persist_only_admin_x509_subject系统变量设置为SSL证书X.509 subject值。

用户使用加密连接连接 到服务器,并提供具有指定Subject值的SSL证书

用户有足够的权限使用SET PERSIST_ONLY(请参阅"系统变量权限")。

【MySQL精通之路】系统变量-系统变量权限-CSDN博客

例如,protocol_version 是只读的,并且仅由服务器设置 ,因此在任何情况下都不能持久化

另一方面,bind_address 是持久限制的,因此它可以由满足上述条件的用户进行设置

2.持久化受限的变量

以下系统变量是不可持久的。此列表可能会随着不断的发展而变化。

复制代码
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
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
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

3.配置

要将服务器配置为启用持久化受限制的系统变量,请使用以下过程:

确保MySQL配置为支持加密连接。

请参阅"配置MySQL以使用加密连接"。
指定SSL证书X.509 Subject值,该值表示持久保留受限制的系统变量的能力,并生成具有该Subject的证书。请参阅"创建SSL和RSA证书和密钥"。

在将persist_only_admin_x509_subject设置为指定的subject值的情况下启动服务器。例如,将以下行放在服务器my.cnf文件中:

sql 复制代码
[mysqld]
persist_only_admin_x509_subject="subject-value"

Subject值的格式与CREATE USER ... REQUIRE SUBJECT使用的格式相同

请参阅第"CREATE USER语句"。

您必须直接在MySQL服务器主机上执行此步骤,因为persist_only_admin_x509_subject本身在运行时无法持久化
重新启动服务器。
将具有指定Subject值的SSL证书分发给用户。

假设myclient-cert.pem 是可以持久持久化受限制系统变量的客户端要使用的SSL证书 。使用openssl命令显示证书内容:

sql 复制代码
$> 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值为:

sql 复制代码
C=US, ST=IL, L=Chicago, O=MyOrg, OU=client, CN=MyCN

要指定MySQL的主题,请使用以下格式:

sql 复制代码
/C=US/ST=IL/L=芝加哥/O=MyOrg/OU=客户/CN=MyCN

使用Subject值配置服务器my.cnf文件:

sql 复制代码
[mysqld]
persist_only_admin_x509_subject="/C=US/ST=IL/L=Chicago/O=MyOrg/OU=client/CN=MyCN"

重新启动服务器,使新配置生效。

将SSL证书(以及任何其他关联的SSL文件)分发给相应的用户。

然后,这样的用户使用证书和建立加密连接所需的任何其他SSL选项连接到服务器。

要使用X.509,客户端必须指定要连接的**--ssl密钥** 和**--ssl证书**选项。

建议(但不强制)同时指定--ssl ca,以便验证服务器提供的公共证书。

例如:

sql 复制代码
$> mysql --ssl-key=myclient-key.pem --ssl-cert=myclient-cert.pem --ssl-ca=mycacert.pem

假设用户有足够的权限使用SET PERSIST_ONLY,那么可以像这样持久化受限制的系统变量:

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

如果服务器未配置为启用持久化受限制的系统变量,或者用户不满足该功能所需的条件,则会发生错误:

sql 复制代码
mysql> SET PERSIST_ONLY socket = '/tmp/mysql.sock';
ERROR 1238 (HY000): Variable 'socket' is a non persistent read only variable
相关推荐
码出财富27 分钟前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农2 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪3 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
冷崖8 小时前
MySQL异步连接池的学习(五)
学习·mysql
时序数据说8 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.12 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)12 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺12 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX12 小时前
MySQL的事务日志:
数据库·mysql