MariaDB 11.8 配置参数详解
系统讲解 MariaDB 11.8 服务端核心配置参数,覆盖每个参数的详细说明、取值范围、使用方法与影响范围,并给出生产配置模板。所有默认值均在 MariaDB 11.8.9 真实环境实测
MariaDB 11.8 配置参数详解
目标:系统讲解 MariaDB 11.8 服务端核心配置参数,覆盖每个参数的详细说明、取值范围、使用方法与影响范围,并给出生产配置模板。所有默认值均在 MariaDB 11.8.9 真实环境实测。
环境信息
- 操作系统:Ubuntu 24.04(容器)
- MariaDB 版本:11.8.9-MariaDB(mariadb.org binary distribution)
- 配置文件:
/etc/mysql/mariadb.conf.d/50-server.cnf(主配置)、/etc/mysql/mariadb.conf.d/60-galera.cnf(复制相关) - 参数采集方式:
SHOW VARIABLES(全部为实测默认值)
前置条件
- 已安装 MariaDB 11.8 并可本地登录
- 了解配置文件体系:
/etc/mysql/my.cnfincludeconf.d/(客户端)与mariadb.conf.d/(服务端),服务端参数统一写在[mysqld]段下 - 修改静态参数前做好重启窗口准备
参数查看与修改方式
查看参数
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- 查看指定参数
SHOW VARIABLES LIKE '%binlog%'; -- 模糊查询
SHOW VARIABLES; -- 查看全部
修改方式对比
| 方式 | 命令 | 是否即时生效 | 是否持久化 | 适用参数 |
|---|---|---|---|---|
| 配置文件 | 编辑 mariadb.conf.d 下 cnf | 需重启 | 是 | 所有参数 |
| SET GLOBAL | SET GLOBAL max_connections=500; | 是 | 否(重启丢失) | 仅动态参数 |
💡 说明:MariaDB 11.8 不支持
SET PERSIST(MySQL 8.0 的特性),动态参数在线修改用SET GLOBAL,持久化只能写配置文件。判断参数是否动态:执行SET GLOBAL试错(静态参数报Variable 'xxx' is a read only variable,实测log_bin即只读)。
参数总览
本文档覆盖的全部参数汇总(默认值均为 MariaDB 11.8.9 实测):
| 分类 | 参数名称 | 默认值(实测) | 配置示例 | 动态 |
|---|---|---|---|---|
| 连接与网络 | port | 3306 | port = 3307 | 否 |
| 连接与网络 | bind_address | 0.0.0.0 | bind_address = 127.0.0.1 | 否 |
| 连接与网络 | max_connections | 151 | max_connections = 1000 | 是 |
| 连接与网络 | max_connect_errors | 100 | max_connect_errors = 1000 | 是 |
| 连接与网络 | wait_timeout | 28800 | wait_timeout = 600 | 是 |
| 连接与网络 | max_allowed_packet | 16MB | max_allowed_packet = 256M | 是 |
| 内存与缓冲 | innodb_buffer_pool_size | 128MB | innodb_buffer_pool_size = 8G | 是 |
| 内存与缓冲 | key_buffer_size | 128MB | — | 是 |
| 内存与缓冲 | aria_pagecache_buffer_size | 128MB | — | 是 |
| 内存与缓冲 | tmp_table_size / max_heap_table_size | 16MB | tmp_table_size = 64M | 是 |
| 内存与缓冲 | sort_buffer_size | 256KB | — | 是 |
| 内存与缓冲 | thread_cache_size | 151(=max_connections) | thread_cache_size = 64 | 是 |
| 内存与缓冲 | table_open_cache | 2000 | — | 是 |
| 字符集 | character_set_server | utf8mb4 | — | 是 |
| 字符集 | collation_server | utf8mb4_uca1400_ai_ci | — | 是 |
| 日志 | log_error | /var/lib/mysql/<host>.err | — | 否 |
| 日志 | log_bin | OFF(11.8 默认关) | log_bin = /var/lib/mysql/mariadb-bin | 否 |
| 日志 | binlog_format | MIXED(未开时)/ ROW(开启后) | binlog_format = ROW | 是 |
| 日志 | sync_binlog | 0 | sync_binlog = 1 | 是 |
| 日志 | slow_query_log / long_query_time | OFF / 10s | slow_query_log = ON | 是 |
| InnoDB | innodb_flush_log_at_trx_commit | 1 | — | 是 |
| InnoDB | innodb_io_capacity | 200 | innodb_io_capacity = 1000 | 是 |
| InnoDB | innodb_file_per_table | ON | — | 否 |
| InnoDB | skip_name_resolve | ON(MariaDB 默认开) | — | 否 |
| InnoDB | transaction_isolation | REPEATABLE-READ | transaction_isolation = READ-COMMITTED | 是 |
| 安全与 SQL | sql_mode | 严格模式集合 | — | 是 |
一、连接与网络参数
port
| 属性 | 值 |
|---|---|
| 默认值(实测) | 3306 |
| 动态 | 否(需重启) |
说明: MariaDB 服务监听的 TCP 端口。
[mysqld]
port = 3307
影响范围: 修改后所有客户端连接串、防火墙规则同步修改。
bind_address
| 属性 | 值 |
|---|---|
| 默认值(实测) | 0.0.0.0(所有网卡) |
| 动态 | 否 |
说明: 服务监听的网卡地址。
[mysqld]
bind_address = 127.0.0.1 # 只允许本机访问,最安全
影响范围: 设错 IP(本机不存在该地址)会导致启动失败。
max_connections
| 属性 | 值 |
|---|---|
| 默认值(实测) | 151 |
| 取值范围 | 1 ~ 100000 |
| 动态 | 是 |
说明: 最大并发客户端连接数,超出报 Too many connections。
SET GLOBAL max_connections = 1000; -- 动态生效,重启丢失
影响范围: 每个连接消耗内存(连接缓冲 + 线程栈),盲目调大导致内存耗尽。经验公式:最大连接数 × 单连接平均内存 < 物理内存 60%。
max_connect_errors
| 属性 | 值 |
|---|---|
| 默认值(实测) | 100 |
| 动态 | 是 |
说明: 同一主机连续连接失败超过该次数被拉黑,报 Host 'xxx' is blocked。
SET GLOBAL max_connect_errors = 1000;
FLUSH HOSTS; -- 解除拉黑
wait_timeout
| 属性 | 值 |
|---|---|
| 默认值(实测) | 28800(8 小时) |
| 动态 | 是 |
说明: 空闲连接超时时间。生产建议 300~1800 秒,且要小于应用连接池的回收时间。
SET GLOBAL wait_timeout = 600;
max_allowed_packet
| 属性 | 值 |
|---|---|
| 默认值(实测) | 16777216(16MB,注意与 MySQL 8 的 64MB 不同) |
| 动态 | 是 |
说明: 单个数据包最大长度。MariaDB 默认只有 16MB,批量导入大 BLOB 或大批量 INSERT 时报 Packet for query is too large,需调大。
SET GLOBAL max_allowed_packet = 256 * 1024 * 1024; -- 256MB
二、内存与缓冲参数
innodb_buffer_pool_size
| 属性 | 值 |
|---|---|
| 默认值(实测) | 134217728(128MB) |
| 动态 | 是 |
说明: InnoDB 缓冲池大小,缓存热数据页,数据库读性能第一决定因素。
SET GLOBAL innodb_buffer_pool_size = 8 * 1024 * 1024 * 1024; -- 8GB
影响范围: 生产专用库服务器建议设物理内存 50%~70%。观察命中率:SHOW STATUS LIKE 'Innodb_buffer_pool_read%';。
key_buffer_size(MyISAM 索引缓存)
| 属性 | 值 |
|---|---|
| 默认值(实测) | 134217728(128MB,远大于 MySQL 8 的 8MB) |
| 动态 | 是 |
说明: MyISAM 表的索引缓存。MariaDB 默认 128MB(内存充足时按物理内存的 25% 分配),8.0 之后 InnoDB 是默认引擎,此参数仅影响 MyISAM 表。若全部使用 InnoDB 可调小。
aria_pagecache_buffer_size(Aria 引擎页缓存)
| 属性 | 值 |
|---|---|
| 默认值(实测) | 134217728(128MB) |
| 动态 | 是 |
说明: MariaDB 特有。Aria 引擎(MyISAM 的下一代)的页缓存。mysql 系统库表使用 Aria,此参数影响系统库与临时表性能。
tmp_table_size / max_heap_table_size
| 属性 | 值 |
|---|---|
| 默认值(实测) | 16777216(16MB) |
| 动态 | 是 |
说明: 内存临时表上限(两者取较小值生效),超出转磁盘临时表(Aria),性能下降一个数量级。
SET GLOBAL tmp_table_size = 64 * 1024 * 1024;
thread_cache_size
| 属性 | 值 |
|---|---|
| 默认值(实测) | 151(自动跟随 max_connections) |
| 动态 | 是 |
说明: 缓存空闲线程数,减少连接建立/销毁开销。MariaDB 特性:默认与 max_connections 一致。
三、字符集
character_set_server / collation_server
| 属性 | 值 |
|---|---|
| 默认值(实测) | utf8mb4 / utf8mb4_uca1400_ai_ci |
| 动态 | 是 |
说明: 服务端默认字符集。注意 MariaDB 的默认排序规则是 utf8mb4_uca1400_ai_ci,与 MySQL 8 的 utf8mb4_0900_ai_ci 不同,迁移数据时需注意排序差异。
四、日志参数
log_error
| 属性 | 值 |
|---|---|
| 默认值(实测) | /var/lib/mysql/<hostname>.err |
| 动态 | 否 |
说明: 错误日志路径,排障第一入口。
log_bin(binlog)
| 属性 | 值 |
|---|---|
| 默认值(实测) | OFF(MariaDB 11.8 默认关闭 binlog,与 MySQL 8.0 默认开启不同) |
| 动态 | 否(实测报 Variable 'log_bin' is a read only variable) |
说明: 二进制日志,用于复制与时间点恢复(PITR)。MariaDB 默认关闭,需配置文件开启后重启。
[mysqld]
log_bin = /var/lib/mysql/mariadb-bin
binlog_format = ROW
⚠️ 实测注意:若不配置直接
SET GLOBAL log_bin=ON报错 1238(只读变量)。开启后SHOW BINARY LOGS可见mariadb-bin.000001。
sync_binlog
| 属性 | 值 |
|---|---|
| 默认值(实测) | 0(MariaDB 默认 0,MySQL 8 默认 1) |
| 动态 | 是 |
说明: binlog 刷盘策略。MariaDB 默认 0(由 OS 决定刷盘时机,性能好但断电可能丢最近事务),与 innodb_flush_log_at_trx_commit=1 组合时建议设 1 构成"双 1"。
slow_query_log / long_query_time
| 属性 | 值 |
|---|---|
| 默认值(实测) | OFF / 10.000000 |
| 动态 | 是 |
说明: 慢查询日志开关与阈值,生产建议常开:
SET GLOBAL slow_query_log = ON;
五、InnoDB 核心参数
innodb_flush_log_at_trx_commit
| 属性 | 值 |
|---|---|
| 默认值(实测) | 1 |
| 动态 | 是 |
说明: redo log 刷盘策略,1=每事务 fsync 最安全(默认值即最佳实践)。
innodb_io_capacity
| 属性 | 值 |
|---|---|
| 默认值(实测) | 200(注意 MariaDB 默认 200,MySQL 8 是 10000) |
| 动态 | 是 |
说明: 后台刷脏页的 IOPS 参考值。SSD 建议 1000~4000,机械盘 200 合适。MariaDB 默认保守,SSD 环境需调大。
innodb_file_per_table
| 属性 | 值 |
|---|---|
| 默认值(实测) | ON |
| 动态 | 否 |
说明: 独立表空间,支持 DROP/TRUNCATE 回收磁盘。
skip_name_resolve
| 属性 | 值 |
|---|---|
| 默认值(实测) | ON(MariaDB 默认开启跳过 DNS 反查,与 MySQL 8 默认 OFF 不同) |
| 动态 | 否 |
说明: 跳过 DNS 反查,避免连接延迟。开启后授权主机名只能用 IP 不能用域名。
transaction_isolation
| 属性 | 值 |
|---|---|
| 默认值(实测) | REPEATABLE-READ |
| 动态 | 是 |
说明: 默认事务隔离级别。高并发写场景可改 READ-COMMITTED 减少锁等待。
六、SQL 模式
sql_mode
| 属性 | 值 |
|---|---|
| 默认值(实测) | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
| 动态 | 是 |
说明: 与 MySQL 8.0 默认相比,MariaDB 缺少 NO_ZERO_DATE、NO_ZERO_IN_DATE、ONLY_FULL_GROUP_BY,行为更宽松。
⚠️ 迁移注意:从 MySQL 迁到 MariaDB 时,原 MySQL 默认的
ONLY_FULL_GROUP_BY在 MariaDB 中不强制,GROUP BY 语义不同可能导致结果差异,需显式配置验证。
生产配置模板
[mysqld]
# 连接
max_connections = 500
wait_timeout = 600
max_allowed_packet = 64M
# 内存
innodb_buffer_pool_size = 8G # 物理内存的 50%~70%
key_buffer_size = 64M # 全 InnoDB 时可调小
# 日志
log_error = /var/log/mysql/error.log
log_bin = /var/lib/mysql/mariadb-bin
binlog_format = ROW
slow_query_log = ON
long_query_time = 3
# 安全
bind_address = 127.0.0.1
skip_name_resolve = ON
# 性能
innodb_io_capacity = 1000
innodb_flush_log_at_trx_commit = 1
与 MySQL 8 的默认值差异对照
| 参数 | MariaDB 11.8(实测) | MySQL 8.0/8.4 |
|---|---|---|
| max_allowed_packet | 16MB | 64MB |
| key_buffer_size | 128MB | 8MB |
| innodb_io_capacity | 200 | 10000 |
| log_bin | OFF | ON |
| sync_binlog | 0 | 1 |
| collation_server | utf8mb4_uca1400_ai_ci | utf8mb4_0900_ai_ci |
| skip_name_resolve | ON | OFF |
| sql_mode | 无 ONLY_FULL_GROUP_BY | 含 ONLY_FULL_GROUP_BY |
| SET PERSIST | 不支持 | 支持 |
💡 这些差异是 MySQL → MariaDB 迁移时的常见坑,建议迁移前逐项核对。
参考链接
- MariaDB 服务器参数官方文档:https://mariadb.com/kb/en/server-system-variables/
- MariaDB 11.8 发布说明:https://mariadb.org/event-category/releases/
本文档由 www.quzuo.net 平台开发