Mysql /etc/my.cnf参数详解(三)

#binlog相关

log-bin = /data/mysql/log/bin/mysql-bin //开启binlog并配置路径

expire_logs_days = 7 //自动过期清理binlog

binlog-format = ROW //MySQL binlog有三种模式:Row、Statement 和 Mixed 。默认是Statement

binlog_cache_size = 4M //每个连接的binlog缓存

max_binlog_cache_size = 20G //connections * binlog_cache的最大值

binlog_rows_query_log_events = 1 //在row模式下..开启该参数,将把sql语句打印到binlog日志里面.默认是0(off);

binlog_row_image = FULL //默认为full,在binlog为row格式下,full将记录update前后所有字段的值,minimal时,只记录更改字段的值和where字段的值,

sync_binlog = 5 //参数sync_binlog=[N]表示每写缓冲多次就同步到磁盘

log_bin_trust_function_creators = 1 //存储函数有可能导致主从的数据不一致,所以开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。

sync_relay_log = 10000

//用于控制中继日志写入磁盘的变量,假设值为n,那么在中继日志每接受n次binlog事件之后就会调用fdatasync()函数将中继日志强制的刷入磁盘;相反,如果值为0,则写入OS的缓冲区内,由OS调度决定何时将中继日志刷入磁盘,这样一来如果在没有刷入之前报错了,那么中继日志就会丢失。默认值是10000,也就是每向中继日志中写入1w次binlog事件就将中继日志强制的刷入磁盘。

#redo相关

innodb_log_buffer_size = 256M //日志缓冲的大小,InnoDB改变数据的时候,它会把这次改动的记录先写到日志缓冲中

innodb_log_file_size = 1G //日志组中每个日志文件的字节大小。

innodb_log_files_in_group = 4 //日志文件中日志组。 InnoDB以循环方式写入文件。默认值(推荐值)为2,也就是两个ib_logfile文件。

innodb_flush_log_at_trx_commit = 2

innodb_flush_method = O_DIRECT

//innodb_flush_log_at_trx_commit=0,在提交事务时,InnoDB不会立即触发将缓存日志写到磁盘文件的操作,而是每秒触发一次缓存日志回写磁盘操作,并调用操作系统fsync刷新IO缓存

//innodb_flush_log_at_trx_commit=1,在每个事务提交时,InnoDB立即将缓存中的redo日志回写到日志文件,并调用操作系统fsync刷新IO缓存。

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

//fsync:默认值,使用fsync()系统调用来刷新数据文件和日志文件

//O_DSYNC:使用O_SYNC打开和刷新日志文件,使用fsync()刷新数据文件。(在很多UNIX版本上直接使用O_DSYNC会存在问题)

//O_DIRECT:使用O_DIRECT打开数据文件,使用fsync()来刷新数据文件和日志文件。生产环境中使用innodb_flush_method=O_DIRECT

#GTID相关

enforce_gtid_consistency = 1

gtid_mode = on

//https://zhuanlan.zhihu.com/p/35560204 一、GTID的概述:GTID //分成两部分,一部分是服务的UUid,另外一部分就是事务ID了,随着事务的增加,值依次递增。也就是说,GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID//代表了该实例上已经提交的事务数量。1、全局事物标识:global transaction identifieds。2、GTID事物是全局唯一性的,且一个事务对应一个GTID。

//3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。4、GTID用来代替classic的复制方法,不在使用binlog+pos开启复制。而是使用master_auto_post//ion=1的方式自动匹配GTID断点进行复制。5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。6、在传统的slave端,binlog是不用开启的,但是在GTID中,slave端的binlog是必须///开启的,目的是记录执行过的GTID(强制)。三、GTID比传统复制的优势:1、更简单的实现failover,不用以前那样在需要找log_file和log_Pos。

//2、更简单的搭建主从复制。3、比传统复制更加安全。4、GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。

#Full Text特性相关

innodb_ft_max_token_size = 84

innodb_ft_min_token_size = 3

ft_min_word_len = 4

//查询的word 的字符长度是否在区间 [innodb_ft_min_token_size, innodb_ft_max_token_size] 中。当长度小于innodb_ft_min_token_size 或者 大于innodb_ft_max_token_size //时,会忽略该词的搜索。ft_min_word_len参数控制取决于文本搜索的搜索词的最小长度。当搜索词的长度小于此值时,它将不会被搜索。

#IO相关

innodb_max_dirty_pages_pct = 75 //在InnoDB缓冲池中最大允许的脏页面的比例,当缓冲池中脏页的数量占据75%时,强制进行checkpoin,刷新一部分的脏页到磁盘。

innodb_write_io_threads = 8 //写线程数量

innodb_read_io_threads = 8 //读线程数量

innodb_io_capacity = 2000

innodb_io_capacity_max = 2500

innodb_flush_neighbors = 0 //innodb_flush_neighbors 刷新邻接页,对于高iops的磁盘,建议关闭此特性

//innodb_io_capacity表示磁盘io的吞吐量,默认值是200.对于刷新到磁盘页的数量,会按照inodb_io_capacity的百分比来进行控制。

//规则如下:在合并插入缓冲时,合并插入缓冲数量为innodb_io_capacity 值的5%。在从缓冲池刷新脏页时,刷新脏页的数量为innodb_io_capacity的值,也就是默认值200。

//如果使用了ssd,或者raid磁盘时,磁盘拥有更高的io速度,可以适当增加该参数的值。

#超时

interactive_timeout = 3600 //服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端

wait_timeout = 3600 //超时等待时间,单位秒,即一个connection在若干秒内无响应,则服务器切断与这个客户端的连接;

max_execution_time = 0 //用于控制单条语句最大允许执行时间的变量。超过这个时间,MySQL将会终止这条语句的执行,并返回一个错误信息。

innodb_lock_wait_timeout = 60 //默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错

net_read_timeout = 3600 //数据读取超时时间。 //当服务正在从客户端读取数据时,net_read_timeout控制何时超时。即客户端执行数据读取,等待多少秒仍未执行成功时自动断开连接。

net_write_timeout = 3600 //数据库写超时时间。和net_read_timeout意义类似

#事务

transaction-isolation = READ-COMMITTED //隔离级别,类似于DB2的CS隔离级别游标稳定读

#连接

#根据内存大小设置 4G以下:2048 8G:4096 16G:6144 32G以上:8192

max_connections=9999 //设置Mysql的最大连接数

max_connect_errors = 999999999 //指定允许连接不成功的最大尝试次数。5.7默认是100;如果到达这个数,那么服务器将不再允许新的连接,即便mysql仍正常对外提供服务

8 + (max_connections / 100)

thread_cache_size = 512 //用于缓存空闲的线程;

#数据包限制

max_allowed_packet = 1G //限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。

#慢日志

slow-query-log = 1

slow_query_log_file = /data/mysql/log/mysql-slow.log //开启慢日志

log_queries_not_using_indexes = 0 //该参数开启后会在慢日志里面记录所有全表扫描或者索引全扫描的 SQL,哪怕它并没有达到 long_query_time;

long_query_time = 1

log_slow_admin_statements = 1 //默认慢日志里不会记录 DDL 操作语句,如果需要记录,需要将该参数开启,该部分语句包括ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE //INDEX、DROP INDEX、OPTIMIZE TABLE和REPAIR TABLE

log_slow_slave_statements = 1 //如果从库开启慢日志,是否将复制线程执行的慢SQL记录到慢日志。注意如果master的binlog格式是row,则无论log_slow_slave_statements是否开启都不会记录复制相关的慢日志。

#表

table_open_cache = 2000

innodb_file_per_table = 1 //InnoDB的file-per-table表空间特性提供了一个更灵活的替代方案,每个InnoDB表及其索引都存储在一个单独的.ibd数据文件中。当truncate或drop存储在file-per-table表空间中的表时,可以回收磁盘空间

innodb_open_files = 10240

tmp_table_size = 256M

max_heap_table_size = 256M

//MySQL是多线程的,可能在同一时刻有很多的客户端访问某张特定的表。为了能最小化多个客户端在相同表上的不同状态问题,并发会话中访问的每张表都会单独打开。虽然这可能消耗过//多的内存,但是通常会提高系统的性能。table_open_cache系统参数是和max_connection相关的。例如200个并发运行的连接,需要指定表缓存的数量至少是200*N,其中N是执行的查询中//每个连接涉及到的表最大数量,换句话说,执行10次查询,很可能因为join了很多张表,实际打开的表数量是10的几倍。而且要确保你的操作系统能处理table_open_cache所指定的文件//描述符打开的数量。如果table_open_cache太高,MySQL可能会消耗完文件描述符,现象就是拒绝连接或者查询失败。

//tmp_table_size 控制内存临时表的最大值,超过限值后就往硬盘写,写的位置由变量 tmpdir 决定

//max_heap_table_size 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。

#锁

innodb_print_all_deadlocks = 1 //专门用于记录死锁日志,当发生死锁时,死锁日志会记录到 MySQL 的错误日志文件中。

#PS

performance_schema = ON //开启Performance Schema,是一个运行在较低级别里的具有监控MySQL Server执行的功能

performance-schema-instrument='wait/lock/metadata/sql/%=ON'

performance-schema-instrument='memory/%=COUNTED'

performance-schema-consumer-events-transactions-current=ON

performance-schema-consumer-events-transactions-history=ON

performance-schema-instrument='transaction%=ON'

[client]

default-character-set = utf8mb4

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

[mysql]

default-character-set = utf8mb4

#prompt=(\u@\h) [\d]>\_

相关推荐
希忘auto29 分钟前
详解MySQL安装
java·mysql
运维佬37 分钟前
在 MySQL 8.0 中,SSL 解密失败,在使用 SSL 加密连接时出现了问题
mysql·adb·ssl
Leo.yuan41 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
Runing_WoNiu1 小时前
MySQL与Oracle对比及区别
数据库·mysql·oracle
天道有情战天下1 小时前
mysql锁机制详解
数据库·mysql
看山还是山,看水还是。1 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
谷新龙0011 小时前
Redis运行时的10大重要指标
数据库·redis·缓存
CodingBrother1 小时前
MySQL 中单列索引与联合索引分析
数据库·mysql
精进攻城狮@1 小时前
Redis缓存雪崩、缓存击穿、缓存穿透
数据库·redis·缓存
小酋仍在学习2 小时前
光驱验证 MD5 校验和
数据库·postgresql