【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
- 一則備庫CPU報警的思考
- 報警系統QuickAlarm之報警規則解析UI
- 一次意外斷電導致mysql檔案損壞,啟動異常MySql
- 檔案描述符和檔案系統
- Linux檔案描述符Linux
- Oracle升級導致ocr檔案損壞一例Oracle
- 【案例】BNL演算法導致效能下降一則演算法
- MySQL 網路導致的複製報錯案例MySql
- innodb_undo_tablespaces導致Mysql啟動報錯MySql
- 檔案描述符、開啟檔案表以及inode
- Linux下檔案描述符Linux
- Latch導致MySQL CrashMySql
- Android專案檔案編碼 導致的ErrorAndroidError
- 10.2.3 python檔案附加導致的迷案Python
- 檔案包含之包含了Linux檔案描述符Linux
- 一文幫你搞懂 Android 檔案描述符Android
- prometheus配置MySQL郵件報警PrometheusMySql
- windows 檔案描述符 _open_osfhandleWindows
- 專案報警機制
- 【MySQL】一條SQL使磁碟暴漲並導致MySQL CrashMySql
- 效能調整一則:buffer busy waits導致主要issueAI
- MySQL Insert資料量過大導致報錯 MySQL server has gone awayMySqlServerGo
- Oracle歸檔檔案丟失導致OGG不用啟動Oracle
- ORACLE for windows 審計檔案xml檔案過多導致資料庫啟動報錯ORA-09925OracleWindowsXML資料庫
- linux系統程式設計之檔案與IO(一):檔案描述符、open,closeLinux程式設計
- 分散式檔案上傳導致服務假死了?分散式
- 引入外部js檔案導致亂碼解決方案JS
- MTU問題導致大檔案傳輸速度很慢
- 因為init_command 導致的 mysql 5.6 主從連線失敗的案例一則。MySql
- Linux 檔案描述符和重定向Linux
- 基於檔案描述符的恢復
- dup函式:複製檔案描述符函式
- Linux--檔案描述符、檔案指標、索引節點Linux指標索引
- 【Mysql】vm.overcommit_memory導致的mysql啟動記憶體報錯MySqlMIT記憶體
- 記一次:歸檔檔案系統問題導致資料庫hang處理資料庫
- 一次密碼檔案丟失導致的dataguard複製中斷密碼
- 【shell】根據檔案時間有無更新進行報警