### [VPS上MySQL配置优化:内存参数、慢查询日志和索引建议](https://www.jiyueip.com/article/13610) **Published:** 2026-07-30T09:58:38 **Author:** 斑斓助理 **Excerpt:** MySQL默认装完是面向兼容性的保守配置——1核512MB的小VPS和16核64G的服务器用的同一套默认参数。结果就是小VPS上MySQL把内存吃满触发OOM Killer,大服务器上内存利用率不到20%。根据实际内存调几个关键参数,性能改 MySQL默认装完是面向兼容性的保守配置——1核512MB的小VPS和16核64G的服务器用的同一套默认参数。结果就是小VPS上MySQL把内存吃满触发OOM Killer,大服务器上内存利用率不到20%。根据实际内存调几个关键参数,性能改善立竿见影。 ## 找出当前配置 ``` # 看关键内存参数当前值 mysql -u root -p -e "SHOW VARIABLES LIKE '%buffer_pool%';" mysql -u root -p -e "SHOW VARIABLES LIKE '%innodb%';" | grep -E 'buffer|log_file' # 看当前实际使用情况 mysql -u root -p -e "SHOW ENGINE INNODB STATUSG" | grep -A5 "BUFFER POOL" ``` ## innodb\_buffer\_pool\_size——最关键的参数 InnoDB缓冲池是MySQL内存占用的大头。数据先读到缓冲池再处理,缓冲池越大能缓存的数据越多、磁盘IO越少。默认128M,对于1GB以上内存的VPS来说太小了。 推荐值:VPS总内存的50%-70%。1GB内存VPS设512M,2GB设1G,4GB设3G。设太大MySQL启动不了——因为操作系统本身也要用内存。编辑my.cnf: ``` [mysqld] innodb_buffer_pool_size = 512M # 1GB内存VPS设512M innodb_buffer_pool_instances = 1 # 小于1GB的缓冲池设1个实例 ``` 雨云入门VPS起步1核1G,优惠码 **admin01** 首月五折。跑WordPress+MySQL,2G内存更舒服。 ## 其他几个值得调的参数 ``` # 慢查询日志——找到拖慢数据库的SQL slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 超过2秒的查询记下来 # 连接数 max_connections = 50 # 小VPS别设太高,每个连接吃内存 # 表缓存 table_open_cache = 256 # InnoDB日志大小 innodb_log_file_size = 128M # 写密集场景加大可减少磁盘IO ``` ## 分析慢查询——优化真正该优化的 慢查询日志记录了所有执行时间超过long\_query\_time的SQL。用mysqldumpslow工具分析: ``` # 看最慢的10条查询 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # 看出现次数最多的10条 mysqldumpslow -s c -t 10 /var/log/mysql/slow.log ``` 对于频繁出现的慢查询:用EXPLAIN看执行计划——有没有用索引、扫描了多少行、有没有全表扫描。频繁全表扫描→加索引。索引不是越多越好——每次写入都要更新索引,索引太多反而拖慢写入性能。 ## 索引优化原则 1. 在WHERE和JOIN的字段上加索引 2. 联合索引注意最左前缀——WHERE a=1 AND b=2,索引(a,b)有效,索引(b,a)对这个查询无效 3. 用小字段做索引——INT比VARCHAR快,前缀索引节省空间 4. EXPLAIN里type=ALL说明全表扫描→检查有没有漏加索引 5. 定期ANALYZE TABLE更新索引统计信息让优化器做对选择 ## 天天检查的健康指标 ``` # 缓冲池命中率——理想值>99% mysql -e "SHOW ENGINE INNODB STATUSG" | grep "Buffer pool hit rate" # 如果低于95%,缓冲池太小需要加大 # 慢查询占比 mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';" # 如果持续增长,有SQL需要优化 ``` ## 常见问题 ### 改了my.cnf后MySQL起不来? innodb\_buffer\_pool\_size设太大超过系统可用内存→MySQL启动失败。journalctl -u mysql看启动日志确认OOM。减小参数值或用systemctl start mysql手动启动看报错。 ### WordPress网站数据库慢怎么定位? 装Query Monitor插件→在WordPress后台实时看每条数据库查询的执行时间和调用位置。90%的慢查询来自没索引的wp\_postmeta表→给meta\_key和post\_id加联合索引。 ### 内存够用要不要调MySQL配置? 要。默认128M缓冲池连2G内存的VPS都喂不饱——空着的内存不用就是浪费。调大缓冲池后数据库操作从磁盘读变内存读,速度差距是数量级的。 **Tags:** VPS性能, 云服务器, 网站运维 **Categories:** 行业洞察 ---