linux——mysql故障排查與生產環境優化

目錄

一,mysql數據庫常見的故障

1,故障現象1

2,故障現象2

3,故障現象3

4,故障現象4

5,故障現象5

6,故障現象6

二,mysql主從故障排查

1,故障現象1

2,故障現象2

三,mysql硬件方面的優化

1,CPU優化

2,內存優化

3,存儲優化

四,mysql配置文件優化

1,連接相關方面的優化

2,lnnoDB引擎優化

3,查詢優化

4,日志配置

5,核心性能優化

五,什么是mysql的引擎

1,mysql引擎是用來干什么的

2,lnnoDB(默認引擎)

3,Mylsam(歷史引擎)

4,lnonDB與mylsam的區別

六,SQL方面的優化

一,mysql數據庫常見的故障

1,故障現象1

mysql: [Warning] Using a password on the command line interface can be insecure.

?問題分析:這只是一個警告信息,當你使用類似?mysql -u root -p123456?的命令登陸數據庫時,

  • 密碼明文暴露:密碼會在命令行歷史記錄(~/.bash_history)中留存
  • 進程可見性:在進程列表(ps aux)中其他用戶可能看到密碼
  • 日志風險:如果命令被記錄或審計,密碼會被明文存儲

解決方法:登陸數據庫時不要把密碼輸入到外邊,使用類似命令進行登陸 mysql -uroot -p

2,故障現象2

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/data/mysql.sock' (2)

問題分析:這種情況一般都是數據庫未啟動,mysql中的配置文件為指定sock文件或者數據庫端口被防火墻攔截導致。

解決方法:查看數據庫是否啟動,防火墻開放數據庫監聽端口,/etc/my.cnf配置文件指定sock目錄位置 例如:socket=/usr/local/mysql/data/mysql.sock

3,故障現象3

忘記mysql登陸密碼如何解決。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

?問題分析:密碼不正確或者沒有權限訪問

解決方法:

[root@bogon ~]# vim /etc/my.cnf        ##編輯mysql配置文件,添加一行
[mysqld]
skip-grant-tables=on        ##跳過密碼認證進入到數據庫systemctl restart mysqld    ##修改完之后重啟生效[root@bogon ~]# mysql -uroot         ##無需指定密碼登陸到數據庫update mysql.user set authentication_string='' where user='root' and Host='localhost';
flush privileges;alter user 'root'@'localhost' identified by '123456';   ##修改新密碼為123456##刪除skip-grant-tables=on,使用新密碼登陸即可

4,故障現象4

使用遠程連接數據庫發生遠程連接數據庫很慢的問題

問題分析:如果 MySQL 主機查詢 DNS 很慢或是有很多客戶端主機時會導致連接很慢.由于開發機器是不能夠連接外網的,在進行MySQL連接時,DNS 解析是不可能完成的,從而也就明白了為什么連接那么慢了。


解決方法:修改 my.cnf 主配置文件,在[mysgld]下添加 skip-name-resolve,重啟數據庫可以解決。注意在以后授權里面不能再使用主機名授權。

5,故障現象5

MySQL連接數過載

ERROR 1129(HY000):Host'xxx.xxx.xxx.xxx'is blocked because of manyconnection errors;
unblock with mysqladmin flush-hosts

問題分析:由于 mysql 數據庫的參數:max_connect_errors,其默認值是 10。當大量(max connect errors)的主機去連接 MySQL,總連接請求超過了 10 次,新的連接就再也無法連接上 MySQL 服務。同一個 ip 在短時間內產生太多中斷的數據庫連接而導致的阻塞(超過 mysql 數據庫 max connection errors 的最大值)。

解決方法:

##使用flush-hosts命令清理緩存
mysqladmin -uroot-p -h 192.168.10.102 flush-hosts      ##使用此命令清理緩存
Enter password:方法二:
修改 mysql 配置文件,在[mysqld]下面添加 max connect errors=1000,

6,故障現象6

客戶端報 Too many connections.

問題分析:連接數超出mysql的最大連接數限制

解決方法:

[root@bogon ~]# vim /etc/my.cnf             ##修改mysql數據庫的最大連接數,修改完成后需要重啟
max_connections=2048

7,故障現象7

Warning: World-writable config file ,/etc/my.cnf' is ignoredERROR! MySQL is running but PID file could not be found

問題分析:MySQL 的配置文件/etc/my.cnf 權限不對,


解決方法:

chmod 644 /etc/my.cnf  將MySQL配置文件權限改為644

二,mysql主從故障排查

1,故障現象1

使用show slave status\G 查看從數據庫復制狀態,slave_IO_running為NO

問題分析:從庫和主庫的server-id值一樣

解決方法:修改從庫和主庫的server-id值不一樣,關閉u防火墻或者開啟3306端口,然后重啟mysql數據庫,重新同步。

2,故障現象2

從數據庫的SQL線程為no

Slave_SQL_Running: No?

問題原因:MySQL 復制中的 SQL 線程停止了工作

解決方法:

##在主庫上執行命令SHOW MASTER STATUS;重新查看file和position##在從庫上重新執行主從連接命令
change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='file',master_log_pos=posttion;##從數據庫stop slave;   start slave   ##重啟slave并查看狀態

三,mysql硬件方面的優化

1,CPU優化

CPU 對于 MySQL 應用,推薦使用 S.M.P.架構的多路對稱 CPU。例如:可以使用兩顆 Intel Xeon 3.6GHz的 CPU。現在比較推薦用 4U 的服務器來專門做數據庫服務器,不僅僅是針對于 MySQL。

2,內存優化

物理內存對于一臺使用 MySQL 的 Database Server 來說,服務器內存建議不要小于 2GB,推薦使用 4GB 以上的物理內存。不過內存對于現在的服務器而言可以說是一個可以忽略的問題,工作中遇到了高端服務器基本上內存都超過了32G。

3,存儲優化

以目前市場上普遍高轉速 SAS 硬盤(15000 轉/秒)為例,這種硬盤理論上每秒尋道 15000 次,這是物理特性決定的,沒有辦法改變。 MySQL 每秒鐘都在進行大量、復雜的查詢操作,對磁盤的讀寫量可想而知。所以通常認為磁盤 I/0 是制約 MySQL 性能的最大因素之一,通常是使用RAID-0+1 磁盤陣列,注意不要嘗試使用 RAID-5,MySQL 在 RAID-5 磁盤陣列上的效率并不高。如果不考慮硬件的投入成本,也可以考慮固態(SSD)硬盤專門作為數據庫服務器使用。數據庫的讀寫性能肯定會提高很多。

四,mysql配置文件優化

MySQL 配置文件/etc/my.cnf的優化可以顯著提升數據庫性能。以下是主要的優化方向和詳細配置建議:

1,連接相關方面的優化

  • max_connections = 500 ????????#最大連接數,根據應用需求調整
  • thread_cache_size = 32? ???????#線程緩存大小,減少連接創建開銷
  • table_open_cache = 4000 ?????#表緩存數量

2,lnnoDB引擎優化

  • innodb_log_file_size = 1G????????# 重做日志文件大小,大事務需要更大的日志
  • innodb_log_buffer_size = 64M? ? ? ? ?# 日志緩沖區大小
  • innodb_flush_log_at_trx_commit = 1 (數據安全) 或 2 (性能優先)? ? ?# 1=每次提交都刷盤(最安全),2=每秒刷盤(性能更好)
  • innodb_file_per_table = ON ????????# 每個表使用獨立表空間
  • innodb_flush_method = O_DIRECT ????????# Linux下推薦值,減少雙緩沖

3,查詢優化

  • sort_buffer_size = 4M????????# 排序緩沖區大小
  • join_buffer_size = 4M????????# 連接操作緩沖區大小
  • read_buffer_size = 2M????????# 全表掃描時的緩沖區
  • read_rnd_buffer_size = 4M? ? ?# 隨機讀緩沖區

4,日志配置

  • slow_query_log=ON? ? ? ? ?#啟用慢查詢日志,0N
  • long_query_time=1? ? ? ? ? #定義慢査詢閾值
  • log_error=/var/log/mysql/error.log? ?##指定錯誤日志路徑
  • binlog_format? ? ? ? #指定二進制文件日志格式(主從復制需要)
  • expire_logs_days=7? ? ? ? ?#自動清理舊的二進制日志天數。

5,核心性能優化

內存配置

  • innodb_buffer_pool_size:#總內存的50-70%
  • innodb_log_buffer_size:#大事務需增大
  • ? ? key_buffer_size:MyISAM? #專用(如不使用可設小值)

I/O優化

  • innodb_io_capacity和innodb_io_capacity_max(SSD環境可增大)
  • innodb_flush_neighbors(SSD建議關閉)
  • innodb_read_io_threads和innodb_write_io_threads

并發控制

  • innodb_thread_concurrency(通常設為CPU核心數×2)
  • thread_cache_size(減少線程創建開銷)
  • table_open_cache(減少表打開開銷)

五,什么是mysql的引擎

1,mysql引擎是用來干什么的

MySQL 引擎(存儲引擎)是數據庫管理系統的核心組件,負責數據的存儲、檢索、索引和事務處理。不同的引擎提供不同的功能特性,用戶可以根據業務需求選擇最適合的引擎。

數據存儲與管理:

  • 引擎決定數據在磁盤上的存儲格式(如 InnoDB 的聚簇索引、MyISAM 的索引與數據分離)。
  • 負責數據文件的組織、緩存和讀取(如 InnoDB 的緩沖池緩存熱點數據)。

事務處理:

  • 原子性(Atomicity):事務中的操作要么全部成功,要么全部失敗。
  • 一致性(Consistency):事務執行前后數據保持一致狀態。
  • 隔離性(Isolation):多個事務并發執行時互不干擾(通過鎖或 MVCC 實現)。
  • 持久性(Durability):事務提交后數據永久保存(通過日志保證)。

2,lnnoDB(默認引擎)

特點如下:

  • 表級鎖:所有操作鎖整張表,并發性能差
  • 不支持事務:不保證數據原子性和持久性。
  • 不支持外鍵:無法強制關聯表間的數據完整性。
  • 索引與數據分離:索引和數據文件分開存儲(.MYI?索引文件、.MYD?數據文件)。
  • 全文索引:支持全文檢索(MySQL 5.6 前 InnoDB 不支持)。

查看所有支持的索引:SHOW ENGINES;

##永久指定mysql引擎,編輯 MySQL 配置文件my.cnf,在[mysqld]部分添加:
[mysqld]
default-storage-engine=InnoDB      指定mysql引擎為InnoDB##創建表時指定引擎
CREATE TABLE my_table (id INT PRIMARY KEY) ENGINE=InnoDB;##查看已有表使用的引擎
mysql> show table status like 'users'\G
*************************** 1. row ***************************Name: usersEngine: InnoDB

適用場景:

  • 高并發事務型業務

  • 數據一致性要求高的場景

  • 高并發讀寫混合場景

  • 大數據量存儲

3,Mylsam(歷史引擎)

特點如下:

  • 表級鎖:所有操作鎖整張表,并發性能差。
  • 不支持事務:不保證數據原子性和持久性。
  • 不支持外鍵:無法強制關聯表間的數據完整性。
  • 索引與數據分離:索引和數據文件分開存儲(.MYI?索引文件、.MYD?數據文件)。
  • 全文索引:支持全文檢索

適用場景:

  • 讀多寫少的靜態數據場景

  • 全文搜索場景

  • 臨時表或統計分析

  • 輕量級應用

六,SQL方面的優化

SQL優化是確保數據庫高效運行的關鍵,其核心在于通過減少資源消耗(如CPU、內存、磁盤 I/0)來提升査詢響應速度,避免慢查詢導致用戶體驗下降或系統崩潰。

  • 準備用于測試的數據庫和表
#創建測試庫
Create database test;#創建用戶表
Use test;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,age INT NOT NULL,created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);#插入 10 萬條測試數據(使用存儲過程生成)
DELIMITER $$
CREATE PROCEDURE insert_users()
BEGINDECLARE i INT DEFAULT 0;WHILE i < 100000 DOINSERT INTO users (name, email, age) VALUES (CONCAT('user', i), CONCAT('user', i, '@example.com'), FLOOR(RAND() * 100));SET i = i + 1;END WHILE;
END$$
DELIMITER ;select * from users;          ##當表里面的數據量非常龐大時,使用此語句查看會非常慢
  • 使用explain對sql優化
mysql> select * from users where name='user111';     
+--------+---------+---------------------+-----+---------------------+
| id     | name    | email               | age | created_at          |
+--------+---------+---------------------+-----+---------------------+
|    112 | user111 | user111@example.com |  38 | 2025-05-09 08:16:12 |
| 100112 | user111 | user111@example.com |  38 | 2025-05-09 08:17:00 |
+--------+---------+---------------------+-----+---------------------+
2 rows in set (0.04 sec)              ##普通查看數據的速度mysql> explain select * from users where name='user111';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | users | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 199578 |    10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)      ##使用explain查看數據的速度
  • 添加索引優化查詢速度
mysql> alter table users add index idx_name(name);   ##添加名為idx_name值為name的索引
Query OK, 0 rows affected (0.24 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> select * from users where name='user111';
+--------+---------+---------------------+-----+---------------------+
| id     | name    | email               | age | created_at          |
+--------+---------+---------------------+-----+---------------------+
|    112 | user111 | user111@example.com |  38 | 2025-05-09 08:16:12 |
| 100112 | user111 | user111@example.com |  38 | 2025-05-09 08:17:00 |
+--------+---------+---------------------+-----+---------------------+
2 rows in set (0.00 sec)              ##驗證并觀看查詢時間

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

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

相關文章

【C#】用 DevExpress 創建帶“下拉子表”的參數表格視圖

展示如何用 DevExpress 創建帶“下拉子表”的參數表格視圖。主表為 參數行 ParamRow&#xff0c;子表為 子項 ChildParam。 一、創建模型類 public class ParamRow {public string Pn { get; set; }public string DisplayName { get; set; }public string Value { get; set; }…

【JavaScript】用 Proxy 攔截對象屬性

目錄 一、Proxy 的基本結構&#xff08;打地基&#xff09; 二、最常用的兩個攔截方法&#xff1a;get 和 set 1. get(target, key) 2. set(target, key, value) 三、說到這&#xff0c;那就可以回到題目來 四、什么是 Reflect&#xff1f; 總結不易&#xff0c;本章節對…

[IMX] 02.GPIO 寄存器

目錄 手冊對應章節 1.GPIO 復用&#xff08;引腳功能選擇&#xff09;- IOMUXC_SW_MUX_CTL_PAD_xxx 2.GPIO 電氣特性 - IOMUXC_SW_PAD_CTL_PAD_xxx 3.GPIO 數據與控制寄存器 3.1.數據 - DR 3.2.輸入/輸出選擇 - GDIR 3.3.狀態 - PSR 3.4.中斷觸發控制 - ICR 3.5.中斷使…

Tomcat 配置 HTTPS 訪問全攻略(CentOS 環境)

Tomcat 配置 HTTPS 訪問全攻略&#xff08;CentOS 環境&#xff09; 一、環境說明 操作系統&#xff1a;CentOS Tomcat 版本&#xff1a;Apache Tomcat/9.0.105 服務器 IP&#xff1a;192.168.1.35 目標&#xff1a;將 Tomcat 默認的 HTTP 訪問升級為 HTTPS&#xff0c;提…

Flink 運維監控與指標采集實戰(Prometheus + Grafana 全流程)

一、引言:為什么 Flink 運維監控如此重要? 在實時計算場景中,Flink 作業 724 小時運行,對性能、資源、故障感知、狀態變化的實時監控非常關鍵。沒有有效的運維可觀測體系: 不知道任務是否在穩定運行 發生問題難以快速定位 無法感知背壓、延遲、反壓等狀態 因此,構建完善…

【prometheus+Grafana篇】基于Prometheus+Grafana實現Oracle數據庫的監控與可視化

&#x1f4ab;《博主主頁》&#xff1a; &#x1f50e; CSDN主頁 &#x1f50e; IF Club社區主頁 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對SQLserver、NoSQL(MongoDB)有了…

【數據倉庫面試題合集③】實時數倉建模思路與實踐詳解

實時數據倉庫已經成為各大企業構建核心指標監控與業務實時洞察的基礎能力。面試中,關于實時建模的題目頻繁出現,尤其聚焦于建模思路、寬表設計、狀態管理、亂序處理等方面。本文整理典型題目及答題思路,幫助你應對相關考察。 一、建模原則與數倉分層認知 1. 實時數倉與離線…

鴻蒙PC操作系統:從Linux到自研微內核的蛻變

鴻蒙PC操作系統是否基于Linux內核,需要結合其技術架構、發展階段和官方聲明綜合分析。以下從多個角度展開論述: 一、鴻蒙操作系統的多內核架構設計 多內核混合架構 根據資料,鴻蒙操作系統(HarmonyOS)采用分層多內核架構,內核層包含Linux內核、LiteOS-m內核、LiteOS-a內核…

LabVIEW數據庫使用說明

介紹LabVIEW如何在數據庫中插入記錄以及執行 SQL 查詢&#xff0c;適用于對數據庫進行數據管理和操作的場景。借助 Database Connectivity Toolkit&#xff0c;可便捷地與指定數據庫交互。 各 VI 功能詳述 左側 VI 功能概述&#xff1a;實現向數據庫表中插入數據的操作。當輸入…

【docker】--docker file編寫教程

文章目錄 構建docker file 鏡像常用命令速查表一、基礎指令&#xff08;指定鏡像和執行命令&#xff09;二、構建上下文管理三、設置鏡像內部環境四、容器運行配置五、多階段構建&#xff08;可選進階&#xff09; 構建docker file 鏡像 # -f 指定dockerfile # -t 鏡像名和tag…

WeakAuras Lua Script <BiaoGe>

WeakAuras Lua Script <BiaoGe> 表格拍賣插件WA字符串 表格字符串代碼&#xff1a; !WA:2!S3xA3XXXrcoE2VH9l7ZFy)C969PvDpSrRgaeuhljFlUiiSWbxaqXDx(4RDd0vtulB0fMUQMhwMZJsAO5HenLnf1LPSUT4iBrjRzSepL(pS)e2bDdWp5)cBEvzLhrMvvnAkj7zWJeO7mJ8kYiJmYiImYF0b(XR)JR9JRD…

虛幻引擎5-Unreal Engine筆記之什么時候新建GameMode,什么時候新建關卡?

虛幻引擎5-Unreal Engine筆記之什么時候新建GameMode,什么時候新建關卡&#xff1f; code review! 參考筆記&#xff1a; 1.虛幻引擎5-Unreal Engine筆記之GameMode、關卡&#xff08;Level&#xff09; 和 關卡藍圖&#xff08;Level Blueprint&#xff09;的關系 2.虛幻引擎…

開源模型應用落地-模型上下文協議(MCP)-Resource Template-資源模板的使用邏輯(六)

一、前言 在數字化進程加速的今天,如何高效管理動態資源已成為開發者們的核心課題。Resource Template(資源模板)作為Model Context Protocol(MCP)中的關鍵機制,正通過參數化設計重新定義資源調用的邊界——它不僅是靜態數據的容器,更是動態上下文生成的引擎。與傳統的R…

uniapp小程序獲取手機設備安全距離

utils.js let systemInfo null;export const getSystemInfo () > {if (!systemInfo) {systemInfo uni.getSystemInfoSync();// 補充安全區域默認值systemInfo.safeAreaInsets systemInfo.safeAreaInsets || {top: 0,bottom: 0,left: 0,right: 0};// 確保statusBarHei…

【線下沙龍】NineData x Apache Doris x 阿里云聯合舉辦數據庫技術Meetup,5月24日深圳見!

5月24日下午&#xff0c;NineData 將聯合 Apache Doris、阿里云一起&#xff0c;在深圳舉辦數據庫技術Meetup。本次技術沙龍聚焦「數據實時分析」與「數據同步遷移」 兩大核心領域&#xff0c;針對企業數據戰略中的痛點&#xff0c;特邀行業資深技術大咖&#xff0c;結合多年技…

企業網站架構部署與優化 --web技術與nginx網站環境部署

一、Web 基礎 本節將介紹Web 基礎知識,包括域名的概念、DNS 原理、靜態網頁和動態網頁的 相關知識。 1、域名和DNS 1.1、域名的概念 網絡是基于TCP/IP 協議進行通信和連接的&#xff0c;每一臺主機都有一個唯一的標識(固定的IP 地址),用以區別在網絡上成千上萬個用戶和計算機。…

java實現poi-ooxml導出Excel的功能

文章目錄 1. 添加poi-ooxml依賴2. Excel導出工具類3.核心邏輯說明4.擴展建議5.HSSF、XSSF、SXSSF 的核心原則和場景建議&#xff0c;幫助你在不同需求下快速決策&#xff1a; 以下是一個基于 Apache POI 實現的簡單、通用的Java導出Excel工具類&#xff0c;代碼邏輯清晰且注釋詳…

Nginx端口telnet不通排查指南

nginx已經配置server及端口20002&#xff0c;telnet不通&#xff1a;telnet 127.0.0.1 20002 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused 一、檢查 systemctl status nginx.service nginx: [emerg] bind() to 0.0.0.0:20002 failed (13…

【RabbitMQ】消息丟失問題排查與解決

RabbitMQ 消息丟失是一個常見的問題&#xff0c;可能發生在消息的生產、傳輸、消費或 Broker 端等多個環節。消息丟失的常見原因及對應的解決方案&#xff1a; 一、消息丟失的常見原因 1. 生產端&#xff08;Producer&#xff09;原因 (1) 消息未持久化 原因&#xff1a;生產…

docker默認存儲遷移

在容器化場景下默認存儲路徑為&#xff08;/var/lib/docker&#xff09;大多數平臺根目錄不支持系統盤擴容&#xff0c;會有空間不足風險隱患&#xff0c;因未配置持久化存儲導致容器數據丟失。以遷移Docker存儲路徑至大容量/data目錄說明 一、停止容器 systemctl stop docke…