Skip to main content

Mysql 配置文件详解

[mysqld]
# GENERAL #
# 运行mysql用户
user = mysql  
# 运行mysql端口
port = 3306  
# Unix socket
socket = /data1/db3306/my3306.sock  
# 数据库启动进程号
pid_file = /data1/db3306/mysql.pid  
# 数据文件存储路径
datadir = /data1/db3306/  
# 临时文件存储路径,磁盘级别临时表等
tmpdir = /data1/tmp  
# Binary log存储路径,默认在data dir下
log_bin = /data1/db3306/3306-mysql-bin  
# Relay log存储路径,中继日志。缓存主从同步中master传来的binlog
relay-log = /data1/db3306/3306-relay-bin  
# 数据库错误日志
log_error = /data1/db3306/error.log  
# 数据库慢查询日志
slow_query_log_file = /data1/db3306/slow-queries.log  
# 是否开启慢查询,开启就会记录慢查询
long_query_time=1  
# 控制内存中的binlog buffer持久化到binlog的方式
# 0
# 与操作系统刷新文件机制一样,刷新入文件系统cache,不会立即写入磁盘。依赖于系统fdatasync,意外断电的时候会丢失数据。
# >1
# 每次写入次数,为1的时候,mysql每次变更的时候都操作fsync函数将binlog buffer写入日志。耗费IO但是能够保证数据的一致性。
# Mysql开启了autocommit,每次写入都会被当做一个事务。2是一个折中方案,每2次就将binlog写入日志。
sync_binlog = 0  
# 自动清零binlog天数
expire_logs_days = 7  
# 内核组件。mysql暂停三次握手之前,有多少个请求可以暂存在堆栈中。
back_log=1024  
# 跳过域名解析,否则mysql会去验证主机名在服务器的dns上是否能够被解析。
skip-name-resolve  
# 跳过从服务器启动
skip-slave-start  
# 跳过myiasm外部锁。用于多线程访问同一个数据库目录的锁机制。
skip-external-locking  
# 忽略客户端字符集,默认使用server字符集
skip-character-set-client-handshake  
# 限制创建timestamp默认字段指定默认行为,兼容5.5
explicit_defaults_for_timestamp=true  
# 默认的存储引擎
default_storage_engine = InnoDB  
# mysql监听的地址,
bind-address=0.0.0.0  
# 小写全部表名,mycat需要配置。
lower_case_table_names = 1  
# mysql5.7失效,自动恢复myisam表
myisam_recover = FORCE,BACKUP  
# 事务隔离级别
transaction-isolation = READ-COMMITTED  
# 表定义cache,表结构定义文件
table_definition_cache = 4096  
# 表打开cache,所有打开的表的句柄的缓存,同时要设置操作系统的open files参数,/etc/security/limits.conf。一般4096足够。
table_open_cache = 4096  
# 是否启用性能统计信息,5.6开启会影响约20%性能。
performance_schema = 0

# connection #
# 最大连接数
max_connections = 1100  
# root权限以外的用户最大连接数
max_user_connections = 1000  
# 链接中断的次数计数,超过计数,需要使用flush hosts重置计数器
max_connect_errors = 1000

# timeout #
# mysql在关闭连接之前等待的秒数
wait_timeout = 100  
# mysql在关闭连接之前你没有进行任何动作的时间
interactive_timeout = 100  
# 事务获取资源超时时间
lock_wait_timeout = 3  
# mysql等待客户端tcp连接时间
connect_timeout = 20  
# slave和master连接超时的时间,默认3600s
slave-net-timeout = 30

# character # 
# mysql server端的字符集
character-set-server=utf8  
# 每个客户端连接后,执行的strings
init-connect='SET NAMES utf8'

# disabled query cache #
# 是否使用查询缓存,一般都关闭
query_cache_type = 0  
# 查询缓存大小,在关闭的时候需要设置为0
query_cache_size = 0

# replication #
# mysql server id
server_id=71493306  
# 是否开启GTID,如果开启了则log-bin log-slave-updates enforce-gtid-consistency必须打开
gtid_mode=ON  
# 保证事务被记录到binlog
enforce-gtid-consistency  
# slave会把复制的binlog记录到自己binlog中。slave会将master binlog放在本地的relay log中,如果有其他的slave将这个slave作为master,则需要将记录记录在这个slave的binlog中好去同步给他的slave。
log-slave-updates  
# binlog日志格式,一般设置为row
binlog-format=row  
# 并行复制(库级别),mysql5.7是事务级别
slave-parallel-workers=6  
# 服务器master log info是存储在table还是在file中。一般存储在table中。他记录了拉取到master的哪个文件的哪个位置。
master-info-repository=TABLE  
# 服务器relay log info是存储在table还是在file中。一般存储在table中。他记录了拉取到master的哪个文件的哪个位置。
relay-log-info-repository=TABLE  
# N次之后刷新master info
sync_master_info = 10000  
# thread使用校验和验证数据
slave_sql_verify_checksum=1  
# 跳过自动启动slave
skip-slave-start

# myiasm #
# 索引块缓冲区大小
key_buffer_size = 128M  
max_heap_table_size = 32M


# session #
# 顺序读缓冲区大小
read_buffer_size = 1M  
# 离散读缓冲区大小
read_rnd_buffer_size = 1M  
myisam_sort_buffer_size = 32M  
# 临时heap数据表最大长度
tmp_table_size = 32M  
# 允许创建内存表最大大小
max_heap_table_size = 64M  
thread_cache_size = 64  
#thread_concurrency = 32
max_allowed_packet = 32M  
thread_stack = 192K  
# insert,loaddata,inline子句缓冲区大小
bulk_insert_buffer_size = 32M  
sort_buffer_size = 128K  
# 表连接缓冲大小
join_buffer_size = 128K

# 表级别的metadata lock超时时间,这个要设置到最小
# lock_wait_timeout=1

# INNODB #
# 操作系统默认写入行为。使用sync保存到磁盘,但是通知磁盘不要缓存数据,也不进行预读,避免缓存双重写入的问题。
innodb_flush_method = O_DIRECT  
# 数据文件夹目录
innodb_data_home_dir = /data1/db3306/  
# 共享表空间极其大小
innodb_data_file_path = ibdata1:10M:autoextend  
# redo log #
# redo log目录
innodb_log_group_home_dir=/data1/db3306/  
# redo log组数量
innodb_log_files_in_group = 3  
# redo log大小
innodb_log_file_size = 1G  
# innodb performance #
# 0 log buffer每秒1次写入log file中,同时刷新到磁盘。事务提交的时候不会主动触发写入操作。
# 1 每次事务提交的时候mysql会把log buffer写入log file,并刷新到磁盘。
# 2 每次事务提交的时候mysql会把log buffer写入log file,但是不刷新到磁盘。mysql每秒会执行一次刷新磁盘操作。
innodb_flush_log_at_trx_commit = 0  
# 是否使用独立表空间,启用了方便恢复数据,而且性能有好处
innodb_file_per_table = 1  
# Innodb buffer pool实例数量,Innodb在管理大内存的buffer pool的时候效率并不高,主要原因是mutex只有一个,在内存大的时候会造成page时间长。所以这里内存越大,配置要越多。
innodb_buffer_pool_instances = 8  
# 指定Innodb服务器的IO能力,也就是每秒刷新多少个脏页进入磁盘。不要设置到磁盘的满负荷能力。
innodb_io_capacity = 2000  
# Innodb事务等待行级锁的超时时间,针对表的DML。
innodb_lock_wait_timeout = 10  
# 控制服务器无法写入到binlog的时候的动作
binlog_error_action = ABORT_SERVER  
# Innodb引擎最大缓冲区大小(制定了instance后每个缓冲区大小=innodb_buffer_pool_size÷innodb_buffer_pool_instances)
innodb_buffer_pool_size = 256M  
# 存储数据字典和其他内部结构的内存池大小
# innodb_additional_pool_size = 32M

# Innodb最大脏页百分比,超过这个值的时候就会触发checkpoint写入脏页,节约IOPS
innodb_max_dirty_pages_pct=90  
# http://dev.mysql.com/doc/refman/5.7/en/innodb-file-format-enabling.html
innodb_file_format=Barracuda  
# 默认为true,如果关闭则binlog记录顺序和实际可能不相符。
# 两阶段提交:准备阶段,提交阶段。mysql binlog buffer在写入binlog之前,会通知redo做数据准备,称之为prepare。prepare成功就通知binlog持久到事务日志,binlog持久完成之后才会在redo中修改为compelete状态表示操作完成。
innodb_support_xa = 0  
# 数据库启动和停止的时候自动dump buffer pool数据。避免数据库刚启动的时候业务对于数据库的冲击。dump实际上dump的是Innodb的数据编号
innodb_buffer_pool_dump_at_shutdown = 1  
# 快速预热buffer pool数据
innodb_buffer_pool_load_at_startup = 1

# thread等待Innodb metux(内存级锁)时间
# innodb_sync_spin_loops = 

# 线程调度器最大并行度,0表示没有限制
# innodb_thread_concurrency = 0

# 如果已经进入内核的线程超过最大数量,新的线程就无法进入内核,于是Innodb使用两阶段处理来尽可能高效快速进入内核。即线程在退出之前等待进入内核的时间(Thread sleep)。
# innodb_thread_sleep_delay = 

# 进程进入内核的时候会得到一定的ticket,代表这个进程最多会有多少次被处理。超过次数之后,CPU就会将其踢出而不处理。
# innodb_concurrency_tickets = 100

# innodb 优化有一定帮助 #
# 数据库通过LRU来进行管理。热数据会放在热端,数据的不断进入,会将冷端数据刷入磁盘。新读取的Page并不会放在LRU的首部,而是在中间位置,默认放在5/8处。指定热数据插入到LRU链表的百分比。
# innodb_old_blocks_pct = 60

# innodb_read_io_threads = 4
# innodb_write_io_threads = 4
# innodb_purge_io_threads = 1

# 嗯,不用修改
# innodb_purge_batch_size = 

# 该参数控制将insert update delete 合并到insert buffer thread中
# innodb_change_buffering = On

# innodb_stats_on_metadata