標籤:
網站總是掛掉,查看到原來是mysql總是莫名其妙的掛掉
1.查看mysql日誌的位置
mysql> show VARIABLES like ‘%log%‘;+-----------------------------------------+------------------------------------- ----------+| Variable_name | Value |+-----------------------------------------+------------------------------------- || log_error | /var/log/mysqld.log || log_output | FILE | |+-----------------------------------------+------------------------------------- ----------+41 rows in set (0.05 sec)
可得知mysql記錄檔位於/var/log/mysqld.log
2.使用vim /var/log/mysqld.log 查看錯誤記錄檔最後面發現如下內容
150401 15:10:17 [ERROR] /usr/local/mysql/bin/mysqld: Disk is full writing ‘./erqilu_87/pw_log_userdefend.MYD‘ (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space)
原來是磁碟空間滿了
3.查看磁碟空間
[[email protected] ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/xvda1 20G 20G 12M 100% /tmpfs 498M 0 498M 0% /dev/shm/dev/xvdb1 69G 21G 45G 32% /home
原來真的是爆滿啊。。。。
4.查看具體那些檔案佔用了磁碟空間
[[email protected] ~]# du -h --max-depth=1 /4.1G /var4.1G /root97M /lib156M /tmp21G /home11M /sbin0 /opt6.2M /bin6.5G /usr30G /
du 命令補習班{ du -h --max-depth=1 / 這句話的意思是列舉出(du)“/”目錄下深度為一個檔案夾(--max-depth=1)的檔案夾的大小並且以人能夠看懂的方式表現(-h)也就是M,G,KB什麼的 }
可以看到home檔案夾最大,不過這個檔案夾在第2步的時候已經知道了不是和mysql的檔案掛在在同一個磁碟的
其次就是/usr檔案夾還有/var檔案夾
5.解決/usr檔案夾的容量問題
依然使用du命令查看/usr檔案夾
發現原來是/usr/local/nginx/logs檔案夾中的nginx的記錄檔太大了而且還有以前用vim開啟的時候因為沒有正確關閉而導致的swp檔案,整個/usr/nginx/logs檔案夾整整有6.4G
首先刪除所有的swp檔案和swo檔案,一下子就清爽了許多
然後想著要週期性刪除以下log檔案,涉及到的知識有logrotate日誌管理工具(參見我的另一篇日誌)
開啟/etc/logrotate.d/檔案夾建立一個sample檔案寫入以下內容
/usr/local/nginx/logs/erqilu.access.log{ olddir /usr/local/nginx/logs/oldErqiluAccessLogs //指定舊檔案的隱藏檔夾 weekly //指定每周執行一次 dateext //指定轉存後的檔案以檔案名稱+日期來命名 rotate 8 //指定儲存八個轉存的檔案 create 0644 root utmp //指定轉存後建立新的檔案許可權和原來一樣 sharedscripts prerotate //執行前的動作的開始標誌 /usr/bin/chattr -a /usr/local/nginx/logs/erqilu.access.log //將/usr/local/nginx/logs/erqilu.access.log變成不可追加字串 endscript //執行前的動作的結束標誌 postrotate //執行後的動作的開始標誌 /usr/bin/chattr +a /usr/local/nginx/logs/erqilu.access.log //將/usr/local/nginx/logs/erqilu.access.log 變成可以追加字元 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/bull || true //重新啟動syslog進程 syslogd.pid中儲存的是開啟syslogd進程的時候分配的進程號 /bin/kill -HUP `cat /usr/local/nginx/logs/nginx.pid ` //重新啟動nginx(nginx.pid檔案中儲存的是開啟nginx服務的時候的進程號) endscript //執行後動作的結束標誌 }
然後使用命令:logrotate -f /etc/logrotate.d/sample 強制這個檔案執行,
然後就會發現在 olddir /usr/local/nginx/logs/oldErqiluAccessLogs 多了一個erqilu.access.log-20150403而原來的那個檔案也已經清空了,
在查看erqilu.access.log-20150403沒有發現有什麼問題之後,就將erqilu.access.log-20150403刪除或者多執行幾次:logrotate -f /etc/logrotate.d/sample
刪除大檔案之後,如果我們的配置正確的話,會每周都執行一次並且最大會儲存八個曆史檔案,如果超出了八個就將最古老的那個檔案刪除
6.解決/var檔案夾容量的問題
依然使用du命令發現佔用空間最大的是/var/lib/mysql檔案夾
開啟一看不知道神馬時候被人插入的資料庫,使用phpmyadmin工具查看全是賣…………@#¥%……&*的
直接使用phpmyadmin將這個資料庫刪了,並且最佳化了一下資料庫。
在這個檔案夾中還有一個ibdata1檔案,有幾百M,經過查詢時innodb類型的資料庫產生的結構檔案,並且如果資料庫改動的話,這個檔案並不會縮小,只會慢慢變大
還有兩個幾十M的檔案ib_logfile0、ib_logfile1,經過查詢,這些檔案是myisam結構的資料庫產生的結構檔案
解決的辦法如下
- 停止mysql的運行,
- 將伺服器上的所有Database Backup(推薦使用phpmyadmin,教程可以看我的另一篇日誌)
- 將伺服器上面的所有資料庫刪除
- 將ibdata1、ib_logfile0、ib_logfile1全部刪除,
- 恢複原來備份的整個伺服器的資料庫
//蛋疼的是這樣做太費事兒了,而且只是能將ibdata1這個檔案縮小,得不償失,放棄這個目標
經過這些步驟之後再次查看磁碟佔用
[[email protected] ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/xvda1 20G 13G 6.6G 67% /tmpfs 498M 0 498M 0% /dev/shm/dev/xvdb1 69G 21G 45G 32% /home
世界終於清靜了
linux之mysql啟動問題