MySQL 启动不了-空间不足

具体过程本来想写细一点的,记不清了,把关键的地方记下来

服务器突然断电后导致MySQL启动不了,开始以为是数据库损坏,后来检查日志,看mysqld启动输出信息

显示:

Can't start server: can't create PID file: No space left on device  

看到这条信息,感觉不可能,几百G的空间说没就没了?

使用df -h 命令查看

/dev/sda1               占用率确实100%

这样肯定有文件占用了大部分空间,看网上有条命令是搜索大文件的

 

find /tmp -size +100000000c   查看临时文件有超过100M的打印出来,这个命令不现在不是很了解,大家自己看看,我是直接看到一个文章说Tomcat的日志文件 catalina.out 超过了400G,然后我检查了一下我的日志,同样也是这个问题 使用 rm -rf catalina.out  删除日志, 重新启动mysql即可。

 

### 解决 MySQL 启动时出现的 MY-011904 错误 MY-011904 是一种常见的错误,通常表明数据库启动过程中遇到了某种阻碍。这种错误可能由多种因素引起,例如文件权限问题、磁盘空间不足或其他配置不当的情况。 #### 原因分析 1. **磁盘空间或 Inode 资源耗尽** 如果服务器上的磁盘空间已满或者 inode 已经被完全占用,则可能导致 MySQL 无法创建必要的日志文件或数据文件[^3]。可以使用 `df -h` 和 `df -i` 来检查磁盘的空间和 inode 使用情况。 2. **文件权限不正确** 数据目录及其子文件夹的权限设置不正确可能会阻止 MySQL 访问其所需的资源。MySQL 需要对其数据目录拥有读写权限。如果这些权限缺失,就会引发类似的错误。 3. **日志记录失败** 类似于 ORA-01102 的误导性错误消息,在某些情况下可能是由于审计跟踪文件未能成功创建所致[^1]。这通常是由于目标路径不可访问或不存在引起的。 4. **其他系统级错误** 日志文件对于排查此类问题是至关重要的工具之一。正如提到过的那样,“error log”能够提供关于恢复阶段以及潜在问题区域的重要线索[^2]。因此建议查看 mysqld.err 文件来获取更详细的诊断信息。 #### 排查方法 为了有效处理此问题,可采取以下措施: 1. **验证存储状态** ```bash df -h # 查看硬盘剩余容量 df -i # 检测inode数量是否充足 ``` 2. **确认文件权限** 确保 `/var/lib/mysql/` 或者自定义的数据目录具有正确的所有权与模式: ```bash chown -R mysql:mysql /path/to/datadir/ chmod -R 750 /path/to/datadir/ ``` 3. **审查错误日志** 定位并打开 MySQL 的错误日志(一般位于 `/var/log/mysqld.log`),寻找任何额外提示的信息以便进一步调查。 4. **尝试修复表结构** 若怀疑存在损坏表格,则可以通过运行如下命令来进行初步修正工作: ```sql REPAIR TABLE table_name; CHECK TABLE table_name EXTENDED; ``` 5. **重新初始化实例** 当上述操作均未奏效时,最后的办法就是销毁当前安装环境再重头部署一个新的干净版本。不过在此之前务必做好充分备份以防万一! #### 示例脚本 下面给出一段简单的 bash 脚本来帮助自动化部分检测流程: ```bash #!/bin/bash DATADIR="/var/lib/mysql" LOGFILE="/var/log/mysqld.log" echo "Checking disk usage..." if ! df -h | grep "$DATADIR"; then echo "[ERROR] Data directory not found!" fi echo "Checking inodes availability..." if [[ $(df -i --output=ipcent,iused $DATADIR | tail -n 1) =~ ^([8-9][0-9]|100)% ]];then echo "[WARNING] Low free inodes detected." fi echo "Verifying permissions..." PERM=$(stat -c '%U:%G' $DATADIR) if [ "${PERM}" != 'mysql:mysql' ]; then sudo chown -R mysql:mysql ${DATADIR} else echo "[OKAY] Proper ownership set (${PERM})." fi tail -f ${LOGFILE} & sleep 5s && kill %1 || true ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值