【MySQL】檔案描述符導致報警一則
下午收到報警:
xxxxxx:[didb..,][master,slave]/home used:94% free:0.6G 2014-01-12 16:42:40 DutyReceived!
【現象】
登陸機器檢視:
[root@xxxxx /root]
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 92G 4.2G 83G 5% /
/dev/sda6 9.6G 8.5G 626M 94% /home
可是到/home 目錄執行命令:
[root@xxxxx /home]
#du -sh ./* | grep G
[root@xxxxx /home]
#du -sh ./* | grep M
728M ./admin
170M ./tops
【分析】
/home 目錄並沒有佔用8.5G空間。這是怎麼回事?仔細思考一下之前的操作,我在沒有關閉nignix程式的情況下 rm access.log 這裡有必要介紹一下檔案描述符
"檔案描述符是一個簡單的整數,用以標明每一個被程式所開啟的檔案和sock.最前面的三個檔案描述符:0 1 2分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。"
在程式沒有被關閉的情況下,手工刪除了檔案,但是檔案控制程式碼還是被程式佔用,導致上面的奇怪現象:df -h檢視磁碟空間被佔用,檢視具體佔用空間確很小。使用 lsof | grep deleted 可以檢視被刪除但是依然被程式佔用檔案控制程式碼檔案。
【解決】
針對報警解決方式 殺掉佔用檔案控制程式碼的程式即可
[root@xxxxx /home/admin/cai/bin]
#lsof | grep access.log
nginx-pro 3428 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3429 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3430 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3431 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
[root@xxxxx /home/admin/cai/bin]
#kill -9 3428
[root@xxxxx /home/admin/cai/bin]
#kill -9 3429
[root@xxxxx /home/admin/cai/bin]
#kill -9 3430
[root@xxxxx /home/admin/cai/bin]
#kill -9 3431
[root@xxxxx /home/admin/cai/bin]
#lsof | grep access.log
[root@xxxxx /home/admin/cai/bin]
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 92G 4.2G 83G 5% /
/dev/sda6 9.6G 1.2G 7.9G 13% /home
如何徹底解決?
可以透過設定crontab 命令 cat /dev/null > access.log 定期清理,而非選擇rm 的方式。
【擴充】
在資料庫運維過程中,如果遇到rm,drop 誤刪除表或者資料檔案等操作,在db 沒有關閉情況下 檢查/proc檔案系統是否存在被誤刪除的檔案控制程式碼,如果有,立即從其檔案描述符恢復。
1 檔案描述符file descriptor與inode的相關知識
2 lsof 應用例項分享以及Oracle 資料檔案刪除恢復測試
xxxxxx:[didb..,][master,slave]/home used:94% free:0.6G 2014-01-12 16:42:40 DutyReceived!
【現象】
登陸機器檢視:
[root@xxxxx /root]
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 92G 4.2G 83G 5% /
/dev/sda6 9.6G 8.5G 626M 94% /home
可是到/home 目錄執行命令:
[root@xxxxx /home]
#du -sh ./* | grep G
[root@xxxxx /home]
#du -sh ./* | grep M
728M ./admin
170M ./tops
【分析】
/home 目錄並沒有佔用8.5G空間。這是怎麼回事?仔細思考一下之前的操作,我在沒有關閉nignix程式的情況下 rm access.log 這裡有必要介紹一下檔案描述符
"檔案描述符是一個簡單的整數,用以標明每一個被程式所開啟的檔案和sock.最前面的三個檔案描述符:0 1 2分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。"
在程式沒有被關閉的情況下,手工刪除了檔案,但是檔案控制程式碼還是被程式佔用,導致上面的奇怪現象:df -h檢視磁碟空間被佔用,檢視具體佔用空間確很小。使用 lsof | grep deleted 可以檢視被刪除但是依然被程式佔用檔案控制程式碼檔案。
【解決】
針對報警解決方式 殺掉佔用檔案控制程式碼的程式即可
[root@xxxxx /home/admin/cai/bin]
#lsof | grep access.log
nginx-pro 3428 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3429 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3430 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
nginx-pro 3431 admin 5w REG 8,6 7689831446 313 /home/admin/cai/logs/access.log (deleted)
[root@xxxxx /home/admin/cai/bin]
#kill -9 3428
[root@xxxxx /home/admin/cai/bin]
#kill -9 3429
[root@xxxxx /home/admin/cai/bin]
#kill -9 3430
[root@xxxxx /home/admin/cai/bin]
#kill -9 3431
[root@xxxxx /home/admin/cai/bin]
#lsof | grep access.log
[root@xxxxx /home/admin/cai/bin]
#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 92G 4.2G 83G 5% /
/dev/sda6 9.6G 1.2G 7.9G 13% /home
如何徹底解決?
可以透過設定crontab 命令 cat /dev/null > access.log 定期清理,而非選擇rm 的方式。
【擴充】
在資料庫運維過程中,如果遇到rm,drop 誤刪除表或者資料檔案等操作,在db 沒有關閉情況下 檢查/proc檔案系統是否存在被誤刪除的檔案控制程式碼,如果有,立即從其檔案描述符恢復。
1 檔案描述符file descriptor與inode的相關知識
2 lsof 應用例項分享以及Oracle 資料檔案刪除恢復測試
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-1069785/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sock鎖檔案導致的MySQL啟動失敗MySql
- 檔案描述符
- 一次意外斷電導致mysql檔案損壞,啟動異常MySql
- Linux檔案描述符Linux
- 檔案描述符和檔案系統
- 報警系統QuickAlarm之報警規則解析UI
- 檔案包含之包含了Linux檔案描述符Linux
- 一文幫你搞懂 Android 檔案描述符Android
- linux中的檔案描述符Linux
- Oracle歸檔檔案丟失導致OGG不用啟動Oracle
- windows 檔案描述符 _open_osfhandleWindows
- innodb_undo_tablespaces導致Mysql啟動報錯MySql
- MySQL 網路導致的複製報錯案例MySql
- 記錄連線數導致警報失效,連線池少問題
- Linux--檔案描述符、檔案指標、索引節點Linux指標索引
- ORACLE for windows 審計檔案xml檔案過多導致資料庫啟動報錯ORA-09925OracleWindowsXML資料庫
- 因為init_command 導致的 mysql 5.6 主從連線失敗的案例一則。MySql
- HiveServer2 檔案描述符洩漏HiveServer
- MySQL Insert資料量過大導致報錯 MySQL server has gone awayMySqlServerGo
- 分散式檔案上傳導致服務假死了?分散式
- linux一切皆檔案之Unix domain socket描述符(二)LinuxAI
- prometheus配置MySQL郵件報警PrometheusMySql
- NFS導致的目標端檔案系統不可讀NFS
- Windows NFS 真弱 → 中文亂碼導致檔案找不到WindowsNFS
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- 記錄一次 HotPE 導致的檔案系統損壞及修復
- nginx的檔案描述符的學習之二Nginx
- MicrosoftEdge同源策略不嚴導致任意檔案讀取測試ROS
- WPF App後臺檔案彈窗導致奇怪的問題APP
- Windows 10最新零日漏洞:可導致任意檔案被覆寫Windows
- 網路安全中檔案上傳漏洞是如何導致的?
- MySQL:Analyze table導致'waiting for table flush'MySqlAI
- 記一次檔案亂碼導致PHP原始碼被直接輸出問題PHP原始碼
- MySQL8.0的一個bug導致複製延時MySql
- 故障分析 | 大量短時程式導致 cpu 負載過高案例一則負載
- 記一次 hosts 檔案配置錯誤導致應用卡頓的奇葩問題
- Mysql 會導致索引失效的情況MySql索引
- MySQL:MySQL客戶端快取結果導致OOMMySql客戶端快取OOM
- MySQL:一次timestamp時區轉換導致的問題MySql