linux之mysql啟動問題


網站總是掛掉,查看到原來是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.查看磁盤空間

[root@AY121231034820cd91077 ~]# df -h
Filesystem            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.查看具體那些文件占用了磁盤空間

[root@AY1212334820cd91077 ~]# du -h --max-depth=1 /
4.1G    /var
4.1G    /root
97M     /lib
156M    /tmp
21G     /home
11M     /sbin
0       /opt
6.2M    /bin
6.5G    /usr
30G     /

 

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的運行,
  • 將服務器上的所有數據庫備份(推薦使用phpmyadmin,教程可以看我的另一篇日志)
  • 將服務器上面的所有數據庫刪除
  • 將ibdata1、ib_logfile0、ib_logfile1全部刪除,
  • 恢復原來備份的整個服務器的數據庫

//蛋疼的是這樣做太費事兒了,而且只是能將ibdata1這個文件縮小,得不償失,放棄這個目標

 

經過這些步驟之后再次查看磁盤占用

[root@AY121231034820cd91077 ~]# df -h
Filesystem            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

 

世界終於清靜了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM