my.cnf参数解析 | 一篇文章全搞定

有朋友后台留言说想比较全面的了解一下my.cnf经常用到的参数,笔者整理了一篇参数解析,基本上涵盖了MySQL配置中所能使用的所有参数。
其他朋友有感兴趣的部分,欢迎留言交流~

以下为正文部分。

[client]port = 3306     
//客户端端口号为3306 (默认端口)

socket =/var/lib/mysql/mysql.sock
//为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统;
 默认设置一般是/var/lib/mysql/mysql.sock文件)。

default-character-set = utf8mb4
//新数据库或数据表的默认字符集

[mysql]prompt = [\\u@\\h][\\d]>\\_
[mysqld]# basic settings #

port = 3306basedir = /mysql/mysql57
//使用给定目录作为根目录(安装目录)

datadir = /mysqldata/mysqldata_u01/mysqldb
//从给定目录读取数据库文件

socket = /var/lib/mysql/mysql.sock

pid-file = /mysql/mysql57/mysqld.pid
//MySQL pid文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID。

tmpdir = /mysqldata/mysqltmp                   
//使用指定目录作为临时目录

user = mysql                                   
//mysqld程序在启动后将在给定UNIX/Linux账户下执行;  
mysqld_safe脚本将默认使用–user=mysql选项来启动mysqld程序。

sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,
NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER" 
//定义了你MySQL应该支持的sql语法,对数据的校验等等

autocommit = 1                                 
//mysql事务支持的引擎是InnoDB,默认情况下autocommit的值为1

transaction_isolation = READ-COMMITTED         
//mysql数据库事务隔离级别

explicit_defaults_for_timestamp = 1            
// timestamp列如果没有显式定义为null,默认会被设置为not null属性。
设置timestamp的列值为null,会自动存储为当前timestamp

max_allowed_packet = 96M                       
//服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小
(当与大的BLOB字段一起工作时相当必要),每个链接独立的大小,大小动态增加。

slave_pending_jobs_size_max= 100M              
//在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,
如果内存富余,或者延迟较大时,可以适当调大;
注意这个值要比主库的max_allowed_packet大

event_scheduler = 1                            
//定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能

lower_case_table_names = 1                     
//设置大小写不敏感

# connection #interactive_timeout = 1800                     
//针对交互式连接,即通过mysql客户端连接数据库是交互式连接,空闲等待时间

wait_timeout = 1800                            
//针对非交互式连接,即通过jdbc连接数据库是交互式连接,空闲等待时间

lock_wait_timeout = 1800                       
//mysql事务锁超时时间

skip_name_resolve = 1                          
//禁止域名解析

max_connections = 1000                         
//MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。

max_user_connections = 1000                    
//mysql 单个用户同时处理的数据库连接的最大数量

max_connect_errors = 10                        
//每个客户端连接最大的错误允许数量,如果达到了此限制,
这个客户端将会被mysql服务阻止直到执行了“flush hosts”或者服务重启

# session memory setting #read_buffer_size = 2M                          
//为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 
这个选项的设置值在必要时可以用SQL命令
SET SESSION read_buffer_size = n命令加以改变。

read_rnd_buffer_size = 4M                      
//类似于read_buffer_size选项,但针对的是按某种特定顺序
(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。

sort_buffer_size = 4M                          
//每个session 需要做一个排序分配的一个buffer,sort_buffer_size 
不指定任何的存储引擎,

tmp_table_size = 8M                            
//临时HEAP数据表的最大长度

join_buffer_size = 8M                          
//在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。

# log settings #slow_query_log = 1                             
//开启慢日志查询

log-error =/mysqlslowlog/error.log             
//指定错误日志目录

slow-query-log-file=/mysqlslowlog/slowquery.log 
//指定慢日志存储目录

general_log_file = /mysqlslowlog/general.log   
//记录记录所有的sql,一般不开启

log_queries_not_using_indexes = 1              
//如果运行的SQL语句没有使用索引,则mysql数据库同样会将这条SQL语句记录到慢查询日志文件中。

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 = 5                           
//超过5天的binlog删除

long_query_time = 2                            
//慢查询的执行用时上限(默认设置是10s)。

min_examined_row_limit = 100                   
//查询检查返回少于该参数指定行的SQL不被记录到慢查询日志

binlog-rows-query-log-events = 1               
//binlog_rows_query_log_events 对binlog_format=row有效,
设为true后可以在binary log中记录原始的语句

log-bin-trust-function-creators = 1            
//当二进制日志启用后,这个变量就会启用。
它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数

log-slave-updates = 1                          
//从库做为其他从库的主库时 log-slave-updates参数是必须要添加的。
该参数就是为了让从库从主库复制数据时可以写入到binlog日志

# innodb settings #innodb_page_size = 16K                         
//innodb数据页大小

innodb_buffer_pool_size=20G                    
//包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息。

innodb_buffer_pool_instances = 16              
//这个参数能较好的运行于多核处理器,支持使用此参数对服务器变量建立多个缓冲池实例

innodb_buffer_pool_load_at_startup = 1         
//在启动时把热数据加载到内存里

innodb_buffer_pool_dump_at_shutdown = 1        
//在关闭时把热数据dump到本地磁盘

innodb_lru_scan_depth = 1024                   
//控制LRU列表中可用页的数量,默认值为1024

innodb_lock_wait_timeout = 5                   
//设置锁等待的时间是5s,一旦数据库锁超过这个时间就会报错

innodb_io_capacity = 2048                      
//动态调整刷新脏页的数量

innodb_io_capacity_max = 4096                  
//只有当你在频繁写操作的时候才有意义(它不适用于读操作,例如 SELECTs)。
若你真的需要对它进行调整,最好的方法是要了解系统可以支持多大的 IOPS

innodb_flush_method = O_DIRECT                 
//控制着innodb数据文件及redo log的打开、刷写模式,
有三个值:fdatasync(默认),O_DSYNC,O_DIRECT

innodb_file_format = Barracuda                 
//表压缩

innodb_file_format_max = Barracuda

innodb_undo_logs = 128                         
//回滚段个数

innodb_undo_tablespaces = 3                    
//用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,
就再也不能被改动了;默认值为0,表示不独立设置undo的tablespace,
默认记录到ibdata中

innodb_flush_neighbors = 1                     
//当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,
如果是脏页,那么一起进行刷新,适用于机械磁盘

innodb_log_file_size = 1G                      
//事务日志文件大小

innodb_log_files_in_group = 2                  
//事务日志组数

innodb_log_buffer_size = 2M                    
//该参数确保有足够大的日志缓冲区来保存脏数据在被写入到日志文件之

innodb_purge_threads = 4                       
//指定多个innodb_purge_threads来进一步加快和提高undo回收速度。

innodb_large_prefix = 1                        
//这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072

innodb_thread_concurrency = 16                 
//限制并发线程的数量,一旦执行线程的数量达到这个限制,
额外的线程在被放置到对队列中之前,会睡眠数微秒,可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间

innodb_print_all_deadlocks = 1                 
//保存死锁日志

innodb_strict_mode = 1                         
//开启innodb严格检查模式

innodb_sort_buffer_size = 4M                   
//在创建InnoDB索引时用于指定对数据排序的排序缓冲区的大小,
这个参数只会在创建索引的过程中被使用

innodb_write_io_threads = 4                    
//写线程 默认4个,负责数据块的写入

innodb_read_io_threads = 4                     
//读线程,负责数据块读取

innodb_file_per_table = 1                      
//开启独立表空间

innodb_stats_persistent_sample_pages = 64      
//参数控制统计信息采样的数量,统计信息收集是采样分析

innodb_autoinc_lock_mode = 2                   
//当innodb_autoinc_lock_mode设置为2时,
所有insert种类的SQL都可以立马获得锁并释放

# replication setting #
server_id = 1                                  
//来唯一的标识某个数据库实例,应用在复制架构

log_bin=/mysqldata/mysqlbinlog/mysqlbinlog     
//指定binlog存储目录

master_info_repository = TABLE                 
//开启MTS功能后,并行复制开启后对于元master.info这个文件的更新将会大幅提升,
设置为TABLE可以用来减小这部分的开销。

relay_log_info_repository = TABLE              
//INNODB存储,则无论为任何值,则都每次event都会更新表,
可以避免relay.info更新不及时,SLAVE 重启后导致的主从复制数据重复插入报错问题

sync_binlog = 1                                
//表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置

gtid_mode = on                                 
//开启gtid复制模式

enforce_gtid_consistency = 1                   
//开启gtid的一些安全限制

log_slave_updates                              
//log_slave_updates参数用来控制Mster是否把所有的操作写入到binary log

binlog_format = ROW                            
//binlog日志模式

binlog_rows_query_log_events = 1relay_log = relay.log

relay_log_recovery = 1                         
//当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,
则自动放弃所有未执行的relay-log,并且重新从master上获取日志,
这样就保证了relay-log的完整性

binlog_gtid_simple_recovery = 1

slave_skip_errors = ddl_exist_errors           
//此参数主要用于从库,在主从复制时,一些没必要的错误可以忽略,不影响复制

slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'  
//可以部分解决无主键表导致的复制延迟问题,表示如果有索引就用索引,否则使用hash扫描

# semi sync replication settings #

plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;
rpl_semi_sync_slave=semisync_slave.so"

rpl_semi_sync_master_enabled = 1               
//控制是否在主库上启用半同步复制,开启半同步复制

rpl_semi_sync_master_timeout = 3000            
//这个参数用于控制master等待semi-slave ack报文的时间,单位是毫秒。
master等待超时,则切换为普通的异步复制。

rpl_semi_sync_slave_enabled = 1                
//作用和参数 rpl_semi_sync_master_enabled相似,但是控制的是从库的插件

# password plugin #

validate_password_policy=2                     
//密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。

validate_password_length=16                    
//密码长度为16位

validate_password_mixed_case_count=2           
//密码至少要包含的小写字母个数和大写字母个数。

validate_password_number_count=2               
//密码至少要包含2个数字个数

validate_password_special_char_count=3         
//密码至少要包含3个特殊字符数

# 5.7 ## new innodb setting #

loose_innodb_numa_interleave=1                 
//当设置innodb_numa_interleave=1的时候,
对于mysqld进程的numa内存分配策略设置为MPOL_INTERLEAVE,而一旦Innodb buffer pool分配完毕,则策略重新设置回MPOL_DEFAULT

innodb_buffer_pool_dump_pct = 40               
//设置一下恢复Buffer Pool中多少数据

innodb_page_cleaners = 4                       
//用于指定页面清理线程的数量。其默认值1,维持了之前单个页面清理线程的配置

innodb_undo_log_truncate = 1                   
//开启在线回收(收缩)undo log日志文件,支持动态设置

innodb_max_undo_log_size = 2G                  
//undo表空间文件大小设置为2G

innodb_purge_rseg_truncate_frequency = 128     
//指定purge操作被唤起128次之后才释放rollback segments

# new replication setting #

slave-parallel-type = LOGICAL_CLOCK            
//变量slave-parallel-type可以有两个值:DATABASE 默认值,基于库的并行复制方式;
LOGICAL_CLOCK:基于组提交的并行复制方式

slave-parallel-workers = 8                     
//8为设置的并发线程个数

slave_preserve_commit_order=1                  
//保证从库binlog提交顺序

slave_transaction_retries=128                  
//slave复制中,如果因为InnoDB死锁或者锁超时导致复制线程执行的事务失败重试次数

# other change setting #

binlog_gtid_simple_recovery=1

log_timestamps=system                          
//这个参数主要是控制错误日志、慢查询日志等日志中的显示时间

show_compatibility_56=on                       
//从mysql5.7.6开始information_schema.global_status已经开始被舍弃,
为了兼容性,此时需要打开 show_compatibility_56

# patch #symbolic_links=0                               
//是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,
为0不开启



更多内容请关注微信公众号:数据与人

为您推荐

发表评论

您的电子邮箱地址不会被公开。