解决由于日志占满空间导致的MySQL无法启动问题

今天收到监控邮件说博客访问失败。打开页面一看,硕大的502 Bad Gateway,ping了一下VPS发现是通的,SSH连接上去看了下Nginx日志发现没问题,重启lnmp的时候发现Mysql起不来,问题源头基本找到。

 代码如下 复制代码

tail /usr/local/mysql/var/slyar.err

看了一下Mysql的错误日志,意外状况出现。。。

Disk is full writing './mysql-bin.~rec~' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space)

神奇的情况,居然是因为磁盘满了无法写入日志导致Mysql起不来

 代码如下 复制代码

root@slyar# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 3016688 2877540 0 100% /

果然啊,/var目录爆了

 代码如下 复制代码

root@slyar:/usr/local/mysql/var# ll --block-size=MB
total 504MB
-rw-rw---- 1 mysql mysql 26MB Jul 23 2012 mysql-bin.000011
-rw-rw---- 1 mysql mysql 5MB Jul 26 2012 mysql-bin.000012
-rw-rw---- 1 mysql mysql 27MB Aug 8 2012 mysql-bin.000013
-rw-rw---- 1 mysql mysql 43MB Aug 23 2012 mysql-bin.000014
-rw-rw---- 1 mysql mysql 270MB Feb 9 17:05 mysql-bin.000020
-rw-rw---- 1 mysql mysql 115MB Apr 19 12:27 mysql-bin.000021
-rw-rw---- 1 mysql mysql 1MB Feb 10 12:07 mysql-bin.index
-rw-rw---- 1 mysql mysql 0MB Apr 19 12:34 mysql-bin.~rec~

基本上就是被这些玩意占满了,查了一下Mysql手册发现这些东西也没啥用,直接删除(此操作最好在Mysql服务停止时进行,因为当前日志使用的话无法删除,而且有可能导致一些其它问题,不过用mysql>reset master命令可以直接清空日志)

 代码如下 复制代码

root@slyar:/usr/local/mysql/var# rm -f mysql-bin.*

为了防止再次出现此类状况,直接关闭Mysql的log-bin日志功能

 代码如下 复制代码

vim /etc/my.cnf

找到:

 代码如下 复制代码
log-bin=mysql-bin
binlog_format=mixed

在前面加上#注释掉,:wq保存退出

最后

 代码如下 复制代码

/etc/init.d/mysql restart

启动Mysql服务,一切正常。

时间: 2024-08-31 06:14:28

解决由于日志占满空间导致的MySQL无法启动问题的相关文章

SQLServer数据库中开启CDC导致事务日志空间被占满的原因

SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为: 在执行增删改语句(产生事务日志)的过程中提示,The transaction log for database '***' is full due to 'REPLICATION'(数据库"***"的事务日志已满,原因为"REPLICATION"). CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下: 1,每当基础表(开启了CDC或者replication的表)产生事务性操作

SQL Server数据库日志已满的解决方法

Server Error in '/' Application.</pre><pre>--------------------------------------------------------------------------------</pre><pre> 数据库教程 'databasename' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 出现如上错误,请把数据库的故障恢复模式改为"简单"模式 , 即可解决 此

crfclust.bdb占用巨大空间导致磁盘满

crfclust.bdb占用巨大空间导致磁盘满   问题分析:      一上班就接到用户现场电话说有一套RAC数据库无法访问,随即登陆上去首先查看了磁盘空间,发现两个节点的/DBSoft目录已满,首先怀疑的是告警日志文件和$ORACLE_HOME/dbs 产生的归档日志文件没有删导致,经过检查后事实否认了我的判断.      随即想到的是CHM(ClusterHealth Monitor)服务未关导致crf文件无限增长导致磁盘空间占满,随即进入crf目录检查$ORACLE_HOME/crf/d

SQL数据库日志已满解决方法

当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,.然后把数据库日志文件删除(最好是先改名,以防万一).再附加数据库,这样会重建日志文件. 加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点. 在查询分析器上操作: 清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志: BACKUP L

SQL数据库日志已满解决方法_MsSql

当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,.然后把数据库日志文件删除(最好是先改名,以防万一).再附加数据库,这样会重建日志文件. 加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点. 在查询分析器上操作: 清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志: BACKUP L

SQL Server中事务日志已满的原因以及解决办法

  错误描述:数据库的事务日志已满.若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_desc 列 .   首先引入一下事务日志的概念(来自百度百科):   事务日志是一个与数据库文件分开的文件.它存储对数据库进行的所有更改,并全部记录插入.更新.删除.提交.回退和数据库模式变化.事务日志还称作前滚日志或重做日志.   事务日志是备份和恢复的重要组件,也是使用 SQL Remote 或 [复制代理] 复制数据所必需的.   在缺省情况下,

Sqlerver数据库/事务日志已满处理办法

一.简单方法 1.右键数据库→属性→选项→故障还原模型→设为简单→确定: 2.右键数据库→所有任务→收缩数据库→确定: 3.右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定. 二.复杂方法 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小) 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案_MsSql

执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令

SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令