本文首发:MySQL 配置文件 my.cnf / my.ini 逐行详解 - 卡拉云
这里写目录标题
MySQL 配置文件的意义
充分理解 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 的配置文件,争取搞懂每一条变量。当然,我们理解了变量的意义外,更重要的是针对自己的数据库外部环境,在实践中进行微调,以达到优化性能的目的。
提示:你可以使用 Ctrl+F 快速定位。 MySQL 配置文件详解
- [client]
- [mysqld_safe]
- [mysqld]
- Query Cache MySQL 错误日志设置 慢查询记录 全局查询日志
- 从属线程变量
- 安全变量
- MyISAM 变量
- MEMORY 变量
- InnoDB 变量 WSREP 配置
MySQL 配置文件详解
文件位置: Windows、Linux、Mac 有细微区别,Windows 配置文件是 .ini,Mac/linux 是 .cnf
[Windows]
MySQL\MySQL Server 5.7\my.ini
[Linux / Mac]
/etc/my.cnf
/etc/mysql/my.cnf
当然我们也可以使用命令来查看 MySQL 默认配置文件位置
mysql --help|grep 'cnf'
[client]
客户端设置。当前为客户端默认参数
port = 3306
默认连接端口为 3306
socket = /tmp/mysql.sock
本地连接的 socket
套接字
default_character_set = utf8
设置字符集,通常使用 uft8
即可
[mysqld_safe]
mysqld_safe
是服务器端工具,用于启动 mysqld
,也是 mysqld
的守护进程。当 mysql 被 kill 时,mysqld_safe
负责重启启动它。
open_files_limit = 8192
此为 MySQL 打开的文件描述符限制,它是 MySQL 中的一个全局变量且不可动态修改。它控制着 mysqld 进程能使用的最大文件描述符数量。默认最小值为 1024
需要注意的是这个变量的值并不一定是你在这里设置的值,mysqld 会在系统允许的情况下尽量取最大值。
当 open_files_limit
没有被配置时,比较 max_connections*5
和 ulimit -n
的值,取最大值
当 open_file_limit
被配置时,比较 open_files_limit
和 max_connections*5
的值,取最大值
user = mysql
用户名
log-error = error.log
错误 log 记录文件
[mysqld]
服务端基本配置
port = 3306
mysqld 服务端监听端口
socket = /tmp/mysql.sock
MySQL 客户端程序和服务器之间的本地通讯指定一个套接字文件
max_allowed_packet = 16M
允许最大接收数据包的大小,防止服务器发送过大的数据包。
当发出长查询或 mysqld 返回较大结果时,mysqld 才会分配内存,所以增大这个值风险不大,默认 16M,也可以根据需求改大,但太大会有溢出风险。取较小值是一种安全措施,避免偶然出现但大数据包导致内存溢出。
default_storage_engine = InnoDB
创建数据表时,默认使用的存储引擎。这个变量还可以通过 –default-table-type
进行设置
max_connections = 512
最大连接数,当前服务器允许多少并发连接。默认为 100,一般设置为小于 1000 即可。太高会导致内存占用过多,MySQL 服务器会卡死。作为参考,小型站设置 100 - 300
max_user_connections = 50
用户最大的连接数,默认值为 50 一般使用默认即可。
thread_cache_size = 64
线程缓存,用于缓存空闲的线程。这个数表示可重新使用保存在缓存中的线程数,当对方断开连接时,如果缓存还有空间,那么客户端的线程就会被放到缓存中,以便提高系统性能。我们可根据物理内存来对这个值进行设置,对应规则 1G 为 8;2G 为 16;3G 为 32;4G 为 64