MYSQL--基础--8.2--my.cnf--调优

MYSQL–基础–8.2–my.cnf–调优




## 定义客户端连接信息,端口号、socket 存放位置
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock


## Mysql 基本信息,端口号、socket、安装目录、数据存放目录、临时目录
[mysqld]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
temdir = /usr/local/mysql/data


## 禁止 Mysql 对外部连接进行 DNS 解析,加快连接速度。开启后所有远程连接主机只能使用 IP 的方式

# skip-name-resolve


## 1. 跳过外部锁定,减少出错几率、增强稳定性
## 2. External-locking用于多进程条件下为MyISAM数据表进行锁定
skip_external_locking


## 禁止 SQL 读取本地文件
local-infile = 0


## 默认字符集 utf8
character-set-server = utf8


## 默认存储引擎
default-storage-engine = innodb


## 开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘 IO 开销,影响性能
# general_log = on

## 查询日志存放位置及文件名
# general_log_file = /usr/local/mysql/data/mysql.log


## 错误日志位置跟文件名
log-error = /usr/local/mysql/data/error.log


## 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句( 一般临时开启即可 )
# slow_query_log = on

## 定义执行时间超过多少秒为慢查询,默认 10s
# long_query_time = 2


## 定义慢查询日志存放位置
# slow_query_log_file = /usr/local/mysql/data/slow.log


## Mysql Server 唯一标识,用来做主同同步( 主从时开启 )
# server-id = 1


## 开启 binlog ( 二进制 ) 日志,主要用来做增量备份跟主从同步
log-bin = mysql-bin


## Mysql binlog 的日志格式,Statement、ROW 跟 Mixed( 混合模式 )
binlog_format = mixed


## 二进制日志缓冲大小,此参数是为每 Session 单独分配的,当一个线程开始一个事务时,Mysql 就会为此 Session 分配一个 binlog cache,当这个事务提交时,binlog cache 中的数据被写入 binlog 文件
## 通过 show status like 'binlog_cache%'; 来查看使用 binlog cache 的次数及使用磁盘的次数
binlog_cache_size = 2M


## 这个参数对 Mysql 系统来说很重要,不仅影响到 binlog 对 Mysql 所带来的性能损耗,还影响到 Mysql 中数据的完整性。
 
## 值为 n 时代表进行 n 次事务提交后,Mysql 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
## 默认:0
## 设置为 0 时:代表事务提交后,Mysql 不做 fsync 之类的磁盘同步指令刷新 binlog_cache 中的信息到磁盘,而让 Filesystem 自行决定什么时候同步,或者 cache 满了之后才同步磁盘。性能最好,但是风险也最大。当系统崩溃时 binlog_cache 中的所有 binlog 信息都会丢失。
## 设置为 1 时:是最安全但是性能损耗最大。当系统崩溃时,最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有实质性的影响。
sync_binlog = 0


## 保留 30 天的 binlog 日志,系统重启、执行 flush logs 或 binlog 日志文件大小达到上限时删除 binlog 日志
expire_logs_days = 30


## Mysql 连接请求队列存放数,当某一时刻客户端连接请求过多,造成 Mysql Server 无法为其建立连接时存放的数量,最大 65535( 增大时需同时调整 OS 级别的网络监听队列限制 )
back_log = 500


## Mysql 最大连接数,直接影响 Mysql 应用的并发处理能力( 500~1000 是个比较合适的值,注意每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存 )
max_connections = 1000

## 服务器关闭非交换连接之前等待活动的秒数,默认 28800 秒( 注意:在 my.cnf 中修改这个参数需要配合 interactive_timeout (超时间隔)参数一起修改,否则不生效)
##( Mysql 处理完一条连接后所等待释放的时间,如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误 )
##( 如果这个值很低,比如 5 ,可能会导致出现 "ERROR 2006 (HY000) MySQL server has gone away" 的错误,出现这个错误还有可能是 max_allowed_packet 设置过小 )
## 真实案例
wait_timeout = 100
interactive_timeout = 100

## 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关( 达到此上限后会无条件阻止其连接数据库 ,默认 100 )

max_connect_errors = 2000

## 连接超时时间为 20 秒

connect_timeout = 20


## 网络传输中一次消息量的最大值,默认 4M ,必须设为 1024 的整倍数
max_allowed_packet = 16M

## 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源( 对性能有影响,默认 2000 )
table_open_cache = 2000


## Mysql 读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,Mysql 会为其分配一段内存缓冲区( 默认 128K ,此参数为每线程分配 )

read_buffer_size = 512K

## Mysql 随机 Query 缓冲区大小,当按任意顺序读取行时,将分配一个随机读取缓冲区。如进行排序查询时,Mysql 会首先扫描该缓冲,避免磁盘搜索,提高查询速度( 默认 256K ,该缓冲也是为每线程分配 )

read_rnd_buffer_size = 512K

## 系统中对数据进行排序时使用的 buffer ,如果系统中排序比较大,且内存充足、并发不大时,可以适当增大此值( 默认 256K ,此参数为每线程分配独立的 buffer )

sort_buffer_size = 512K

## join 为 ALL、index、rang 或 index_merge 时使用的 buffer( 默认 256K ,每 Thread 都会建立自己独立的 buffer )
join_buffer_size = 512K


## 参数表示每线程的堆栈大小
thread_stack = 256K


## Thread Cache 池中存放的连接线程数( 此池中的线程不是启动服务时就创建的,而是随着连接线程的创建和使用,逐渐将用完的线程存入其中,达到此值后将不再缓存连接线程 )
## 缓存命中率计算公式:Thread_Cache_Hit = ( Connections - Thread_created ) / Connections * 100%
## 系统运行一段时间后,Thread Cache 命中率应该保持在 90% 以上

thread_cache_size = 64



# 1111111
## 决定是否缓存查询结果 即是否启用 query_cache 
## 这个变量有三个取值:0,1,2,分别代表了off、on、demand。   
## 0 为不使用( 若要关闭 query_cache 时,需同时将 query_cache_size 、query_cache_limit 设为 0 )
 
query_cache_type = 1


query_cache_size = 32M

## 查询缓冲大小,当重复查询时会直接从该缓冲中获取,但是当所查询表有改变时,缓冲的查询将失效( 频繁写入、更新、高并发的环境下建议关闭此缓冲 )

## 查询缓冲大小          
## 工作原理:
## 一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,把结果从缓存中返回给Client。但是当所查询表有改变时,缓冲的查询将失效

## 在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。
## 频繁写入、更新、高并发的环境下建议关闭此缓冲。


## 单个查询所能够使用的缓冲区大小
query_cache_limit = 1M


## 使用全文索引最小长度
ft_min_word_len = 1


## 事务隔离级别,为了有效保证并发读取数据的正确性( 默认 Repeatables Read 即:可重复读 )
## Innodb 有四种隔离级别:Read Uncommitted( 未提交读 )、Read Committed( 已提交读 )、Repeatable Read( 可重复读 )、Serializable( 可序列化 )

transaction_isolation = REPEATABLE-READ

## 临时表大小
tmp_table_size = 32M


## 用来缓存 MyISAM 存储引擎的索引( 默认 8M ,如果使用 Innodb 存储引擎,此值设为 64M 或更小 )
## 计算公式:key_reads / key_read_requests * 100% 的值小于 0.1%

key_buffer_size = 32M


## --------Innodb 存储引擎相关参数--------


## 关闭独享表空间,使用共享表空间
innodb_file_per_table = 0


## Innodb 存储引擎核心参数,用于缓存 Innodb 表的索引、数据( 默认 128M ,单独使用 Innodb 存储引擎且单一 Mysql 服务时建议设为物理内存的 70% - 80 % )
## 可以通过 show status like 'innodb_buffer_pool_%'; 来获取 innodb buffer pool 的实时状态信息
## Innodb_buffer_pool_pages_total 总共的 pages( Innodb 存储引擎中所有数据存放最小物理单位 page ,每个 page 默认为 16KB )
## Innodb_buffer_pool_pages_free  空闲的 pages
## Innodb_buffer_pool_pages_data  有数据的 pages
## Innodb_buffer_pool_read_requests  总共的 read 请求次数
## Innodb_buffer_pool_reads  读取物理磁盘读取数据的次数,即:在 buffer pool 中没有找到
## Innodb_buffer_pool_wait_free  因 buffer 空间不足而产生的 wait_free
## Innodb_buffer_pool_read_ahead_rnd  记录进行随机读的时候产生的预读次数
## Innodb_buffer_pool_read_ahead_seq  记录连续读的时候产生的预读次数
## Innodb_buffer_pool_size  使用率 = innodb_buffer_pool_pages_data / innodb_buffer_pool_pages_total * 100%
## Innodb_buffer_pool_read  命中率 = ( innodb_buffer_pool_read_requests - innodb_buffer_pool_reads )/ innodb_buffer_pool_read_requests * 100%
innodb_buffer_pool_size = 256M


## 使用系统自带的内存分配器,替代 innodb_additional_mem_pool_size 参数
innodb_use_sys_malloc = 1

## 指定一个大小为 512M 的、可扩展的 ibdata1 数据文件
innodb_data_file_path = ibdata1:512M:autoextend


## Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 4
innodb_read_io_threads = 4
innodb_write_io_threads = 4


## Innodb 线程并发数,0 为不限制,默认 0
innodb_thread_concurrency = 0


## Innodb 事务日志刷新方式 
 
## 当设为 0 时 提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘,极端情况下会丢失一秒的数据
## 当设为 0 时 为每秒同步一次,性能相对高一些。

## 当设为 1 时 提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。 
## 当设为 1 时 是最为安全的,但性能也是最差的。

## 当设为 2 时 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。
## 当设为 2 时 性能是最好的,但故障后丢失数据也最多( OS 跟主机硬件、供电足够安全可以选择,或对数据少量丢失可以接受 )。


innodb_flush_log_at_trx_commit = 2



## 事务日志所使用的缓冲区。Innodb 在写事务日志时,为了提高写 Log 的 IO 性能,先将信息写入 Innodb Log Buffer 中,当满足 Innodb_flush_log_trx_commit 参数或日志缓冲区写满时,再将日志同步到磁盘中。
## 设置大的日志缓冲可以减少磁盘I/O。
## 默认 8M ,一般设为 16~64M 即可,可以通过 show status like 'innodb_log%'; 查看状态


innodb_log_buffer_size = 8M


## 关闭数据库时把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_at_shutdown = 1


## 采用手工方式把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_now = 1


## 启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup = 1


## 采用手工方式把热数据加载到内存。
## 以上四条参数会快速预热 Buffer_pool 缓冲池,当机器正常重启后,热数据还保留在内存中,避免瞬间连接数爆满导致机器死机。
innodb_buffer_pool_load_now = 1



[mysqldump]
quick
## 使用 mysqldump 工具备份数据库时,当某张表过大时备份会报错,需要增大该值( 增大到大于表大小的值 )
max_allowed_packet = 4M


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值