使用find删除备份数据库的误区

问题描述

很多公司需要当天定时多次备份数据库,创建当天日期的目录及目录内存放当天备份数据,用网上的脚本出现把整个数据库备份给删除了,下面给出了错误经过和解决的方法,给同行们参考,注意下操作任何文件请先!!!!备份数据  !!!再测试脚本!!!!

脚本需求

删除几天前数据库备份的目录及文件。

1.搭建模拟环境

因为之前的环境已经搞定了,这个模拟下,让大家了解下,不需要的直接看第二部分

[[email protected] ~]#mkdir /mysql/{20160401,20160402,20160403.20160404}   #创建模拟数据库备份夹

[[email protected] ~]#touch /mysql/2016040{1,2,3,4}/1111   #创建模拟数据库备份文件

[[email protected] ~]# tree /mysq #查看目录结构有没有少文件

/mysql

├── 20160401

│?? └── 1111

├── 20160402

│?? └── 1111

├── 20160403

│?? └── 1111

└── 20160404

└── 1111

[[email protected] ~]# touch -d "04/01/2016" /mysql/20160401   #修改文件目录时间戳

[[email protected] ~]# touch -d "04/02/2016" /mysql/20160402

[[email protected] ~]# touch -d "04/03/2016" /mysql/20160403

[[email protected] ~]# touch -d "04/01/2016" /mysql/20160401/1111   #修改文件子目录时间戳

[[email protected] ~]# touch -d "04/02/2016" /mysql/20160402/1111   #重要的是"04/02/2016",一开始我写成"02/04/2016",结果完全不一样

[[email protected] ~]# touch -d "04/03/2016" /mysql/20160403/1111     #最后查找的结果完全不一样,给自己挖坑

[[email protected] ~]# stat /mysql/20160402/1111   #随便查看修改后的时间戳

File: ‘/mysql/20160402/1111’

Size: 0               Blocks: 0          IO Block: 4096   regular empty file

Device: 801h/2049d      Inode: 23566090    Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:default_t:s0

Access: 2016-04-02 00:00:00.000000000 +0800      #已经变了

Modify: 2016-04-02 00:00:00.000000000 +0800  #已经变了

Change: 2016-04-04 02:09:03.395105983 +0800

Birth: -

2.开始演示错误命令

网络上查到都是这样的

[[email protected] ~]#find /mysql/ -type d -o -type f  -ctime +1 -exec rm -rf {} \;

#后面执行的语句暂时去掉“-exec rm -rf {} \;”先看看我们搜索到的结果

#因为我是改的时间戳所以-ctime,我改成-mtime测试,效果一样

#后果是什么呢呵呵,全删,因为找到了所有目录,所有连主/mysql都删掉了

#很多书上和网上都是这样的命令,坑哭了多少同胞

[[email protected] ~]# find /mysql/ -type d -o -type f  -mtime +1

/mysql/

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160402/1111

/mysql/20160404

/mysql/20160403

[[email protected] ~]# find /mysql/ -type d -o -type f  -mtime +2

/mysql/

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160404

/mysql/20160403

3.正确命令演示

#既然要删除目录和文件为什么还要加上“-type d -o -type f”呢

#不经过测试的脚本会死的很惨

[[email protected] ~]# find /mysql/  -mtime +1

/mysql/20160401

/mysql/20160401/1111

/mysql/20160402

/mysql/20160402/1111

[[email protected] ~]# find /mysql/  -mtime +2

/mysql/20160401

/mysql/20160401/1111

#命令完全版测试结果

[[email protected] ~]# find /mysql/  -mtime +2 -exec rm -rf {} \;

find: ‘/mysql/20160401’: No such file or directory

[[email protected] ~]# find /mysql/  -mtime +2

[[email protected] ~]# ls /mysql/2016040*   #查找后确实连目录都删掉了,其他没有文件没有影响

/mysql/20160402:

1111

/mysql/20160403:

1111

/mysql/20160404:

1111

时间: 2024-10-21 23:09:14

使用find删除备份数据库的误区的相关文章

winform程序,备份数据库+并压缩+并删除以前的备份

说明:为了定时备份服务器上的数据库并压缩到指定目录,方便下载到本地而写本程序.配合windows的任务计划,可以达到定时备份数据库的目的. 程序需引用SQLDMO.DLL,如电脑上已安装sqlserver,可在C:\Program Files\Microsoft SQL Server\80\Tools\Binn\找到 string ServerName = System.Configuration.ConfigurationSettings.AppSettings["ServerName&quo

mysql自动备份数据库与自动删除临时文件

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来定时执行备份文

sql server 批量备份数据库及删除N天前的备份数据

很多时候,我们都需要将数据库进行备份,当服务器上数据库较多时,不可能一个数据库创建一个定时任务进行备份,这时,就需要进行批量的数据库备份操作,好了,废话不多说,具体实现语句如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 -

sql server 定时备份数据库

CREATE PROCEDURE [dbo].[SP_DBBackup_EveryNight_Local] @cycle INT, ---保存周期 @IsLocal INT, ---是否为本地 0表示是 1表示否 @SavePath NVARCHAR(100), ---文件保存路径 \\192.168.19.102\DataBaseBack @DBPrefix NVARCHAR(50), ---生成文件的前缀 @Server VARCHAR(50), ---服务器IP 192.168.19.10

如何使用PHP自动备份数据库

如何使用PHP自动备份数据库 1.前言 mysql数据库的备份方式有很多: 例如: 1.使用mysqldump函数 mysqldump -u username -p dbname table1 table2 ...  > BackupName.sql dbname参数表示数据库的名称 table1和table2参数表示需要备份的表的名称,为空则整个数据库备份: BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径.通常将数据库被分成一个后缀名为sql的文件: 基本

centos7备份数据库

#!/bin/bash # 要备份的数据库名,多个数据库用空格分开 databases=(guowang yaohan wycenter) # 备份文件要保存的目录 basepath='/opt/guowang/mysql/' if [ ! -d "$basepath" ]; then mkdir -p "$basepath" fi # 循环databases数组 for db in ${databases[*]} do # 备份数据库生成SQL文件 /bin/ni

Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作 Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般都是建建表.查查数据的操作居多,较少会考虑系统的整个Oracle的完整备份操作.但是在我们一些发布操作中,我们必须考虑如何把Oracle的对象.表数据导出到Sql脚本中,并且把创建Oracle表空间.创建Oracle数据库的操作也

如何通过PhpMyAdmin批量删除MYSQL数据库数据表

使用这个方法前,强烈建议先备份整个数据库.至于怎么备份?你不会么?在本文下方留言吧. 具体方法:复制下面的php执行语句,保存为sql.php文件(注意配置数据库名称.密码.数据表头),通过ftp上传到网站跟目录,运行. <?php //设置数据库连接信息.数据库服务器地址,数据库用户名,数据密码 mysql_connect('localhost','root','123456'); //设置查询的数据库名称,比如CMSYOU当前设置的是phpcms mysql_select_db('phpcm

mysql命令行备份数据库

MySQL数据库使用命令行备份|MySQL数据库备份命令 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql 备份到当前目录 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 mysqldump --add-drop-table -h127.0.0.1