MySQL故障排查與運維案例詳解
MySQL故障排查與運維案例全集
一、連接類故障
1. 連接超時
現(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 # 驗證連接數(shù)限制 SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';
2. 認(rèn)證失敗
案例:升級后密碼策略變更導(dǎo)致應(yīng)用連接失敗
解決方案:
-- 創(chuàng)建傳統(tǒng)認(rèn)證用戶 CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; -- 臨時降低密碼強度 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)化案例
場景:訂單查詢超時
調(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ù)不一致
檢測工具:
# 安裝校驗工具 wget https://downloads.percona.com/downloads/percona-toolkit/3.5.0/binary/tarball/percona-toolkit-3.5.0_x86_64.tar.gz # 數(shù)據(jù)一致性校驗 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 # 使用延時從庫恢復(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ù)方案:
-- 強制重啟集群
dba.rebootClusterFromCompleteOutage('cluster1');
-- 人工重新組集群
SELECT * FROM performance_schema.replication_group_members;六、存儲引擎故障
1. InnoDB損壞修復(fù)
修復(fù)步驟:
# 強制恢復(fù)模式啟動 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. 入侵檢測
處理流程:
-- 查找異常賬號 SELECT * FROM mysql.user WHERE authentication_string='' \G -- 檢查數(shù)據(jù)庫文件權(quán)限 ls -l /var/lib/mysql -- 審計可疑操作 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_
十、升級問題
1. 5.7升級8.0兼容問題
解決方案:
-- 開啟兼容SQL模式 SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; -- 移除廢棄功能 ALTER TABLE mytable ROW_FORMAT=DYNAMIC;
十一、配置錯誤
1. 參數(shù)誤設(shè)置
恢復(fù)方法:
# 安全模式啟動,高版本中不可用 mysqld_safe --skip-grant-tables --skip-networking & # 重置配置 SET GLOBAL max_connections=100; FLUSH PRIVILEGES;
十二、工具速查表
| 工具名稱 | 使用場景 | 命令示例 |
|---|---|---|
| pt-query-digest | 慢日志分析 | pt-query-digest slow.log > report.txt |
| mysqladmin | 進(jìn)程管理 | mysqladmin -u root -p processlist |
| Percona Toolkit | 運維工具包 | pt-online-schema-change |
| Mylogger | 實時審計 | mylogger -u root -p pass -h localhost |
| MySQL Shell | InnoDB Cluster管理 | dba.checkInstanceConfiguration() |
十三、關(guān)鍵監(jiān)控指標(biāo)
| 指標(biāo) | 報警閾值 | 獲取方式 |
|---|---|---|
| 連接使用率 | > 85% | Threads_connected/max_connections |
| 復(fù)制延遲(秒) | > 60 | SHOW SLAVE STATUS |
| InnoDB緩沖池命中率 | < 95% | (1 - Innodb_pages_read/Innodb_buffer_pool_read_requests)*100 |
| 臨時表磁盤使用 | > 1G | Created_tmp_disk_tables |
| 鎖等待時間(秒) | > 5 | SHOW ENGINE INNODB STATUS |
十四、災(zāi)難恢復(fù)流程
- 立即停止服務(wù):
systemctl stop mysqld - 保護(hù)現(xiàn)場:拷貝數(shù)據(jù)目錄和日志文件
- 評估損壞:
innochecksum -v /var/lib/mysql/ibdata1 mysqlcheck --all-databases
- 選擇恢復(fù)方案:
- 從主備份恢復(fù)
- 使用Binlog增量恢復(fù)
- 重建數(shù)據(jù)庫結(jié)構(gòu)
- 驗證完整性:
pt-table-checksum - 灰度恢復(fù)服務(wù)
十五、最佳實踐總結(jié)
- 備份策略:
- 每天全備 + Binlog實時同步
- 備份恢復(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連接
- 審計插件開啟
黃金準(zhǔn)則:
- 任何參數(shù)修改前進(jìn)行
SET GLOBAL測試- 維護(hù)窗口操作必須有回滾計劃
- 生產(chǎn)環(huán)境變更遵循"變更三板斧":方案評審->灰度實施->結(jié)果驗證
到此這篇關(guān)于MySQL故障排查與運維案例的文章就介紹到這了,更多相關(guān)mysql故障排查與運維內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux系統(tǒng)利用crontab定時備份Mysql數(shù)據(jù)庫方法
本文教你如果快速利用系統(tǒng)crontab來定時執(zhí)行備份文件,按日期對備份結(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ù)時,會報錯”Too many connections”,本文主要介紹了mysql數(shù)據(jù)庫超過最大連接數(shù)的解決方法,具有一定的參考價值,感興趣的可以了解一下2023-12-12
Linux下mysql 5.6.17安裝圖文教程詳細(xì)版
這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.6.17安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實例
mysql在5.7開始支持json解析了,也可以解析數(shù)組,下面這篇文章主要給大家介紹了關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(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在索引實現(xiàn)和特性上有差異,包括聚集索引、非聚集索引、事務(wù)支持、并發(fā)控制、覆蓋索引、主鍵約束、外鍵支持和物理存儲結(jié)構(gòu)等方面,InnoDB更適合事務(wù)型應(yīng)用,而MyISAM適合只讀或讀多寫少的場景,本文介紹Mysql中InnoDB與MyISAM索引差異,感興趣的朋友一起看看吧2025-03-03

