优化 MySQLmy.cnf 配置文件,可以显著提升数据库性能,特别是在高并发或大数据量场景下。以下是优化 my.cnf 的方法和建议,涵盖 常见配置项参数说明优化技巧


1. 优化前的准备工作

在修改 my.cnf 之前,需了解以下内容:

1.1 确认 MySQL 当前版本和存储引擎

  • 查看 MySQL 版本:

    bash

    复制

    mysql --version
    
  • 确认使用的存储引擎(推荐 InnoDB):

    sql

    复制

    SHOW ENGINES;
    

1.2 确定服务器资源

  • CPU 核心数:决定并发能力。

    bash

    复制

    nproc
    
  • 内存大小:用于设置缓存参数。

    bash

    复制

    free -h
    
  • 磁盘 IO 性能:决定读写速度。

    bash

    复制

    hdparm -Tt /dev/sda
    

1.3 备份 MySQL 配置

在编辑 my.cnf 前,备份原始配置以防止误操作:

bash

复制

sudo cp /etc/my.cnf /etc/my.cnf.bak

2. 常见优化参数

以下是一些常见的 my.cnf 配置项及优化建议,按功能模块分类。

2.1 基本配置

ini

复制

[mysqld]
bind-address = 0.0.0.0      # 允许远程连接(根据需要设置为具体 IP 或 127.0.0.1)
port = 3306                 # MySQL 默认端口
max_connections = 500       # 最大连接数(根据业务需求调整)
wait_timeout = 28800        # 连接超时时间(秒)
interactive_timeout = 28800 # 交互式连接超时时间(秒)
  • bind-address:如果服务器需要接受外部访问,可以设置为 0.0.0.0
  • max_connections:调整为适合业务需求的值,一般设置为 2-3 倍的峰值连接数。
  • wait_timeoutinteractive_timeout:减少空闲连接占用资源。

2.2 缓存与内存优化

ini

复制

key_buffer_size = 128M        # 针对 MyISAM 表的索引缓存(InnoDB 可忽略)
query_cache_size = 0          # 查询缓存大小(MySQL 8.0 已废弃,建议禁用)
query_cache_type = 0          # 禁用查询缓存
tmp_table_size = 64M          # 临时表大小
max_heap_table_size = 64M     # 内存中的临时表最大大小
table_open_cache = 1024       # 打开表的缓存数量
thread_cache_size = 16        # 缓存的线程数
  • key_buffer_size:仅对 MyISAM 存储引擎有用,InnoDB 数据不受影响。
  • query_cache_size:MySQL 8.0 中已移除该功能,建议禁用以提升性能。
  • tmp_table_sizemax_heap_table_size:用于控制内存临时表大小,适当提升可减少磁盘临时表的使用。
  • table_open_cache:提升打开表的缓存数,减少频繁打开/关闭表的操作。
  • thread_cache_size:提升线程复用率,减少线程创建的开销。

2.3 InnoDB 存储引擎优化

ini

复制

innodb_buffer_pool_size = 4G      # InnoDB 缓存池大小(建议占用总内存的 50%-70%)
innodb_buffer_pool_instances = 8 # 缓存池实例数(适合大内存服务器)
innodb_log_file_size = 256M      # 日志文件大小
innodb_log_buffer_size = 16M     # 日志缓存大小
innodb_flush_log_at_trx_commit = 1 # 日志刷新策略(1 最安全,2/0 性能更高)
innodb_file_per_table = 1        # 每个表使用独立的表空间,便于管理
innodb_flush_method = O_DIRECT   # 避免双缓存,提高 IO 性能
  • innodb_buffer_pool_size:InnoDB 的核心参数,决定内存性能,建议设置为可用内存的 50%-70%。
  • innodb_flush_log_at_trx_commit
    • 1:每次事务提交时写入磁盘,最安全。
    • 2:每次事务提交时写入日志缓存,磁盘写入延迟,性能更高。
    • 0:仅靠 MySQL 自身控制,性能最高但有丢失风险。
  • innodb_flush_method:推荐设置为 O_DIRECT,避免操作系统缓存和 MySQL 缓存的重复。

2.4 日志与调试

ini

复制

log_error = /var/log/mysql/error.log   # 错误日志路径
slow_query_log = 1                    # 启用慢查询日志
slow_query_log_file = /var/log/mysql/slow.log # 慢查询日志文件
long_query_time = 2                   # 慢查询阈值(秒)
log_queries_not_using_indexes = 1     # 记录未使用索引的查询
  • log_error:记录 MySQL 错误日志,便于排查问题。
  • slow_query_log:启用慢查询日志,分析性能瓶颈。
  • long_query_time:设置慢查询的阈值,建议为 1-2 秒。
  • log_queries_not_using_indexes:记录未使用索引的查询,便于优化索引。

2.5 连接与网络优化

ini

复制

max_allowed_packet = 64M         # 单次查询允许的最大数据包大小
net_read_timeout = 30            # 网络读取超时时间(秒)
net_write_timeout = 30           # 网络写入超时时间(秒)
skip-name-resolve = 1            # 禁用主机名解析,加快连接速度
  • max_allowed_packet:适当增大以支持大数据量传输。
  • skip-name-resolve:禁用 DNS 解析,可显著加快连接速度。

3. 调优的核心原则

  1. 根据业务需求调整参数

    • 不同业务场景(高读、高写、混合型)需要不同的优化策略。
    • 例如,高读场景需要加大缓存,如 innodb_buffer_pool_size
  2. 逐步调整参数

    • 不要一次性修改过多参数。逐步调整并观察系统性能的变化。
  3. 监控性能

    • 使用 MySQL 自带工具或开源工具监控数据库性能。
    • 常用命令:
      • 查看连接数:

        sql

        复制

        SHOW STATUS LIKE 'Threads_connected';
        
      • 查看缓冲区命中率:

        sql

        复制

        SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_hit%';
        
      • 查看慢查询:

        sql

        复制

        SHOW GLOBAL STATUS LIKE 'Slow_queries';
        
  4. 定期清理与维护

    • 定期清理不再使用的表或索引。
    • 优化表结构:

      sql

      复制

      OPTIMIZE TABLE table_name;
      

4. 示例优化后的 my.cnf 文件

以下是一个适用于中小型业务场景的优化示例:

ini

复制

[mysqld]
bind-address = 0.0.0.0
port = 3306
max_connections = 500
wait_timeout = 28800
interactive_timeout = 28800# 缓存与内存
key_buffer_size = 16M
query_cache_size = 0
query_cache_type = 0
tmp_table_size = 64M
max_heap_table_size = 64M
table_open_cache = 1024
thread_cache_size = 16# InnoDB 优化
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT# 日志与调试
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1# 网络与连接
max_allowed_packet = 64M
net_read_timeout = 30
net_write_timeout = 30
skip-name-resolve = 1

5. 总结

  • 核心优化点:调整内存缓存(innodb_buffer_pool_size)、连接数(max_connections)、日志配置(slow_query_log)等关键参数。
  • 持续监控:通过性能监控工具(如 MySQL 自带的 SHOW STATUS 命令),观察调整效果并进一步优化。
  • 量化目标:通过指标(如 QPS、TPS、延迟)评估优化效果。

根据业务需求调整 my.cnf,可以有效提升 MySQL 的性能和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92594.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92594.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92594.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(上)=>TIM+DAC+ADC+DMA正弦波回环测试

0. 概述 文本目标基于Cherryusb官方例程audio_v1_mic_speaker_multichan_template.c,底层对接STM32的内置ADC和DAC,实现录音和播放。通过电脑播放歌曲,板子发出声音。通过电脑录音机开启录音,板子作为麦克风采集声音,…

数模个人笔记

写在前面:不建议观看,会烂尾的1.马氏链:状态空间指的是随机变量的取值范围,xi称为一个状态,应用背景在现在的条件下下一状态发生的概率,比如退火,他的条件概率可化简为:且nm时刻的概…

Spring Boot自定义Starter:从原理到实战全解析

1. 背景与需求1.1 什么是Starter? Spring Boot的起步依赖(Starter)是一种特殊的依赖描述符,用于简化Spring应用的依赖管理和自动配置。官方文档将Starter定义为“一组方便的依赖描述符”,开发者只需引入对应的Starter&…

安宝特方案丨工业AR+AI质检方案:致力于提升检测精度与流程效率

据IDC预测,2025年中国工业AI质检市场规模将达62亿元,年复合增长率28.5%,新能源、消费电子、高端装备三大领域贡献超70%市场份额。这一数据印证了AI质检已从可选技术升级为制造业降本增效的生存刚需。当前制造业质检环节正面临:精度…

AudioLLM

参考链接:https://mp.weixin.qq.com/s/cscrUn7n_o6PdeQRzWpx8g 视频教程:https://www.bilibili.com/video/BV1LGbozkEDY 模型代码:https://github.com/boson-ai/higgs-audio 如果是两个模型加在一起:一个语言模型,一个…

基于 CEP 引擎的算法拆单与调度实践—基础篇

在金融市场中,大额订单的一次性交易可能会对市场价格产生较大冲击,导致交易成本增加。例如,大额买入订单可能会迅速推高股价,使后续买入成本上升;大额卖出订单则可能打压股价,造成资产贱卖。拆单算法通过将…

开源 C# TCP 通信框架 SocketDJ 发布:轻量、免费、可扩展

前言市面上的网络通信框架琳琅满目,功能强大者有之,但不少都存在功能闭源、商业收费、学习成本高等问题。作为一名热爱底层技术的开发者,我始终相信:基础通信能力应当简单、透明且免费。最近正好有项目需求,索性动手从…

移动机器人路径规划中ROS2中间件性能的研究综述

导读: 随着移动机器人在工业自动化、特种作业及智能服务领域的广泛应用,其路径规划能力越来越依赖机器人操作系统ROS2的通信性能。ROS2通过去中心化架构与数据分发服务中间件显著提升了系统可靠性,但动态复杂环境中路径规划对通信延迟、带宽…

【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808

一、问题背景 Atlas 500 A2智能小站是华为基于20T 12G版本的Atlas 200I A2加速模块开发的面向广泛边缘应用场景的轻量边缘设备,具有超强计算性能、配置灵活、体积小、支持温度范围宽、环境适应性强、易于维护 管理等特点的产品。Atlas 500 A2智能小站主要应用在智能…

sigaction 中 sa_handler = SIG_IGN 的深度解析与应用实践

sigaction 中 sa_handler SIG_IGN 的深度解析与应用实践 核心意义:主动忽略信号 当 sa_handler 设置为 SIG_IGN 时,内核将完全丢弃指定的信号,不会: 执行默认行为调用任何处理函数中断进程的正常执行 这与 SIG_DFL(默…

【LLM实战|langchain、qwen_agent】RAG高级

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 0. 前言 RAG高级 1. RAG 高效召回方法 合理设置TOP-K 改进索引算法 -知识图谱 引入重排序 重排序模型 BGE-Rerank Cohere Rerank 混合检索 向量索引+关键词索引…

C++方向知识汇总(一)

关于单例模式1.什么是单例模式?答:单例模式是一种创建型设计模式,确保一个类在运行期间仅有一个实例,提供全局唯一的访问点2.单例模式的目的?答:避免重复创建资源消耗大的对象,例如日志系统、线…

学习:JS[8]本地存储+正则表达式

一.本地存储1.介绍将数据存储到用户浏览器当中设置、读取方便、页面刷新不丢失数据2.本地存储分类-localStoragea.语法(1)存储数据//存储数据 localStorage.setItem(键,值)如 localStorage.setItem(uname,哈哈)(2)获取数据//获取方式 都加引号 localStorage.getItem(键) localS…

C++算法练习:单词识别

做题记录:牛客习题:单词识别 相关题目代码已经提交到gitee中:楼田莉子 (riko-lou-tian) - Gitee.com喜欢请点个赞谢谢 目录 题目: C 字符函数头文件头文件:(C 标准库)核心函数功能说明&#…

从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技

在AI技术普惠的浪潮下,Coze等智能体平台让零代码开发者也能快速构建功能强大的AI助手。然而,许多创作者在完成智能体开发后,却面临“工具免费、成本自担”的困境——用户无限制调用导致算力成本飙升,想收费又缺乏成熟的支付与用户…

C++学习之STL学习:map/set

通过前面的学习,我们已经对C STL有了初步了解。然而,STL作为一个庞大复杂的体系,远不止这些内容。接下来,我们将深入探讨STL中的另外两个重要组件——map和set。 作者的个人gitee:楼田莉子 (riko-lou-tian) - Gitee.co…

[学习] CORDIC算法详解:从数学原理到反正切计算实战

CORDIC算法详解:从数学原理到反正切计算实战 文章目录CORDIC算法详解:从数学原理到反正切计算实战引言一、数学原理二、求解流程(旋转模式)三、典型应用场景四、反正切计算示例(Python实现)五、算法流程可视…

3款强力的Windows系统软件卸载工具

1、Geek 下载地址:https://download.csdn.net/download/weixin_42203093/91625765 Geek Uninstaller 是一款专业的 Windows 软件卸载工具,主要用于卸载软件并清理残留垃圾: 特点 体积小巧便携:软件体积约为 1.7M,是单…

AcWing 4579. 相遇问题

这道题做个今天的结尾 比较简单 正在备战csp吗,正好刷一下 难度:简单时/空限制:1s / 256MB总通过数:1738总尝试数:2584来源: CSP-J 2022 模拟赛 原题链接 4579. 相遇问题 - AcWing题库 题目描述 一…

基于clodop和Chrome原生打印的标签实现方法与性能对比

今天想看看,基于clodop和Chrome原生打印的标签实现方法与性能对比。先看看DeepSeek关于这个问题的回答! CloudPrint 和 Chrome 原生打印的区别 基本概念差异 CloudPrint (Clodop) 是基于云的打印服务解决方案需要安装专门的客户端程序支持跨平台、跨设备…