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.查看磁盘空间

[[email protected] ~]# 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.查看具体那些文件占用了磁盘空间

[[email protected] ~]# 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这个文件缩小,得不偿失,放弃这个目标

经过这些步骤之后再次查看磁盘占用

[[email protected] ~]# 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

世界终于清静了

时间: 2024-08-01 19:25:22

linux之mysql启动问题的相关文章

linux下mysql启动与停止

mysql.启动与停止   1.启动   MySQL安装完成后启动文件mysql在/etc/init.d目录下,   在需要启动时运行下面命令即可.   [[email protected] init.d]# /etc/init.d/mysql start   2.停止 /usr/bin/mysqladmin -u root -p shutdown   3.自动启动   1)察看mysql是否在自动启动列表中   [[email protected] local]# /sbin/chkconfi

Linux 安装MySql启动Can't locate Data/Dumper.pm in @INC

通过RPM包CentOS7 安装MySQL的时候提示“Can't locate Data/Dumper.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/mysql_install_db l

Linux 平台MySQL启动关闭方式总结

MySQL的启动方法有很多种,下面对比.总结这几种方法的一些差异和特性,下面实验的版本为MySQL 5.6.如有疏漏或不足,敬请指点一二. 1:使用mysqld启动.关闭MySQL服务 mysqld是MySQL的守护进程,我们可以用mysqld来启动.关闭MySQL服务,关于mysqld, MySQL 5.6官方介绍资料如下所示: mysqld, also known as MySQL Server, is the main program that does most of the work

Linux 下 MySQL 启动与关闭 说明

转自:http://www.cnblogs.com/springside-example/archive/2011/11/29/2529604.html 一.启动 1.1  MySQL 进程 可以用ps 命令查看进程: [[email protected]2 ~]# ps -ef|grep mysql root     2161     1  0 09:38 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe--datadir=/var/lib/mysq

解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]

刚装完MySQL,启动时报如下错误: Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 依次尝试了从谷歌找到的各种方法,发现只要执行如下MySQL初始化命令即可解决: /usr/local/mysql/bin/mysql_install_db --user=mysql 下面附上从谷歌找到的解决此问题的方法集锦,也许每个人遇到的问题的原因会不一样,经供参考: 一.查看报错日志 报错日志是我们解决问题的方向灯

linux下mysql 启动命令

1,使用service 启动.关闭MySQL服务 service mysql start service mysql stop service mysql restart 运行上面命令,其实是service命令去找/etc/init.d下的相关的mysql脚本去执行启动.关闭动作. 2,使用/etc/init.d/mysql启动.关闭MySQL服务, [[email protected] bin]# /etc/init.d/mysql start Starting MySQL....[  OK 

Linux下Mysql启动异常排查方案

遇到Mysql启动异常问题,可以从以下几个方面依次进行问题排查: (1)如果遇到“Can't connect to local MySQL server through socket '/tmp/mysql.sock'”类似问题,查看Mysql配置文件(默认在/etc/my.cnf目录下),使用命令vi /etc/my.cnf,查看是否具备如下配置, [mysqld]port            = 3306socket       = /var/lib/mysql/mysql.sock 可能

Linux下Mysql启动、关闭、重启指令

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/44085635 [[email protected] ~]# rpm -qa|grep -i mysql --查询linux系统中是否安装mysql数据库 mysql-devel-5.1.66-2.el6_3.x86_64 perl-DBD-MySQL-4.013-3.

Linux下MySql启动时报错

/opt/mysql/support-files/mysql.server startmy_print_defaults: [ERROR] Found option without preceding group in config file /opt/mysql/my.cnf at line 1!my_print_defaults: [ERROR] Fatal error in defaults handling. Program aborted!Starting MySQL. ERROR!