MySQL的配置文件详解

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数。这个配置文件包含了从服务器性能调整到行为控制等多方面的设置。下面为您详细介绍每个配置项的具体含义:

[client]
#########################################################################
#                                                                       #
#                         MySQL客户端配置                               #
#                                                                       #
#########################################################################
port=3306	#MySQL客户端默认端口号
socket	= /mysql/data/3306/mysql.sock #用于本地连接的Unix套接字文件存放路径
default-character-set=utf8 #MySQL客户端默认字符集

[mysql]
#########################################################################
#                                                                       #
#                         MySQL命令行配置                               #
#                                                                       #
#########################################################################
no-beep
prompt="\u@mysql3306 \R:\m:\s [\d]> "
#no-auto-rehash
auto-rehash	#开启tab补齐功能
default-character-set=utf8	#MySQL命令行默认字符集
max_allowed_packet = 256M	#指定在网络传输中一次消息传输量的最大值。系统默认值 为1MB,最大值是1GB,必须设置1024的倍数

[mysqld]
#########################################################################
#                                                                       #
#                        basic settings                               	#
#                                                                       #
#########################################################################
server-id=3306	#数据库服务器ID
port=3306	#MySQL服务端默认监听的TCP/IP端口
user = mysql	#MySQL用户
bind_address= 192.168.1.51	#绑定地址
basedir=/mysql/app/mysql	#MySQL软件安装路径
datadir=/mysql/data/3306/data	#MySQL数据文件存放路径
tmpdir =/mysql/data/3306/tmp	#MySQL临时文件存放路径
socket	= /mysql/data/3306/mysql.sock	# 用于本地连接的Unix套接字文件存放路径
pid-file = /mysql/data/3306/mysql.pid #进程ID文件存放路径
character-set-server=utf8	#MySQL服务端字符集
skip-character-set-client-handshake=1
autocommit = 0	#默认为ON,设置为OFF,关闭事务自动提交
default-storage-engine=INNODB	#设置默认存储引擎为InnoDB
# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
transaction_isolation = READ-COMMITTED
event_scheduler = ON 	#开启事件调度器event_scheduler
explicit_defaults_for_timestamp = 1		#控制TIMESTAMP数据类型的特性,默认OFF,设置为ON,update 时timestamp列关闭自动更新
lower_case_table_names = 1				# 库名、表名是否区分大小写。默认为0,设置1,不区分大小写,创建的表、数据库都以小写形式存放磁盘

#########################################################################
#                                                                       #
#                        Network & Connection                           #
#                                                                       #
#########################################################################
max_connections = 800		#每个数据库用户的最大连接,(同一个账号能够同时连接到mysql服务的最大连接数),默认为0,表示不限制
max_user_connections = 1000		#每个数据库用户的最大连接,(同一个账号能够同时连接到mysql服务的最大连接数),默认为0,表示不限制
back_log=1024				#MySQL监听TCP端口时设置的积压请求栈大小,默认50+(max_connections/5),最大不超过900
max_connect_errors = 1000	#每个主机的连接请求异常中断的最大次数。对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST
interactive_timeout = 1800		#服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:1800秒
wait_timeout = 1800
# 服务器关闭非交互连接之前等待活动的秒数。默认值:28800秒(8小时)
# 指定一个请求的最大连接时间,当MySQL连接闲置超过一定时间后将会被强行关闭。对于4GB左右内存的服务器来说,可以将其设置为5~10。
# 如果经常出现Too Many Connections的错误提示,或者show processlist命令发现有大量sleep进程,则需要同时减小interactive_timeout和wait_timeout值。
connect_timeout = 28800
# 在获取连接时,等待握手的超时秒数,只在登录时生效。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可
open_files_limit = 65536
# mysqld能打开文件的最大个数,默认最小1024,如果出现too mant open files之类的就需要增大该值。
max_allowed_packet = 16M
# 指定在网络传输中一次消息传输量的最大值。系统默认值 为1MB,最大值是1GB,必须设置1024的倍数

#########################################################################
#                                                                       #
#                        Thread & Buffer                           		#
#                                                                       #
#########################################################################
sort_buffer_size = 32M		#排序缓冲区大小,connection级参数,默认大小为2MB。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引,其次可以尝试增大该值
read_buffer_size = 16M		#顺序读缓冲区大小,connection级参数,该参数对应的分配内存是每连接独享。对表进行顺序扫描的请求将分配一个读入缓冲区
read_rnd_buffer_size = 32M	#随机读缓冲区大小,connection级参数,该参数对应的分配内存是每连接独享。默认值256KB,最大值4GB。当按任意顺序读取行时,将分配一个随机读缓存区
join_buffer_size = 128M		#联合查询缓冲区大小,connection级参数,该参数对应的分配内存是每连接独享
key_buffer_size=32M			#指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能
bulk_insert_buffer_size = 64M	#批量插入数据缓存大小,可以有效提高插入效率,默认为8M
# 服务器线程缓冲池中存放的最大连接线程数。默认值是8,断开连接时如果缓存中还有空间,客户端的线程将被放到缓存中,当线程重新被请求,将先从缓存中读取。
# 根据物理内存设置规则如下:1G  —> 8,2G  —> 16,3G  —> 32,大于3G  —> 64	
thread_stack = 256K			#每个连接被创建时,mysql分配给它的内存。默认192KB,已满足大部分场景,除非必要否则不要动它,可设置范围128KB~4GB		
query_cache_type = 1		#开启查询缓存,0表示关闭,1表示开启
query_cache_size=1M			#查询缓存大小,在高并发,写入量大的系统,建议把该功能禁掉 0表示关闭,1表示开启
query_cache_limit = 4M 		#指定单个查询能够使用的缓冲区大小,缺省为1M
tmp_table_size = 72M		
# MySQL的heap(堆积)表缓冲大小,也即内存临时表,默认大小是 32M。如果超过该值,则会将临时表写入磁盘。在频繁做很多高级 GROUP BY 查询的DW环境,增大该值。
# 实际起限制作用的是tmp_table_size和max_heap_table_size的最小值
max_heap_table_size = 1024M		#用户可以创建的内存表(memory table)的大小,这个值用来计算内存表的最大行数值
table_definition_cache = 400	#表定义缓存区,缓存frm文件。表定义(global)是全局的,可以被所有连接有效的共享
table_open_cache=2000		#所有SQL线程可以打开表缓存的数量,缓存ibd/MYI/MYD文件。 打开的表(session级别)是每个线程,每个表使用
table_open_cache_instances = 4	#对table cache 能拆成的分区数,用于减少锁竞争,最大值64
thread_cache_size=768		#用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求

#########################################################################
#                                                                       #
#                        Safety                           				#
#                                                                       #
#########################################################################
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语法模式,与其他异构数据库之间进行数据迁移时,SQL Mode组合模式会有帮助
local_infile = OFF		#禁用LOAD DATA LOCAL命令
plugin-load = validate_password.so		#加密认证插件,强制mysql设置复杂密码
skip-external-locking	#避免MySQL的外部锁定,减少出错几率,增强稳定性
#skip-locking
#skip_name_resolve = 1		#禁止MySQL对外部连接进行DNS解析,消除MySQL进行DNS解析。如果开启该选项,所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking 			#不允许CP/IP连接,只能通过命名管道(Named Pipes)、共享内存(Shared Memory)或Unix套接字(Socket)文件连接

#########################################################################
#                                                                       #
#                       log settings                           			#
#                                                                       #
#########################################################################
log-output=FILE
general_log = 0		#关闭通用查询日志
general_log_file=/mysql/log/3306/itpuxdb-general.log		#通用查询日志存放路径
slow_query_log = ON		#开启慢查询日志
slow_query_log_file=/mysql/log/3306/itpuxdb-query.log		#慢查询日志存放路径
long_query_time=10		#超过10秒的查询,记录到慢查询日志,默认值10
log_queries_not_using_indexes = 1		#没有使用索引的查询,记录到慢查询日志,可能引起慢查询日志快速增长
log_slow_admin_statements = 1			
# 执行缓慢的管理语句,记录到慢查询日志
# 例如 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.
log-error=/mysql/log/3306/itpuxdb-error.log		#错误日志存放路径
log_error_verbosity = 2
# 全局动态变量,默认3,范围:1~3
# 表示错误日志记录的信息,1:只记录error信息;2:记录error和warnings信息;3:记录error、warnings和普通的notes信息
log-bin =/mysql/log/3306/itpuxdb-bin.log	#二进制日志存放路径	
log-bin-index = /mysql/log/3306/itpuxdb-bin.index	#定义binlog的位置和名称
binlog_format = row 	#binlog格式,复制有3种模式STATEMENT,ROW,MIXED
expire_logs_days = 10	#只保留最近10天的binlog日志
binlog_cache_size = 2M	
# 每个session分配的binlog缓存大小
# 事务提交前产生的日志,记录到Cache中;事务提交后,则把日志持久化到磁盘
max_binlog_cache_size = 16M
max_binlog_size = 200M	#每个binlog日志文件的最大容量
log_slave_updates = ON	#开启log_slave_updates,从库的更新操作记录进binlog日志
sync_binlog = 1	
#sync_binlog=0(默认),事务提交后MySQL不刷新binlog_cache到磁盘,而让Filesystem自行决定,或者cache满了才同步。
#sync_binlog=n,每进行n次事务提交之后,MySQL将binlog_cache中的数据强制写入磁盘。
binlog_rows_query_log_events = ON	#将row模式下的sql语句,记录到binlog日志,默认是0(off)
log_slow_slave_statements = 1	#记录从库上执行的慢查询语句
log_throttle_queries_not_using_indexes = 10		#设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
min_examined_row_limit = 100	#记录那些由于查找了多余100次而引发的慢查询
log_bin_trust_function_creators = 1 #开启log-bin后可以随意创建function,存在潜在的数据安全问题

#########################################################################
#                                                                       #
#                       Relay Log settings                           	#
#                                                                       #
#########################################################################	
relay_log = /mysql/log/3306/itpuxdb-relaylog.log	#中继日志存放路径
relay_log_index = /mysql/log/3306/itpuxdb-relaylog.index	#定义relay_log的位置和名称
#binlog_checksum = CRC32
# Session-Thread把Event写到Binlog时,生成checksum。默认为(NONE),兼容旧版本mysql。
master_verify_checksum = ON
# Dump-Thread读Binlog中的Event时,验证checksum
slave_sql_verify_checksum = ON
# 从库的I/O-Thread把Event写入Relaylog时,生成checksum;从库的SQL-Thread从Relaylog读Event时,验证checksum
master_info_repository = TABLE
relay_log_info_repository = TABLE
# 将master.info和relay.info保存在表中,默认是Myisam引擎,官方建议改为Innodb引擎,防止表损坏后自行修复。 
relay_log_purge = ON 
relay_log_recovery = ON
# 启用relaylog的自动修复功能,避免由于网络之类的外因造成日志损坏,主从停止。
skip_slave_start = OFF
# 重启数据库,复制进程默认不启动
slave_net_timeout = 5
# 当master和slave之间的网络中断,slave的I/O-Thread等待5秒,重连master
sync_master_info = 10000
# slave更新mysql.slave_master_info表的时间间隔
sync_relay_log = 10000
sync_relay_log_info = 10000
# slave更新mysql.slave_relay_log_info表的时间间隔
gtid_mode = ON
enforce_gtid_consistency = ON
# GTID即全局事务ID(global transaction identifier),GTID由UUID+TID组成的。
# UUID是一个MySQL实例的唯一标识,TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。
# GTID能够保证每个MySQL实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。下面是一个GTID的具体形式:
# 4e659069-3cd8-11e5-9a49-001c4270714e:1-77
auto_increment_offset  = 1
# 双主复制中,2台服务器的自增长字段初值分别配置为1和2,取值范围是1 .. 65535
auto_increment_increment = 2
# 双主复制中,2台服务器的自增长字段的每次递增值都配置为2,其默认值是1,取值范围是1 .. 65535

#########################################################################
#                                                                       #
#                       innodb settings                           		#
#                                                                       #
#########################################################################
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000	#磁盘io的吞吐量,默认值是200.对于刷新到磁盘页的数量,会按照inodb_io_capacity的百分比来进行控制
innodb_io_capacity_max = 8000
innodb_buffer_pool_size = 200M	#InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典的缓冲池。该值越大,缓存命中率越高,但是过大会导致页交换
innodb_buffer_pool_instances = 8
#开启8个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写,降低并发导致的内部缓存访问冲突。
#InnoDB缓存系统会把参数innodb_buffer_pool_size指定大小的缓存,平分为innodb_buffer_pool_instances个buffer_pool
innodb_max_dirty_pages_pct = 90
# 缓存池中脏页的最大比例,默认值是75%,如果脏页的数量达到或超过该值,InnoDB的后台线程将开始缓存刷新。
# “缓存刷新”是指InnoDB在找不到干净的可用缓存页或检查点被触发等情况下,InnoDB的后台线程就开始把“脏的缓存页”回写到磁盘文件中
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
# InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合InnoDB使用MyISAM的lock tables语句或第三方事务引擎,则InnoDB无法识别死锁。
# 为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值,指示MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数)。
innodb_sync_spin_loops = 40
# 自旋锁的轮转数,可以通过show engine innodb status来查看。
# 如果看到大量的自旋等待和自旋轮转,则它浪费了很多cpu资源。浪费cpu时间和无谓的上下文切换之间可以通过该值来平衡
#innodb_flush_method = O_DIRECT
# 设置innodb数据文件及redo log的打开、刷写模式,fdatasync(默认),O_DSYNC,O_DIRECT
# 默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer
# 设置为为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
# 设置为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log
innodb_support_xa = ON
# 第一,支持多实例分布式事务(外部xa事务),这个一般在分布式数据库环境中用得较多。
# 第二,支持内部xa事务,即支持binlog与innodb redo log之间数据一致性
	
innodb_log_file_size = 200M
# InnoDB redo log大小,对应于ib_logfile0文件。
# ib_logfile* 是Innodb多版本缓冲的一个保证,该日志记录redo、undo信息,即commit之前的数据,用于rollback操作。
# 官方文档的建议设置是innodb_log_file_size = innodb_buffer_pool_size/innodb_log_files_in_group
innodb_log_files_in_group = 4 	#redo日志文件数,默认值为2,日志是以顺序的方式写入
innodb_log_buffer_size = 16M	#redo日志所用的内存缓冲区大小

innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_undo_log_truncate = 1		#即开启在线回收(收缩)undo log日志文件,支持动态设置,默认是关闭的
innodb_max_undo_log_size = 2G

innodb_flush_neighbors = 1		#优化旋转存储设备的I / O
innodb_purge_threads = 4
#使用独立线程进行purge操作。
#每次DML操作都会生成Undo页,系统需要定期对这些undo页进行清理,这称为purge操作
innodb_large_prefix = 1
innodb_thread_concurrency = 64	#同时在Innodb内核中处理的线程数量。服务器有几个CPU就设置为几,建议默认值
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1	#开启InnoDB严格检查模式,在某些情况下返回errors而不是warnings,默认值是OFF
innodb_sort_buffer_size = 64M
innodb_flush_log_at_trx_commit=1
#设置为0 ,每秒 write cache & flush disk
#设置为1 ,每次commit都 write cache & flush disk
#设置为2 ,每次commit都 write cache,然后根据innodb_flush_log_at_timeout(默认为1s)时间 flush disk
innodb_autoextend_increment=64
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=65536		#限制Innodb能打开的表的数据,默认为300,数据库里的表特别多的情况,可以适当增大为1000
innodb_stats_on_metadata=0
innodb_file_per_table=1		#使用独立表空间管理
innodb_checksum_algorithm=0
# checksum函数的算法,默认为crc32。可以设置的值有:innodb、crc32、none、strict_innodb、strict_crc32、strict_none
innodb_data_file_path=ibdata1:200M;ibdata2:200M;ibdata3:200M:autoextend:max:5G	#InnoDB共享表空间磁盘文件,存放数据字典、和在线重做日志
innodb_temp_data_file_path = ibtmp1:200M:autoextend:max:20G
#生产环境建议2个1G,最后再弄个自动扩展5G,根据自己的事物对定。

[mysqld_safe]
log-error=/mysql/log/3306/itpuxdb-error.log
pid-file=/mysql/data/3306/mysql.pid

请添加图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL配置文件是一个重要的组成部分,它决定了 MySQL 服务器的行为和功能。下面是 MySQL 配置文件的一些重要参数的详解: 1. `datadir`:指定 MySQL 数据文件的存储路径。默认情况下,数据文件存储在 `/var/lib/mysql` 目录下。 2. `port`:指定 MySQL 服务器监听的端口号。默认端口号是 3306。 3. `bind-address`:指定 MySQL 服务器绑定的 IP 地址。默认情况下,它绑定在所有可用的 IP 地址上。 4. `max_connections`:指定允许的最大并发连接数。这个值取决于你的硬件和应用程序的需求。 5. `character_set_server`:指定服务器默认字符集。见的字符集有 utf8、utf8mb4 等。 6. `collation_server`:指定服务器默认的排序规则。它与字符集相关,用于确定字符串比较和排序的规则。 7. `log_error`:指定错误日志文件的路径。MySQL 会将错误信息记录在这个文件中,以便进行故障排查。 8. `slow_query_log`:启用慢查询日志功能。当查询执行时间超过设定阈值时,将会被记录在慢查询日志中。 9. `innodb_buffer_pool_size`:指定 InnoDB 存储引擎使用的缓冲池大小。这个参数决定了 InnoDB 存储引擎能够缓存的数据量。 10. `innodb_log_file_size`:指定 InnoDB 存储引擎的日志文件大小。这个参数影响到事务处理的性能和恢复过程的速度。 这些只是 MySQL 配置文件中的一部分参数,还有很多其他参数可以根据需求进行配置。配置文件的路径通常是 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`,具体路径可能因操作系统而异。在修改配置文件后,需要重启 MySQL 服务器使修改生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值