情况描述
- 之前在将数据倒入mysql的时候遇到了一个问题:mysql的默认导入文件夹是/tmp文件夹,在别的文件夹可能会因为访问权限问题导致无法成功导入。于是索性就在/tmp文件夹下建立了一个专门用于存放导入文件的文件夹。谁知道今天跑进去一看,/tmp文件夹竟然被自动清空了。
- 接触过Linux的同学可能会知道,/tmp文件夹是Linux系统用于存放临时文件以及各种各样生成的垃圾的文件夹;基于这一定位,Linux系统会定期对/tmp文件夹进行清理。也许这种定期的清理就导致了存放在/tmp文件夹下文件的丢失。
解决方案探究
1. 谁动了我的/tmp文件夹
- 经过查阅资料,我了解到Linux系统下自带的一个叫
tmpwatch
的程序。内容如下:[root@DB-Server ~]# more /etc/cron.daily/tmpwatch flags=-umc /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \ -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ -X '/tmp/hsperfdata_*' 240 /tmp /usr/sbin/tmpwatch "$flags" 720 /var/tmp for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do if [ -d "$d" ]; then /usr/sbin/tmpwatch "$flags" -f 720 "$d" fi done [root@DB-Server ~]#
上述源码源自博客https://blog.csdn.net/qq_43688472/article/details/87872293
- 其中有一行写着
/usr/sbin/tmpwatch "$flags" -f 720 "$d"
。这里的720,根据参数,最终会被解析为“720小时”,换算成天就是30天做一次清理。这里的时间单位是根据参数决定的,具体参数可以查看上述博客。 - 顺带一提,好像不同的Linux操作系统会有不同的tmpwatch策略——其实也就是清理的时间不一样。比如Ubuntu就是每次开机自动清理,而这里的代码实现为30天清理一次。
2. 解决思路
- 可以通过强行更改/tmp文件夹的清理时间来保护/tmp文件夹下的垃圾——治标不治本。比如将上述源码中的720变成一个天文数字,这样基本不会删除。
- 舍弃/tmp文件夹,弄一个正经的文件夹来存放文件。
尝试使用mysql从上述新建文件夹读取.csv文件,成功;mkdir /Users/appti/tempfiles chmod -R 777 /Users/appti/tempfiles # 7即代表有读、写和执行的权限。“三”是指三种不同的对象,User,Gourp,Other。即文件所有人,文件所有组,和其他人。
mysql的默认读取文件夹是/tmp,但是其实任意一个权限为777的文件夹都可以顺利读取。所以还是不要把数据放在/tmp这种会被定期清理的文件夹了。