Linux MySql的配置文件my.cnf详解

端口=3 3 06 basedir=/usr/local/mysql 的 datadir=/data/mysql_db_data 套接字=/tmp/mysql.sock plugin_dir=/usr/local/mysql/lib/plugin 日志错误=/data/mysql_db/data/error.log 符号链接=0
本地文件=0 最大连接数=3 2 0 query_cache_limit=4 M query_cache_size=6 4 M 查询缓存类型=1 最大用户连接数=3 2 0 等待超时=9 000 连接超时=2 0 线程缓存大小=2 5 6 key_buffer_size=1 6 M
join_buffer_size=2 M 最大堆表大小=1 6 M low_priority_updates=1 packet_max_allowed=1 2 8 M max_seeks_for_key=1 00 排序缓冲区大小=1 6 M 读取缓冲区大小=1 6 M 最大连接错误=1 0 myisam_sort_buffer_size=6 4 M tmp_table_size=6 4 M read_rnd_buffer_size=1 M open_file_limit=6 05 0

linux mysql配置文件在哪

需要明确的是,MySQL 配置文件是数据库性能和安全性的关键。
其实很简单。
配置文件通常隐藏得更深一些,并且可能不在它们看起来的位置。
我们先来说说最重要的事情。
它通常位于 /etc/my.cnf 中,但不要急于找到它。
可能还有其他位置,例如 /etc/mysql/my.cnf 或 /usr/my.cnf。
起初我以为这只是一个普通的地方,但后来我发现事实并非如此。
它可能因分发和安装方法而异。

还有一点是配置文件中隐藏了很多参数,比如max_connections和innodb_buffer_pool_size。
这些参数决定了数据库的性能。
例如,max_connections可以设置最大连接数,而innodb_buffer_pool_size则影响InnoDB缓存的大小。
很多人没有注意到这一点,但是正确设置这些参数可以大大提高性能。

等等,还有一件事,配置文件可能不在/etc/my.cnf中,或者可能隐藏在MySQL安装目录中。
例如,MariaDB 配置可能位于 /usr/local/etc/my.cnf 中。
另外,查看启动脚本是查找配置文件的好方法,例如 /etc/init.d/mysql 或 /etc/systemd/system/multi-user.target.wants/mysql.service。

总之,配置文件是MySQL的心脏,正确配置可以让你的服务器飞起来。
如果您不确定如何设置,我认为值得尝试查看官方文档或向专家寻求帮助。

MySQL 配置文件 my.cnf / my.ini 逐行解析

说实话,了解MySQL配置文件就像打开一个盲盒。
你永远不知道下一个变数会带来惊喜还是震撼。
当我第一次接触MySQL 8 .0的配置文件时,就像嚼字典一样——【mysqld_safe】让我最头疼,尤其是与open_files_limit相关的。

有趣的是,你提到Windows使用my.ini,Linux使用my.cnf,但有一个细节很容易被忽视:我在维护过程中差点遇到了由于权限问题而出现的问题。
在Linux上,如果通过systemd管理mysqld,配置文件可能根本不位于/etc/my.cnf中,而是位于/usr/lib/systemd/system/mysqld.service.d/中。
说实话,这动摇了我对“标准道路”的信心。

说到[mysqld]中的max_connections,我有亲身经历。
前年,我们在线数据库的CPU突然上升到9 0%。
监控发现max_connections调整为5 00,那么服务器只有4 核1 6 GB。
想一想吗?后来改成了1 5 0,系统立刻变得像老狗一样稳定。
说白了就是参数越高越好。
这就像餐厅里的座位安排。
如果太高,服务员就会疲惫不堪。

query_cache 更有趣。
我曾经服务过一个电商客户,他们坚持要开启query_cache。
原因是“多读书,少写作”。
结果呢?每次提升期间,缓存命中率从9 0%下降到3 0%,因为大量的INSERT操作导致缓存不断重建。
我还没弄清楚这一点。
我真的需要编写脚本来定义业务的高峰和低谷吗?
tmp_table_size参数特别“自命不凡”。
有一次我测试了一个报表查询,发现临时表自动移到了磁盘上。
查了一下,tmp_table_size只有1 6 M,这个查询涉及到3 次表连接操作,结果集是2 00M。
我当时就想,MySQL怎么知道dump呢?查资料后发现,当临时表超过可用内存时,存储引擎会自动调优——这只是一种隐藏的防御机制。

最神奇的是thread_cache_size。
我们有一台 8 GB 内存的测试服务器。
将thread_cache_size设置为1 2 8 后,并发处理能力明显提升。
但有一个问题:如果突然出现大量慢速查询,这些缓存的线程可能会直接导致系统瘫痪。
我记得有一次运维人员把它调整到2 5 6 结果所以,当用户对共享数据库执行 JOIN 查询时,系统几乎崩溃——因为空闲线程太多,在处理慢速查询时没有优先权。

至于innodb_buffer_pool_size,我以前遇到过这个。
从4 G改为8 G后,系统内存使用量增加了一倍,但TPS却下降了一半。
后来我意识到这台机器上还有其他进程在竞争内存,所以没有必要让缓冲区变得混乱。
我现在的经验是先检查free -m,然后比较mysql的缓冲池使用情况,至少应该留下1 0-1 5 %的空闲空间。

说到文件描述符,我有一点小知识:在CentOS 7 +中,ulimit -n 可以打开的最大值是文件系统限制,而不是系统默认值。
有一次,当我使用search命令扫描文件时,发现mysqld占用的句柄数远远超过了max_connections5 最后我发现SELinux在背后作祟——这个功能实在是太累了,而且不尽如人意。

最后说一个真实的案例:去年我们换了新服务器。
将sort_buffer_size从默认的1 6 M更改为3 2 M后,涉及5 表JOIN的查询从1 秒更改为0.5 秒。
但第二天,DBA 抱怨系统突然变慢。
经过检查,发现某个备份脚本也在运行,导致内存被消耗。
因此,调整参数必须考虑系统负载曲线,不能只看单次测试。

事实上,这些变量并没有绝对的对错。
关键要看场景。
例如,Thread_cache_size对于写密集型系统没有用处;但对于我们的读取密集型应用程序来说,效果是立竿见影的。
所以我的建议是先阅读官方文档中的默认值说明,然后像基本元素一样逐步修改。
每次更改后监视一两个小时,记录每个进程的内存和 CPU 变化 - 这是一项真正的技能。