CentOS LNMP数据库配置技巧
硬件是数据库性能的基础,需根据业务规模选择合适的配置:
操作系统的配置直接影响系统资源利用率:
numactl --interleave=all临时关闭或修改内核参数永久生效)。noatime选项(减少文件访问时间记录),并调整磁盘缓存模式(启用WCE=1、RCD=0,提升写入性能)。/etc/sysctl.conf优化TCP/IP栈与内存管理,关键参数包括:vm.swappiness=10(降低swap使用率,优先使用物理内存)、vm.dirty_background_ratio=10/vm.dirty_ratio=20(控制脏页刷新阈值,平衡写入性能与数据安全性)、net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT连接,减少连接建立开销)、net.ipv4.tcp_fin_timeout=30(缩短TIME_WAIT状态持续时间)。数据库配置是性能瓶颈的关键环节,需聚焦缓冲池、连接数与查询效率:
innodb_buffer_pool_size为服务器总内存的50%-80%(如16GB内存可设置为8GB-12GB),用于缓存数据与索引,减少磁盘I/O;若使用MyISAM引擎(不推荐),可调整key_buffer_size(但建议优先使用InnoDB)。max_connections为预期并发连接数的1.2-1.5倍(如预期1000并发,设置为1200-1500),避免连接数耗尽;MySQL 5.7及以上版本建议关闭查询缓存(query_cache_type=0、query_cache_size=0),因其在高并发写入场景下会降低性能。innodb_log_file_size(如256MB-512MB)和innodb_log_files_in_group(通常为2-3个),平衡性能与数据安全性;innodb_flush_log_at_trx_commit设置为2(提升性能,但可能丢失部分事务,适用于对数据一致性要求不高的场景)。INT代替BIGINT、用VARCHAR代替TEXT),避免使用过大的数据类型;对于大型表(如超过1000万行),考虑使用分区表(按时间、ID等字段分区),提高查询与管理效率。索引是提升查询性能的核心,需合理设计与使用:
WHERE子句、JOIN条件、ORDER BY字段)创建索引,避免在低频使用或高重复率字段(如性别)上创建索引;使用复合索引(如(user_id, create_time))优化多字段查询,遵循最左前缀原则(查询条件需包含复合索引的最左列)。EXPLAIN分析查询计划,确保查询使用了索引);避免使用LIKE '%value%'模糊查询(无法使用索引,建议使用全文索引或LIKE 'value%');使用JOIN连接代替子查询(尤其在处理大量数据时,JOIN效率更高);减少SELECT *(只查询需要的字段,减少数据传输量)。OPTIMIZE TABLE命令整理索引碎片(适用于频繁更新的表),保持索引效率;删除不必要的索引(每个额外索引会增加写操作的开销)。使用缓存工具减少数据库访问压力:
Caffeine),缓存频繁访问的数据,降低数据库负载。定期维护是保持数据库性能稳定的关键:
slow_query_log=1、long_query_time=1),使用pt-query-digest或mysqldumpslow工具分析慢查询,找出性能瓶颈(如未使用索引的查询),针对性优化。OPTIMIZE TABLE命令整理表空间(适用于InnoDB表),回收碎片空间,提升查询效率;对于MyISAM表,可使用REPAIR TABLE修复损坏的表。mysqldump、xtrabackup),建议采用增量备份+全量备份的组合策略,确保数据安全;备份文件需存储在异地,防止数据丢失。实时监控数据库运行状态,及时发现并解决问题:
Performance Schema、sys库(如sys.schema_table_statistics)监控数据库性能。max_connections的80%),通过邮件、短信等方式及时通知运维人员,避免问题扩大化。