前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 8.0 需要调整哪些参数

MySQL 8.0 需要调整哪些参数

作者头像
数据库交流
发布2022-06-15 13:59:11
1.4K0
发布2022-06-15 13:59:11
举报
文章被收录于专栏:悦专栏悦专栏

这一节内容来聊聊新部署的 MySQL 8.0,需要调整哪些参数。包括一个 my.cnf 的示例和重要参数的解释及建议。

1 my.cnf 示例

首先列出一个 8.0 my.cnf 的实例,这个只针对普通的单实例或者主从环境,对于其他环境,比如 MGR,可能有更多的一些参数需要调整。并且也不是最完整,最终要根据自己实际环境进行调整。

代码语言:javascript
复制
[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port    = 3306
socket  = /tmp/mysql.sock

##  dir set
datadir           = /data/mysql/data
innodb_data_home_dir   = /data/mysql/data
innodb_log_group_home_dir = /data/mysql/data
log-bin           = /data/mysql/binlog/mysql-bin
log_bin_index             = /data/mysql/binlog/mysql-bin.index  
relay-log         = /data/mysql/binlog/mysql-relay-bin
tmpdir            = /data/mysql/tmpdir
slow_query_log_file   = /data/mysql/log/mysql-slow.log
general_log_file   = /data/mysql/log/mysql-general.log
log-error         = /data/mysql/log/mysql.err

## slave and binlog
server-id = 6666             
skip-slave-start = 0       
read_only = 0          
binlog_format = row             
log-slave-updates = 1
master_info_repository = table
relay_log_info_repository = table
relay_log_purge = 1
relay_log_recovery = 1
sync_binlog = 100                 

binlog_cache_size = 1M
binlog_expire_logs_seconds = 2592000
log_bin_trust_function_creators = 1         
slave_net_timeout=60                
#binlog_error_action="IGNORE_ERROR"     

innodb_autoinc_lock_mode=1          

## 
back_log = 200
bulk_insert_buffer_size = 8M            
#character-set-server = utf8
lower_case_table_names = 1              

## 基线
local-infile = off
skip-networking = off
skip-name-resolve = on 

## connect
max_allowed_packet = 32M
max_connect_errors = 1000
max_connections = 3000
wait_timeout = 3600            
interactive_timeout = 3600          

table_open_cache = 4096
thread_cache_size =  64
thread_stack = 192K
transaction-isolation = REPEATABLE-READ     # 
pid-file = mysql.pid

## slow
slow_query_log = 1              
long_query_time = 1
log-slow-admin-statements
log_queries_not_using_indexes = 0
slow_launch_time = 1
read_buffer_size = 4M               
read_rnd_buffer_size = 8M           
sort_buffer_size = 8M
join_buffer_size = 32M
tmp_table_size = 128M
max_heap_table_size = 128M

default-storage-engine = innodb
explicit_defaults_for_timestamp = on           

## innodb
innodb_buffer_pool_size = 1G                   
innodb_max_dirty_pages_pct = 80         
innodb_thread_concurrency = 8           
innodb_buffer_pool_instances = 2        
innodb_flush_log_at_trx_commit = 2      
innodb_read_io_threads = 8          
innodb_write_io_threads = 4         
innodb_io_capacity = 1000
innodb_io_capacity_max = 2000
innodb_lru_scan_depth = 1024
innodb_use_native_aio = 1
innodb_flush_neighbors = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1

innodb_data_file_path=ibdata:1G:autoextend
innodb_log_files_in_group = 3
innodb_log_file_size = 2G
innodb_file_per_table = 1 

innodb_flush_method = O_DIRECT
innodb_strict_mode = 1
innodb_lock_wait_timeout = 30
innodb_log_buffer_size = 16M
innodb_adaptive_flushing = 1
innodb_change_buffering = all
innodb_purge_threads = 4            
innodb_purge_batch_size = 300           

innodb_old_blocks_time = 1
innodb_fast_shutdown = 0
performance_schema = 1
innodb_print_all_deadlocks = 1
innodb_sort_buffer_size = 4M 

innodb_page_size = 16k
gtid_mode=on
enforce_gtid_consistency=on     

table_open_cache_instances=16
binlog_rows_query_log_events=1      


## pasword
default_password_lifetime=0 

[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
no-auto-rehash
prompt=\p@\d>\_

[mysqld_safe]
open-files-limit = 28192

[mysqlhotcopy]
interactive-timeout

2 重要参数解释

port

端口

socket

指定 socket 文件

datadir

数据目录的路径

log-bin

控制是否开启 Binlog,建议所有实例都开启 Binlog。在 MySQL 8.0 之前的版本,默认情况下禁用二进制日志,如果增加了该参数,则会开启 Binlog。从 MySQL 8.0 开始,无论是否设置了该参数,默认都开启 Binlog。后面可不带字符串,则使用主机名来定义 Binlog 文件,如果后面字符串是类似例子中的 /data/mysql/binlog/mysql-bin,则表示把 Binlog 存放在 /data/mysql/binlog/ 文件下,并以 mysql-bin 前缀命名。

log_bin_index

Binlog 文件索引文件的名称

binlog_format

二进制日志格式,可选择的日志格式有三种:statement、row、mix,具体介绍看查看官方文档:https://dev.mysql.com/doc/refman/8.0/en/replication-formats.html。生产环境通常建议设置为 row,安全性最高。

relay-log

中继日志的名称。

slow_query_log

8.0 版本下,默认也是关闭 Slow Log 的,如果要开启,需要将 slow_query_log 设置为 1。

long_query_time

查询超过多少秒,则会记录到慢查询日志中,通常建议设置为 1,如果业务要求 MySQL 有更高的 QPS,则可以设置为 0.1 秒,发现慢查询及时优化。

slow_query_log_file

慢查询日志路径和名称。

server-id

主从或者 MGR 架构,需要将所有成员的 server id 设置的不一样。

read_only

主库关闭 read_only;从库视架构而定,通常从库开启 read_only。

log-slave-updates

表示从库从主库同步数据时,是否也写入从库自己的 Binlog。级联(A->B->C)情况下,中间的机器(B)必须要开启。通常建议都开启。这里要注意的是,从 MySQL 8.0.26,该参数改为了 log_replica_updates。

sync_binlog

控制 MySQL 服务器将二进制日志同步到磁盘的频率。对安全性要求较高的情况,建议设置成 1。各种值对应的效果,可查看官方文档:https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_log_slave_updates。

binlog_expire_logs_seconds

Binlog 过期时间,单位秒。在以往的版本一般使用的是 expire_logs_days,该参数的单位为天。

lower_case_table_names

是否区分大小写,建议设置为1,各种值表示的含义可参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names。

max_connections

最大连接数,默认为 151,通常建议设置 1000 以上,当然也看具体配置。

wait_timeout

关闭非交互连接之前等待活动的秒数,默认 28800 秒,也就是 8 小时,建议设置小一点,防止空闲连接过多,比如设置为:3600。

interactive_timeout

关闭交互式连接之前等待活动的秒数,默认也是 28800 秒。也建议设置的小一点,比如 3600。

transaction-isolation

事务隔离级别,默认为 REPEATABLE READ,四种事务隔离级别的描述可参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html。

通常也是 REPEATABLE READ 和 READ COMMITTED 二选一,如果能接受幻读,业务可能是高并发的场景,可以配置成 RC;如果不能接受幻读,就设置成 RR 隔离级别。

innodb_buffer_pool_size

缓冲池的大小,对性能影响非常大,通常设置为机器内存的 50%-80%。

innodb_buffer_pool_instances

InnoDB 缓冲池的区域数,如果配置大于 1 的值,要求 innodb_buffer_pool_size 的值大于或等于 1G。将缓冲池划分多个区域,可以减少不同线程读取和写入缓存页时的争用,可提高并发性。

innodb_flush_log_at_trx_commit

控制 redo log 的写入策略,可设置为 0,1,2。

0:事务提交时,在事务提交时,每秒触发一次 redo log buffer 写磁盘操作,并调用操作系统 fsync 刷新 IO 缓存。

1:事务提交时,InnoDB 立即将缓存中的 redo 日志写到日志文件中,并调用操作系统 fsync 刷新 IO 缓存;

2:事务提交时,InnoDB 立即将缓存中的 redo 日志写到日志文件中,但不是马上调用 fsync 刷新 IO 缓存,而是每秒只做一次磁盘 IO 缓存刷新操作。

如果想要数据最为安全,可设置为 1,只是性能会下降一部分;

将参数设置为 0 时,如果数据库崩溃,最后 1秒钟的 redo log 可能会由于未及时写入磁盘文件而丢失,这种方式尽管效率最高,但是最不安全。

将参数设置为 2 时,如果数据库崩溃,由于已经执行了重做日志写入磁盘的操作,只是没有做磁盘 IO 刷新操作,因此,只要不发生操作系统崩溃,数据就不会丢失,这种方式是对性能和安全的一种折中处理。

innodb_io_capacity

控制每秒可用于 InnoDB 后台任务的 I/O 数,也就是 IOPS。如果是 SSD,可设置 5000 以上。

innodb_data_file_path

系统表空间数据文件的名称、大小和属性。默认为 12M,很多场景不适合,建议设置为 1G。

innodb_log_files_in_group

Redo Log 的个数,MySQL 以循环的方式写入 Redo Log 到这些文件。建议是指 2 或者大于 2 的值。

innodb_log_file_size

Redo Log 的大小,默认 48M,建议设置为 1 或者 2G,因为过小可能会导致 Redo Log 频繁切换。

innodb_file_per_table

是否开启独立表空间,建议设置为 1,即开启独立表空间。独立表空间,每一张表都会有独立的表空间文件,碎片率低,方便维护。

innodb_lock_wait_timeout

InnoDB 行锁等待时间,默认 50 秒,发生锁等待超时时,当前语句会回滚

gtid_mode=on

是否启用基于 GTID 的日志记录,以及日志可以包含的事务类型。可设置的值如下:

  • OFF: 新的事务和复制的事务都必须是匿名的。
  • OFF_PERMISSIVE: 新事务是匿名的。复制的事务可以是匿名事务或 GTID 事务。
  • ON_PERMISSIVE: 新事务是 GTID 事务。复制的事务可以是匿名事务或 GTID 事务。
  • ON:新事务和复制事务都必须是 GTID 事务。

建议设置为 ON。

enforce_gtid_consistency=on

是否允许违反 GTID 一致性,有以下值可以设置:

  • OFF:允许所有事务违反 GTID 一致性。
  • ON: 不允许任何事务违反 GTID 一致性。
  • WARN:允许所有事务违反 GTID 一致性,但在这种情况下会生成警告。

建议设置成 ON,保证基于 GTID 的复制时,主从数据一致。

这些就是 MySQL 8.0 的一些重要参数,当然,可能并不完整,朋友们可以通过文章底部的“发消息”进行补充或者参与讨论。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悦专栏 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这一节内容来聊聊新部署的 MySQL 8.0,需要调整哪些参数。包括一个 my.cnf 的示例和重要参数的解释及建议。
  • 1 my.cnf 示例
  • 2 重要参数解释
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档