配置解析
[mysqld]
sql_mode = PIPES_AS_CONCAT,ANSI_QUOTES,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
#PIPES_AS_CONCAT 将||视为字符串连接操作符(+)(同concat()),而不视为OR
#ANSI_QUOTES 将‘"’视为识别符引号(‘`’引号字符),不要视为字符串的引号字符。在ANSI模式,你可以仍然使用‘`’来引用识别符。启用ANSI_QUOTES后,你不能用双引号来引用字符串,因为它被解释为识别符。
#STRICT_TRANS_TABLES 严格模式控制MySQL如何处理非法或丢失的输入值.MySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果值丢失,MySQL在列中插入隐式 默认值。
#NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。
explicit_defaults_for_timestamp = off
1.和其它字段类型不一样,这个字段默认为not null(默认not null加default null修饰会报错,往该列中插入null值,会自动转化为默认值).
2.第一列timestamp字段,如果不强制指定默认值或on update属性的话,就会默认设为DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP。
3.非第一列timestamp字段,如果不强制指定默认值,DEFAULT '0000-00-00 00:00:00'
4.如果不想使用timestamp的默认值,允许为空的字段可定义为:timestamp null default null;不允许为空的字段定义为:timestamp not null default '无业务含义的时间定值';
如果explicit_defaults_for_timestamp=1,则关闭timestamp default的特性:
1.如果没有被显示指定not null,则默认为null;
2.默认值也会是null而非CURRENT_TIMESTAMP;
3.如果指定了not null属性,insert式不指定该字段的值,strict sql_mode下,会报错。非strict sql_mode下插入'0000-00-00 00:00:00';
event_scheduler=ON
#开启定时任务
## slave
server-id = 2017080204 #
skip-slave-start = 1
#1复制进程不会随着数据库的启动而启动
read_only = 0
#1开启只读 0关闭只读
log-slave-updates = 1
# 1从库从主库复制数据时可以写入到binlog日志
relay_log_purge = 1
#如果默认情况 relay_log_purge=1 时,SQL 线程就会自动将之前的 relay log 全部删除。而当 relay_log_purge=0 时,旧的 relay log 则会被保留.
relay_log_info_repository = table
master_info_repository = table
#IO thread的执行状态信息保存在master.info文件,SQL thread的执行状态信息保存在relay-log.info文件.
#由于崩溃或停止 MySQL 时,SQL 线程可能没有执行完全部的 relay log,最后一个 relay log 中的一部分数据会被重新下载到新的文件中。也就是说,这部分数据重复了两次。
#如果 SQL 跟得很紧,则可能在 IO 线程写入 relay log ,但还没有将同步到磁盘时,就已经读取执行了。这时,就会造成新的文件和旧的文件中少了一段数据。
#5.6开始可以设置将这两个信息保存在innodb事务表中,这时执行relay log中的事务和写relay info在一个事务中,就能得到原子性保证。
relay_log_recovery = 1
#为了让从库是crash safe的,必须设置relay_log_recovery=1,这个选项的作用是,在 MySQL 崩溃或人工重启后,由于IO 线程无法保证记录的从主库读取的binlog位置的正确性,因此,就不管master_info中记录的位置,而是根据 relay_log_info中记录的已执行的binlog位置从主库下载,并让SQL线程也从这个位置开始执行。MySQL启动时,相当于执行了flush logs,会新开一个relay log文件,新的 relay log会记录在新的文件中.
innodb_autoinc_lock_mode=1
#1 auto_inc锁不要一直保持到语句的结束,只要语句得到了相应的值后就可以提前释放锁;
#0 表级的auto_inc锁,在语句结束的时候才释放这把锁,注意是语句级而不是事务级,一个事务可以包含多个语句;
#2 这个模式下已经没有了auto_inc锁,这个模式下的性能是最好的,但是对于同一个语句来说它得到的auto_increment值可能不是连续的;
auto_increment_offset=1
#从1开始自增长
auto_increment_increment=1
#增长幅度为1,如果是双主架构,需要设置auto_increment_offset分别为1,2,auto_increment_increment=2
query_cache_size = 0
#查询缓存池设置大小为0
query_cache_type = 0
#关闭查询缓存
back_log = 200
#back_log 的值表示监听的TCP/IP连接队列的大小。当然,操作系统也有自己的队列大小限制。Unix手册中对于listen()的系统调用会提供细节。如需要,可以检查操作系统文档中关于该值最大值的说明。back_log 不能大于操作系统限制的最大值。
bulk_insert_buffer_size = 8M # myisam 批量insert
#当我们使用如 insert … values(…),(…),(…)… 的方式进行批量插入的时候,MySQL 会先将提交的数据放如一个缓存空间中,当该缓存空间被写满或者提交完所有数据之后,MySQL 才会一次性将该缓存空间中的数据写入数据库并清空缓存。此外,当我们进行 LOAD DATA INFILE 操作来将文本文件中的数据 Load 进数据库的时候,同样会使用到此缓冲区。
character-set-server = utf8
#字符集
lower_case_table_names = 1 # 1:不区分
# 1 表名忽略大小写
## binlog
sync_binlog = 1 # !!!
#0 当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
#1 即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多
#n 当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
binlog_cache_size = 1M
#用来存储二进制日志的缓存
expire_logs_days = 90
#日志过期时间
binlog_format = row
#日志格式
log_bin_trust_function_creators = 1 # 允许function复制
# 1 开启了log-bin的MySQL Server便可以随意创建function。这里存在潜在的数据安全问题,除非明确的知道创建的function在master和slave上的行为完全一致
#另外如果是在master上创建函数,想通过主从复制的方式将函数复制到slave上则也需在开启了log-bin的slave中设置上述变量的值为ON(变量的设置不会从master复制到slave上,这点需要注意),否则主从复制会报错
## audit
server_audit_logging = 1 # 0 不开启
server_audit_events = QUERY
#server_audit_excl_users = zabbix_mon,monitor
server_audit_incl_users = root
server_audit_output_type = file
server_audit_file_rotate_size = 1G
server_audit_file_rotate_now = 0
server_audit_file_rotations = 0 # 日志不轮转 n保留日志数
server_audit_query_log_limit = 1024
## 基线
local-infile = off
#off 不允许load数据
skip-networking = off
#开启远程访问
skip-name-resolve = on
#on 跳过DNS反向解析
## connect
max_allowed_packet = 32M
max_connect_errors = 1000
max_connections = 3000
wait_timeout = 1800 # 关闭 非交互 连接之前等待活动的秒数 default:8h
interactive_timeout = 1800 # 关闭 交互式 连接之前等待活动的秒数 default:8h
table_open_cache = 4096
thread_cache_size = 64
thread_stack = 192K
transaction-isolation = REPEATABLE-READ #
pid-file = mysql.pid
## slow
slow_query_log = 1 # 0-off 1-on
long_query_time = 1
log-slow-admin-statements
#一些管理指令,也会被记录。比如OPTIMEZE TABLE, ALTER TABLE等等
log_queries_not_using_indexes = 0
slow_launch_time = 1 #如果创建线程的时间超过该秒数,服务器增加Slow_launch_threads状态变量。
read_buffer_size = 4M # 顺序读
read_rnd_buffer_size = 8M # 随机读
sort_buffer_size = 8M
join_buffer_size = 32M
tmp_table_size = 128M
max_heap_table_size = 128M
default-storage-engine = innodb
## innodb
innodb_buffer_pool_size = 20G #
innodb_max_dirty_pages_pct = 80 #
innodb_thread_concurrency = 120 # default: 0
innodb_buffer_pool_instances = 1 #
innodb_flush_log_at_trx_commit = 1 # !!!
innodb_read_io_threads = 20 # 15*4CPU
innodb_write_io_threads = 15 #
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_lru_scan_depth = 1024
innodb_use_native_aio = 1
innodb_flush_neighbors = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path=ibdata:1G:autoextend
innodb_log_files_in_group = 3
innodb_log_file_size = 1G
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_strict_mode = 1
innodb_lock_wait_timeout = 30
innodb_log_buffer_size = 16M
innodb_support_xa = 0
innodb_adaptive_flushing = 1
innodb_change_buffering = all
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_file_format_check = 1
innodb_purge_threads = 4 ## purge thread 线程数上限 mysql5.6 可设置大于1
innodb_purge_batch_size = 300 ## 每次purge 回收提交事务数量
innodb_use_sys_malloc = 1 ## innodb 使用操作系统内存分配器
innodb_old_blocks_time = 1
innodb_fast_shutdown = 0
performance_schema = 1
innodb_print_all_deadlocks = 1
innodb_sort_buffer_size = 4M
## mysql5.6
innodb_page_size = 16k
#gtid_mode = OFF # off
#enforce-gtid-consistency = true
slave_parallel_workers = 0
table_open_cache_instances=16
binlog_rows_query_log_events=1 # row模式下记录完整SQL
# MyISAM
key_buffer_size = 256M
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
prompt=\p@\d>\_
[mysqld_safe]
open-files-limit = 28192
[mysqlhotcopy]
interactive-timeout