在对一个网站的例行检查中发现网站打不开了,浏览器显示502 Bad Gateway。我的vps安装的是lnmp,首先用指令lnmp status 检查了一下nginx,php-fpm,mysql的状态,结果发现一切正常。根据经验,我估计是磁盘空间不足,马上使用指令 df -hl 检查磁盘的使用情况:
果然是磁盘空间不足,到底是什么文件这么大,塞满了整个硬盘?我首先想到会不会是nginx的日志文件,结果发现唯一的一个虚拟主机没有启用日志文件:
access_log off;
那很有可能是mysql的日志问题过大。首先来检查一下mysql日志文件的存放位置
mysql -u root -p
登录mysql数据库
执行以下指令
1 |
show variables like "slow_query_log_file"; |
2 |
3 |
show variables like "log_error"; |
4 |
5 |
mysql>show variables like 'log_%' ; |
查到有两个日志文件,路径是
/usr/local/mysql/var/sunhan-slow.log
/usr/local/mysql/var/sunhan.err
看来主要的日志文件在/usr/local/mysql/var/这个目录下
执行以下指令来查看文件的大小
1 |
ls -alh /usr/local/mysql/var/ |
结果如下:
每个1.1G,有20个,难怪这么快就把硬盘塞满了。mysql数据库才几百M,为什么日志文件这么大呢?到底有什么用?
主要有两个作用
- 数据恢复
- 主从服务器之间同步数据
如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
日志会记录哪些东西呢?基本上所有和数据库有关的操作都有记录在案。比如,update一个表,delete一条记录等。即使没有和该指令相匹配的数据,这条指令也会记录到mysql的操作日志中。另外,每条指令执行的时间,也会被记灵。我这个vps上就放了一个个人博客,根本用不上这些,没有什么实际用途,还不如关掉,以免老是要清除日志。
清除日志的指令是:
1 |
reset master; |
出错了,原来我为了使网站尽快恢复,已经改了/etc/my.cnf文件,把日志文件关掉了。现在先打开日志
1 |
vi /etc/my.cnf |
把log-bin=mysql-bin和binlog_format=mixed 前面的#去掉
重启一下mysql,再次登录mysql
1 |
mysql -u root -p |
输入清除日志的指令
1 |
reset master; |
问题得到解决
查看一下磁盘占用情况
现在可以编辑/etc/my.cnf,把把log-bin=mysql-bin和binlog_format=mixed注释掉,重启一下mysql,问题就解决了。另外,日志文件也可以直接使用rm指令删除,如果文件比较多,就稍微麻烦点。