首页 > 数据库 >MySQL 8.0 需要调整哪些参数【转】

MySQL 8.0 需要调整哪些参数【转】

时间:2022-12-30 16:59:04浏览次数:37  
标签:8.0 log 哪些 MySQL binlog innodb mysql data size

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

1 my.cnf 示例

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

[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 的一些重要参数,当然,可能并不完整,朋友们可以留言进行补充或者参与讨论。

转自

MySQL 8.0 需要调整哪些参数
https://mp.weixin.qq.com/s?__biz=MzIyOTUzNjgwNg==&mid=2247484596&idx=1&sn=7c050e483419becdc4e3454c49599140&chksm=e84061fddf37e8ebcf2c299e32fad6ea18ec4ea5ccba5189e691ee86e6fc1548aa5134a3ba83&scene=21#wechat_redirect

标签:8.0,log,哪些,MySQL,binlog,innodb,mysql,data,size
From: https://www.cnblogs.com/paul8339/p/17015259.html

相关文章

  • MySQL 5.7 和 8.0 几处细节上的差异【转】
    MySQL8.0相对于MySQL5.7,有很多新特性,比如:快速加列、原子DDL、不可见索引、额外端口、角色管理等。这一节内容,就不讲这些新特性了,只来聊聊最近在工作学习过程中遇到的......
  • MySQL 5.7 并行复制实现原理与调优【转】
    MySQL5.7并行复制时代众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL5.7版本已经支持“真正”的并行复制功能,官......
  • Mysql自动化安装脚本
    此脚本是Mysql安装脚本,有需要朋友可以参考,脚本内容如下:系统环境:CentOS7.4软件版本:5.7.29[root@localhost~]#vimauto_install_mysql.sh#!/bin/bash#2020-3-1210:31:01#B......
  • 安防监控系统中,工业PoE交换机供电有哪些优点?
    ​   POE(PowerOverEthernet)指的是在现有的以太网Cat.5布线基础架构不作任何改动的情况下,在为一些基于IP的终端(如IP电话机、无线局域网接入点AP、网络摄像机等)传输......
  • MYSQL最朴素的监控方式【转】
    对于当前数据库的监控方式有很多,分为数据库自带、商用、开源三大类,每一种都有各自的特色;而对于mysql数据库由于其有很高的社区活跃度,监控方式更是多种多样,不管哪种监控方......
  • Mysql权限整理及授权命令
    1、创建用户MariaDB[(none)]>usemysql;MariaDB[mysql]>createusertest@'%'identifiedby'123456';注意:test->新增的用户名,123456->用户密码,%表示任何IP都可访......
  • MySQL Binlog日志三种模式
    binlog 基本认识MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制......
  • mysql 修改密码
    1.使用mysqladmin修改密码使用mysqladmin命令修改MySQL的root用户密码格式为:mysqladmin-u用户名-p旧密码password新密码例如(root用户,root密码,修改密码为1234):......
  • 常用的shell有哪些?
    Linux是一个开源的操作系统,由分布在世界各地的多个组织机构或个人共同开发完成,每个组织结构或个人负责一部分功能,最后组合在一起,就构成了今天的Linux。例如:Linux内核......
  • MySQL高级
    大小写规范MySQL在Windows下是大小写不敏感的,会全部转换成小写MySQL在Linux下的大小写规则:数据库名、表名、表的别名、变量名是严格区分大小写的;关键字、函数......