首先利用数据库自带的命令行工具将数据库备份下来,例如对MySQL将databasename数据库备份到D:\datasql(具体查阅数据库说明书)
mysqldump databasename > "D:\datasql"
然后将该文件以日期参量重名名。如果指定保留N天的数据可能有一定困难,不过既然要求7天,不妨以星期作为区分。
假设文件名具有格式“data_日期sql”,则更名语句为(建议先创建后改名,对于很大的数据库可能要备份很长时间并超过0点)
ren "datasql" "data_%date%sql"
若系统时间格式为“2009-04-05 星期日”,则产生文件“data_2009-04-05 星期日txt”。
获取星期几的语句:%date:~11,3%
其中11表示从第11个字符开始(从0开始计算),总共截取3个字符。由此可获得字符串“星期日”。重名名前,删除以data_开头,包含“星期日”的文件
del "data_%date:~11,3%sql"
这样就把上星期的那个文件删除了。
注意:如果系统日期格式与上面的不一致,数字需重新计算,特别是若日期中含有“/”、“:”等字符会导致创建文件失败,此时年月日星期均需手动提取,例如对“04/05/2009 Sun”,应使用“%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%%DATE:~11,3%”得到“20090405Sun”。查看日期格式可使用“echo %date%”。
另外,如果某项(时间格式、文件名、路径等)包含空格则必须使用引号。
脚本源代码
mysqldump databasename > "D:\datasql"
del "D:\data_%date:~11,3%sql"
ren "D:\datasql" "data_%date%sql"
编为一个bat文件,添加计划任务,每天定时执行即可。
删除的办法是执行truncat方法,只是不需要每次手动的输入truncate命令进行删除。
通过sql命令的方式生成所有的truncate语句并写入到.sql脚本文件中,然后执行脚本即可完成删除 *** 作,并且保留了表结构。
生成truncate命令的sql语句为:
SELECTCONCAT('TRUNCATETABLE',TABLE_NAME,';')FROMinformation_schema.TABLESWHERETABLE_SCHEMA='test'intooutfile'/tmp/truncate_test.sql';。
然后将生成的.sql脚本拷贝到当前文件夹下面:
mv/tmp/truncate_test.sql$current_dir/。
然后执行.sql脚本将数据库中所有表中数据删除:
source$current_dir/truncate_test.sql。
注意:
在进行select....intooutfile...... *** 作时,默认只能将文件写入到tmp路径下,可以不用将tmp文件夹下面的.sql脚本移动到当前文件夹下,直接在tmp路径下执行.sql脚本即可。
扩展资料:
常见的删除数据库表中数据的方法是通过delete或者truncate的方法进行删除 *** 作,如果删除的是表中某一条或者部分数据的话适合用delete *** 作进行删除,如果要删除表中所有的数据的话,适合是同truncate进行删除 *** 作。
如果不需要保留数据库中所有表的结构,那么答案很简单,执行命令dropdatabase数据库名即可达到目的。
但是如果需要保留该数据库中所有表的结构,只想删除所有表中的数据,多执行几次truncate可以达到。
参考资料:
用for命令处理dir /b/o-d的列表,跳过前面不需要删除的部分。dir /o-d是按时间倒序排列。
for /f "skip=1 tokens= delims=" %i in ('dir /b/o-d 你的备份目录) do @del /f/q "%i"
上面的命令只是给出一个大概的样子,调整skip=后面的参数,可以选择跳过几个文件不删除,剩下的你还要自己调试一下。建议你先在@后面加上echo 进行调试,以免误删不能删除的文件。调试好后再去掉echo。
以上就是关于cwRsync写一可以定期删除前一个星期的备份数据库的脚本全部的内容,包括:cwRsync写一可以定期删除前一个星期的备份数据库的脚本、mysql如何删除数据库中所有数据但是要保留表、怎么用dos写一个批处理,要求按时间删除旧文件,只保留最新文件,因为我要做数据库定时备份,在线等等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)