🧩 一、[client] 部分 — 客户端配置
| 参数 | 含义 | 可选值 / 示例 | 调优建议 |
|---|
port=3306 | 默认连接端口 | 1–65535(默认 3306) | 通常保持 3306,若多实例运行,可使用 3307、3308 等。 |
socket | 本地通信管道(Linux 使用) | /tmp/mysql.sock | Windows 不生效;Linux 环境需与 mysqld 一致。 |
🧩 二、[mysql] 部分 — 命令行客户端行为
| 参数 | 含义 | 示例 / 可选值 | 建议 |
|---|
no-beep | 禁止命令行错误提示音 | — | 建议保留。 |
default-character-set | 默认字符集 | utf8mb4 / utf8 | 推荐设为 utf8mb4 支持 emoji。 |
🧩 三、[mysqld] 部分 — 服务端配置核心区域
📦 基础路径和端口
| 参数 | 含义 | 示例 / 可选值 | 建议 |
|---|
port=3306 | MySQL 监听端口 | 3306–65535 | 默认即可。 |
basedir | MySQL 安装目录 | C:/Program Files/MySQL/MySQL Server 8.4 | 安装路径。 |
datadir | 数据文件目录 | C:/ProgramData/MySQL/MySQL Server 8.4/Data | 可放到独立磁盘提高性能。 |
🧾 SQL 模式(sql-mode)
sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
| 模式 | 作用 |
|---|
ONLY_FULL_GROUP_BY | GROUP BY 需完全匹配 SELECT 字段。 |
STRICT_TRANS_TABLES | 非法数据时报错而非警告。 |
NO_ZERO_IN_DATE / NO_ZERO_DATE | 禁止 0000-00-00 日期。 |
ERROR_FOR_DIVISION_BY_ZERO | 除数为 0 报错。 |
NO_ENGINE_SUBSTITUTION | 禁止自动替换不存在的引擎。 |
💡 建议:生产环境保持严格模式(如上),开发环境可临时关闭部分。
🧰 日志配置
| 参数 | 含义 | 建议值 |
|---|
log-output=FILE | 输出到文件 | 保持默认 |
general-log=0 | 是否记录全部 SQL | 一般关闭 |
general_log_file | 通用日志文件路径 | — |
slow-query-log=1 | 启用慢查询日志 | 推荐启用 |
slow_query_log_file | 慢查询日志文件路径 | — |
long_query_time=10 | 超过 10 秒为慢 SQL | 可调小到 2–5 秒 |
log-error | 错误日志文件路径 | 默认即可 |
🔁 复制与二进制日志
| 参数 | 含义 | 说明 |
|---|
log-bin | 开启二进制日志 | 复制或备份必需 |
server-id=1 | 唯一服务器 ID | 集群内唯一 |
binlog_row_event_max_size | 每个行事件最大字节数 | 默认 8K |
💡 建议:若不做主从复制,可关闭 log-bin 降低磁盘 IO。
🔤 大小写规则
| 参数 | 含义 | 可选值 | 建议 |
|---|
lower_case_table_names | 表名大小写敏感 | 0=区分大小写
1=不区分
2=存储保留,查找转小写 | Windows 推荐 1(不区分) |
🔒 文件导入导出限制
| 参数 | 含义 | 说明 |
|---|
secure-file-priv | 限制 LOAD DATA / SELECT ... INTO OUTFILE 路径 | 建议保留默认或设为专用目录 |
👥 连接与线程控制
| 参数 | 含义 | 默认 | 建议值 |
|---|
max_connections | 最大连接数 | 151 | 一般设为 200–500 |
table_open_cache | 打开表缓存 | 4000 | 1–2 万更好 |
open_files_limit | 文件句柄上限 | 8161 | 可设为 65535 |
max_connect_errors | 同一主机错误连接次数 | 100 | 可设为 1000 |
💾 临时表与排序
| 参数 | 含义 | 建议值 |
|---|
tmp_table_size | 内存临时表大小 | 64–256M |
temptable_max_ram | TempTable 引擎最大内存 | 512M–1G |
sort_buffer_size | 排序缓存 | 1–4M |
join_buffer_size | JOIN 缓冲区 | 256K–1M |
read_buffer_size | 顺序读缓存 | 1–8M |
read_rnd_buffer_size | 随机读缓存 | 4–16M |
💽 MyISAM 引擎(旧)
| 参数 | 含义 | 建议 |
|---|
key_buffer_size=8M | 索引缓存区 | 若主要用 InnoDB,可保持小值 |
myisam_sort_buffer_size=204M | MyISAM 建索引排序缓存 | 可调小到 64M |
🧠 InnoDB 引擎(核心)
| 参数 | 含义 | 推荐设置 |
|---|
innodb_flush_log_at_trx_commit | 日志刷新策略 | 1=安全(默认),2=性能优先 |
innodb_log_buffer_size | 日志缓存 | 64–512M |
innodb_buffer_pool_size | 数据缓存池大小 | 一般为物理内存的 50–70% |
innodb_redo_log_capacity | redo 日志容量 | 512M–2G |
innodb_thread_concurrency | 最大并发线程数 | 通常 0=自动 |
innodb_autoextend_increment | 表空间自动扩展步长 | 64M |
innodb_buffer_pool_instances | 缓冲池实例数 | 每 GB 一个实例(8–16) |
innodb_file_per_table | 每表单独 .ibd 文件 | 推荐启用 |
innodb_checksum_algorithm | 校验算法 | crc32 推荐 |
innodb_stats_on_metadata | 查询元数据是否更新统计 | 设为 0 提高性能 |
innodb_flush_method | 刷新方式 | 可设为 O_DIRECT 提升性能(Linux) |
⚙️ 网络与包大小
| 参数 | 含义 | 默认 | 建议 |
|---|
max_allowed_packet | 单包最大值 | 64M | 可调大到 256M 以防导入报错 |
loose_mysqlx_port | X 协议端口(MySQL 8) | 33060 | 可忽略 |
💡 推荐配置参考(中型服务器 16GB 内存)
| 分类 | 推荐值 |
|---|
innodb_buffer_pool_size | 8G |
max_connections | 300 |
tmp_table_size | 256M |
max_allowed_packet | 128M |
innodb_flush_log_at_trx_commit | 2(性能优先) |
slow_query_log | 1 |
long_query_time | 3 |
innodb_file_per_table | 1 |
📚 小结
| 分类 | 关键参数 | 主要影响 |
|---|
| 性能调优 | buffer_pool, tmp_table_size, sort_buffer | 影响查询速度 |
| 安全性 | flush_log_at_trx_commit, secure-file-priv | 控制事务一致性 |
| 连接并发 | max_connections, open_files_limit | 决定系统并发能力 |
| 日志监控 | slow_query_log, general_log | 帮助定位慢 SQL |
| 存储行为 | innodb_file_per_table, lower_case_table_names | 影响文件结构与兼容性 |