在Linux系统中,my.cnf(或my.ini)是MySQL/MariaDB数据库服务器的核心配置文件,它定义了数据库的运行参数,包括存储路径、连接设置、性能优化选项等,该文件通常位于/etc/
目录下(如CentOS/RHEL),或/etc/mysql/
目录下(如Ubuntu/Debian),也可能存在于用户主目录的~/.my.cnf
(优先级最高),MySQL启动时会按特定顺序加载配置文件(命令行参数 > ~/.my.cnf > /etc/my.cnf > /etc/mysql/my.cnf),后者会覆盖前者,因此合理配置my.cnf对数据库性能、稳定性和安全性至关重要。
配置文件结构与常见模块
my.cnf采用INI格式,由多个模块(section)组成,每个模块以[模块名]
开头,包含若干键值对配置,常见模块包括:
- [mysqld]:MySQL服务端核心配置,影响数据库运行行为。
- [client]:客户端默认配置,如连接端口、字符集等(适用于mysql、mysqldump等工具)。
- [mysql]:交互式mysql客户端的默认配置(如命令提示符格式)。
- [mysqldump]:mysqldump工具专用配置(如是否包含压缩选项)。
- [safe_mysqld]:安全模式启动配置(较少使用,现代MySQL由mysqld_safe替代)。
核心配置参数详解
[mysqld]模块(服务端核心配置)
该模块是配置的重点,直接影响数据库性能和功能,以下为关键参数:
参数名 | 作用说明 | 推荐值/示例 |
---|---|---|
basedir |
MySQL安装目录 | /usr/local/mysql (编译安装)或 /usr (yum/apt安装) |
datadir |
数据文件存储目录(需确保目录存在且权限正确,如mysql:mysql 755) | /var/lib/mysql |
port |
服务监听端口(默认3306,避免与其他服务冲突) | 3306 |
bind-address |
绑定监听IP(0.0.0 允许所有IP连接,0.0.1 仅本地连接) |
0.0.0 (需结合防火墙设置) |
max_connections |
最大并发连接数(默认151,需根据服务器负载调整) | 500 (中小型服务器),1000+ (高并发场景) |
innodb_buffer_pool_size |
InnoDB缓冲池大小(缓存数据和索引,对性能影响最大,建议为物理内存50%-70%) | 8G (16GB内存服务器),16G (32GB内存服务器) |
innodb_log_file_size |
InnoDB重做日志大小(影响崩溃恢复速度,默认128M,建议256M-1G) | 512M |
slow_query_log |
是否开启慢查询日志(ON 开启,OFF 关闭) |
ON |
long_query_time |
慢查询阈值(秒,默认10秒,建议1-5秒) | 2 |
character-set-server |
默认字符集(推荐utf8mb4 ,支持emoji和特殊字符) |
utf8mb4 |
default_authentication_plugin |
默认认证插件(MySQL 8.0+默认caching_sha2_password ,兼容旧客户端可设mysql_native_password ) |
caching_sha2_password |
expire_logs_days |
二进制日志保留天数(自动清理过期日志,避免磁盘占满) | 7 |
max_allowed_packet |
最大数据包大小(默认4M,大事务或长文本需调大) | 64M |
[client]与[mysql]模块(客户端配置)
这两个模块定义客户端连接时的默认参数,减少重复输入:
参数名 | 作用说明 | 示例 |
---|---|---|
port |
默认连接端口(需与[mysqld]的port 一致) |
3306 |
host |
默认连接主机(localhost 或IP地址) |
localhost |
user |
默认连接用户 | root |
default-character-set |
默认字符集(需与服务端character-set-server 一致) |
utf8mb4 |
prompt |
交互式客户端命令提示符格式(u 用户,h 主机,d 数据库) |
[u@h] d> |
[mysqldump]模块(备份工具配置)
优化mysqldump的备份行为,
quick
:不缓存结果,适合大表备份;max_allowed_packet
:备份时的最大数据包大小(默认24M,大表需调大);single-transaction
:使用事务备份,避免锁表(InnoDB引擎适用)。
配置文件修改与生效
- 修改配置:使用文本编辑器(如
vi/vim
、nano
)打开my.cnf,按需修改参数,确保格式正确(键值对用分隔,注释用或)。 - 检查语法:执行
mysqld --verbose --help | grep 'Default options'
查看配置文件路径,或使用mysqladmin -u root -p variables
验证参数是否生效(无需重启)。 - 重启服务:修改[mysqld]模块参数后需重启MySQL服务才能生效(
systemctl restart mysqld
或service mysqld restart
)。
注意事项
- 权限控制:my.cnf可能包含密码等敏感信息,权限建议设为
640
(属主root,属组mysql),避免其他用户读取。 - 参数单位:内存参数需明确单位(如
1G
、1024M
),未明确时默认为字节。 - 备份原配置:修改前备份原文件(
cp /etc/my.cnf /etc/my.cnf.bak
),避免配置错误导致服务无法启动。
相关问答FAQs
Q1:如何查看MySQL当前使用的配置文件路径?
A:可通过以下方式查看:
- 命令行查看:
mysql --help | grep 'Default options'
,输出最后一行即为默认配置文件路径。 - SQL查询:
SHOW VARIABLES LIKE 'config_file';
(需登录MySQL)。
Q2:修改my.cnf后不重启服务,如何让部分参数生效?
A:部分动态参数可通过SET GLOBAL
命令即时生效(无需重启),
- 调整
max_connections
:SET GLOBAL max_connections = 500;
(重启后失效)。 - 开启慢查询日志:
SET GLOBAL slow_query_log = ON;
但涉及核心资源(如innodb_buffer_pool_size
)或文件路径(如datadir
)的参数必须重启服务才能生效,动态参数可通过SHOW VARIABLES LIKE '变量名';
验证是否修改成功。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38580.html