添加数据到数据库时,发现接口报错,服务器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
,后面就按上面的步骤找到对应的日志文件置空即可。