Mysql如何優化my.conf配置文件?

優化 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) 是基于云的打印服務解決方案需要安裝專門的客戶端程序支持跨平臺、跨設備…