今天mysql插入数据时报了这个错误,我的mysql是docker启动了,想到可能是docker的根目录没有空间了。
docker info | grep "Docker Root Dir"
df -Th
docker system df -v
/var/lib/docker/containers/<容器ID> 目录,如果容器使用了默认的日志模式,那么该容器的日志会以 JSON 形式保存在此目录下。
/var/lib/docker/overlay2 目录,该目录包含容器的读写层,如果容器使用自己的文件系统保存了数据,那么这些数据就会写到此目录下。
一般数据不会占用太多磁盘,重点是docker 产生的日志文件,
我这里是gitlab的日志太多了有20多个G。
find /var/lib/docker/containers/ -name *-json.log |xargs du -sh
truncate -s 0 /var/lib/docker/containers/3c1452f817fad2296d1c105112faed89d01feaa4ee094e8622c959e072012f7a/3c1452f817fad2296d1c105112faed89d01feaa4ee094e8622c959e072012f7a-json.log
编写一个脚本:
clean_docker_log.sh,内容为:
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
# chmod +x clean_docker_log.sh
# ./clean_docker_log.sh
执行一下:
sh clean-docker-log.sh
注意清理完日志文件,还要重启对应的docker容器才能生效。
这样还要定期人工去清理日志,所以最好通过配置管理一下。
vim /etc/docker/daemon.json
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
systemctl daemon-reload
systemctl restart docker