記一次一波三折的Mysql故障處理
環境:
Mysql 8.0.24 雙主+keepalived
問題現象:
同事反饋某套mysql資料庫連線失敗,嘗試重啟資料庫無法啟動。
問題分析:
遠端登入伺服器,嘗試檢查error日誌,發現cd無法進入到mysql目錄,ls和df命令無返回結果,卡住不動。
檢查歷史命令,發現近期有調整過本地路由。
問題原因:
由於mysql目錄是透過nas儲存掛載到本地,由於本地路由的調整,
導致資料庫伺服器和NAS網路不通,
最終導致mysql目錄掛載失敗,無法讀取到mysql對應檔案。
解決方案:
聯絡同事改回原路由配置,並同時重啟了伺服器。
問題再起:
同事重啟伺服器後反饋資料庫可以連線了,但是沒資料了,庫也沒了?
遠端登入到資料庫伺服器,發現當前啟動的mysqld程式,
不是手動安裝的mysql,而是系統自帶的mysql,應該啟動的是手動安裝的mysql。
ps -ef|grep mysql
檢查當前mysql狀態
systemctl status mysqld.service
停止系統自帶mysql服務
systemctl stop mysqld.service
禁用開機自啟動
systemctl disable mysqld.service
手動啟動mysql
###mysqld --defaults-file=/etc/my.cnf --user=mysql &
啟動keepalived
systemctl start keepalived.service
同事反饋可以正常使用了。
問題再再起:
過了一週後,同事反饋從庫資料不對,少了很多新資料。
登入伺服器檢查發現slave程式居然沒啟動。
mysql> show slave status \G;
之前記得mysql啟動時會自動啟動salve程式的,難道8.0.24版本預設是不啟動slave程式?
由於對應系統之前還沒有上線,之前在啟動資料庫後也沒有仔細檢查主從同步情況。
檢查my.cnf配置,發現設定了skip_slave_start,不自動啟動slave。
cat /etc/my.cnf|grep skip
skip-slave-start=1
mysql -uroot -p
Enter password:
mysql> show variables like '%skip_slave_start%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| skip_slave_start | ON |
+------------------+-------+
1 row in set (0.01 sec)
資料庫架構是雙主架構,兩臺mysql均沒有啟動slave。
解決過程如下:
雖然當前是雙主架構,但vip只存在一個節點上,也就是隻有一個節點對外提供服務,
使用雙主+keepalived的架構主要是為了故障自動切換功能。
所以兩套mysql還是區分主從的。
1.檢查主從資料庫binlog保留時間。
2.檢查需要的binglog是否存在。
3.先恢復從庫slave。
4.待從庫slave正常後,在恢復主庫的slave。
1.檢查主從資料庫binlog保留時間。
檢視binlog過期時間為30天。
mysql> show variables like 'binlog_expire_logs_seconds';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+
1 row in set (0.01 sec)
2.檢查需要的binglog是否存在。
主從都需要檢查。
需要mysql-bin.000007開始的binlog日誌。
mysql> show slave status\G;
...
Master_Log_File: mysql-bin.000007
檢查binlog日誌無丟失
ls -lrth mysql-bin.*
-rw-r----- 1 mysql mysql 129K Oct 19 09:39 mysql-bin.000007
-rw-r----- 1 mysql mysql 259 Oct 19 09:51 mysql-bin.000008
-rw-r----- 1 mysql mysql 259 Oct 19 09:53 mysql-bin.000009
-rw-r----- 1 mysql mysql 283 Oct 19 09:54 mysql-bin.000010
-rw-r----- 1 mysql mysql 259 Oct 19 09:54 mysql-bin.000011
-rw-r----- 1 mysql mysql 270 Oct 19 09:54 mysql-bin.index
-rw-r----- 1 mysql mysql 225M Oct 28 09:55 mysql-bin.000012
3.先恢復從庫slave。
mysql> start slave;
mysql> show slave status\G;
觀察Slave_IO_Running和Slave_SQL_Running均由No變為Yes。
並且Seconds_Behind_Master值逐漸變小。
4.待從庫slave正常後,在恢復主庫的slave。
待從庫Seconds_Behind_Master值變為0後,開始啟動主庫slave。
mysql> start slave;
mysql> show slave status\G;
由於之前從庫資料已經同步完成,此時主庫同步速度很快就完成了。
#####chenjuchao 20211028 12:50#####
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2839459/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記一次一波三折的Oracle RAC故障處理Oracle
- MySQL show processlist故障處理MySql
- 【故障處理】ORA-600:[13013],[5001]故障處理
- 微服務的故障處理微服務
- linux故障處理Linux
- 故障分析 | Greenplum Segment 故障處理
- 專案02(Mysql gtid複製故障處理01)MySql
- 記一次 MySQL 資料庫單表恢復事故處理MySql資料庫
- GPON網路故障如何處理?GPON網路故障處理流程
- 一次詭異的MySQL問題處理故事MySql
- 線上MYSQL同步報錯故障處理方法總結MySql
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- 記一次PMML檔案的處理過程
- Oracle更新Opatch故障處理Oracle
- teams登入故障處理
- 故障分析 | MySQL convert 函式導致的字符集報錯處理MySql函式
- hbase 故障的處理方案。 (轉載文章)
- NO.A.0001——zabbix常見故障的處理
- 記一次ceph pg unfound處理過程
- 線上故障處理手冊
- MySQL:簡單記錄訊號處理MySql
- 記一次Ubuntu網路故障Ubuntu
- 一波三折!記一次非堆記憶體洩漏(CXF+Jackson)的排查記憶體
- 記一次Nodejs安全工單的處理過程_20171226NodeJS
- 一次生產環境的docker MySQL故障DockerMySql
- TS - 處理故障的一些通用方法
- 記一次處理達夢慢SQL問題SQL
- Oracle 記一次ORA-00001問題處理Oracle
- 一次徹底講清如何處理mysql 的死鎖問題MySql
- 記一次Kafka叢集的故障恢復Kafka
- 記一次詭異的故障排查經歷
- 記一次自動恢復的支付故障
- MySQL的表碎片處理MySql
- 【故障處理】TNS-04610問題
- GaussDB(分散式)例項故障處理分散式
- Oracle 10g RAC故障處理Oracle 10g
- ORA-01591錯誤故障處理
- 如何處理HTTP 503故障問題?HTTP