Skip to content

MariaDB 配置参数参考

连接管理

max_connections

  • 描述:允许的最大并发连接数
  • 默认值:151
  • 推荐值:根据实际业务需求调整,一般设置为500-2000
  • 版本差异:所有版本一致
  • 注意事项:过高的连接数会消耗大量内存,建议结合thread_cache_size一起调整

thread_cache_size

  • 描述:缓存的线程数,用于减少创建和销毁线程的开销
  • 默认值:根据系统内存自动计算,通常为8-64
  • 推荐值:50-200,对于高并发场景可设置为max_connections的1/10
  • 版本差异:所有版本一致
  • 注意事项:缓存过多线程会占用内存,建议监控Threads_created状态值调整

wait_timeout

  • 描述:非交互连接的超时时间(秒)
  • 默认值:28800(8小时)
  • 推荐值:300-7200,根据业务需求调整
  • 版本差异:所有版本一致
  • 注意事项:过短可能导致频繁断开连接,过长可能导致连接堆积

interactive_timeout

  • 描述:交互连接的超时时间(秒)
  • 默认值:28800(8小时)
  • 推荐值:3600-7200
  • 版本差异:所有版本一致
  • 注意事项:适用于MySQL客户端等交互式工具

connect_timeout

  • 描述:连接建立的超时时间(秒)
  • 默认值:10
  • 推荐值:5-30
  • 版本差异:MariaDB 10.2.1+默认为10,之前版本为5
  • 注意事项:过短可能导致网络不稳定时连接失败

内存管理

innodb_buffer_pool_size

  • 描述:InnoDB缓冲池大小,用于缓存数据和索引
  • 默认值:根据系统内存自动计算,通常为物理内存的25%
  • 推荐值:物理内存的50%-80%,根据实际负载调整
  • 版本差异:所有版本一致,但MariaDB 10.5+支持动态调整
  • 注意事项:设置过大可能导致系统内存不足,建议预留足够内存给操作系统

innodb_buffer_pool_instances

  • 描述:InnoDB缓冲池实例数量,用于减少锁竞争
  • 默认值:根据innodb_buffer_pool_size自动计算,最大值64
  • 推荐值:每个实例大小不小于1GB,通常设置为4-16
  • 版本差异:MariaDB 10.5+默认自动计算,之前版本默认为1
  • 注意事项:仅在innodb_buffer_pool_size大于1GB时生效

key_buffer_size

  • 描述:MyISAM索引缓冲区大小
  • 默认值:16MB
  • 推荐值:如果使用MyISAM引擎,设置为物理内存的10%-20%;否则设置为16MB-64MB
  • 版本差异:所有版本一致
  • 注意事项:InnoDB引擎不需要调整此参数

sort_buffer_size

  • 描述:每个排序操作分配的内存大小
  • 默认值:256KB
  • 推荐值:256KB-1MB
  • 版本差异:所有版本一致
  • 注意事项:此参数为每个连接分配,过高会导致内存消耗过大

read_buffer_size

  • 描述:顺序读取时的缓冲区大小
  • 默认值:128KB
  • 推荐值:128KB-256KB
  • 版本差异:所有版本一致
  • 注意事项:此参数为每个连接分配,过高会导致内存消耗过大

read_rnd_buffer_size

  • 描述:随机读取时的缓冲区大小
  • 默认值:256KB
  • 推荐值:256KB-512KB
  • 版本差异:所有版本一致
  • 注意事项:此参数为每个连接分配,过高会导致内存消耗过大

InnoDB 存储引擎

innodb_log_file_size

  • 描述:单个InnoDB日志文件的大小
  • 默认值:48MB
  • 推荐值:256MB-2GB,根据数据库写入量调整
  • 版本差异:MariaDB 10.2+默认48MB,之前版本为5MB
  • 注意事项:过大可能导致恢复时间过长,过小会导致频繁切换日志

innodb_log_files_in_group

  • 描述:InnoDB日志文件组中的文件数量
  • 默认值:2
  • 推荐值:2-4
  • 版本差异:所有版本一致
  • 注意事项:通常设置为2,增加数量对性能提升有限

innodb_flush_log_at_trx_commit

  • 描述:控制事务日志的刷新策略
  • 默认值:1
  • 推荐值:1(最安全,适合金融场景);2(性能更好,适合一般场景);0(性能最高,安全性最低)
  • 版本差异:所有版本一致
  • 注意事项:设置为0或2可能导致服务器崩溃时丢失数据

innodb_file_per_table

  • 描述:是否为每个表创建独立的表空间文件
  • 默认值:ON(MariaDB 10.0+),OFF(之前版本)
  • 推荐值:ON
  • 版本差异:MariaDB 10.0+默认为ON,之前版本需要手动开启
  • 注意事项:开启后便于管理单个表的空间,但会增加文件数量

innodb_flush_method

  • 描述:InnoDB数据文件和日志文件的刷新方法
  • 默认值:fsync
  • 推荐值:O_DIRECT(适合直接IO场景)或fdatasync
  • 版本差异:所有版本一致
  • 注意事项:需要根据存储设备类型调整,SSD建议使用O_DIRECT

复制相关

server_id

  • 描述:服务器唯一标识,用于复制
  • 默认值:1
  • 推荐值:每个服务器分配唯一ID,通常使用IP地址最后一段或自定义编号
  • 版本差异:所有版本一致
  • 注意事项:主从复制环境中必须唯一

log_bin

  • 描述:是否启用二进制日志
  • 默认值:OFF
  • 推荐值:ON(用于复制和备份)
  • 版本差异:所有版本一致
  • 注意事项:启用会增加IO开销,但对于复制和恢复至关重要

binlog_format

  • 描述:二进制日志格式
  • 默认值:MIXED
  • 推荐值:ROW(最安全,适合复制和恢复);STATEMENT(性能较好,适合简单场景)
  • 版本差异:MariaDB 10.2+默认MIXED,之前版本默认为STATEMENT
  • 注意事项:ROW格式日志体积较大,但能保证数据一致性

sync_binlog

  • 描述:控制二进制日志的刷新策略
  • 默认值:0
  • 推荐值:1(最安全,适合金融场景);100-1000(性能更好,适合一般场景)
  • 版本差异:所有版本一致
  • 注意事项:设置为1会降低性能,但能保证日志不丢失

expire_logs_days

  • 描述:二进制日志的过期天数
  • 默认值:0(永不过期)
  • 推荐值:7-30,根据备份策略调整
  • 版本差异:MariaDB 10.6+已废弃,改用binlog_expire_logs_seconds
  • 注意事项:需定期清理过期日志,避免磁盘空间不足

binlog_expire_logs_seconds

  • 描述:二进制日志的过期秒数(替代expire_logs_days)
  • 默认值:2592000(30天)
  • 推荐值:604800(7天)- 2592000(30天)
  • 版本差异:MariaDB 10.6+新增
  • 注意事项:与expire_logs_days互斥,同时设置时此参数优先

安全相关

skip_networking

  • 描述:是否禁用网络连接,仅允许本地连接
  • 默认值:OFF
  • 推荐值:根据实际需求调整,本地部署可设置为ON
  • 版本差异:所有版本一致
  • 注意事项:禁用网络连接能提高安全性,但会影响远程管理

bind_address

  • 描述:绑定的IP地址
  • 默认值:*(所有地址)
  • 推荐值:127.0.0.1(仅本地访问)或特定IP地址
  • 版本差异:所有版本一致
  • 注意事项:限制绑定地址能提高安全性

sql_mode

  • 描述:SQL模式,用于控制SQL语法检查和数据验证
  • 默认值:取决于MariaDB版本,通常包含STRICT_TRANS_TABLES等
  • 推荐值:STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
  • 版本差异:不同版本默认值不同,建议显式设置
  • 注意事项:严格的SQL模式能提高数据质量,但可能导致现有应用报错

性能优化

query_cache_size

  • 描述:查询缓存大小
  • 默认值:1M(MariaDB 10.1+默认0,已废弃)
  • 推荐值:0(MariaDB 10.1+,已废弃);64M-256M(老版本)
  • 版本差异:MariaDB 10.1+默认禁用,10.3+已移除
  • 注意事项:高并发场景下查询缓存可能成为瓶颈,建议禁用

slow_query_log

  • 描述:是否启用慢查询日志
  • 默认值:OFF
  • 推荐值:ON
  • 版本差异:所有版本一致
  • 注意事项:启用后便于分析慢查询,建议在生产环境开启

long_query_time

  • 描述:慢查询的阈值(秒)
  • 默认值:10
  • 推荐值:0.1-1,根据业务需求调整
  • 版本差异:所有版本一致
  • 注意事项:阈值设置过小会导致日志过大,建议结合log_queries_not_using_indexes使用

log_queries_not_using_indexes

  • 描述:是否记录未使用索引的查询
  • 默认值:OFF
  • 推荐值:ON
  • 版本差异:所有版本一致
  • 注意事项:启用后便于发现索引问题,但可能产生大量日志

Galera Cluster 相关

wsrep_on

  • 描述:是否启用Galera复制
  • 默认值:OFF
  • 推荐值:ON(Galera集群环境)
  • 版本差异:Galera Cluster专属参数
  • 注意事项:仅在Galera集群环境中启用

wsrep_cluster_address

  • 描述:Galera集群成员地址
  • 默认值:无
  • 推荐值:gcomm://node1:4567,node2:4567,node3:4567
  • 版本差异:Galera Cluster专属参数
  • 注意事项:必须包含所有集群成员的地址

wsrep_node_address

  • 描述:当前节点的地址
  • 默认值:自动检测
  • 推荐值:当前节点的IP地址:4567
  • 版本差异:Galera Cluster专属参数
  • 注意事项:建议显式设置,避免自动检测错误

wsrep_cluster_name

  • 描述:Galera集群名称
  • 默认值:my_wsrep_cluster
  • 推荐值:自定义集群名称
  • 版本差异:Galera Cluster专属参数
  • 注意事项:同一集群中的所有节点必须使用相同名称

wsrep_sst_method

  • 描述:状态快照传输方法
  • 默认值:rsync
  • 推荐值:xtrabackup(适合大型集群);rsync(适合小型集群)
  • 版本差异:Galera Cluster专属参数
  • 注意事项:xtrabackup需要额外安装Percona XtraBackup

版本特定参数

MariaDB 10.4+

  • innodb_dedicated_server:自动配置InnoDB参数,适合专用服务器
  • skip_innodb_doublewrite:跳过双写缓冲,适合SSD存储

MariaDB 10.5+

  • innodb_buffer_pool_size:支持动态调整,无需重启服务
  • binlog_expire_logs_seconds:替代expire_logs_days,以秒为单位设置过期时间

MariaDB 10.6+

  • innodb_log_write_ahead_size:控制日志写入的预分配大小
  • skip_log_bin:更直观的禁用二进制日志参数

配置文件示例

基础配置(my.cnf)

ini
[mysqld]
# 基础设置
server_id = 1
bind_address = 0.0.0.0
port = 3306
# 连接管理
max_connections = 1000
thread_cache_size = 100
wait_timeout = 300
interactive_timeout = 3600

# 内存管理
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8
key_buffer_size = 64M

# InnoDB设置
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON
innodb_flush_method = O_DIRECT

# 复制设置
log_bin = mysql-bin
binlog_format = ROW
sync_binlog = 100

# 安全设置
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 性能设置
slow_query_log = ON
long_query_time = 0.5
log_queries_not_using_indexes = ON

Galera Cluster配置

ini
[mysqld]
# 基础设置
server_id = 1
bind_address = 0.0.0.0
port = 3306

# Galera设置
wsrep_on = ON
wsrep_cluster_name = "my_galera_cluster"
wsrep_cluster_address = "gcomm://node1:4567,node2:4567,node3:4567"
wsrep_node_address = "node1:4567"
wsrep_sst_method = xtrabackup

# InnoDB设置
innodb_buffer_pool_size = 8G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_autoinc_lock_mode = 2

配置参数调整建议

  1. 根据业务需求调整:不同业务场景需要不同的配置参数,例如OLTP场景需要优化事务处理,OLAP场景需要优化查询性能

  2. 逐步调整:不要一次性调整多个参数,建议每次调整1-2个参数,观察性能变化

  3. 监控关键指标:调整参数后,需要监控CPU、内存、IO等关键指标,评估调整效果

  4. 考虑版本差异:不同MariaDB版本的默认参数和支持的参数可能不同,建议参考官方文档

  5. 定期备份配置文件:每次调整配置前,建议备份当前配置文件,以便出现问题时回滚

常见问题(FAQ)

Q:如何查看当前MariaDB的配置参数?

A:可以使用以下命令查看当前配置参数:

sql
SHOW VARIABLES;
-- 查看特定参数
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看系统状态
SHOW GLOBAL STATUS;

Q:如何动态调整配置参数?

A:可以使用SET命令动态调整大部分参数,例如:

sql
-- 全局级别
SET GLOBAL innodb_buffer_pool_size = 8G;
-- 会话级别
SET SESSION wait_timeout = 300;

注意:部分参数(如server_id、log_bin等)需要重启服务才能生效。

Q:如何确定配置参数的最佳值?

A:建议参考以下方法:

  1. 监控系统性能指标,识别瓶颈
  2. 参考官方文档和最佳实践
  3. 进行性能测试,对比不同参数值的效果
  4. 考虑硬件配置和业务需求

Q:配置参数过多,如何优先级排序?

A:建议优先调整以下关键参数:

  1. innodb_buffer_pool_size(影响内存使用)
  2. max_connections(影响并发能力)
  3. innodb_log_file_size(影响写入性能)
  4. innodb_flush_log_at_trx_commit(影响安全性和性能)
  5. slow_query_log(用于性能分析)

Q:如何备份和恢复配置文件?

A:可以使用以下方法:

bash
# 备份配置文件
cp /etc/my.cnf /etc/my.cnf.backup

# 恢复配置文件
cp /etc/my.cnf.backup /etc/my.cnf
# 重启服务使配置生效
systemctl restart mariadb

Q:MariaDB和MySQL的配置参数有什么区别?

A:大部分配置参数是兼容的,但MariaDB有一些特有参数,例如:

  1. Galera Cluster相关参数(wsrep_*)
  2. MariaDB特有存储引擎参数(如Aria相关参数)
  3. 一些性能优化参数(如thread_pool相关参数)

建议参考MariaDB官方文档,了解特定版本的参数差异。