听Ta说

  • {{ item.name }}
  • 解决方案
  • 2022.10.29更新
  • 首页
  • 归档

关于mysql无法写入,发现的磁盘爆满问题

  • Gorkys
  • 2022-10-29
  • 4

添加数据到数据库时,发现接口报错,服务器mysql无法写入

解决方案

1 、尝试重启mysqldocker restart mysql,然后发现重启不了,导致mysql服务直接掉了。

2、使用docker ps查看运行中的docker镜像(images),mysql一直处于如下状态

Restarting (1) 43 seconds ago

3、参考文章得知,使用docker logs mysql查看日志,在报错日志中发现:

Error number 28 means 'No space left on device'
错误号28表示“设备上没有剩余空间”

4、然后在文章得知,使用docker system df查看硬盘状态:

TYPE                TOTAL               ACTIVE              SIZE           RECLAIMABLE
Images              3                   3                   1.257GB        69.22MB (5%)
Containers          4                   2                   67.56MB        724.9kB (1%)
Local Volumes       30                  2                   5.241GB        5.051GB (96%)
Build Cache         0                   0                   0B                0B

5、使用df -h查看磁盘使用情况

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           1.8G  724K  1.8G   1% /run
tmpfs           1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/vda1        40G   38G     0 100% /
tmpfs           365M     0  365M   0% /run/user/0
overlay          40G   38G     0 100% /var/lib/docker/overlay2/77dfa867fd13e97163579d5c5e274ae3d71d302bcda9a59cbe1d22565c596d74/merged

然后再使用du -sh *来查看本地文件占用大小

0        proc
525M    root
724K    run
0        sbin
4.0K    srv
0        sys
32K        tmp
2.8G    usr
34G        var

磁盘总共就40G,这个var占了34个G,肯定有鬼。继续跟踪发现:

[root@King nginx]# du -sh *
27G    access.log
4.0K    access.log-20210930.gz
4.0K    access.log-20211001.gz
8.0K    access.log-20211002.gz

27个G的var/log/nginx/access.log文件,吓到我了。

6、立刻使用truncate -s 0 access.log清空文件。可用参考

7、但是在access.log中发现是nodejs的一个api出现了问题。所以还是先解决这个根本原因

之前部署nodejs项目时,在nginx config中配置了将3000端口映射到3000端口,没有出问题。这次磁盘可能就是因为这个原因满了,在用pm2开启node项目后就会报错。用node index.js启动时发现是端口冲突。端口冲突的原因是nginx也监听了3000端口。所以最后用例node index.js开启后发现在外面也能访问的通,证明不需要用nginx映射,就将nginx config的3000 server注释掉,再重新开启就好了。

2022.10.29更新

再次遇到磁盘空间不足,这次的情况略有不同。

系统中/root显示大小为39G,但/root下却无大文件

使用du -sh .[!.]*可以查看隐藏文件夹.pm2,后面就按上面的步骤找到对应的日志文件置空即可。

在docker容器下利用数据卷实现在删除了mysql容器或者镜像的情况下恢复数据

© 2025 听Ta说
湘ICP备2021002328号
Theme by Wing