mysql5.7参数简单介绍

本文详细介绍了MySQL配置文件my.cnf中的各项参数及其作用,包括客户端、服务端、InnoDB引擎等部分的配置项,并提供了适用于生产环境的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下my.cnf简单介绍了各个参数的作用,除了buffer_pool_size,server id等参数需要按照服务器配置修改,其余大部分参数不用修改,可以直接用于生产环境。

[client]
port=3306
#如果启用了多实例mysql时,可以通过socket文件来快速的登录mysql对应不同端口下的实例
socket=/tmp/mysql.sock  
default-character-set=utf8

[mysql]
#禁用自动补全
no-auto-rehash
prompt=(\\u@\\h) \R:\m:\s [\d]> 
#安全模式,禁止不带where条件的更新和删除
safe_updates 
[mysqld]

########basic settings########

server-id=1
port = 3306
#运行mysqld进程用户名
user = mysql
#允许远程服务器访问
bind_address = 0.0.0.0
#打开自动提交
autocommit = 1   
character_set_server=utf8mb4
#禁止域名解析
#skip_name_resolve = 1
max_connections = 800
max_connect_errors = 10240
datadir = /data/mysql/data
transaction_isolation = READ-COMMITTED
#为timestamp列指定了not null属性,在strict SQL mode时,如果插入时该列没有指定值,会直接报错
explicit_defaults_for_timestamp = 1
tmpdir = /tmp
#server接受的数据包的大小32MB
max_allowed_packet = 33554432
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
interactive_timeout = 600
wait_timeout = 600
#不区分大小写
lower_case_table_names = 1
#打开文件限制
table_open_cache_instances = 64
event_scheduler=on
default_time_zone="+8:00"   ##看具体业务 
#可以重新利用保存在缓存中线程的数量
thread_cache_size=256


########session settings#######
#join时每个join_buffer所占的最大内存
join_buffer_size = 4194304
#索引缓冲区大小,对MyISAM影响很大
key_buffer_size=8388608
#存的是行指针而不是要查询的数据,sort查询之后 ,以保证获取以顺序的方式获取到查询的数据
read_rnd_buffer_size = 4194304
#用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值
max_heap_table_size = 100663296
#临时表的最大大小,超出后写磁盘
tmp_table_size = 100663296
#为需要全表扫描的MYISAM数据表线程指定缓存,针对每个connection
read_buffer_size = 16777216
#需要排序会话的缓存大小,针对每一个connection
sort_buffer_size = 4194304
#服务端最大允许接收的数据包大小
max_allowed_packet = 33554432
#binlog 能够使用的最大cache 内存大小
binlog_cache_size= 4194304
########log settings########

#不强制限制存储函数,触发器的创建,控制是否存储函数创建者可以被信任
log_bin_trust_function_creators=true
log_error = /data/mysql/data/error.log
#错误日志级别1 错误信息;2  错误信息和告警信息; 3:错误信息、告警信息和通知信息
log_error_verbosity=3 
slow_query_log = 1
slow_query_log_file = slow.log
#开启 记录没有使用索引查询语句
log_queries_not_using_indexes = 1
#开启记录管理型慢SQL
log_slow_admin_statements = 1
#在从服务器上开启慢查询日志
log_slow_slave_statements = 1
#表示每分钟允许记录到slow_log的且未使用索引的sql语句次数(0为无限制,如果为固定值,可能会记录不到sql)
log_throttle_queries_not_using_indexes = 10
#binlog过期时间
expire_logs_days = 30
#慢日志时间
long_query_time = 2
#查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
min_examined_row_limit = 100

########replication settings########
#主库信息存在mysql.slave_master_info表中
master_info_repository = TABLE
#relaylog信息存在mysql.slave_relay_log_info表中
relay_log_info_repository = TABLE
log_bin = bin.log
#表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置
sync_binlog = 1
gtid_mode = on
#只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporary table语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行
enforce_gtid_consistency = 1
#当从库log_slave_updates参数没有开启时,从库的binlog不会记录来源于主库的操作记录。只有开启log_slave_updates,从库binlog才会记录主库同步的操作日志
log_slave_updates=1
binlog_format = row
#在row模式下..开启该参数,将把sql语句打印到binlog日志里面.默认是0(off);
binlog_rows_query_log_events=on
relay_log = relay.log
#relay_log损坏可自我修复
relay_log_recovery = 1
#5.7.6以上由于对每个binlog都有Previous gtid Event的支持binlog_gtid_simple_recovery=true是合理的设置,binlog扫描非常的快因为只是第一个和最后一个binlog文件
binlog_gtid_simple_recovery = 1
#slave_skip_errors = ddl_exist_errors

########innodb settings########
#每个page大小,一个page最少2条记录
innodb_page_size = 16K
#缓冲池内存大小,InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小,内存的13/20
innodb_buffer_pool_size = 1024M
#为了解决 互斥锁,  每个缓冲池管理其自己的空闲列表,提高查询并发性
innodb_buffer_pool_instances = 8
#在启动时把热数据加载到内存
innodb_buffer_pool_load_at_startup = 1
#在关闭时把热数据dump到本地磁盘
innodb_buffer_pool_dump_at_shutdown = 1
#ibdata的初始大小
innodb_data_file_path=ibdata1:2G:autoextend 
#page cleaner线程每次刷脏页的数量
innodb_lru_scan_depth = 2000
#等待事务锁超时时间,默认50秒
innodb_lock_wait_timeout = 5
#当刷新脏数据时,控制MySQL每秒执行的写IO量
innodb_io_capacity = 200
#在压力下,控制当刷新脏数据时MySQL每秒执行的写IO量
innodb_io_capacity_max = 400
#O_DIRECTwrite操作是从mysql innodb buffer里直接向磁盘上写
innodb_flush_method = O_DIRECT
#innoDB的数据文件格式,8.0版本移除,在原来的基础上新增了两种数据表格式的支持:Dynamic 和 Compressed
innodb_file_format = Barracuda
#8.0版本移除
innodb_file_format_max = Barracuda
#redolog路径
innodb_log_group_home_dir = /data/mysql/redolog
#undolog路径
innodb_undo_directory = /data/mysql/undolog
#回滚段为128KB
innodb_undo_logs = 128
#指定有3个undo log文件
innodb_undo_tablespaces = 3
#当刷新一个脏页时,innodb存储引擎会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新,将多个IO写入操作合并为一个IO操作,增大写入量,减少了物理写IO,机械盘打开,ssd可以关闭
innodb_flush_neighbors = 1
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认
innodb_flush_log_at_trx_commit=1
#该参数决定redolog的大小
innodb_log_file_size = 2G
#redolog的数量
innodb_log_files_in_group = 4 
#确保有足够大的日志缓冲区来保存脏数据在被写入到日志文件之前
innodb_log_buffer_size = 32M
#由于每次DML操作都会生成Undo页,系统需要定期对这些undo页进行清理,也就是所谓purge操作,控制是否使用独立purge线程
innodb_purge_threads = 4
#允许列索引最大达到3072
innodb_large_prefix = 1
#限制线程的数量,已过时,默认值为0,它表示默认情况下不限制线程并发执行的数量
innodb_thread_concurrency = 0
#打开配置时,死锁日志存放到error_log配置的文件里面
innodb_print_all_deadlocks = 1
#开启InnoDB严格检查模式
innodb_strict_mode = 1
#控制着在向有auto_increment 列的表插入数据时,相关锁的行为,1是mysql的默认模式,这个模式的好处是auto_inc锁不要一直保持到语句的结束,只要语句得到了相应的值后就可以提前释放锁
innodb_autoinc_lock_mode=1
#数据排序的排序缓冲区的大小
innodb_sort_buffer_size = 67108864
#在做DDL操作期间,限制变更操作记录在临时日志文件大小
innodb_online_alter_log_max_size=128M
#最大脏页的百分数,当系统中 脏页 所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中
innodb_max_dirty_pages_pct=50
innodb_flush_sync=0
#innodb的status写入到innodb_status文件中
innodb_status_file=1

#[mysqld_safe]
#google出的内存管理模块
#malloc-lib=tcmalloc

##########performance-schema############
#开启所有的memory instruments,可以查看监控数据
performance-schema-instrument='memory/%=COUNTED'
performance_schema_digests_size = 40000
performance_schema_max_table_instances= 40000
performance_schema_max_sql_text_length= 4096
performance_schema_max_digest_length= 4096

########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
#增强半同步复制的超时时间,超过5s不返回信息就降为半同步复制
loose_rpl_semi_sync_master_timeout = 5000
#半同步模式
loose_rpl_semi_master_wait_point='after_sync'
#使不同db下的DML操作可以在备库并发回放(在优化后,可以做到不同table下并发)
slave-parallel-type=LOGICAL_CLOCK
#备库复制并发线程数
slave-parallel-workers=16

[mysqld-5.7]
#转储每个innodb buffer pool instance中innodb buffer pages的比例
innodb_buffer_pool_dump_pct = 40
#page clean线程将脏数据写入到磁盘,脏数据写盘后相应的redo就可以覆盖,然后达到redo循环使用的目的,在5.7中参数可以开启多个page clean线程服务于多个innodb buffer
innodb_page_cleaners = 8
#开启在线回收(收缩)undo log日志文件,支持动态设置
innodb_undo_log_truncate = 1
#undolog文件的最大占用空间
innodb_max_undo_log_size = 4G
#指定purge操作被唤起多少次之后才释放rollback segments,当undo表空间里面的rollback segments被释放时,undo表空间才会被truncate。由此可见,该参数越小,undo表空间被尝试truncate的频率越高
innodb_purge_rseg_truncate_frequency = 128
#5.7.6以上由于对每个binlog都有Previous gtid Event的支持binlog_gtid_simple_recovery=true是合理的设置,binlog扫描非常的快因为只是第一个和最后一个binlog文件
binlog_gtid_simple_recovery=1
#log_timestamps 这个参数主要是控制 error log、slow_log、genera log,等等记录日志的显示时间参数
log_timestamps=system
#定义一个记录事务的算法
transaction_write_set_extraction=MURMUR32
#从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时需要打开 show_compatibility_56
show_compatibility_56=on 

[mysqldump]
#此选项会将隔离级别设置为:REPEATABLE READ,让整个数据在dump过程中保证数据的一致性
single-transaction=1
#如果选项赋值为2,那么CHANGE MASTER TO 语句会被写成一个SQL comment(注释),从而只提供信息;如果选项赋值为1,那么语句不会被写成注释并且在dump被载入时生效。
master-data=2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值