MySQL故障排查與運(yùn)維案例詳解
MySQL故障排查與運(yùn)維案例全集
一、連接類故障
1. 連接超時(shí)
現(xiàn)象:ERROR 2003 (HY000): Can't connect to MySQL server on 'host' (110 "Connection timed out")
排查流程:
# 檢查網(wǎng)絡(luò)連通性 nc -zv host 3306 mtr host # 檢查防火墻 iptables -L -n | grep 3306 # 驗(yàn)證連接數(shù)限制 SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';
2. 認(rèn)證失敗
案例:升級(jí)后密碼策略變更導(dǎo)致應(yīng)用連接失敗
解決方案:
-- 創(chuàng)建傳統(tǒng)認(rèn)證用戶 CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; -- 臨時(shí)降低密碼強(qiáng)度 SET GLOBAL validate_password_policy=LOW;
二、性能類故障
1. CPU 100%問題
診斷步驟:
-- 查找高消耗SQL SELECT * FROM sys.processlist WHERE COMMAND != 'Sleep' ORDER BY TIME DESC; -- 使用Performance Schema SELECT * FROM performance_schema.threads WHERE PROCESSLIST_TIME > 60\G -- 分析慢查詢 SHOW ENGINE INNODB STATUS;
2. 慢查詢優(yōu)化案例
場(chǎng)景:訂單查詢超時(shí)
調(diào)優(yōu)方案:
-- 添加復(fù)合索引
ALTER TABLE orders ADD INDEX idx_customer_status (customer_id, status);
-- 重寫查詢語句
SELECT /*+ INDEX(idx_customer_status) */ * FROM orders
WHERE customer_id=123 AND status IN ('shipped','completed');三、復(fù)制類故障
1. 主從數(shù)據(jù)不一致
檢測(cè)工具:
# 安裝校驗(yàn)工具 wget https://downloads.percona.com/downloads/percona-toolkit/3.5.0/binary/tarball/percona-toolkit-3.5.0_x86_64.tar.gz # 數(shù)據(jù)一致性校驗(yàn) pt-table-checksum -h master -u user -p pass --databases mydb
2. 主從延遲
優(yōu)化方案:
# my.cnf 優(yōu)化 [mysqld] slave_parallel_workers = 8 slave_pending_jobs_size_max = 2G innodb_flush_log_at_trx_commit = 0 sync_binlog = 1000
四、數(shù)據(jù)恢復(fù)類
1. 誤刪除恢復(fù)
步驟:
# 停止MySQL服務(wù) systemctl stop mysqld # 使用mysqlbinlog恢復(fù) mysqlbinlog --start-position=107 /var/log/mysql-bin.000001 | mysql -uroot -p # 使用延時(shí)從庫恢復(fù) STOP SLAVE; CHANGE MASTER TO MASTER_DELAY = 3600; START SLAVE;
2. 分區(qū)表數(shù)據(jù)丟失
案例:DROP PARTITION誤操作
解決方案:
-- 從備份恢復(fù)單分區(qū)
ALTER TABLE logs IMPORT PARTITION p202301
FROM '/backup/202301_partition.ibd';
五、高可用故障
1. MHA切換失敗
診斷流程:
# 檢查SSH互信 masterha_check_ssh --conf=/etc/mha/app1.cnf # 檢查復(fù)制健康 masterha_check_repl --conf=/etc/mha/app1.cnf # 查看管理日志 tail -f /var/log/masterha/app1/manager.log
2. InnoDB Cluster腦裂
修復(fù)方案:
-- 強(qiáng)制重啟集群
dba.rebootClusterFromCompleteOutage('cluster1');
-- 人工重新組集群
SELECT * FROM performance_schema.replication_group_members;六、存儲(chǔ)引擎故障
1. InnoDB損壞修復(fù)
修復(fù)步驟:
# 強(qiáng)制恢復(fù)模式啟動(dòng) innodb_force_recovery = 6 # 導(dǎo)出數(shù)據(jù) mysqldump -uroot -p --all-databases > full_backup.sql # 重建數(shù)據(jù)庫 mysql_install_db --user=mysql systemctl start mysqld mysql -uroot -p < full_backup.sql
七、內(nèi)存問題
1. OOM崩潰
優(yōu)化方案:
# my.cnf內(nèi)存優(yōu)化 [mysqld] innodb_buffer_pool_size=64G key_buffer_size=0 query_cache_size=0 table_open_cache=20000
八、安全相關(guān)
1. 入侵檢測(cè)
處理流程:
-- 查找異常賬號(hào) SELECT * FROM mysql.user WHERE authentication_string='' \G -- 檢查數(shù)據(jù)庫文件權(quán)限 ls -l /var/lib/mysql -- 審計(jì)可疑操作 mysqlbinlog /var/log/mysql-bin.000007 | grep -i 'ALTER\|CREATE\|DROP'
九、備份恢復(fù)
1. 大庫備份優(yōu)化
# Xtrabackup部分備份 xtrabackup --backup --databases="db1 db2" --target-dir=/backup/partial # mysqldump分片備份 mysqldump -uroot -p db1 | split -b 2G - db1_part_
十、升級(jí)問題
1. 5.7升級(jí)8.0兼容問題
解決方案:
-- 開啟兼容SQL模式 SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; -- 移除廢棄功能 ALTER TABLE mytable ROW_FORMAT=DYNAMIC;
十一、配置錯(cuò)誤
1. 參數(shù)誤設(shè)置
恢復(fù)方法:
# 安全模式啟動(dòng),高版本中不可用 mysqld_safe --skip-grant-tables --skip-networking & # 重置配置 SET GLOBAL max_connections=100; FLUSH PRIVILEGES;
十二、工具速查表
| 工具名稱 | 使用場(chǎng)景 | 命令示例 |
|---|---|---|
| pt-query-digest | 慢日志分析 | pt-query-digest slow.log > report.txt |
| mysqladmin | 進(jìn)程管理 | mysqladmin -u root -p processlist |
| Percona Toolkit | 運(yùn)維工具包 | pt-online-schema-change |
| Mylogger | 實(shí)時(shí)審計(jì) | mylogger -u root -p pass -h localhost |
| MySQL Shell | InnoDB Cluster管理 | dba.checkInstanceConfiguration() |
十三、關(guān)鍵監(jiān)控指標(biāo)
| 指標(biāo) | 報(bào)警閾值 | 獲取方式 |
|---|---|---|
| 連接使用率 | > 85% | Threads_connected/max_connections |
| 復(fù)制延遲(秒) | > 60 | SHOW SLAVE STATUS |
| InnoDB緩沖池命中率 | < 95% | (1 - Innodb_pages_read/Innodb_buffer_pool_read_requests)*100 |
| 臨時(shí)表磁盤使用 | > 1G | Created_tmp_disk_tables |
| 鎖等待時(shí)間(秒) | > 5 | SHOW ENGINE INNODB STATUS |
十四、災(zāi)難恢復(fù)流程
- 立即停止服務(wù):
systemctl stop mysqld - 保護(hù)現(xiàn)場(chǎng):拷貝數(shù)據(jù)目錄和日志文件
- 評(píng)估損壞:
innochecksum -v /var/lib/mysql/ibdata1 mysqlcheck --all-databases
- 選擇恢復(fù)方案:
- 從主備份恢復(fù)
- 使用Binlog增量恢復(fù)
- 重建數(shù)據(jù)庫結(jié)構(gòu)
- 驗(yàn)證完整性:
pt-table-checksum - 灰度恢復(fù)服務(wù)
十五、最佳實(shí)踐總結(jié)
- 備份策略:
- 每天全備 + Binlog實(shí)時(shí)同步
- 備份恢復(fù)演練每月一次
- 高可用架構(gòu):

- 參數(shù)調(diào)優(yōu)原則:
- buffer_pool_size = 系統(tǒng)內(nèi)存的70-80%
- max_connections = (最大連接數(shù)+冗余)
- sync_binlog = 1 (數(shù)據(jù)安全) / 1000 (性能優(yōu)先)
- 安全基線:
- 禁用local-infile
- 刪除test數(shù)據(jù)庫
- 啟用SSL連接
- 審計(jì)插件開啟
黃金準(zhǔn)則:
- 任何參數(shù)修改前進(jìn)行
SET GLOBAL測(cè)試- 維護(hù)窗口操作必須有回滾計(jì)劃
- 生產(chǎn)環(huán)境變更遵循"變更三板斧":方案評(píng)審->灰度實(shí)施->結(jié)果驗(yàn)證
到此這篇關(guān)于MySQL故障排查與運(yùn)維案例的文章就介紹到這了,更多相關(guān)mysql故障排查與運(yùn)維內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux系統(tǒng)利用crontab定時(shí)備份Mysql數(shù)據(jù)庫方法
本文教你如果快速利用系統(tǒng)crontab來定時(shí)執(zhí)行備份文件,按日期對(duì)備份結(jié)果進(jìn)行保存2021-09-09
MySQL 配置免密碼登錄的問題記錄(mysql_config_editor Configurati
這篇文章主要介紹了MySQL 配置免密碼登錄的問題記錄(mysql_config_editor Configuration),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
mysql數(shù)據(jù)庫超過最大連接數(shù)的解決方法
當(dāng)mysql超過最大連接數(shù)時(shí),會(huì)報(bào)錯(cuò)”Too many connections”,本文主要介紹了mysql數(shù)據(jù)庫超過最大連接數(shù)的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
Linux下mysql 5.6.17安裝圖文教程詳細(xì)版
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.6.17安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實(shí)例
mysql在5.7開始支持json解析了,也可以解析數(shù)組,下面這篇文章主要給大家介紹了關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
CentOS7安裝MySQL?8.4?+?Navicat遠(yuǎn)程連接新手教程
Navicat是高效數(shù)據(jù)庫管理工具,支持多數(shù)據(jù)庫操作,遠(yuǎn)程連接MySQL是常見的一種功能,這篇文章主要介紹了CentOS7安裝MySQL?8.4?+?Navicat遠(yuǎn)程連接的相關(guān)資料,需要的朋友可以參考下2025-12-12
Mysql中InnoDB與MyISAM索引差異詳解(最新整理)
InnoDB和MyISAM在索引實(shí)現(xiàn)和特性上有差異,包括聚集索引、非聚集索引、事務(wù)支持、并發(fā)控制、覆蓋索引、主鍵約束、外鍵支持和物理存儲(chǔ)結(jié)構(gòu)等方面,InnoDB更適合事務(wù)型應(yīng)用,而MyISAM適合只讀或讀多寫少的場(chǎng)景,本文介紹Mysql中InnoDB與MyISAM索引差異,感興趣的朋友一起看看吧2025-03-03
新建一個(gè)MySQL數(shù)據(jù)庫的簡(jiǎn)單教程
這篇文章主要介紹了新建一個(gè)MySQL數(shù)據(jù)庫的簡(jiǎn)單教程,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05

