天天看点

MySQL 5.6 my.cnf 模版

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
thp-setting=never
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp

local-infile    = 0
lc-messages-dir = /usr/share/mysql
skip-external-locking
skip-name-resolve

#bind-address           = 127.0.0.1

#对timestamp新的行为控制参数,相关文章。
explicit_defaults_for_timestamp = 1

character-set-server = utf8mb4
default-storage-engine=INNODB

##thread相关参数:Thread_pool_size  X  Thread_pool_oversubscribe = MySQL内部同时支持运行的最大任务数,相关文章

#MySQL线程调度方式,
thread_handling           = pool-of-threads
#根据系统的CPU创建出thread_pool_size(该参数不建议调整)threadpool中group数量,默认为cpu核心数,server启动时自动计算
#thread_pool_size         = auto
#每个thread_pool_size里同时可以运行多少个任务,超过限制后,继续创建worker线程会被延迟
thread_pool_oversubscribe = 20
#timer线程检测间隔,单位为毫秒,用于防止thread pool里的线程死掉.Thread pool里线程如果超过thread_pool_stall_limit声明的时间没响应降会重新创建
thread_pool_stall_limit   = 50
#用于声明extra_port最大允许的连接,extra_port 去监听一个和服务端口不一样的端口,用于Thread pool被占满或是被锁着的情况下用于管理使用.
extra_max_connection      = 5
#线程池的优先级:transactions:使用优先队列和普通队列,对于事务已经开启的statement,放到优先队列中,否则放到普通队列中。statements:只使用优先队列
;none: 只是用普通队列,本质上和statements相同,都是只是用一个队列
thread_pool_high_prio_mode = transactions
#当开启了优先队列模式后,每个连接最多允许thread_pool_high_prio_tickets次被放到优先队列中,之后放到普通队列中
thread_pool_high_prio_tickets=4294967295
#线程最大空闲时间,单位为秒,超过限制后会退出,默认60
thread_pool_idle_timeout=60
#threadpool中最大线程数目,线程总数超过该限制后不能继续创建更多线程
thread_pool_max_threads = 100000

#FullText
#MyISAM
ft_min_word_len         = 1
ft_max_word_len         = 84
#InnoDB
innodb_ft_min_token_size= 1
innodb_ft_max_token_size=84

#MyISAM  停止词存放在文件
ft_stopword_file        = /var/lib/mysql/stopword.txt

#InnoDB,停止词存放在表
innodb_ft_server_stopword_table = dba_test/ft_stopwords
innodb_ft_user_stopword_table = dba_test/ft_stopwords

#控制在创建临时表时使用的存储引擎,默认为innodb
default_tmp_storage_engine = innodb

#线上可以开启
innodb_undo_directory   = /var/lib/mysql/undolog/
innodb_undo_tablespaces = 8
innodb_undo_logs        = 128

#用于优化in(),以确认是否直接使用索引统计,相关文章
eq_range_index_dive_limit = 200

#back_log                = 500
thread_stack            = 192K

max_allowed_packet      = 32M
max_connections         = 600
max_connect_errors      = 2000
max_heap_table_size     = 256M
max_length_for_sort_data= 2048
tmp_table_size          = 256M

read_buffer_size        = 512K
read_rnd_buffer_size    = 1M
sort_buffer_size        = 512K
join_buffer_size       = 256K

table_open_cache        = 1024
#对table cache进行划分,减少table cache的锁竞争,累死innodb_buffer_poll_instances
table_open_cache_instances = 8
thread_cache_size       = 64

# * Query Cache Configuration
#query_cache_type        = 0
#query_cache_size        = 0M
#query_cache_limit       = 1M

open_files_limit     = 5000

# * Logging and Replication
log_error            = /var/log/mysql/error_3306.log
#开启慢查询日志,相关文章1,文章2
slow_query_log       = 1
slow_query_log_file  = /var/log/mysql/mysql-slow.log
long_query_time      = 0.5
#log-queries-not-using-indexes
#general_log          = 1
#慢查询过滤器,用于Percona,相关文章
#log_slow_filter     = 'string'
#可用值session or query
log_slow_rate_type   = session
#记录每个session/query的日志,如果log_slow_rate_type为session,将不记录replication thread的日志
log_slow_rate_limit  = 1
#语句执行存储过程(不包括触发器)慢将记录到慢查询日志
log_slow_sp_statements = 1
#指定慢查询日志包含多少信息,相关文章
#log_slow_verbosity   = ''
#每个慢查询记录时间戳
#slow_query_log_timestamp_always
#精度为second或microsecond
slow_query_log_timestamp_precision=second
#该变量控制最大slow文件数量,设置slow_query_log_file为没有.log后缀的文件
#max_slowlog_files
#超过该值,slow日志将自动旋转,生成slow_query_log_file.000001这样的文件
#max_slowlog_size

log_bin                 = mysql-bin-3306.log
binlog_cache_size       = 1M
max_binlog_size         = 1024M
binlog_format           = MIXED
#binlog_format           = ROW
#binlog_row_image        = minimal
#binlog_rows_query_log_events = 1
sync_binlog             = 1000
expire_logs_days        = 5      
#binlog_checksum         = NONE      
#事务提交顺序和binlog记录顺序是相同的,默认打开
binlog_order_commits    =1      
server-id               = 10

relay_log                = mysqld-relay-bin

# * TokuDB
tokudb_cache_size       = 512M
tokudb_commit_sync      = 0
tokudb_fsync_log_period = 1000
tokudb_data_dir         = /var/lib/mysql/tokudb_data
tokudb_log_dir          = /var/lib/mysql/tokudb_log
tokudb_tmp_dir          = /tmp

# * MyISAM
key_buffer_size         = 128M
bulk_insert_buffer_size = 8M
concurrent_insert       = 2
#myisam-recover          = BACKUP
myisam_recover_options  = BACKUP

# * InnoDB
#打印死锁到errorlog
innodb_print_all_deadlocks = 1
      

  #预读,对于随机读写,推荐关闭

  innodb_read_ahead_threshold = 0

#预热
innodb_buffer_pool_dump_now      = 1
innodb_buffer_pool_load_now      = 1

innodb_buffer_pool_dump_at_shutdown  = 1
innodb_buffer_pool_load_at_startup   = 1
#预热文件
innodb_buffer_pool_filename     = ib_buffer_pool
      

  #事务日志记录的大小,默认512,ssd可以设置4096

  innodb_log_block_size = 4096

innodb_page_size                = 16K
#innodb_page_size                = 4K  #ssd
#innodb_flush_neighbors          = 0
#ssd
innodb_flush_neighbors          = 0
#影响page cleaner 线程一次扫描LRU/UNZIP_LRU的深度,默认为1024,IO能力强的可以适当调大。 innodb_io_capacity/innodb_buffer_pool_instances
innodb_lru_scan_depth           =2000

innodb_strict_mode              = 1
innodb_buffer_pool_size         = 10000M
innodb_buffer_pool_instances    = 3
innodb_change_buffering         = all
innodb_change_buffer_max_size   = 20
innodb_autoextend_increment     = 64
innodb_additional_mem_pool_size = 15M#5.7中移除,innodb_use_sys_malloc 配置为 ON 时,innodb_additional_mem_pool_size 失效(直接从操作系统分配内存)
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 2
#自定义刷新日志时间,每隔这么多秒刷一次日志,只有在innodb_flush_log_at_trx_commit=2时才生效
innodb_flush_log_at_timeout     = 3

innodb_log_buffer_size          = 8M
innodb_log_file_size            = 256M
innodb_log_files_in_group       = 2
innodb_max_dirty_pages_pct      = 60

innodb_read_io_threads           = 8
innodb_write_io_threads          = 8

#innodb_io_capacity              = 800
innodb_io_capacity              = 2000  #ssd
#innodb_io_capacity_max          = 2000

innodb_adaptive_flushing        = 1
innodb_adaptive_flushing_lwm    = 15

innodb_old_blocks_pct           = 20
innodb_old_blocks_time          = 1000
#online ddl时并发DML产生的row log最大size,超过这个限制会导致DDL回滚
innodb_online_alter_log_max_size = 128M

innodb_flush_neighbors          = 1

innodb_concurrency_tickets      = 5000
innodb_optimize_fulltext_only   = 0

innodb_use_native_aio           = 1
innodb_use_sys_malloc           = 1#innodb_use_sys_malloc 配置为 ON 时,innodb_additional_mem_pool_size 失效(直接从操作系统分配内存)。5.7中移除
innodb_thread_concurrency       = 0#回收undo线程
innodb_purge_threads= 4
#5.7
#innodb_page_cleaners            = 4
#每次回收undo页的数量
innodb_purge_batch_size         = 300
#创建索引做merge-sort时,一个归并block的大小
innodb_sort_buffer_size         = 16M

innodb_change_buffering         = all
#changebuffer占用bp的最大比例
innodb_change_buffer_max_size   = 20

innodb_file_format              = barracuda
innodb_file_format_check        = 1
innodb_file_format_max          = barracuda
innodb_stats_on_metadata        = 0

innodb_open_files               = 3000
#Percona支持ALL_O_DIRECT
innodb_flush_method             = ALL_O_DIRECT
#innodb_flush_method            = O_DIRECT_NO_FSYNC

lock_wait_timeout               = 50

transaction-isolation           = READ-COMMITTED

# * replication
replicate-ignore-db        = test
replicate-ignore-db        = mysql
#binlog_do_db             = include_database_name
skip-slave-start          = 1
log_slave_updates         = 1

#gtid-mode=on # GTID only
#enforce-gtid-consistency=true # GTID only

master_info_repository    = table
relay_log_info_repository = table

# * slave

#并行复制线程数
slave_parallel_workers    = 4
#多线程复制需要关闭
slave_transaction_retries = 0
#在并发复制时总共执行这么多次事务后做一次checkpoint,更新show slave status的数据
slave_checkpoint_group    = 512
#在复制执行这么长时间后做一次checkpoint
slave_checkpoint_period   = 300
#在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大
slave_pending_jobs_size_max = 32M
#备库SQL线程是否检查binlog的checksum
slave_sql_verify_checksum  = 1
#部分解决无主键表导致的复制延迟问题,相关文章
#slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN,HASH_SCAN
#slave_net_timeout               = 300
relay_log_recovery              = 1
#sync_relay_log                  = 0
#sync_relay_log_info             = 0
#sync_master_info                = 0

# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

[mysqldump]
quick
quote-names
max_allowed_packet      = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer              = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/      

该文章后续会不断更新,慢慢完善。之前也介绍了MySQL5.5的配置文件,现在按照前2篇文章1和文章2的信息,整理出该博文。对MySQL5.6的my.cnf 进行了配置(Percona MySQL),因为根据服务器硬件资源来调整的,所以一些内存、io刷写的大小比例可以根据自己的条件来设置。

相关文章:

http://mysqllover.com/?p=575

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

https://www.percona.com/doc/percona-server/5.6/ps-versions-comparison.html

https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

~~~~~~~~~~~~~~~

万物之中,希望至美

~~~~~~~~~~~~~~~

继续阅读