[mysql] socket=/var/lib/mysql/mysqld.sock #命令自动补全 auto-rehash [mysqld] pid-file = /var/lib/mysql/mysqld.pid socket = /var/lib/mysql/mysqld.sock datadir = /data/sqldata symbolic-links=0 ########basic settings######## sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION #sql_mode 模式,定义了你MySQL应该支持的sql语法,对数据的校验等等,限制一些所谓的‘不合法’的操作 server-id = 11 #server ID port = 3306 #MySQL端口 user = mysql #MySQL启动用户 autocommit = 1 #数据修改是否自动提交,0为不知道提交 character_set_server=utf8mb4 #服务器使用的字符集 skip_name_resolve = 1 #禁用DNS直接名查找 max_connections = 5000 #最大客户端连接数 max_connect_errors = 1000 #最大错误连接数 transaction_isolation = READ-COMMITTED #数据事务隔离级别 默认可重复读。修改为读已提交,提高并发 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的最小值。) tmpdir = /tmp #保存临时文件的目录 max_allowed_packet = 64M #mysql最大接受的数据包大小 interactive_timeout = 120 #服务器关闭交互式连接前等待活动的秒数 wait_timeout = 120 #服务器关闭非交互连接之前等待活动的秒数 read_buffer_size = 32M #读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区 read_rnd_buffer_size = 64M #随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区,进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度 sort_buffer_size = 64M #是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存 ########log settings######## log_error = /var/log/mysql/error.log #错误日志位置 slow_query_log = 1 #开启慢查询日志 long_query_time = 2 #慢查询时间2s slow_query_log_file = /var/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 #日志自动过期清理天数 min_examined_row_limit = 100 #查询检查返回少于该参数指定行的SQL不被记录到慢查询日志 ########replication settings######## master_info_repository = TABLE #从机保存主节点信息方式 relay_log_info_repository = TABLE #用于保存slave读取relay log的位置信息 log_bin = bin.log #binlog保存位置 sync_binlog = 5 #当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘 gtid_mode = on #启用gtid类型,否则就是普通的复制架构 enforce_gtid_consistency = 1 #强制GTID的一致性 log_slave_updates = 1 #slave更新是否记入日志,在做双主架构时异常重要,影响到双主架构是否能互相同步 binlog_format = row #binlog日志格式 relay_log = /var/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 跳过所有错误 expire_logs_days = 15 #binlog过期清理时间 max_binlog_size = 100M #每个binlog的大小,默认1G ########innodb settings######## #innodb_page_size = 16K #innodb每个数据页大小,这个参数在一开始初始化时就要加入my.cnf里,如果已经创建了表,再修改,启动MySQL会报错 innodb_buffer_pool_size = 1G #缓存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_io_capacity = 4000 innodb_io_capacity_max = 8000 #这两个设置会影响InnoDB每秒在后台执行多少操作. 大多数写IO(除了写InnoDB日志)是后台操作的. 如果你深度了解硬件性能(如每秒可以执行多少次IO操作),则使用这些功能是很可取的,而不是让它闲着 innodb_lock_wait_timeout = 10 #事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒 #innodb_log_group_home_dir = /data/sqldata/redolog #innodb重做日志保存目录 #innodb_undo_directory = /data/sqldata/undolog #innodb回滚日志保存目录 #innodb_undo_logs = 128 #undo回滚段的数量,至少大于等于35,默认128 #innodb_undo_tablespaces = 2 #用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,就再也不能被改动了;默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,例如假定设置该值为4,那么就会创建命名为undo001~undo004的undo tablespace文件,每个文件的默认大小为10M。修改该值会导致Innodb无法完成初始化,数据库无法启动,但是另两个参数可以修改 innodb_max_undo_log_size = 2G #设置undo日志大小,当超过这个阀值(默认是1G),会触发truncate回收(收缩)动作,truncate后空间缩小到10M innodb_flush_neighbors = 1 #InnoDB存储引擎在刷新一个脏页时,会检测该页所在区(extent)的所有页,如果是脏页,那么一起刷新 innodb_file_format = Barracuda #默认值为 fdatasync. 如果使用 硬件RAID磁盘控制器, 可能需要设置为 O_DIRECT. 这在读取InnoDB缓冲池时可防止“双缓冲(double buffering)”效应 innodb_file_format_max = Barracuda innodb_log_file_size = 2G #这个值定义了日志文件的大小,innodb日志文件的作用是用来保存redo日志。如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要 innodb_log_buffer_size = 16M #事务在内存中的缓冲。 分配原 则:控制在2-8M.这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次 innodb_purge_threads = 2 #控制是否使用,使用几个独立purge线程(清除二进制日志) innodb_large_prefix = 1 #mysql在5.6之前一直都是单列索引限制767,这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072 innodb_thread_concurrency = 8 #InnoDB kernel并发最大的线程数。 1) 最少设置为(num_disks+num_cpus)*2。 2) 可以通过设置成1000来禁止这个限制 innodb_print_all_deadlocks = 1 #是否将死锁相关信息保存到MySQL 错误日志中 innodb_strict_mode = 1 #开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。 innodb_sort_buffer_size = 64M #ORDER BY 或者GROUP BY 操作的buffer缓存大小 innodb_file_per_table = 1 #innodb_file_per_table默认参数值为OFF表示当前是共享表空间,一般建议将其修改为独立表空间 ########semi sync replication settings######## 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在超时之前没有收到确认,将恢复到异步复制,继续执行半同步没有进行的操作 innodb_buffer_pool_dump_pct = 40 #表示转储每个bp instance LRU上最热的page的百分比。通过设置该参数可以减少转储的page数 innodb_page_cleaners = 4 #为了提升扩展性和刷脏效率,在5.7.4版本里引入了多个page cleaner线程。从而达到并行刷脏的效果 innodb_undo_log_truncate = 1 #是否开启在线回收(收缩)undo log日志文件,支持动态设置 innodb_purge_rseg_truncate_frequency = 128 #控制回收(收缩)undo log的频率。undo log空间在它的回滚段没有得到释放之前不会收缩, 想要增加释放回滚区间的频率,就得降低设定值 log_timestamps=system #在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数。