MySQL 配置文件 my.cnf / my.ini 逐行解析
发布网友
发布时间:2024-10-03 18:07
我来回答
共1个回答
热心网友
时间:2024-11-09 03:19
充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义。我们需要根据不同的数据量级,不同的生产环境情况对 MySQL 配置文件进行优化。
Windows 和 Linux 下的 MySQL 配置文件的名字和存放位置都是不同的,WIndows 下 MySQL 配置文件是 my.ini 存放在 MySQL 安装目录的根目录下;Linux 下 MySQL 配置文件是 my.cnf 存放在 /etc/my.cnf、/etc/mysql/my.cnf。我们也可以通过 find 命令进行查找。
另外要注意的是,通过 rpm 命令安装的 MySQL 是没有 /etc/my.cnf 文件的,如果需要配置 MySQL,可以在 /etc/my.cnf 新建配置文件,然后把本文的配置信息复制到文件中即可。
本教程将带领大家逐条解析最新的 MySQL 8.0 的配置文件,争取搞懂每一条变量。当然,我们理解了变量的意义外,更重要的是针对自己的数据库外部环境,在实践中进行微调,以达到优化性能的目的。
MySQL 配置文件逐行解析文章非常长,这里仅是摘要,全文完整版请在这里查看 MySQL 配置文件详解
文件位置: Windows、Linux、Mac 有细微区别,Windows 配置文件是 .ini,Mac/linux 是 .cnf
当然我们也可以使用命令来查看 MySQL 默认配置文件位置
[client]
客户端设置。当前为客户端默认参数
默认连接端口为3306
本地连接的socket 套接字
设置字符集,通常使用 uft8 即可
[mysqld_safe]
mysqld_safe 是服务器端工具,用于启动 mysqld,也是 mysqld 的守护进程。当 mysql 被 kill 时,mysqld_safe 负责重启启动它。
此为 MySQL 打开的文件描述符*,它是 MySQL 中的一个全局变量且不可动态修改。它控制着 mysqld 进程能使用的最大文件描述符数量。默认最小值为 1024
需要注意的是这个变量的值并不一定是你在这里设置的值,mysqld 会在系统允许的情况下尽量取最大值。
当 open_files_limit 没有被配置时,比较 max_connections*5 和 ulimit -n 的值,取最大值
当open_file_limit 被配置时,比较 open_files_limit 和 max_connections*5 的值,取最大值
用户名
错误 log 记录文件
[mysqld]
服务端基本配置
mysqld 服务端监听端口
MySQL 客户端程序和服务器之间的本地通讯指定一个套接字文件
允许最大接收数据包的大小,防止服务器发送过大的数据包。
当发出长查询或 mysqld 返回较大结果时,mysqld 才会分配内存,所以增大这个值风险不大,默认 16M,也可以根据需求改大,但太大会有溢出风险。取较小值是一种安全措施,避免偶然出现但大数据包导致内存溢出。
创建数据表时,默认使用的存储引擎。这个变量还可以通过–default-table-type 进行设置
最大连接数,当前服务器允许多少并发连接。默认为 100,一般设置为小于 1000 即可。太高会导致内存占用过多,MySQL 服务器会卡死。作为参考,小型站设置 100 - 300
用户最大的连接数,默认值为 50 一般使用默认即可。
线程缓存,用于缓存空闲的线程。这个数表示可重新使用保存在缓存中的线程数,当对方断开连接时,如果缓存还有空间,那么客户端的线程就会被放到缓存中,以便提高系统性能。我们可根据物理内存来对这个值进行设置,对应规则 1G 为 8;2G 为 16;3G 为 32;4G 为 64 等。
Query Cache
请注意,如果在禁用查询缓存的情况下启动服务器,则无法在运行时启用服务器。
缓存 select 语句和结果集大小的参数。
查询缓存会存储一个 select 查询的文本与被传送到客户端的相应结果。
如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。
如果你的环境中写操作很少,读操作频繁,那么打开 query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。
MySQL 执行排序时,使用的缓存大小。增大这个缓存,提高 group by,order by 的执行速度。
HEAP 临时数据表的最大长度,超过这个长度的临时数据表 MySQL 可根据需求自动将基于内存的 HEAP 临时表改为基于硬盘的 MyISAM 表。我们可通过调整 tmp_table_size 的参数达到提高连接查询速度的效果。
MySQL 读入缓存的大小。如果对表对顺序请求比较频繁对话,可通过增加该变量值以提高性能。
用于表的随机读取,读取时每个线程分配的缓存区大小。默认为 256k,一般在 128 - 256k之间。在做 order by 排序操作时,会用到 read_rnd_buffer_size 空间来暂做缓冲空间。
程序中经常会出现一些两表或多表 Join (联表查询)的操作。为了减少参与 Join 连表的读取次数以提高性能,需要用到 Join Buffer 来协助 Join 完成操作。当 Join Buffer 太小时,MySQL 不会将它写入磁盘文件。和 sort_buffer_size 一样,此参数的内存分配也是每个连接独享。
*不使用文件描述符存储在缓存中的表定义的数量。
*为所有线程在内存中打开的表数量。
关于 MySQL 慢查询日志更多扩展内容,请看我写的另一篇《如何使用慢查询日志对 MySQL 进行性能优化 - Profiling、mysqlmpslow 实例详解》教程
MySQL 配置文件逐行解析文章非常长,这里仅是摘要,全文完整版请在这里查看
如果觉得本文对你有帮助,还请点个赞。任何问题欢迎评论区一起讨论。