【Linux服務器】-MySQL數據庫參數調優

一、基礎配置

[mysqld]
# 聲明以下配置屬于MySQL服務器(mysqld)

[mysqld]:配置文件的模塊標識,表示這是 MySQL 服務器的配置段。

二、路徑與基礎設置

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

datadir:數據庫文件存儲路徑(表數據、索引等)。
socket:Unix 套接字文件路徑(本地客戶端通過此文件連接 MySQL)。
pid-file:MySQL 進程 ID 文件路徑(用于管理 MySQL 服務)。
character-set-server:服務器默認字符集(utf8mb4支持所有 Unicode 字符,包括 emoji)。
collation-server:字符集排序規則(utf8mb4_unicode_ci表示不區分大小寫)。

三、內存配置(最核心)

innodb_buffer_pool_size=5G
innodb_log_buffer_size=64M
key_buffer_size=64M

innodb_buffer_pool_size:InnoDB 存儲引擎的緩存池大小(緩存數據和索引)。
建議:設為服務器內存的 50%-70%(示例中 8GB 內存分配 5GB)。值越大,磁盤 IO 越少,性能越好。
innodb_log_buffer_size:InnoDB 日志緩沖區大小(臨時存儲待寫入磁盤的事務日志)。
建議:寫操作頻繁時調大(如 64M-128M),減少磁盤 IO。
key_buffer_size:MyISAM 引擎的索引緩存(InnoDB 用戶可設小值)。
建議:若全用 InnoDB,設為 32M-64M(MySQL 5.7 + 默認 InnoDB,MyISAM 已淘汰)。

四、連接管理

max_connections=500
wait_timeout=300
interactive_timeout=300
max_user_connections=100

max_connections:允許的最大并發連接數。
建議:根據業務峰值調整(如電商秒殺場景可設 1000)。
注意:每個連接約占 1-4MB 內存,避免設置過大導致內存溢出。
wait_timeout/interactive_timeout:非交互式 / 交互式連接的空閑超時時間(秒)。
建議:設為 300 秒(5 分鐘),避免空閑連接長期占用資源。
max_user_connections:單個用戶的最大連接數。
建議:設為 100-200,防止單個用戶耗盡連接資源。

五、InnoDB 引擎優化(重點)

innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
innodb_read_io_threads=4
innodb_write_io_threads=4

innodb_flush_log_at_trx_commit:事務日志刷新策略(影響安全性與性能)。
1(默認):每次事務提交立即刷盤(最安全,性能略低);
2:提交后寫入操作系統緩存,每秒刷盤(性能好,斷電可能丟 1 秒數據);
0:每秒刷盤(性能最好,風險最高)。
建議:生產環境優先選1,非核心場景可選2。
innodb_file_per_table:是否為每個表創建獨立的.ibd文件。
建議:設為1(開啟),方便單獨管理表空間(如刪除表釋放磁盤空間)。
innodb_flush_method:日志 / 數據文件的刷盤方式。
建議:Linux 設為O_DIRECT(避免雙重緩存),Windows 忽略此參數。
innodb_io_capacity:InnoDB 的 IO 吞吐量上限(影響后臺刷盤效率)。
建議:機械硬盤設 1000,SSD 設 2000-20000(根據實際性能調整)。
innodb_read/write_io_threads:讀寫 IO 線程數(提升并發 IO 能力)。
建議:根據 CPU 核心數調整(如 4-8 核設為 4-8),默認值為 4。

六、查詢優化

slow_query_log=1
long_query_time=1
slow_query_log_file=/var/log/mysql/slow.log
join_buffer_size=512K
sort_buffer_size=2M

slow_query_log:是否開啟慢查詢日志(記錄執行時間超過閾值的 SQL)。
建議:必須開啟(設為1),用于定位需要優化的 SQL。
long_query_time:慢查詢閾值(秒)。
建議:設為 1 秒(敏感業務可設 0.5 秒)。
slow_query_log_file:慢查詢日志存儲路徑。
建議:確保路徑存在且 MySQL 有寫入權限。
join_buffer_size/sort_buffer_size:表連接(JOIN)和排序(ORDER BY)的緩存大小。
建議:不宜過大(每個連接獨立分配),避免內存溢出。

七、其他重要參數

max_allowed_packet=128M
table_open_cache=2048
thread_cache_size=32
log_error=/var/log/mysql/error.log

max_allowed_packet:單個 SQL 語句 / 數據包的最大大小。
建議:若有大字段(如 TEXT/BLOB)或批量插入,設為 128M-1G(避免 “Packet too large” 錯誤)。
table_open_cache:表緩存(緩存打開的表文件描述符)。
建議:根據數據庫表數量調整(如 1000 張表設 2048),減少重復打開表的開銷。
thread_cache_size:線程緩存(復用空閑線程,減少創建 / 銷毀開銷)。
建議:并發高時調大(如 32-64),可通過Threads_created狀態值判斷是否足夠。
log_error:錯誤日志路徑。
建議:必須開啟,用于排查 MySQL 啟動 / 運行錯誤(如崩潰、權限問題)。

八、配置驗證命令

修改配置后,可通過以下命令驗證參數是否生效:

-- 查看所有配置(模糊搜索)
SHOW VARIABLES LIKE '參數名';-- 示例:查看innodb_buffer_pool_size
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';-- 查看MySQL狀態(如連接數、緩存命中率)
SHOW STATUS;

九、注意事項

重啟生效:修改配置文件后需重啟 MySQL 服務(systemctl restart mysqld)。
動態調整:部分參數支持在線修改(無需重啟),例如:
SET GLOBAL max_connections=500;(僅臨時生效,重啟后恢復配置文件值)。
監控與迭代:定期分析慢查詢日志(用pt-query-digest工具),優化高頻低效 SQL。
通過理解每個參數的作用,你可以根據服務器硬件和業務特點靈活調整配置,實現 MySQL 性能的最大化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89714.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89714.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89714.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sqli-labs靶場通關筆記:第32-33關 寬字節注入

第32關 寬字節注入查看一下本關的源代碼:function check_addslashes($string) // 定義一個用于過濾特殊字符的函數,目的是轉義可能用于注入的特殊符號 {$string preg_replace(/. preg_quote(\\) ./, "\\\\\\", $string); // 轉義…

基于Eureka和restTemple的負載均衡

在微服務架構中,基于 Eureka(服務注冊中心)和 RestTemplate(HTTP 客戶端)實現負載均衡是常見的方案,核心是通過 Eureka 獲取服務實例列表,再結合負載均衡策略選擇具體服務實例進行調用。以下是詳…

子線程不能直接 new Handler(),而主線程可以

在 Android 中,子線程不能直接 new Handler(),而主線程可以,原因在于 Looper 機制。下面詳細解釋:1. 為什么主線程可以直接 new Handler()? 主線程(UI 線程)在啟動時,系統會自動調用…

Android無需授權直接訪問Android/data目錄漏洞

從android11開始,訪問/sdcard/Android/data目錄需要URI授權,而從更高的版本開始甚至URI權限也被收回,返回“無法使用此文件夾”的提示,這里提供一種方法,可以越權強制訪問data目錄,當然也包括obb、media等目…

本地部署 Kimi K2 全指南(llama.cpp、vLLM、Docker 三法)

Kimi K2 是 Moonshot AI 于2025年7月11日發布的高性能多專家語言模型(MoE),支持最大 128K 上下文,激活參數規模為 32B,具備極強的推理、代碼生成與多輪對話能力。自從其權重以多種格式開源以來,許多開發者希…

使用python的pillow模塊將圖片轉化為灰度圖和相關的操作

使用python的pillow模塊可以將圖片轉化為灰度圖, 可以獲取灰度圖的特定點值,區域值, 修改值并保存到圖片 圖片轉換為灰度圖 from PIL import Image# 打開圖片 image Image.open("d://python//2//1.jpg")gray_image image.convert…

【網絡安全】大型語言模型(LLMs)及其應用的紅隊演練指南

未經許可,不得轉載。 文章目錄 什么是紅隊演練? 為什么 RAI 紅隊演練是一項重要實踐? 如何開展和規劃 LLM 的紅隊演練 1.測試前的準備 規劃:由誰負責測試 規劃:測試內容 規劃:測試方式 規劃:數據記錄方式 2.測試過程中 3.每輪測試后 報告數據 區分“識別”與“測量” 本…

ROS2安裝ros-humble-usb-cam 404錯誤導致失敗的解決方法

ROS2安裝ros-humble-usb-cam遇到404錯誤導致安裝失敗,如圖:解決方法: 備份 sources.list sudo cp /etc/apt/sources.list.d/ros2.list /etc/apt/sources.list.d/ros2.list.bak替換為清華源 sudo sed -i s|http://packages.ros.org/ros2/ubunt…

OllyDbg技巧學習

1 嘗試在反匯編代碼中找到一個函數的二進制代碼 有的時候需要一個函數的二進制代碼,注入到另外的一些地方;以此程序為示例, 八叉樹的C實現與原理解析-CSDN博客 Ollydbg打開可執行文件,我想先找到此函數的二進制代碼體&#xff0…

數據分析智能體:讓AI成為你的數據科學家

數據分析智能體:讓AI成為你的數據科學家 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈量世界&#xff0c…

K8s與Helm實戰:從入門到精通

Kubernetes 簡介 Kubernetes(簡稱 K8s)是一個開源的容器編排平臺,用于自動化部署、擴展和管理容器化應用。最初由 Google 設計并捐贈給云原生計算基金會(CNCF),現已成為容器編排領域的事實標準。 核心功能 自動化容器部署:支持聲明式配置和自動化部署,減少人工干預。…

根據ARM手冊,分析ARM架構中,原子操作的軟硬件實現的底層原理

目錄 1.問題背景: 2.原子操作 2.1 硬件操作 2.1.1 LDREX/LDXR指令 2.1.2 STREX/STXR指令 2.2 軟件操作 2.3 軟件硬件操作的各性能對比 3.總結 1.問題背景: 我們知道,RTOS的任務調度算法是搶占式優先級調度算法。 既然是搶占了&…

iOS 抓包工具選擇與配置指南 從零基礎到高效調試的完整流程

iOS 抓包:復雜網絡調試的必要技能 隨著移動端應用越來越依賴網絡交互,iOS 抓包作為核心調試工具之一,變得尤為重要。無論是調試 App 與后端的接口通信、排查 HTTPS 請求加密問題,還是定位網絡連接超時、請求異常,抓包都…

Java使用FastExcel實現Excel文件導入

依賴配置 (Maven pom.xml)<dependencies><!-- FastExcel 核心庫 --><dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.0.0</version></dependency><!-- Apache POI…

【60】MFC入門到精通——運行后 button按鍵上不顯示 按鍵名, 控件上的文字不顯示

文章目錄運行后&#xff0c;button按鍵上不顯示 “Test”原因是屬性&#xff0c;圖標–>True&#xff0c;改為False就好了。

抖音回應:沒有自建外賣,就是在團購的基礎上增加的配送功能

今年以來&#xff0c;外賣行業競爭愈加激烈&#xff0c;市場格局風云變幻。在這一背景下&#xff0c;外賣行業動向備受關注。近日&#xff0c;針對抖音上線團購版外賣的消息引發公眾關注。為此&#xff0c;大公科技以商家身份咨詢了抖店客服&#xff0c;對方回應稱&#xff0c;…

中間件安全攻防全解:從Tomcat到Weblogic反序列化漏洞介紹

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Author:枷鎖 文章目錄什么是中間件中間件漏洞(1) Tomcat(2) Weblogic(3) JBoss漏洞什么是中間件 中間件&#xff08;Middleware&#xff09;是指一種軟件組件&#xff0c;其作用是在不同的系統、應用程序或服務之間傳遞數據…

現代前端開發流程:CI/CD與自動化部署實戰

目錄 引言現代前端開發面臨的挑戰CI/CD基礎概念前端CI/CD流程設計實戰案例&#xff1a;構建前端CI/CD管道自動化部署策略監控與回滾機制最佳實踐與優化建議總結 引言 隨著前端技術的飛速發展&#xff0c;現代Web應用變得越來越復雜。前端項目不再只是簡單的HTML、CSS和JavaS…

MySQL EXPLAIN深度解析:優化SQL性能的核心利器

MySQL EXPLAIN深度解析&#xff1a;優化SQL性能的核心利器 引言&#xff1a;數據庫性能優化的關鍵 在數據庫應用開發中&#xff0c;SQL查詢性能往往是系統瓶頸的關鍵所在。當面對慢查詢問題時&#xff0c;EXPLAIN命令就像數據庫工程師的X光機&#xff0c;能夠透視SQL語句的執行…

Sentinel配置Nacos持久化

前言&#xff1a; Sentinel在使用控制臺時進行配置是純內存操作&#xff0c;并沒有提供默認的持久化措施&#xff0c;一旦服務重啟會導致配置的流控、熔斷等策略失效。Sentinel官方提供了多種持久化方式如&#xff1a;Redis、Zookeeper、Etcd、Nacos以及其他方式等。此文以Naco…