转自:http://geek.csdn.net/news/detail/41002
贴代码html
[mysqld] ########basic settings######## server-id = 11 port = 3306 user = mysql bind_address = 10.166.224.32 autocommit = on character_set_server=utf8mb4 skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 datadir = /data/mysql_data transaction_isolation = READ-COMMITTED explicit_defaults_for_timestamp = 1 join_buffer_size = 134217728 tmp_table_size = 67108864 tmpdir = /tmp max_allowed_packet = 16777216 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 = error.log 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 expire_logs_days = 90 long_query_time = 2 min_examined_row_limit = 100 ########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 binlog_format = row relay_log = relay.log relay_log_recovery = 1 binlog_gtid_simple_recovery = 1 slave_skip_errors = ddl_exist_errors ########innodb settings######## innodb_page_size = 8192 innodb_buffer_pool_size = 6G 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 innodb_io_capacity_max = 8000 innodb_flush_method = O_DIRECT innodb_file_format = Barracuda innodb_file_format_max = Barracuda innodb_log_group_home_dir = /redolog/ innodb_undo_directory = /undolog/ innodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_flush_neighbors = 1 innodb_log_file_size = 4G innodb_log_buffer_size = 16777216 innodb_purge_threads = 4 innodb_large_prefix = 1 innodb_thread_concurrency = 64 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 innodb_sort_buffer_size = 67108864 ########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
原文连接:http://www.ha97.com/4110.htmlmysql
PS:本配置文件针对Dell R710,双至强E5620、16G内存的硬件配置。CentOS 5.6 64位系统,MySQL 5.5.x 稳定版。适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎。其余应用环境请根据实际状况来设置优化。算法
# 如下选项会被MySQL客户端应用读取。 # 注意只有MySQL附带的客户端应用程序保证能够读取这段内容。 # 若是你想你本身的MySQL应用程序获取这些值。 # 须要在MySQL客户端库初始化的时候指定这些选项。 # [client] #password = [your_password] port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # *** 应用定制选项 *** # # MySQL 服务端 # [mysqld] # 通常配置选项 port = @MYSQL_TCP_PORT@ socket = @MYSQL_UNIX_ADDR@ # back_log 是操做系统在监听队列中所能保持的链接数, # 队列保存了在MySQL链接管理器线程处理以前的链接. # 若是你有很是高的链接率而且出现”connection refused” 报错, # 你就应该增长此处的值. # 检查你的操做系统文档来获取这个变量的最大值. # 若是将back_log设定到比你操做系统限制更高的值,将会没有效果 back_log = 300 # 不在TCP/IP端口上进行监听. # 若是全部的进程都是在同一台服务器链接到本地的mysqld, # 这样设置将是加强安全的方法 # 全部mysqld的链接都是经过Unix sockets 或者命名管道进行的. # 注意在windows下若是没有打开命名管道选项而只是用此项 # (经过 “enable-named-pipe” 选项) 将会致使mysql服务没有任何做用! #skip-networking # MySQL 服务所容许的同时会话数的上限 # 其中一个链接将被SUPER权限保留做为管理员登陆. # 即使已经达到了链接数的上限. max_connections = 3000 # 每一个客户端链接最大的错误容许数量,若是达到了此限制. # 这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS” 或者服务重启 # 非法的密码以及其余在连接时的错误会增长此值. # 查看 “Aborted_connects” 状态来获取全局计数器. max_connect_errors = 30 # 全部线程所打开表的数量. # 增长此值就增长了mysqld所须要的文件描述符的数量 # 这样你须要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量容许至少4096 table_cache = 4096 # 容许外部文件级别的锁. 打开文件锁会对性能形成负面影响 # 因此只有在你在一样的文件上运行多个数据库实例时才使用此选项(注意仍会有其余约束!) # 或者你在文件层面上使用了其余一些软件依赖来锁定MyISAM表 #external-locking # 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一块儿工做时至关必要) # 每一个链接独立的大小.大小动态增长 max_allowed_packet = 32M # 在一个事务中binlog为了记录SQL状态所持有的cache大小 # 若是你常用大的,多声明的事务,你能够增长此值来获取更大的性能. # 全部从事务来的状态都将被缓冲在binlog缓冲中而后在提交后一次性写入到binlog中 # 若是事务比此值大, 会使用磁盘上的临时文件来替代. # 此缓冲在每一个链接的事务第一次更新状态时被建立 binlog_cache_size = 4M # 独立的内存表所容许的最大容量. # 此选项为了防止意外建立一个超大的内存表致使永尽全部的内存资源. max_heap_table_size = 128M # 排序缓冲被用来处理相似ORDER BY以及GROUP BY队列所引发的排序 # 若是排序后的数据没法放入排序缓冲, # 一个用来替代的基于磁盘的合并分类会被使用 # 查看 “Sort_merge_passes” 状态变量. # 在排序发生时由每一个线程分配 sort_buffer_size = 16M # 此缓冲被使用来优化全联合(full JOINs 不带索引的联合). # 相似的联合在极大多数状况下有很是糟糕的性能表现, # 可是将此值设大可以减轻性能影响. # 经过 “Select_full_join” 状态变量查看全联合的数量 # 当全联合发生时,在每一个线程中分配 join_buffer_size = 16M # 咱们在cache中保留多少线程用于重用 # 当一个客户端断开链接后,若是cache中的线程还少于thread_cache_size, # 则客户端线程被放入cache中. # 这能够在你须要大量新链接的时候极大的减小线程建立的开销 # (通常来讲若是你有好的线程模型的话,这不会有明显的性能提高.) thread_cache_size = 16 # 此容许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量. # 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris). # 你可能够尝试使用 [CPU数量]*(2..4) 来做为thread_concurrency的值 thread_concurrency = 8 # 查询缓冲常被用来缓冲 SELECT 的结果而且在下一次一样查询的时候再也不执行直接返回结果. # 打开查询缓冲能够极大的提升服务器速度, 若是你有大量的相同的查询而且不多修改表. # 查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来讲是否足够高. # 注意: 在你表常常变化的状况下或者若是你的查询原文每次都不一样, # 查询缓冲也许引发性能降低而不是性能提高. query_cache_size = 128M # 只有小于此设定值的结果才会被缓冲 # 此设置用来保护查询缓冲,防止一个极大的结果集将其余全部的查询结果都覆盖. query_cache_limit = 4M # 被全文检索索引的最小的字长. # 你也许但愿减小它,若是你须要搜索更短字的时候. # 注意在你修改此值以后, # 你须要重建你的 FULLTEXT 索引 ft_min_word_len = 8 # 若是你的系统支持 memlock() 函数,你也许但愿打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定而且防止可能被swapping out # 此选项对于性能有益 #memlock # 当建立新表时做为默认使用的表类型, # 若是在建立表示没有特别执行表类型,将会使用此值 default_table_type = MYISAM # 线程使用的堆大小. 此容量的内存在每次链接时被预留. # MySQL 自己常不会须要超过64K的内存 # 若是你使用你本身的须要大量堆的UDF函数 # 或者你的操做系统对于某些操做须要更多的堆, # 你也许须要将其设置的更高一点. thread_stack = 512K # 设定默认的事务隔离级别.可用的级别以下: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE transaction_isolation = REPEATABLE-READ # 内部(内存中)临时表的最大大小 # 若是一个表增加到比此值更大,将会自动转换为基于磁盘的表. # 此限制是针对单个表的,而不是总和. tmp_table_size = 128M # 打开二进制日志功能. # 在复制(replication)配置中,做为MASTER主服务器必须打开此项 # 若是你须要从你最后的备份中作基于时间点的恢复,你也一样须要二进制日志. log-bin=mysql-bin # 若是你在使用链式从服务器结构的复制模式 (A->B->C), # 你须要在服务器B上打开此项. # 此选项打开在从线程上重作过的更新的日志, # 并将其写入从服务器的二进制日志. #log_slave_updates # 打开全查询日志. 全部的由服务器接收到的查询 (甚至对于一个错误语法的查询) # 都会被记录下来. 这对于调试很是有用, 在生产环境中经常关闭此项. #log # 将警告打印输出到错误log文件. 若是你对于MySQL有任何问题 # 你应该打开警告log而且仔细审查错误日志,查出可能的缘由. #log_warnings # 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的更多时间的查询. # 若是 log_long_format 被打开,那些没有使用索引的查询也会被记录. # 若是你常常增长新查询到已有的系统内的话. 通常来讲这是一个好主意, log_slow_queries # 全部的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询. # 不要在这里使用”1″, 不然会致使全部的查询,甚至很是快的查询页被记录下来(因为MySQL 目前时间的精确度只能达到秒的级别). long_query_time = 6 # 在慢速日志中记录更多的信息. # 通常此项最好打开. # 打开此项会记录使得那些没有使用索引的查询也被做为到慢速查询附加到慢速日志里 log_long_format # 此目录被MySQL用来保存临时文件.例如, # 它被用来处理基于磁盘的大型排序,和内部排序同样. # 以及简单的临时表. # 若是你不建立很是大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好 # 另外一种选择是你也能够将其放置在独立的磁盘上. # 你可使用”;”来放置多个路径 # 他们会按照roud-robin方法被轮询使用. #tmpdir = /tmp # *** 主从复制相关的设置 # 惟一的服务辨识号,数值位于 1 到 2^32-1之间. # 此值在master和slave上都须要设置. # 若是 “master-host” 没有被设置,则默认为1, 可是若是忽略此选项,MySQL不会做为master生效. server-id = 1 # 复制的Slave (去掉master段的注释来使其生效) # # 为了配置此主机做为复制的slave服务器,你能够选择两种方法: # # 1) 使用 CHANGE MASTER TO 命令 (在咱们的手册中有完整描述) – # 语法以下: # # CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, # MASTER_USER=, MASTER_PASSWORD= ; # # 你须要替换掉 , , 等被尖括号包围的字段以及使用master的端口号替换 (默认3306). # # 例子: # # CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306, # MASTER_USER=’joe’, MASTER_PASSWORD=’secret’; # # 或者 # # 2) 设置如下的变量. 不论如何, 在你选择这种方法的状况下, 而后第一次启动复制(甚至不成功的状况下, # 例如若是你输入错密码在master-password字段而且slave没法链接), # slave会建立一个 master.info 文件,而且以后任何对于包含在此文件内的参数的变化都会被忽略 # 而且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 而且重启slave 服务. # 因为这个缘由,你也许不想碰一下的配置(注释掉的) 而且使用 CHANGE MASTER TO (查看上面) 来代替 # # 所须要的惟一id号位于 2 和 2^32 – 1之间 # (而且和master不一样) # 若是master-host被设置了.则默认值是2 # 可是若是省略,则不会生效 #server-id = 2 # # 复制结构中的master – 必须 #master-host = # # 当链接到master上时slave所用来认证的用户名 – 必须 #master-user = # # 当链接到master上时slave所用来认证的密码 – 必须 #master-password = # # master监听的端口. # 可选 – 默认是3306 #master-port = # 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程可以修改数据. # 你可使用此项去保证没有应用程序会意外的修改slave而不是master上的数据 #read_only #*** MyISAM 相关选项 # 关键词缓冲的大小, 通常用来缓冲MyISAM表的索引块. # 不要将其设置大于你可用内存的30%, # 由于一部份内存一样被OS用来缓冲行数据 # 甚至在你并不使用MyISAM 表的状况下, 你也须要仍旧设置起 8-64M 内存因为它一样会被内部临时磁盘表使用. key_buffer_size = 128M # 用来作MyISAM表全表扫描的缓冲大小. # 当全表扫描须要时,在对应线程中分配. read_buffer_size = 8M # 当在排序以后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道. # 若是你增高此值,能够提升不少ORDER BY的性能. # 当须要时由每一个线程分配 read_rnd_buffer_size = 64M # MyISAM 使用特殊的相似树的cache来使得突发插入 # (这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA # INFILE) 更快. 此变量限制每一个进程中缓冲树的字节数. # 设置为 0 会关闭此优化. # 为了最优化不要将此值设置大于 “key_buffer_size”. # 当突发插入被检测到时此缓冲将被分配. bulk_insert_buffer_size = 256M # 此缓冲当MySQL须要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引发重建索引时被分配. # 这在每一个线程中被分配.因此在设置大值时须要当心. myisam_sort_buffer_size = 256M # MySQL重建索引时所容许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE). # 若是文件大小比此值更大,索引会经过键值缓冲建立(更慢) myisam_max_sort_file_size = 10G # 若是被用来更快的索引建立索引所使用临时文件大于制定的值,那就使用键值缓冲方法. # 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来建立索引. myisam_max_extra_sort_file_size = 10G # 若是一个表拥有超过一个索引, MyISAM 能够经过并行排序使用超过一个线程去修复他们. # 这对于拥有多个CPU以及大量内存状况的用户,是一个很好的选择. myisam_repair_threads = 1 # 自动检查和修复没有适当关闭的 MyISAM 表. myisam_recover # 默认关闭 Federated skip-federated # *** BDB 相关选项 *** # 若是你运行的MySQL服务有BDB支持可是你不许备使用的时候使用此选项. 这会节省内存而且可能加速一些事. skip-bdb # *** INNODB 相关选项 *** # 若是你的MySQL服务包含InnoDB支持可是并不打算使用的话, # 使用此选项会节省内存以及磁盘空间,而且加速某些部分 #skip-innodb # 附加的内存池被InnoDB用来保存 metadata 信息 # 若是InnoDB为此目的须要更多的内存,它会开始从OS这里申请内存. # 因为这个操做在大多数现代操做系统上已经足够快, 你通常不须要修改此值. # SHOW INNODB STATUS 命令会显示当先使用的数量. innodb_additional_mem_pool_size = 64M # InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM. # 这里你设置越大,你在存取表里面数据时所须要的磁盘I/O越少. # 在一个独立使用的数据库服务器上,你能够设置这个变量到服务器物理内存大小的80% # 不要设置过大,不然,因为物理内存的竞争可能致使操做系统的换页颠簸. # 注意在32位系统上你每一个进程可能被限制在 2-3.5G 用户层面内存限制, # 因此不要设置的过高. innodb_buffer_pool_size = 6G # InnoDB 将数据保存在一个或者多个数据文件中成为表空间. # 若是你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了. # 其余状况下.每一个设备一个文件通常都是个好的选择. # 你也能够配置InnoDB来使用裸盘分区 – 请参考手册来获取更多相关内容 innodb_data_file_path = ibdata1:10M:autoextend # 设置此选项若是你但愿InnoDB表空间文件被保存在其余分区. # 默认保存在MySQL的datadir中. #innodb_data_home_dir = # 用来同步IO操做的IO线程的数量. This value is # 此值在Unix下被硬编码为4,可是在Windows磁盘I/O可能在一个大数值下表现的更好. innodb_file_io_threads = 4 # 若是你发现InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表. # 从1开始而且增长此值知道你可以成功的导出表. #innodb_force_recovery=1 # 在InnoDb核心内的容许线程数量. # 最优值依赖于应用程序,硬件以及操做系统的调度方式. # 太高的值可能致使线程的互斥颠簸. innodb_thread_concurrency = 16 # 若是设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上, # 这提供了完整的ACID行为. # 若是你愿意对事务安全折衷, 而且你正在运行一个小的食物, 你能够设置此值到0或者2来减小由事务日志引发的磁盘I/O # 0表明日志只大约每秒写入日志文件而且日志文件刷新到磁盘. # 2表明日志写入日志文件在每次提交后,可是日志文件只有大约每秒才会刷新到磁盘上. innodb_flush_log_at_trx_commit = 2 (说明:若是是游戏服务器,建议此值设置为2;若是是对数据安全要求极高的应用,建议设置为1;设置为0性能最高,但若是发生故障,数据可能会有丢失的危险!默认值1的意思是每一次事务提交或事务外的指令都须要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于不少运用,特别是从MyISAM表转过来的是能够的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,因此你通常不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即便MySQL挂了也可能会丢失事务的数据。而值2只会在整个操做系统挂了时才可能丢数据。) # 加速InnoDB的关闭. 这会阻止InnoDB在关闭时作全清除以及插入缓冲合并. # 这可能极大增长关机时间, 可是取而代之的是InnoDB可能在下次启动时作这些操做. #innodb_fast_shutdown # 用来缓冲日志数据的缓冲区的大小. # 当此值快满时, InnoDB将必须刷新数据到磁盘上. # 因为基本上每秒都会刷新一次,因此没有必要将此值设置的太大(甚至对于长事务而言) innodb_log_buffer_size = 16M # 在日志组中每一个日志文件的大小. # 你应该设置日志文件总合大小到你缓冲池大小的25%~100% # 来避免在日志文件覆写上没必要要的缓冲池刷新行为. # 不论如何, 请注意一个大的日志文件大小会增长恢复进程所须要的时间. innodb_log_file_size = 512M # 在日志组中的文件总数. # 一般来讲2~3是比较好的. innodb_log_files_in_group = 3 # InnoDB的日志文件所在位置. 默认是MySQL的datadir. # 你能够将其指定到一个独立的硬盘上或者一个RAID1卷上来提升其性能 #innodb_log_group_home_dir # 在InnoDB缓冲池中最大容许的脏页面的比例. # 若是达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面. # 这是一个软限制,不被保证绝对执行. innodb_max_dirty_pages_pct = 90 # InnoDB用来刷新日志的方法. # 表空间老是使用双重写入刷新方法 # 默认值是 “fdatasync”, 另外一个是 “O_DSYNC”. #innodb_flush_method=O_DSYNC # 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久. # InnoDB在其拥有的锁表中自动检测事务死锁而且回滚事务. # 若是你使用 LOCK TABLES 指令, 或者在一样事务中使用除了InnoDB之外的其余事务安全的存储引擎 # 那么一个死锁可能发生而InnoDB没法注意到. # 这种状况下这个timeout值对于解决这种问题就很是有帮助. innodb_lock_wait_timeout = 120 [mysqldump] # 不要在将内存中的整个结果写入磁盘以前缓存. 在导出很是巨大的表时须要此项 quick max_allowed_packet = 32M [mysql] no-auto-rehash # 仅仅容许使用键值的 UPDATEs 和 DELETEs . #safe-updates [isamchk] key_buffer = 2048M sort_buffer_size = 2048M read_buffer = 32M write_buffer = 32M [myisamchk] key_buffer = 2048M sort_buffer_size = 2048M read_buffer = 32M write_buffer = 32M [mysqlhotcopy] interactive-timeout [mysqld_safe] # 增长每一个进程的可打开文件数量. # 警告: 确认你已经将全系统限制设定的足够高! # 打开大量表须要将此值设大 open-files-limit = 8192
[client] #password=88888888 mysql默认密码 socket=/data/var/mysql/mysql.sock mysql以socket方式运行的sock文件位置 [mysqld_safe] log-error=/var/log/mysqld.log 错误日志位置 pid-file=/var/run/mysqld/mysqld.pid 进程id文件 [mysql] socket=/data/var/mysql/mysql.sock mysql以socket方式运行的sock文件位置 [mysqld] user = mysql mysql以什么用户运行 port = 31306 mysql运行在哪一个端口 datadir = /data/var/mysql/ mysql的数据目录 socket=/data/var/mysql/mysql.sock mysql以socket方式运行的sock文件位置 symbolic-links=0 是否支持符号连接,即数据库或表能够存储在my.cnf中指定datadir以外的分区或目录,为0不开启 ########basic settings######## server-id = 11 mysql的服务器分配id,在启用主从和集群的时候必须指定,每一个节点必须不一样 #bind_address = 10.166.224.32 mysql监听的ip地址,若是是127.0.0.1,表示仅本机访问 autocommit = 1 数据修改是否自动提交,为0不自动提交 character_set_server=utf8mb4 服务器使用的字符集 skip_name_resolve = 1 禁用DNS主机名查找,启用之后用内网地址向mysqlslap请求响应快了一半 max_connections = 800 mysql最大链接数 max_connect_errors = 1000 某台host链接错误次数等于max_connect_errors(默认10) ,主机'host_name'再次尝试时被屏蔽。可有效反的防止dos××× transaction_isolation = READ-COMMITTED 数据库事务隔离级别 1.READ-UNCOMMITTED(读取未提交内容)级别 2. READ-COMMITTED(读取提交内容) 3. REPEATABLE-READ(可重读) 4.SERIERLIZED(可串行化) 默认级别REPEATABLE-READ explicit_defaults_for_timestamp = 1 mysql中TIMESTAMP类型和其余的类型有点不同(在没有设置explicit_defaults_for_timestamp=1的状况下) join_buffer_size = 128M 当咱们的join是ALL,index,rang或者Index_merge的时候使用的buffer。 实际上这种join被称为FULL JOIN tmp_table_size = 128M 规定了内部内存临时表的最大值,每一个线程都要分配。(实际起限制做用的是tmp_table_size和max_heap_table_size的最小值。)若是内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下 tmpdir = /dev/shm/mysql-tmp/ 保存临时文件的目录 max_allowed_packet = 16M mysql最大接受的数据包大小 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" sql_mode 模式,定义了你MySQL应该支持的sql语法,对数据的校验等等,限制一些所谓的‘不合法’的操做 interactive_timeout = 60 服务器关闭交互式链接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端 wait_timeout = 60 服务器关闭非交互链接以前等待活动的秒数,在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的链接选项CLIENT_INTERACTIVE定义) read_buffer_size = 16M 读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区 read_rnd_buffer_size = 32M 随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区,进行排序查询时,MySQL会首先扫描一遍该缓冲,以免磁盘搜索,提升查询速度 sort_buffer_size = 32M 是一个connection级参数,在每一个connection第一次须要使用这个buffer的时候,一次性分配设置的内存 ########log settings######## #log_error = /data/local/mysql-5.7.19/log/mysql-error.log 错误日志位置 slow_query_log = 1 是否开启慢查询日志收集 slow_query_log_file = /data/local/mysql-5.7.19/log/mysql-slow.log 慢查询日志位置 log_queries_not_using_indexes = 1 是否记录未使用索引的语句 log_slow_admin_statements = 1 慢查询也记录那些慢的optimize table,analyze table和alter table语句 log_slow_slave_statements = 1 记录由Slave所产生的慢查询 log_throttle_queries_not_using_indexes = 10 设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间 expire_logs_days = 90 日志自动过时清理天数 long_query_time = 1 设置记录慢查询超时时间 min_examined_row_limit = 100 查询检查返回少于该参数指定行的SQL不被记录到慢查询日志 ########replication settings######## #master_info_repository = TABLE 从机保存主节点信息方式,设成file时 会生成master.info 和 relay-log.info2个文件,设成table,信息就会存在mysql.master_slave_info表中。无论是设置的哪一种值,都不要移动或者编辑相关的文件和表 #relay_log_info_repository = TABLE 用于保存slave读取relay log的位置信息,可选值为“FILE”、“TABLE”,以便crash重启后继续恢复 log_bin = /data/local/mysql-5.7.19/log/mysql-bin binlog的保存位置,不能指定肯定的文件名如mysql-bin.log,只能指定位置和前缀,会生成之前缀为开头的一系列文件 #sync_binlog = 4 这个参数是对于MySQL系统来讲是相当重要的,他不只影响到Binlog对MySQL所带来的性能损耗,并且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各类设置的说明以下: sync_binlog=0,当事务提交以后,MySQL不作fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定何时来作同步,或者cache满了以后才同步到磁盘。 sync_binlog=n,当每进行n次事务提交以后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。 在MySQL中系统默认的设置是sync_binlog=0,也就是不作任何强制性的磁盘刷新指令,这时候的性能是最好的,可是风险也是最大的。由于一旦系统Crash,在binlog_cache中的全部binlog信息都会被丢失。而当设置为“1”的时候,是最安全可是性能损耗最大的设置。由于当设置为1的时候,即便系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来讲,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。 gtid_mode = on 启用gtid类型,不然就是普通的复制架构 enforce_gtid_consistency = 1 强制GTID的一致性 #log_slave_updates slave更新是否记入日志,在作双主架构时异常重要,影响到双主架构是否能互相同步 binlog_format = row binlog日志格式,可选值“MIXED”、“ROW”、“STATEMENT”,在5.6版本以前默认为“STATEMENT”,5.6以后默认为“MIXED”;由于“STATEMENT”方式在处理一些“不肯定”性的方法时会形成数据不一致问题,咱们建议使用“MIXED”或者“ROW” #relay_log = /data/local/mysql-5.7.19/log/mysql-relay.log 从机保存同步中继日志的位置 #relay_log_recovery = 1 当slave从库宕机后,假如relay-log损坏了,致使一部分中继日志没有处理,则自动放弃全部未执行的relay-log,而且从新从master上获取日志,这样就保证了relay-log的完整性 #binlog_gtid_simple_recovery = 1 这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 这个选项设置为真,会提高mysql执行恢复的性能。由于这样mysql-server启动和binlog日志清理更快 #slave_skip_errors = ddl_exist_errors 跳过指定error no类型的错误,设成all 跳过全部错误 ########innodb settings######## innodb_page_size = 16K innodb每一个数据页大小,这个参数在一开始初始化时就要加入my.cnf里,若是已经建立了表,再修改,启动MySQL会报错 innodb_buffer_pool_size = 4G 缓存innodb表的索引,数据,插入数据时的缓冲,专用mysql服务器设置的大小: 操做系统内存的70%-80%最佳 #innodb_buffer_pool_instances = 8 能够开启多个内存缓冲池,把须要缓冲的数据hash到不一样的缓冲池中,这样能够并行的内存读写 #innodb_buffer_pool_load_at_startup = 1 默认为关闭OFF。若是开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中 #innodb_buffer_pool_dump_at_shutdown = 1 默认为关闭OFF。若是开启该参数,中止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘 #innodb_lru_scan_depth = 2000 根据 官方文档 描述,它会影响page cleaner线程每次刷脏页的数量, 这是一个每1秒 loop一次的线程 innodb_lock_wait_timeout = 5 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒 #innodb_io_capacity = 4000 #innodb_io_capacity_max = 8000 这两个设置会影响InnoDB每秒在后台执行多少操做. 大多数写IO(除了写InnoDB日志)是后台操做的. 若是你深度了解硬件性能(如每秒能够执行多少次IO操做),则使用这些功能是很可取的,而不是让它闲着 #innodb_flush_method = O_DIRECT 默认值为 fdatasync. 若是使用 硬件RAID磁盘控制器, 可能须要设置为 O_DIRECT. 这在读取InnoDB缓冲池时可防止“双缓冲(double buffering)”效应,不然会在文件系统缓存与InnoDB缓存间造成2个副本(copy). 若是不使用硬件RAID控制器,或者使用SAN存储时, O_DIRECT 可能会致使性能降低 #innodb_log_group_home_dir = /data/local/mysql-5.7.19/log/redolog/ innodb重作日志保存目录 #innodb_undo_directory = /data/local/mysql-5.7.19/log/undolog/ innodb回滚日志保存目录 #innodb_undo_logs = 128 undo回滚段的数量, 至少大于等于35,默认128 #innodb_undo_tablespaces = 0 用于设定建立的undo表空间的个数,在mysql_install_db时初始化后,就不再能被改动了;默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;不然,则在undo目录下建立这么多个undo文件,例如假定设置该值为4,那么就会建立命名为undo001~undo004的undo tablespace文件,每一个文件的默认大小为10M。修改该值会致使Innodb没法完成初始化,数据库没法启动,可是另两个参数能够修改 #innodb_flush_neighbors = 1 InnoDB存储引擎在刷新一个脏页时,会检测该页所在区(extent)的全部页,若是是脏页,那么一块儿刷新。这样作的好处是经过AIO能够将多个IO写操做合并为一个IO操做。对于传统机械硬盘建议使用,而对于固态硬盘能够关闭。 #innodb_log_file_size = 4G 这个值定义了日志文件的大小,innodb日志文件的做用是用来保存redo日志。一个事务对于数据或索引的修改每每对应到表空间中的随机的位置,所以当刷新这些修改到磁盘中就会引发随机的I/O,而随机的I/O每每比顺序的I/O更加昂贵的开销,由于随机的I/O须要更多的开销来定位到指定的位置。innodb使用日志来将随机的I/O转为顺序的I/O,只要日志文件是安全的,那么事务就是永久的,尽管这些改变尚未写到数据文件中,若是出现了当机或服务器断电的状况,那么innodb也能够经过日志文件来恢复以及提交的事务。可是日志文件是有必定的大小的,因此必需要把日志文件记录的改变写到数据文件中,innodb对于日志文件的操做是循环的,即当日志文件写满后,会将指针从新移动到文件开始的地方从新写,可是它不会覆盖那些尚未写到数据文件中的日志,由于这是惟一记录了事务持久化的记录 若是对 Innodb 数据表有大量的写入操做,那么选择合适的 innodb_log_file_size 值对提高MySQL性能很重要。然而设置太大了,就会增长恢复的时间,所以在MySQL崩溃或者忽然断电等状况会令MySQL服务器花很长时间来恢复 #innodb_log_buffer_size = 16M 事务在内存中的缓冲。 分配原 则:控制在2-8M.这个值不用太多的。他里面的内存通常一秒钟写到磁盘一次 #innodb_purge_threads = 4 控制是否使用,使用几个独立purge线程(清除二进制日志) innodb_large_prefix = 1 mysql在5.6以前一直都是单列索引限制767,原由是256×3-1。这个3是字符最大占用空间(utf8)。可是在5.6之后,开始支持4个字节的uutf8。255×4>767, 因而增长了这个参数。这个参数默认值是OFF。当改成ON时,容许列索引最大达到3072 innodb_thread_concurrency = 64 InnoDB kernel并发最大的线程数。 1) 最少设置为(num_disks+num_cpus)*2。 2) 能够经过设置成1000来禁止这个限制 #innodb_print_all_deadlocks = 1 是否将死锁相关信息保存到MySQL 错误日志中 #innodb_strict_mode = 1 开启InnoDB严格检查模式,尤为采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当建立表(CREATE TABLE)、更改表(ALTER TABLE)和建立索引(CREATE INDEX)语句时,若是写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里 innodb_sort_buffer_size = 64M ORDER BY 或者GROUP BY 操做的buffer缓存大小 ########semi sync replication settings######## #plugin_dir=/data/local/mysql-5.7.19/lib/plugin 指定mysql的插件目录 #plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" 指定载入哪些插件 #loose_rpl_semi_sync_master_enabled = 1 控制主库上是否开启semisync #loose_rpl_semi_sync_slave_enabled = 1 控制备库是否开启semisync #loose_rpl_semi_sync_master_timeout = 5000 单位毫秒,防止半同步复制在没有收到确认的状况下,发送堵塞。master在超时以前没有收到确认,将恢复到异步复制,继续执行半同步没有进行的操做 [mysqld-5.7] #innodb_buffer_pool_dump_pct = 40 表示转储每一个bp instance LRU上最热的page的百分比。经过设置该参数能够减小转储的page数 innodb_page_cleaners = 4 为了提高扩展性和刷脏效率,在5.7.4版本里引入了多个page cleaner线程。从而达到并行刷脏的效果 在该版本中,Page cleaner并未和buffer pool绑定,其模型为一个协调线程 + 多个工做线程,协调线程自己也是工做线程。所以若是innodb_page_cleaners设置为8,那么就是一个协调线程,加7个工做线程 #innodb_undo_log_truncate = 1 是否开启在线回收(收缩)undo log日志文件,支持动态设置 #innodb_max_undo_log_size = 2G 当超过这个阀值(默认是1G),会触发truncate回收(收缩)动做,truncate后空间缩小到10M #innodb_purge_rseg_truncate_frequency = 128 控制回收(收缩)undo log的频率。undo log空间在它的回滚段没有获得释放以前不会收缩, 想要增长释放回滚区间的频率,就得下降设定值 #binlog_gtid_simple_recovery=1 这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 这个选项设置为真,会提高mysql执行恢复的性能。由于这样mysql-server启动和binlog日志清理更快。该参数为真时,mysql-server只需打开最老的和最新的这2个binlog文件 log_timestamps=system 在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数。 在 5.7.2 以后改参数为默认 UTC 这样会致使日志中记录的时间比中国这边的慢,致使查看日志不方便。修改成 SYSTEM 就能解决问题 #transaction_write_set_extraction=MURMUR32 这个神奇的参数5.7.6版本引入,用于定义一个记录事务的算法,这个算法使用hash标识来记录事务。若是使用MGR,那么这个hash值须要用于分布式冲突检测何处理,在64位的系统,官网建议设置该参数使用 XXHASH64 算法。若是线上并无使用该功能,应该设为off #show_compatibility_56=on 从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时须要打开 show_compatibility_56