Ubuntu系统下MySQL内存优化方法
配置文件路径通常为/etc/mysql/my.cnf(Ubuntu 22.04+可能位于/etc/mysql/mysql.conf.d/mysqld.cnf),需调整以下关键参数:
innodb_buffer_pool_size:InnoDB存储引擎的核心内存组件,用于缓存表数据和索引,减少磁盘I/O。建议设置为系统可用内存的50%-80%(专用数据库服务器可提升至90%)。例如,8GB内存服务器可设置为4G。max_connections:限制并发连接数,避免过多连接消耗内存。需根据应用需求调整(如应用平均连接数约50,可设置为100并配合连接池使用)。修改后需重启MySQL生效。key_buffer_size:MyISAM存储引擎的索引缓存,若主要使用InnoDB,可设置为64M-256M(占可用内存的1/4以下)。query_cache_size:MySQL 5.7.20之前版本有效,用于缓存查询结果。仅在查询重复率高、写入频率低的场景启用(如设置为32M-128M),高并发写入场景建议禁用。tmp_table_size和max_heap_table_size控制内存临时表大小(避免频繁创建磁盘临时表),sort_buffer_size和read_buffer_size优化排序与读取性能。建议设置为256M-512M(根据排序操作频率调整)。bind-address设置为127.0.0.1(注释掉0.0.0.0),减少网络监听带来的内存开销。top、htop查看MySQL进程的内存占用(RES列),free -m查看系统整体内存使用(避免swap使用过高)。performance_schema监控内存分配(如memory_summary_global_by_event_name表),使用SHOW STATUS命令分析关键指标(如Innodb_buffer_pool_reads反映缓冲池命中率,Created_tmp_disk_tables反映临时表磁盘使用情况)。EXPLAIN分析查询执行计划,避免SELECT *(只选择必要列),减少全表扫描;避免使用LIKE '%keyword%'(无法利用索引)。WHERE、JOIN、ORDER BY的列创建索引(如主键、唯一索引),但避免过度索引(会增加写入开销)。ANALYZE TABLE更新表统计信息(优化查询计划),OPTIMIZE TABLE整理表碎片(减少内存占用)。free -m显示可用内存持续低于10%),考虑增加RAM(最有效的解决方式)。find /var/lib/mysql/backup -type f -mtime +7 -exec rm {} \;),释放磁盘空间(间接减少内存压力)。sort_buffer_size、tmp_table_size控制排序和临时表的内存使用,避免单个查询占用过多内存。