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]>\_
 

你可能感兴趣的:(数据库,mysql)