Ubuntu环境下MySQL数据库优化策略
swappiness参数设置为10以下),确保数据缓存在内存中。bonding技术实现多网卡负载均衡,提升网络吞吐量。/etc/sysctl.conf文件,调整以下关键参数:
net.core.somaxconn = 65535:增加TCP连接队列长度,避免连接拒绝;net.ipv4.tcp_tw_reuse = 1:复用TIME_WAIT状态的连接,减少资源占用;vm.swappiness = 10:降低系统使用swap的倾向,优先使用物理内存;fs.file-max = 655350:增加系统最大文件描述符数,支持更多并发连接。sysctl -p使配置生效。/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu默认路径),调整以下核心参数:
innodb_buffer_pool_size:设置为服务器内存的50%-80%(如16GB内存设为8GB-12GB),用于缓存InnoDB表数据和索引,是性能优化的关键参数;innodb_log_file_size:设置为256M-2G(如512M),增大日志文件大小可减少日志刷盘次数,提升写入性能;max_connections:根据应用负载调整(如100-500),避免过多连接导致内存耗尽;query_cache_size:MySQL 8.0及以上版本已移除查询缓存,无需设置;若使用5.7及以下版本,可设置为64M-256M(仅适用于读多写少场景)。sudo systemctl restart mysql使配置生效。EXPLAIN分析查询:在SQL语句前添加EXPLAIN关键字,查看执行计划(如是否使用索引、扫描行数),识别全表扫描、临时表等性能瓶颈。SELECT *,只查询需要的列;JOIN代替子查询(如SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.a_id);WHERE子句中对字段使用函数(如WHERE DATE(create_time) = '2025-11-08'),会导致索引失效。WHERE、JOIN、ORDER BY的列创建索引(如user_id、order_no);(user_id, order_status)),遵循最左前缀原则(查询条件需包含索引左侧字段);OPTIMIZE TABLE命令整理表碎片(如OPTIMIZE TABLE users),减少数据碎片对查询性能的影响;ANALYZE TABLE命令更新表统计信息(如ANALYZE TABLE orders),帮助优化器选择更优的执行计划。SHOW PROCESSLIST:查看当前运行的SQL进程,找出长时间执行的慢查询;SHOW STATUS:查看服务器状态变量(如Innodb_buffer_pool_wait_free表示缓冲池等待次数,Queries表示总查询数),监控关键指标;mysqldump或xtrabackup定期备份(如每日增量备份、每周全量备份);DELETE FROM logs WHERE create_time < '2025-01-01');ANALYZE TABLE,确保优化器做出正确决策。cron、sendmail等,释放系统资源;sudo apt remove ubuntu-desktop),节省内存和CPU资源。