外观
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 = ONGalera 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配置参数调整建议
根据业务需求调整:不同业务场景需要不同的配置参数,例如OLTP场景需要优化事务处理,OLAP场景需要优化查询性能
逐步调整:不要一次性调整多个参数,建议每次调整1-2个参数,观察性能变化
监控关键指标:调整参数后,需要监控CPU、内存、IO等关键指标,评估调整效果
考虑版本差异:不同MariaDB版本的默认参数和支持的参数可能不同,建议参考官方文档
定期备份配置文件:每次调整配置前,建议备份当前配置文件,以便出现问题时回滚
常见问题(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:建议参考以下方法:
- 监控系统性能指标,识别瓶颈
- 参考官方文档和最佳实践
- 进行性能测试,对比不同参数值的效果
- 考虑硬件配置和业务需求
Q:配置参数过多,如何优先级排序?
A:建议优先调整以下关键参数:
- innodb_buffer_pool_size(影响内存使用)
- max_connections(影响并发能力)
- innodb_log_file_size(影响写入性能)
- innodb_flush_log_at_trx_commit(影响安全性和性能)
- slow_query_log(用于性能分析)
Q:如何备份和恢复配置文件?
A:可以使用以下方法:
bash
# 备份配置文件
cp /etc/my.cnf /etc/my.cnf.backup
# 恢复配置文件
cp /etc/my.cnf.backup /etc/my.cnf
# 重启服务使配置生效
systemctl restart mariadbQ:MariaDB和MySQL的配置参数有什么区别?
A:大部分配置参数是兼容的,但MariaDB有一些特有参数,例如:
- Galera Cluster相关参数(wsrep_*)
- MariaDB特有存储引擎参数(如Aria相关参数)
- 一些性能优化参数(如thread_pool相关参数)
建议参考MariaDB官方文档,了解特定版本的参数差异。
