1. linux删除文件 空间没有被释放
通过你的描述,结合你的问题分析如下:
一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在给这个文件写数据等等,此时即使删除了文件,但是文件的指针还处于被锁定的状态,所以空间也就没能够被释放。
通过 lsof 命令 ,来获取一个已经被删除但仍然被相关的应用程序占用的文件列表。
lsof | grep delete
方法1、就是关闭或者重启相关的进程。
方法2、当然也可以重启操作系统,不过这并不是最好的方法,对于这种进程不停对文件进行写入的操作,要想释放文件所占用的磁盘空间,最好的方法就是在线清空这个文件,这里我就以svn.log 文件为例,可以通过如下命令完成:
[root@SVN~]# echo " " >/tmp/svn.log
通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志。
我们在文件系统中存储的文件,主要分为两个部分:数据部分和指针部分。当我们的数据被删除后,文件所对应的指针也会被删除。这样文件数据部分占用的空间就会 被新的内容所覆盖。
我们在删除文件时,一定要备份,尤其是对于生产环境,这种操作一定要慎重,慎重使用 rm 命令,最好使用mv 命令来代替rm 。
以上就是我的建议,不同版本系统,在具体操作时,可能会有出入,如有问题可私信+关注,我会第一时间来进行回复追答,希望我的回答能帮到你。
2. linux如何做类似计划任务的文件转存及文件删除
#!/bin/bash
ls
|
grep
full
|
grep
"`date
+%Y`_`date
+%U`"
>
tmp.txt
ls
|
grep
append
|
grep
"`date
+%Y`_`date
+%U`"
>>
tmp.txt
cat
tmp.txt
for
file
in
`cat
tmp.txt`
do
scp
$file
135.251.238.214:/local/test_backup
done
ls
|
grep
full
|
grep
-v
"`date
+%Y`_`date
+%U`"
>
tmp2.txt
ls
|
grep
append
|
grep
-v
"`date
+%Y`_`date
+%U`"
>>
tmp2.txt
cat
tmp2.txt
for
file
in
`cat
tmp2.txt`
do
rm
-rf
$file
done
rm
-rf
tmp.txt
rm
-rf
tmp2.txt
大概这样不知道
可不可以
,scp需要注意把你的账号设成ssh免验证的那种。
3. linux 系统如何备份,系统日志如何备份
本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本.
本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数.
每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬照抄,可能会造成不必要的损失.
希望你明白这个脚本要干什么工作!
脚本描述
每7天备份一次所有数据,每天备份binlog,也就是增量备份.
(如果数据少,每天备份一次完整数据即可,可能没必要做增量备份)
作者对shell脚本不太熟悉,所以很多地方写的很笨 :)
开启 bin log
在mysql 4.1版本中,默认只有错误日志,没有其他日志.可以通过修改配置打开bin log.方法很多,其中一个是在/etc/my.cnf中的mysqld部分加入:
[mysqld]
log-bin
这个日志的主要作用是增量备份或者复制(可能还有其他用途).
如果想增量备份,必须打开这个日志.
对于数据库操作频繁的mysql,这个日志会变得很大,而且可能会有多个.
在数据库中flush-logs,或者使用mysqladmin,mysqlmp调用flush-logs后并且使用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的).
所以如果从来不备份,开启日志可能没有必要.
完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的数据.
完整备份脚本
如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运行,如果数据量比较小,那么一天备份一次也无所谓了.
#!/bin/sh
# mysql data backup script
# by scud
# 2005-10-30
#
# use mysqlmp --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqlmp --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo " it to your local disk or ftp to somewhere !!!"
ls -al $BakDir
上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放在/backup/mysql/daily目录下.
注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天前的备份文件:需要用户增加相关脚本,或者手动操作.
增量备份
增量备份的数据量比较小,但是要在完整备份的基础上操作,用户可以在时间和成本上权衡,选择最有利于自己的方式.
增量备份使用bin log,脚本如下:
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "ing $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"
增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个.
因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了.
注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生成.
访问设置
脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和mysqlmp都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home目录)创建一个.my.cnf文件,内容如下
[mysqladmin]
password =password
user= root
[mysqlmp]
user=root
password=password
注:设置本文件只有root可读.(chmod 600 .my.cnf )
此文件说明程序使用mysql的root用户备份数据,密码是对应的设置.这样就不需要在脚本里写用户名和密码了.
自动运行
为了让备份程序自动运行,我们需要把它加入crontab.
有2种方法,一种是把脚本根据自己的选择放入到/etc/cron.daily,/etc/cron.weekly这么目录里.
一种是使用crontab -e放入到root用户的计划任务里,例如完整备份每周日凌晨3点运行,日常备份每周一-周六凌晨3点运行.
4. Linux 下如何删除一个星期前的数据库备份文件,如何让用户选择导入一个星期内某一天的的文件
是mysql吧?删除一周前备份这样实现:每天的备份文件都以英文周几命名比如20110310thursday.tar.gz 然后写脚本每天一点钟rm -rf *当天星期几变量.tar.gz 每天三点钟打包备份。至于导入只需写个脚本在php里调用用户选择某天后就执行删除数据库然后把那天的备份解压恢复到data目录
5. linux系统,删除/home目录后,如何通过备份还原目录
你怎么备份的?
6. linux启动失败 备份恢复模式下会清空数据吗
不会。linux系统备份恢复模式下只会删除你没有进行备份的数据,其他linux系统备份的数据将会被恢复,不会清空你的所有数据。
7. linux下mysql自动备份数据库与自动删除临时文件
一、每日23:00自动删除临时文件
首先查看一下crontab的任务列表:
crontab
-l
然后新建:
crontab
-e
添加一行:
00
03
*
*
*
rm
-rf
/www/cmstest/my120/public/scripts/jpgraph/*
保存退出。
重启服务:
/etc/rc.d/init.d/crond
restart
二、每日24:00自动备份数据库
利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。
1、创建保存备份文件的路径/mysqldata
#mkdir
/mysqldata
2、创建/usr/sbin/bakmysql文件
查找数据库库文件的路径:
一般都是:/var/lib/mysql,或者,/usr/local/mysql/var
查找方法:
1、/usr/local/mysql/bin/mysql
-u
root
-p
进入数据库
2、输入:show
databases;
3、这是可以查看到所有的数据库,然后
4、find
/
-name
db(你想查找的数据库名)
之后:#vi
/usr/sbin/bakmysql
输入
复制代码
代码如下:
rq=`
date
+%Y%m%d
`
tar
zcvf
/mysqldata/mysql$rq.tar.gz
/var/lib/mysql
3、修改文件属性,使其可执行
#
chmod
+x
/usr/sbin/bakmysql
新建任务:
首先查看一下crontab的任务列表:
crontab
-l
然后新建:
crontab
-e
添加一行
00
04
*
*
*
/usr/sbin/bakmysql
表示每天24点钟执行备份
4、重新启动crond
#
/etc/rc.d/init.d/crond
restart
此后每天就可以在/mysqldata中看到类似下的文件了:mysql20040619.tar.gz。
8. Linux下mysql数据库如何定期备份与删除
首先,创建备份文件夹mkdir
/mysql/mysqldata_bakeup;创建并编辑文件在路径
/usr/sbin/bakmysql,命令:vi
/usr/sbin/bakmysql。此时会在/usr/sbin/路径下创建bakmysql文件,并进入bakmysql编辑状态,接着输入;fn
=
`
date
+%Y%m%d
`
tar
zcvf
/mysql/mysqldata_bakeup/mysql$fn.tar.gz
/mysql/data
然后修改文件bakmysql属性,使其可执行chmod
+x
/usr/sbin/bakmysql
修改/etc/crontab
vi
/etc/crontab
进入编辑状态,在最下面添加:01
3
*
*
*
root
/usr/sbin/bakmysql
01
3
是每天凌晨3:01执行
bakmysql文件;懂了吗?