MySQL8.0配置文件详解

851 阅读7分钟

[client]

#指定MySQL客户端端口

port=33306

#套接字文件,设置socke文件所在目录,

socket = /mysql/data/33306/mysql.sock

[mysql]

no-beep

prompt="\u@mysqldb \R:\m:\s [\d]> "

#no-auto-rehash

#在MySQL终端开启tab补齐功能

auto-rehash

#设置客户端默认字符集

default-character-set=utf8

[mysqld]

########basic settings########

#mysql服务的ID,在主从同步时来标记服务的唯一身份

server-id=161100

#MySQL服务器启动时,默认的端口

port=33306

#MySQL服务启动时的用户

user = mysql

#ip绑定,0.0.0.0标识允许所有的远程访问,127.0.0.1只能本地访问,固定ip则只能接受改ip的远程访问。

bind_address= 192.168.16.11

#设置MySQL的安装目录

basedir=/mysql/app/mysql

#设置MySQL的数据存放目录

datadir=/mysql/data/33306/data

#mysql的客户端和服务端之间建立通信时需要指定一个通信stock文件

socket = /mysql/data/33306/mysql.sock

#mysql服务启动后会记录进程id到该文件中,用于记录服务的运行情况

pid-file = /mysql/data/33306/mysql.pid

#设置服务端默认的字符集

character-set-server=utf8mb4

#ci和cs的区别,就是大小写敏感和不敏感 ci是case ignore,cs是case senstive

#collation_server=utf8mb4_general_ci

#设置事务自动提交,设置commit提交autocommit=0;

#在8.0.21版本后,autocommit=0初始化时,sys库会丢失。

autocommit = 1

#只能用IP地址检查客户端的登录,不用主机名

#skip_name_resolve = 1

#最大连接数,默认值为151,上限值是16384,实际连接数是最大连接数的85%较为合适

max_connections = 800

#最大错误连接数

max_connect_errors = 10

#永久表的默认存储引擎

default-storage-engine=INNODB

#事务的隔离级别,读未提交(READ-UNCOMMITTED),读已提交(READ-COMMITTED)

#可重复读 (REPEATABLE-READ),序列化 (SERIALIZABLE)

transaction_isolation = READ-COMMITTED

#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值

explicit_defaults_for_timestamp = 1

'group by' 与 'order by' 语句占用的大小,建议先调整为2M,后期观察再调整

sort_buffer_size = 32M

#使用join语句的缓存区

join_buffer_size = 128M

#大数据量的group by,order by时可能用到临时表,超过了这个值将写入磁盘,系统IO压力增大

#临时内部堆积表的大小,动态页面要调大点,100M以上,静态内容,一般64M足够。

tmp_table_size = 1024M

最大内存表大小

max_heap_table_size = 1024M

#SQL数据包发送的大小,如果有BLOB对象建议修改成1G

max_allowed_packet = 16M

#sql_mode默认模式:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#NO_AUTO_CREATE_USER模式在8.0取消

#sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭

#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效

interactive_timeout = 1800

wait_timeout = 1800

#用于表的顺序扫描,读出的数据暂存于read_buffer_size中,当buff满时或读完,将数据返回上层调用者

read_buffer_size = 16M

#设置服务器随机读取缓冲区的大小

read_rnd_buffer_size = 32M

#禁用mysql的缓存查询结果集功能,大部分情况下关闭下面两项

#query_cache_type = 1

#query_cache_size=1M

#表描述符缓存大小,可减少文件打开/关闭次数

table_open_cache=4096

#用于缓存空闲的线程

thread_cache_size=768

myisam_max_sort_file_size=10G

myisam_sort_buffer_size=135M

指定索引缓冲区的大小

key_buffer_size=32M

#读缓冲区的大小

read_buffer_size=8M

read_rnd_buffer_size=4M

#请求堆栈大小,默认50,该值设置为最大并发连接数的20%~30%

back_log=240

#flush_time=0

#控制文件打开个数

open_files_limit=65536

#内存中可打开的表结构数量

table_definition_cache=1400

#binlog_row_event_max_size=8K

#sync_master_info=10000

#sync_relay_log=10000

#sync_relay_log_info=10000

########log settings########

#表示查询日志和慢查询日志到文件(FILE)还是表中(TABLE)

log-output=FILE

#通用查询日志打开ON/关闭OFF 1/0 ,最好不开

general_log = 0

通用查询日志存放路径

general_log_file=/mysql/log/33306/mysql-general.err

#慢查询日志打开/关闭

slow_query_log = ON

#慢查询日志存放路径

slow_query_log_file=/mysql/log/33306/mysql-query.err

#慢查询日志阈值

long_query_time=10

#检索的行数必须达到100,才可被记为慢查询

min_examined_row_limit = 100

#错误日志的存放路径

log-error=/mysql/log/33306/mysql-error.err

#检查未使用到索引的sql

log_queries_not_using_indexes = 1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次,每分钟记录的条数

log_throttle_queries_not_using_indexes = 10

log_slow_admin_statements = 1

#log_slow_slave_statements = 1参数作为从库时生效,从库复制中如果有慢sql也将被记录

#8.0.26之前为log_slow_slave_statements = 1 之后为 log_slow_replica_statements=1

log_slow_replica_statements = 1

#二进制日志的目录及名称

log_bin=/mysql/log/33306/binlog/mysql-binlog

#二进制日志索引文件的目录及名称

log_bin_index=/mysql/log/33306/binlog/mysql-binlog.index

#基于行复制,binlog记录内容的方式,记录被操作的每一行

binlog_format='ROW'

#binlog日志文件保存的过期时间,过期后自动删除,在8.0版本前expire_logs_days的单位为天,最小值为1

#expire_logs_days = 90

#在MySQL8.0 版本中新增参数binlog_expire_logs_seconds,可以精确到秒,默认值为30天

binlog_expire_logs_seconds=604800

binlog_rows_query_log_events=on

#一般数据库中没什么大的事务,设成1~2M,默认32kb

binlog_cache_size = 2M

########replication settings########

#master status and connection information输出到表mysql.slave_master_info中

#master_info_repository = TABLE

#the slave's position in the relay logs输出到表mysql.slave_relay_log_info中

#relay_log_info_repository = TABLE

#开启binlog功能

#log_bin = bin.log

#sync_binlog = 1

#gtid_mode = on

#enforce_gtid_consistency = 1

#作为从库时生效,想进行级联复制,则需要此参数

#log_slave_updates

#binlog记录内容的方式,记录被操作的每一行

#binlog_format = row

#relay_log = relay.log

#作为从库时生效,中继日志relay-log可以自我修复

#relay_log_recovery = 1

#binlog_gtid_simple_recovery = 1

#作为从库时生效,主从复制时忽略的错误

#slave_skip_errors = ddl_exist_errors

########innodb settings########

根据服务器IOPS能力适当调整

一般配普通SSD盘的话,可以调整到 10000 - 20000

配置高端PCIe SSD卡的话,则可以调整更高,比如 50000 - 80000

#这个参数据控制Innodb checkpoint时的IO能力

innodb_io_capacity = 4000

innodb_io_capacity_max = 8000

#并发线程数,默认为0,代表线程数无上限,并发线程数应该设置为cpu核心数的两倍

innodb_thread_concurrency = 64

#用来高速缓冲数据和索引内存缓冲大小,InnoDB缓存的大小可以设置为主机内存的70%~80%

innodb_buffer_pool_size = 500M

#动态统计的功能,参数配置成off更合理些(默认是on)

innodb_stats_on_metadata=0

#innodb_buffer_pool_size的值是innodb_buffer_pool_instanes的值倍数最大为64g,

innodb_buffer_pool_instances = 8

#默认启用。指定在MySQL服务器启动时,InnoDB缓冲池通过加载之前保存的相同页面自动预热, 通常与innodb_buffer_pool_dump_at_shutdown结合使用

innodb_buffer_pool_load_at_startup = 1

#默认启用,指定在MySQL服务器关闭时是否记录在InnoDB缓冲池中缓存的页面,以便在下次重新启动时缩短预热过程。

innodb_buffer_pool_dump_at_shutdown = 1

#影响page cleaner线程每次刷脏页的数量

innodb_lru_scan_depth = 2000

#在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)

innodb_lock_wait_timeout = 30

innodb_old_blocks_time=1000

#使用O_DIRECT模式打开数据文件,用fsync()函数去更新日志和数据文件;

#innodb_flush_method = O_DIRECT

#可以减少刷新缓冲池的次数,从而减少磁盘 I/O

innodb_log_file_size = 200M

#指定有两个日志组

innodb_log_files_in_group = 2

#日志缓存,大的日志缓冲可以减少磁盘I/O

innodb_log_buffer_size = 16M

#innodb_undo_logs = 128

#innodb_undo_tablespaces = 3

#启用后,超过定义的阈值的撤消表空间将 innodb_max_undo_log_size被标记为截断,默认on

innodb_undo_log_truncate = 1

#定义撤消表空间的阈值大小

innodb_max_undo_log_size = 2G

#指定从InnoDB缓冲池刷新页面是否也会刷新同一范围内的其他脏页。

#默认值为0,设置为 0 禁用innodb_flush_neighbors相同范围内的脏页不会被刷新

#设置为 1 会刷新相同范围内的连续脏页,设置为 2 会刷新相同范围内的脏页。

innodb_flush_neighbors = 1

#开始碎片回收线程,等号后边控制该线程数量,默认是4,最大64;

innodb_purge_threads = 4

#innodb_large_prefix = 1

#启用此选项后,有关用户事务中的所有 死锁的 信息都会InnoDB记录在 mysqld 错误日志中。默认off

innodb_print_all_deadlocks = 1

innodb_strict_mode = 1

innodb_sort_buffer_size = 64M

#每次commit 日志缓存中的数据刷到磁盘中

innodb_flush_log_at_trx_commit=1

innodb_autoextend_increment=64

innodb_concurrency_tickets=5000

#限制Innodb能打开的表的数量

innodb_open_files=65536

#作用:使每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。

#分配原则:只有使用不使用。但DB还需要有一个公共的表空间

innodb_file_per_table=1

innodb_checksum_algorithm=0

#单独指定数据文件的路径与大小

innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:5G

#指定临时文件的大小

innodb_temp_data_file_path = ibtmp1:200M:autoextend:max:20G

innodb_buffer_pool_dump_pct = 40

innodb_page_cleaners = 4

innodb_purge_rseg_truncate_frequency = 128

binlog_gtid_simple_recovery=1

log_timestamps=system

#transaction_write_set_extraction=MURMUR32

#密码复杂度5.7

#default_authentication_plugin=mysql_native_password

#密码复杂度8.0

default_authentication_plugin=caching_sha2_password