7.Mysql之my.cnf配置参数(唯一)

1.前言

  在本节没有出来以前,我看过很多的关于Mysql的配置文件参数,网上也有很多模板,这里我想将之前看到的一些有用的配置参数(可以用到生产环境)的给重新整理一份分享出来,如有错误或者不足还请后来的读者可以指出。

2.my.cnf配置参数

  

    
#[client]
  待补充。。。该选项组一般是客户端程序读取的配置块。可以不写
[mysql]
prompt="u@mysqldb R:m:s [d]> "        ##这个是mysql的命令提示符,该参数有时候可能在单实例的配置中可能不会生效,有时候我们可以将它放到全局配置文件/etc/my.cnf中
no-auto-rehash                             ##这个是不启用自动补全功能
[mysqld]
########basic settings########
user = mysql server
-id = 11 port = xx bind_address = xx.xx.xx.xx #根据实际情况修改 character_set_server=utf8mb4 skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 datadir = /data/mysql_data #根据实际情况修改,建议和程序分离存放 #transaction_isolation = READ-COMMITTED ##5.7和8.0默认隔离级别 explicit_defaults_for_timestamp = 1 #join_buffer_size = 134217728 #tmp_table_size = 67108864 tmpdir = /tmp sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" interactive_timeout = 1800 wait_timeout = 1800 #read_buffer_size = 16777216 #read_rnd_buffer_size = 33554432 #sort_buffer_size = 33554432 ########log settings######## log_error = xxxxxx       ##根据自己路径进行修改 slow_query_log = 1 slow_query_log_file = slow.log ##根据自己路径修改 log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 long_query_time = 2 min_examined_row_limit = 100
expire_logs_days = 90   ##binlog二进制保存有效期。


########
replication settings######## master_info_repository = TABLE relay_log_info_repository = TABLE log_bin = bin.log ##根据自己的路径进行修改 sync_binlog = 1      ##双一之一 gtid_mode = on enforce_gtid_consistency = 1 log_slave_updates ##该参数是开启slave的binlog日志功能(常用与高可用架构中) binlog_format = row relay_log = relay.log relay_log_recovery = 1 binlog_gtid_simple_recovery = 1 slave_skip_errors = ddl_exist_errors

#####并行复制(主要指从库上的SQL线程进行并行回放)##########
slave_parallel_type=LOGICAL_CLOCK ##该参数要求主备两库上面都需要进行配置,而下面两个参数只需要在从库上配置即可
slave_perserve_commit_order=1
slave_parallel_workers=N ##开启N个worker线程进行并行回放
########innodb settings######## innodb_page_size
= 8192 ##数据页的大小 innodb_buffer_pool_size = 6G #根据实际情况修改,很重要,一般会配置为物理机内存的70% innodb_buffer_pool_instances = 8 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_lru_scan_depth = 2000 innodb_lock_wait_timeout = 5 innodb_io_capacity = 4000 ##这里是磁盘iops的能力,一般不会限制它的一下,填写磁盘的最大的iops即可 innodb_io_capacity_max = 8000 ##这可以个人可以填写磁盘顺序读的io(带宽能力) innodb_flush_method = O_DIRECT innodb_file_format = Barracuda innodb_file_format_max = Barracuda
innodb_log_files_in_group = 4  ##这个是配置redo log日志的个数 innodb_log_group_home_dir
= /redolog/ #根据实际情况修改 innodb_undo_directory = /undolog/ #根据实际情况修改 innodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_flush_neighbors = 0  ##指定是否冲洗从一个页面InnoDB 缓冲池也可以清空其他脏页在相同的程度。设置为0将禁用 innodb_flush_neighbors。处于相同程度的脏页不会被刷新
innodb_log_file_size = 4G #根据实际情况修改,生产环境一般都会配置4G innodb_log_buffer_size = 16777216
innodb_data_file_path = ibdata1:1G:autoextend  ###按我理解是当系统表空间(ibdata1)达到阈值时,它会按照1G的容量进行自动扩容
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50  ##这个是脏页的刷新占比,默认是75%
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64         ##并发数,一般填写服务器逻辑CPU的个数
#innodb_print_all_deadlocks = 1
#innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864 
innodb_file_per_table = 1 ##开启独立表空间
innodb_online_alter_log_max_size = 4G ##这个是在线ddl存储的最大日志量(也就就是ddl中的row log日志)

#innodb_status_output = 0    ## 这个是是否开启innodb锁的信息
#innodb_status_output_locks = 0   ##这个是是否打开锁信息输出功能

########semi sync replication settings########

plugin_dir=/usr/local/mysql/lib/plugin      #根据实际情况修改,这里要说明一下关于增强半同步复制需要安装插件
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
#[mysqld-5.7] innodb_buffer_pool_dump_pct = 40 #innodb_page_cleaners = 4 #innodb_undo_log_truncate = 1 #innodb_max_undo_log_size = 2G #innodb_purge_rseg_truncate_frequency = 128 #binlog_gtid_simple_recovery=1 #log_timestamps=system #transaction_write_set_extraction=MURMUR32 #show_compatibility_56=on

[mysqldump]
 quick
 max_allowed_packet = 32M  ##mysql根据配置文件会限制server接受的数据包的大小
 

参看知数堂的参考

  1 ##########服务器物理内存是64G,该实例有512个数据表,该实例最大并发连接数是512,binlog只保存7天##################
  2 ##以下默认值都是基于5,7.26版本
  3 ## my.cnf for MySQL 5.7/8.0
  4 ## autoor: yejr(yejinrong@zhishutang.com, http://imysql.com, QQ: 4700963)
  5 ##
  6 ## 叶金荣(yejr)
  7 ## 靠谱优质的在线培训品牌知数堂培训(http://zhishuedu.com)联合创始人
  8 ## 新浪微博: @叶金荣, 微信公众:老叶茶馆(imysql_wx)
  9 ## QQ群: 650149401
 10 ## 注意:个别建议可能需要根据实际情况作调整,请自行判断或联系我,本人不对这些建议结果负相应责任
 11 ## 本配置文件主要适用于MySQL 5.7/8.0版本
 12 #
 13 [client]
 14 port    = 3306
 15 socket    = /data/mysql/mysql.sock
 16 
 17 [mysql]
 18 prompt="u@mysqldb R:m:s [d]> "
 19 no-auto-rehash ##这个是不启用自动补全功能
 20 
 21 [mysqld]
 22 user    = mysql
 23 port    = 3306
 24 basedir    = /usr/local/mysql
 25 datadir    = /data/mysql
 26 socket    = /data/mysql/mysql.sock
 27 pid-file = mysqldb.pid
 28 character-set-server = utf8mb4  ##这个是设置mysql服务器中的字符集
 29 skip_name_resolve = 1 ##
 30 
 31 #若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
 32 log_timestamps=system       ##这个是设置mysql日志文件的时间和系统时间保持一致
 33 open_files_limit    = 65535  ###默认值是5000
 34 back_log = 1024       ##mysql能暂存的连接数量,默认是80
 35 max_connections = 512   ##mysql最大连接数,这里是自身mysql服务器并发请求量的情况而定。默认是151,如果该值过小,会报ERROR 1040 (HY000): Too many connections
 36 max_connect_errors = 1000000 ##默认是100,可以适当提高该值
 37 table_open_cache = 1024
 38 table_definition_cache = 1024
 39 table_open_cache_instances = 64
 40 thread_stack = 512K
 41 external-locking = FALSE
 42 max_allowed_packet = 32M
 43 sort_buffer_size = 4M ##默认256k,每个需要进行排序的线程分配该大小的一个缓冲区(针对order by/group by/distinct/union)
 44 join_buffer_size = 4M  ##默认是256k,这个用户表间关联缓存的大小,该参数对应的分配内存也是每个连接独享。一般我们会通过建索引的方式提高join关联的查询。
 45 thread_cache_size = 768 ##服务器线程缓存,默认是9个,该值可以重新利用保存在缓存中线程的数量,当断开连接时,那么客户端的线程将被放到缓存中响应下一个客户端而不是销毁(前提是缓存数未达上限),如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.)
 46 interactive_timeout = 600   ##默认是8小时,表示关闭一个交互式连接要等待的秒数,这个一般针对的是应用程序,此值会设置的比较大一些
 47 wait_timeout = 600          ##默认是8小时,表示关闭一个非交互的连接之前要等待的秒数,该值一般会设置小一点。
 48 tmp_table_size = 32M        ##默认是16M
 49 max_heap_table_size = 32M
 50 slow_query_log = 1
 51 slow_query_log_file = /data/mysql/slow.log
 52 log-error = /data/mysql/error.log
 53 long_query_time = 0.1  该值是情况而定 ##设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s.所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).
 54 log_queries_not_using_indexes =1  ##这个是记录没有走索引的sql语句
 55 log_throttle_queries_not_using_indexes = 60  ###设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
 56 min_examined_row_limit = 100  ###表示扫描的行数大于100行看,如果没有大于100行,即使这个语句执行时间超过了long_query_time的阈值也不会被记录。
 57 log_slow_admin_statements = 1  #记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等
 58 log_slow_slave_statements = 1  ##记录从库上执行的慢查询语句
 59 server-id = 3306
 60 log-bin = /data/mysql/mybinlog
 61 sync_binlog = 1
 62 binlog_cache_size = 4M
 63 max_binlog_cache_size = 2G
 64 max_binlog_size = 1G  
 65 
 66 #注意:MySQL 8.0开始,binlog_expire_logs_seconds选项也存在的话,会忽略expire_logs_days选项
 67 expire_logs_days = 7
 68 
 69 master_info_repository = TABLE  ##这个不能保证io线程的高可用性
 70 relay_log_info_repository = TABLE  ##这个是保证sql线程的高可用性
 71 relay_log_recovery = 1  ###这个参数是保证IO线程的高可用性
 72 gtid_mode = on    ##gtid设置
 73 enforce_gtid_consistency = 1  ##gtid设置
 74 log_slave_updates  ##如果当前的库还有从库的话,这个参数也必须要打开
 75 slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
 76 binlog_format = row
 77 binlog_checksum = 1
 78 
 79 relay-log-purge = 1  ##这个默认是打开的,表示是否自动清空不再需要的中继日志。
 80 key_buffer_size = 32M ##表示索引(Myisam)缓冲区大小,它决定索引处理的速度,特别是读的速度。默认是8M  
 81 read_buffer_size = 8M ##mysql读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,mysql会为它分配一段内存缓冲区。如果对表的扫描请求很频繁,可以调大该值。
 82 read_rnd_buffer_size = 4M ##MySql的随机读(查询操作)缓冲区大小
 83 bulk_insert_buffer_size = 64M
 84 myisam_sort_buffer_size = 128M
 85 myisam_max_sort_file_size = 10G
 86 myisam_repair_threads = 1
 87 lock_wait_timeout = 3600  ##此变量指定尝试获取元数据锁定的超时(以秒为单位)。允许的值范围是1到31536000(1年)。默认值为31536000
 88 explicit_defaults_for_timestamp = 1
 89 innodb_thread_concurrency = 0    ##此参数用来设置innodb线程的并发数量,默认值为0表示不限制
 90 #innodb_sync_spin_loops = 100
 91 #innodb_spin_wait_delay = 30
 92 
 93 transaction_isolation = REPEATABLE-READ
 94 #innodb_additional_mem_pool_size = 16M
 95 innodb_buffer_pool_size = 45875M  ##这个参数很重要,默认是128M
 96 innodb_buffer_pool_instances = 4
 97 innodb_buffer_pool_load_at_startup = 1  ###指定在MySQL服务器启动时,通过加载先前保存的相同页面来自动预热InnoDB 缓冲池
 98 innodb_buffer_pool_dump_at_shutdown = 1 ###指定在关闭MySQL服务器时是否记录InnoDB 缓冲池中缓存的页面 ,以缩短下次重启时的 预热过程。通常与结合使用 innodb_buffer_pool_load_at_startup。该 innodb_buffer_pool_dump_pct 选项定义要转储的最近使用的缓冲池页面的百分比
 99 innodb_data_file_path = ibdata1:1G:autoextend  ###按我理解是当系统表空间(ibdata1)达到阈值时,它会按照1G的容量进行自动扩容。
100 innodb_flush_log_at_trx_commit = 1
101 innodb_log_buffer_size = 32M     ##这个是设置日志缓冲区的大小,默认是16M
102 innodb_log_file_size = 2G        ##这个主要是redo log 日志的大小,默认是48M
103 innodb_log_files_in_group = 3    ##为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
104 innodb_max_undo_log_size = 4G    ##这个表示每个undo日志的最大容量,默认是1G
105 innodb_undo_directory = /data/mysql/undolog   ##这个是undo日志放置的位置
106 innodb_undo_tablespaces = 95
107 
108 # 根据您的服务器IOPS能力适当调整
109 # 一般配普通SSD盘的话,可以调整到 10000 - 20000
110 # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
111 innodb_io_capacity = 4000 ###该innodb_io_capacity变量定义提供给整体的I / O容量 InnoDB。应该将其设置为大约系统每秒可以执行的I / O操作数(IOPS),默认是200
112 innodb_io_capacity_max = 8000
113 innodb_flush_sync = 0   ##默认是禁止
114 innodb_flush_neighbors = 0  ##指定是否冲洗从一个页面InnoDB 缓冲池也可以清空其他脏页在相同的程度。设置为0将禁用 innodb_flush_neighbors。处于相同程度的脏页不会被刷新
115 innodb_write_io_threads = 8
116 innodb_read_io_threads = 8
117 innodb_purge_threads = 4
118 innodb_page_cleaners = 4
119 innodb_open_files = 65535
120 innodb_max_dirty_pages_pct = 50 ##这个是脏页的刷新占比,默认是75%
121 innodb_flush_method = O_DIRECT ##这个表示数据页和redo log做持久化时用到的一个刷盘策略。
122 innodb_lru_scan_depth = 4000   ##默认是1024,
123 innodb_checksum_algorithm = crc32
124 innodb_lock_wait_timeout = 10   ##InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的 锁定表中自动检测事务死锁并且回滚事务。 InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50125 innodb_rollback_on_timeout = 1  ##InnoDB 默认情况下,仅回滚事务超时上的最后一条语句。如果 --innodb-rollback-on-timeout指定,则事务超时导致 InnoDB中止并回滚整个事务。
126 innodb_print_all_deadlocks = 1  #当启用该选项,所有信息死锁在 InnoDB用户交易被记录在 mysqld 错误日志
127 innodb_file_per_table = 1       ##这里启用独立空间
128 innodb_online_alter_log_max_size = 4G
129 innodb_stats_on_metadata = 0  #禁用优化器统计信息或使用创建或更改单个表时,优化器统计信息不会保留在磁盘 上
130 innodb_undo_log_truncate = 1
131 
132 #注意:MySQL 8.0.16开始删除该选项
133 internal_tmp_disk_storage_engine = InnoDB
134 
135 # some var for MySQL 5.7
136 innodb_checksums = 1
137 #innodb_file_format = Barracuda
138 #innodb_file_format_max = Barracuda
139 query_cache_size = 0  ##关闭查询缓冲
140 query_cache_type = 0
141 innodb_undo_logs = 128
142 
143 innodb_status_file = 1
144 #注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
145 innodb_status_output = 0
146 innodb_status_output_locks = 1
147 
148 innodb_sort_buffer_size = 67108864
149 innodb_autoinc_lock_mode = 1
150 
151 #performance_schema
152 performance_schema = 1
153 #performance_schema_instrument = '%memory%=on'
154 #performance_schema_instrument = '%lock%=on'
155 
156 #innodb monitor
157 innodb_monitor_enable="module_innodb"
158 innodb_monitor_enable="module_server"
159 innodb_monitor_enable="module_dml"
160 innodb_monitor_enable="module_ddl"
161 innodb_monitor_enable="module_trx"
162 innodb_monitor_enable="module_os"
163 innodb_monitor_enable="module_purge"
164 innodb_monitor_enable="module_log"
165 innodb_monitor_enable="module_lock"
166 innodb_monitor_enable="module_buffer"
167 innodb_monitor_enable="module_index"
168 innodb_monitor_enable="module_ibuf_system"
169 innodb_monitor_enable="module_buffer_page"
170 innodb_monitor_enable="module_adaptive_hash"
171 
172 [mysqldump]
173 quick
174 max_allowed_packet = 32M  ##mysql根据配置文件会限制server接受的数据包的大小
知数堂
原文地址:https://www.cnblogs.com/zmc60/p/14888608.html