MySQL 8.0 参数文件实战

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/vkingnew/article/details/81712250
第一部分 参数文件概述:
在MySQL启动过程中会先去读取参数配置文件,用于寻找数据库各种文件的位置以及指定的初始值。
默认情况下MySQL实例会按照一定的顺序在指定的位置进行读取,用户可以通过命令查看:
# mysql --help| grep my.cnf                      
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 

第二部分 参数文件:
MySQL的参数文件和Oracle等数据库的参数文件类似,不同的是Oracle实例在启动时找不到参数文件是
不能进行mount操作的。MYSQL则稍有不同,没有参数文件也可以启动,此时是启动的参数是按照MySQL编译
时指定的默认值和源码中设置的值启动的。但是若在参数文件配置的参数错误,MySQL同样无法启动,此时会
启动失败,可以在MySQL的错误日志文件中找到相关信息。
 
MySQL的参数配置文件是以文本方式进行存储,用户可以通过编辑工具直接进行编辑保存。

参数文件的定义:
简单的说参数文件应该算是配置文件,可以看做是KV(Key-Value)对。
示例:
mysql> show variables like 'log_timestamps';
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| log_timestamps | SYSTEM |
+----------------+--------+
1 row in set (0.00 sec)
这里的log_timestamps 是键,value为system.value的可选项有UTC和SYSTEM。

查看MySQL全部的配置参数可以通过命令:
#show variables;
或者
select * from information_schema.GLOBAL_VARIABLES;
information_schema.GLOBAL_VARIABLES是自MySQL5.1版本开始支持的,而show variables 则各个版本都支持。
第三部分 参数文件类型:
MySQL的参数根据是否可以在数据库运行时修改分为2类:
动态参数(dynamic)
静态参数(static)
动态参数表示可以在MySQL运行时修改参数值,并且立即生效;
静态参数则表示在MySQL实例运行期间不能修改只能只读,若要修改生效需要先修改配置文件再重启mySQL实例。
若静态参数修改则会报错。
set
[GLOBAL | SESSION | PERSIST | PERSIST_ONLY] system_var_name = expr
[@@global. | @@session. | @@persist. | @@persist_only. | @@] system_var_name = expr

通过上面的语句可以看到有关键字global和session 这用来标记该参数基于会话还是整个实例的。
有些参数支持会话级动态修改,如autocommit
有些参数支持global动态修改如binlog_cache_size
有些参数既支持session也支持global,如read_buffer_size.
session和global所表示的含义不一样:
session表示只在当前的会话生效,针对其他的会话不生效;
global表示全局生效,对所有登录的会话都生效。
在MySQL8.0 之前对全局的变量值修改了 只能在MYSQL实例的生命周期内生效,并不能对MySQL的参数文件修改,若MySQL实例重启则无效,若要生效需要将参数文件写到配置文件等下次重启之后生效。

相关的权限:
在MySQL 8.0 若要set global 参数需要权限 SYSTEM_VARIABLES_ADMIN or SUPER。

第四部分 持久化参数文件:
在MySQL8.0之前参数文件的动态修改不能写到配置文件,为了改善这一问题MySQL8.0支持了动态修改参数并将其保存到一个新的参数文件文件中mysqld-auto.cnf,默认保存在$datadir目录下,在所有的参数之后启动,需要的权限为SYSTEM_VARIABLES_ADMIN or SUPER。

从参数持久化的角度来看分为三类:
非持久化参数: 这类参数只能在MYSQL实例启动前设置好,整个MySQL实例运行期间不能修改不能持久化。
持久化参数:运行时修改生效,并且将修改的参数写到mysqld-auto.cnf。
只读持久化参数:修改的参数对运行时不生效,仅写到mysqld-auto.cnf等待下次启动生效。
只读持久化参数需要的权限为:PERSIST_RO_VARIABLES_ADMIN。
非持久化:Nonpersistent
持久化:PERSIST
只读持久化:PERSIST_ONLY

下列参数不支持持久化:
auto_generate_certs
basedir
bind_address
character_set_system
character_sets_dir
core_file
datadir
default_authentication_plugin
ft_stopword_file
have_statement_timeout
have_symlink
hostname
init_file
keyring_operations
large_files_support
large_page_size
lc_messages_dir
license
locked_in_memory
log_bin
log_bin_basename
log_bin_index
log_bin_use_v1_row_events
log_error
lower_case_file_system
named_pipe
persisted_globals_load
pid_file
plugin_dir
port
protocol_version
relay_log
relay_log_basename
relay_log_index
relay_log_info_file
secure_file_priv
server_uuid
shared_memory
shared_memory_base_name
skip_external_locking
skip_networking
slave_load_tmpdir
socket
ssl_ca
ssl_capath
ssl_cert
ssl_crl
ssl_crlpath
ssl_key
system_time_zone
tmpdir
version_comment
version_compile_machine
version_compile_os
version_compile_zlib
InnoDB的部分插件也不支持持久化:
audit_log_current_session
audit_log_file
audit_log_filter_id
audit_log_format
caching_sha2_password_auto_generate_rsa_keys
caching_sha2_password_private_key_path
caching_sha2_password_public_key_path
daemon_memcached_engine_lib_name
daemon_memcached_engine_lib_path
daemon_memcached_option
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_undo_directory
innodb_undo_tablespaces
innodb_version
keyring_encrypted_file_data
keyring_encrypted_file_password
mecab_rc_file
sha256_password_auto_generate_rsa_keys
sha256_password_private_key_path
sha256_password_public_key_path
version_tokens_session
持久化参数的示例:
mysql> show variables like '%general%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| general_log      | OFF                   |
| general_log_file | /data/mysql/node4.log |
+------------------+-----------------------+
2 rows in set (0.00 sec)

mysql> set persist general_log=on;
Query OK, 0 rows affected (0.32 sec)

mysql> show variables like '%general%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| general_log      | ON                    |
| general_log_file | /data/mysql/node4.log |
+------------------+-----------------------+
2 rows in set (0.00 sec)
mysql> system cat /data/mysql/mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "general_log" : { "Value" : "ON" , "Metadata" : { "Timestamp" : 1534276353877164 , "User" : "root" , "Host" : "localhost" } } } }
可以看到 general_log 既生效了由保存到mysqld-auto.cnf文件中。

mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log      | 151   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set persist_only back_log=500;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log      | 151   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> system cat /data/mysql/mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "general_log" : { "Value" : "ON" , "Metadata" : { "Timestamp" : 1534276353877164 , "User" : "root" , "Host" : "localhost" } } , "mysql_server_static_options" : { "back_log" : { "Value" : "500" , "Metadata" : { "Timestamp" : 1534276590698267 , "User" : "root" , "Host" : "localhost" } } } } }
back_log参数值默认是151,通过只持久化设置后参数文件保存到mysqld-auto.cnf,而运行参数没有修改。
--重启MySQL实例:
# /etc/init.d/mysql restart
# mysql -poracle -S /tmp/mysql.sock
mysql> show variables like 'back_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| back_log      | 500   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'general%';
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| general_log      | ON                    |
| general_log_file | /data/mysql/node4.log |
+------------------+-----------------------+
2 rows in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.12    |
+-----------+
可以看到重启时候后这些之前持久化的参数值依然是我们修改的值,而不需要手动写到my.cnf文件中。


第五部分  参数的文件的配置:
在配置文件中有很多开关,此时设置为数字1和true和on的效果一样表示开启,相反的1、false、off表示关闭。
还要一种情况只写参数则表示开启改参数。
示例:
[mysqld]
skip-name-resolve
登录查看:
mysql> show variables like 'skip%name%resolve';     
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | ON    |
+-------------------+-------+
1 row in set (0.01 sec)
因为写作0或者1对真正要表示数值的参数,只看参数值的话可能有误解,建议将开启和关闭使用on和off来代替数字,让数字真正表达需要数字的参数上。

第六部分 推荐的配置的参数文件:
server-id                      = 1
port                           = 3306
mysqlx_port                    = 33060
mysqlx_socket                  = /tmp/mysqlx.sock
datadir                        = /data/mysql
socket                         = /tmp/mysql.sock
pid-file                       = /tmp/mysqld.pid
log-error                      = error.log
slow-query-log                 = 1
slow-query-log-file            = slow.log
long_query_time                = 0.2
#log-bin                        = bin.log
relay-log                      = relay.log
binlog_format                 =ROW
relay_log_recovery            = 1
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
init_connect                   ='SET NAMES utf8mb4'
innodb_buffer_pool_size        = 1G
join_buffer_size               = 128M
sort_buffer_size               = 2M
read_rnd_buffer_size           = 2M
log_timestamps                 = SYSTEM
lower_case_table_names         = 1
default-authentication-plugin  =mysql_native_password
skip-name-resolve
slave_skip_errors              = ddl_exist_errors
#skip-grant-tables 
max_heap_table_size           =32M
tmp_table_size                =64M

猜你喜欢

转载自blog.csdn.net/vkingnew/article/details/81712250
今日推荐