• 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

    世界终于清静了

  • 相关阅读:
    93.快速搭建Web环境 Angularjs + Express3 + Bootstrap3
    92.bower 需要git
    91.Bower : ENOGIT git is not installed or not in the PATH 解决方法
    5.Git使用详细教程
    4.git "Could not read from remote repository.Please make sure you have the correct access rights."解决方案
    2.windows下安装git
    Git常用命令
    每天一个linux命令(50):crontab命令
    crontab 不能执行git命令问题备忘
    Git PHP提交
  • 原文地址:https://www.cnblogs.com/yiluxiuxing/p/4390339.html
Copyright © 2020-2023  润新知