Mysql5.7配置文件

417 阅读10分钟

Mysql5.7配置文件

例:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[mysqld]
server_id=23301
# 设置3306端口
port = 33116

# 设置mysql的安装目录
basedir=D:\\mysql\\mysql-5.7.43

# 设置 mysql数据库的数据的存放目录(MySQL8.0+ 不需要以下配置,系统自己生成即可,否则有可能报错)
datadir=D:\\mysql\\mysql-5.7.43\\data

# 允许最大连接数
max_connections=2000

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小
max_allowed_packet=2048M

log-error=D:\\mysql\\mysql-5.7.43\\logs\\errlog.log

#不指定log文件,默认mysqld-bin.00000* 作为文件名称;
log-bin=D:\\mysql\\mysql-5.7.43\\logs\\mysql-bin.log

#基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)
binlog_format=Row
#设置进行同步的数据库,这条不写表示同步全部数据库
binlog_do_db=lianghua

#binlog每个日志文件大小
max-binlog-size = 1024M

#设置binlog清理时间
expire_logs_days = 14

#binlog缓存大小
binlog_cache_size = 2048m

#最大binlog缓存大小
max_binlog_cache_size = 4096m

relay_log_recovery  = 1
#二进制日志(binary log)同步到磁盘的频率
sync_binlog= 1
#每次事务提交将日志缓冲区写入log file,并同时flush到磁盘
innodb_flush_log_at_trx_commit = 1

innodb_io_capacity=100
innodb_io_capacity_max=200
innodb_flush_neighbors=1
innodb_buffer_pool_size=24576M
thread_cache_size=64
back_log=1000
innodb_log_file_size=3072M
default-time_zone='+8:00'

基本配置

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8mb4

[mysqld]
#序列号 同一集群里唯一 开启日志 binlog等必须配置
server_id=1

# 设置3306端口
port = 3306

# 设置mysql的安装目录
basedir=D:\\mysql\\mysql-5.7.43

# 设置 mysql数据库的数据的存放目录
datadir=D:\\mysql\\mysql-5.7.43\\data

# 允许最大连接数
max_connections=500

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 设置时区
default-time-zone='+8:00'

优化相关配置

innodb

innodb_buffer_pool_size *

这个是Innodb最重要的参数,主要作用是缓存innodb表的索引,数据,插入数据时的缓冲,默认值为128M。 如果是一个专用innodb引擎的服务器,那么它可以占到内存的70%-80%。并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。 如果你的数据比较小,那么可分配是你的数据大小+10%左右做为这个参数的值。例如:数据大小为50M,那么给这个值分配innodb_buffer_pool_size=64M就够了 查询: 在线配置:

innodb_buffer_pool_size=16G

innodb_max_dirty_pages_pct *

表示InnoDB存储引擎中脏页的最大比例。当脏页的比例超过该值时,InnoDB会加快刷新脏页的速度,以防止脏页积累过多。

建议50 即 50%

innodb_max_dirty_pages_pct=50

innodb_io_capacity | innodb_io_capacity_max *

在MySQL5.1.X版本中,由于代码写死,因此最多只会刷新100个脏页到磁盘、合并20个插入缓冲,即使磁盘有能力处理更多的请求,也只会处理这么多,这样在更新量较大(比如大批量INSERT)的时候,脏页刷新可能就会跟不上,导致性能下降。 而在MySQL5.5.X版本里,innodb_io_capacity参数可以动态调整刷新脏页的数量,这在一定程度上解决了这一问题。 innodb_io_capacity参数默认是200,单位是页。该参数设置的大小取决于硬盘的IOPS,即每秒的输入输出量(或读写次数)。 建议 innodb_io_capacity 设置为 innodb_io_capacity_max的一半 SAS 200 SSD 3000

innodb_io_capacity=200
innodb_io_capacity_max=400

innodb_log_file_size *

这个参数指定在一个日志组中,每个log的大小。 innodb的logfile就是事务日志,用来在mysql crash后的恢复。所以设置合理的大小对于mysql的性能非常重要,直接影响数据库的写入速度,事务大小,异常重启后的恢复。 频繁写入建议 2G

innodb_log_file_size=2G

innodb_log_buffer_size *

事务在内存中的缓冲,也就是日志缓冲区的大小,默认设置即可,具有大量事务的可以考虑设置为64-512MB。 一般来说,日志文件的全部大小,应该足够容纳服务器一个小时的活动内容。

innodb_log_buffer_size=128M

innodb_flush_log_at_trx_commit *

控制事务的提交方式,也就是控制log的刷新到磁盘的方式,这个参数只有3个值(0,1,2).默认为1。 当这个值为0时:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。mysqld进程的崩溃会删除崩溃前最后一秒的事务。 当这个值为1时:innodb 的事务LOG在每次提交后写入日值文件,并对日值做刷新到磁盘。这个可以做到不丢任何一个事务。 当这个值为2时:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,在对日志文件的刷新在值为2的情况也每秒发生一次。但需要注意的是,由于进程调用方面的问题,并不能保证每秒100%的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。 对一致性高的业务,如支付等配置为1, 配合sync_binlog使用

innodb_flush_log_at_trx_commit=1

innodb_flush_method *

这个参数控制着innodb数据文件及redo log的打开、刷写模式,有三个值:fdatasync(默认),O_DSYNC,O_DIRECT。 fdatasync:调用fsync()去刷数据文件与redo log的buffer O_DSYNC时:innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件 O_DIRECT时:innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log。 在类unix操作系统中,文件的打开方式为O_DIRECT会最小化缓冲对io的影响,该文件的io是直接在用户空间的buffer上操作的,并且io操作是同步的,因此不管是read()系统调用还是write()系统调用,数据都保证是从磁盘上读取的

innodb_flush_method=O_DIRECT

innodb_read_io_threads|innodb_write_io_threads *

在MySQL5.1.X版本中,innodb_file_io_threads参数默认是4,该参数在Linux系统上是不可更改的,但Windows系统上可以调整。这个参数的作用是:InnoDB使用后台线程处理数据页上读写I/O(输入输出)请求的数量。

在MySQL5.5.X版本中,或者说是在InnoDB Plugin1.0.4以后,就用两个新的参数,即innodb_read_io_threads和innodb_write_io_threads,取代了innodb_file_io_threads如此调整后,在Linux平台上就可以根据CPU核数来更改相应的参数值了,默认是4。

假如CPU是2颗8核的,共16核,那么可以设置: innodb_read_io_threads = 8 innodb_write_io_threads = 8

如果数据库的读操作比写操作多,那么可以设置: innodb_read_io_threads = 10 innodb_write_io_threads = 6

# 写线程个数,默认是4个
innodb_write_io_threads=4
# 读线程个数,默认是4个
innodb_read_io_threads=4

innodb_purge_threads

由于每次DML操作都会生成Undo页,系统需要定期对这些undo页进行清理,也就是所谓purge操作。在5.5之前这些都是在master线程中完成,但5.5及之后的版本可以通过innodb_purge_threads来控制是否使用独立线程进 行purge操作。 最大32

innodb_purge_threads=4

innodb_page_cleaners

脏页刷新线程数

innodb_page_cleaners=4

innodb_open_files

限制Innodb能打开的表的数据,默认为300,数据库里的表特别多的情况,可以适当增大为1000。innodb_open_files的大小对InnoDB效率的影响比较小。 但是在InnoDBcrash的情况下,innodb_open_files设置过小会影响recovery的效率。所以用InnoDB的时候还是把innodb_open_files放大一些比较合适。

innodb_open_files=1000

skip-grant-tables

[mysqld]
skip-grant-tables

skip-grant-tables 是 MySQL 数据库服务器的一个启动选项,允许用户在没有权限检查的情况下连接到 MySQL 服务器。这通常用于在忘记 root 密码或权限系统出现问题时恢复对数据库的访问。然而,使用 skip-grant-tables 选项启动 MySQL 服务器会大大增加安全风险,因为它允许任何用户无需密码即可访问数据库。

binlog

# binlog存储路径,不指定log文件,默认mysqld-bin.00000* 作为文件名称;
log-bin=D:\\mysql\\mysql-5.7.43\\log\\mysql-bin.log

# Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中
# Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。
# Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。
binlog_format=Row

# binlog每个日志文件大小
max-binlog-size = 1024M

# 设置binlog清理时间(单位:天)
expire_logs_days = 14

# 此参数表示只记录指定数据库的二进制日志,默认全部记录
binlog_do_db = db1 
binlog_do_db = db2

# 此参数表示不记录指定的数据库的二进制日志
binlog_ignore_db = db3 
binlog_ignore_db = db4

# binlog缓存大小
binlog_cache_size = 4m

# 最大binlog缓存大小
max_binlog_cache_size = 512m

#从库设置 relay_log_recovery的默认值是0(关闭状态)** 。当设置为1时,它会在slave从库宕机后,如果relay-
#log损坏了,导致一部分中继日志没有处理,自动放弃所有未执行的relay-log,并且重新从master上获取
#日志,从而保证relay-log的完整性。建议开启这个功能,所以可以将relay_log_recovery的值设置为1来启用它。
relay_log_recovery  = 1
# 写缓存多少次,刷一次磁盘,默认 0 ,可配合innodb_flush_log_at_trx_commit使用
# 0表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘
# 1 表示每一条事务提交都会立即写磁盘
# n 则表示 n 个事务提交才会写磁盘
sync_binlog=1

#innodb_flush_log_at_trx_commit这个参数控制着InnoDB存储引擎在事务提交时,何时将重做日志(redo log)写入并刷新到磁盘上。
#当innodb_flush_log_at_trx_commit设置为1时,每次事务提交都会进行一次日志文件的写入和刷新操作,
#这确保了数据的完整性和持久性,但可能会对性能产生一定的影响,因为频繁的磁盘I/O操作会增加系统负担。
innodb_flush_log_at_trx_commit = 1