数据库备份定期删除程序的开发。

Posted 天道酬勤,勤能补拙。地道酬实,实能不弱。生有涯 力有限

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库备份定期删除程序的开发。相关的知识,希望对你有一定的参考价值。

第一.最近客户的服务器数据库备份每天都在进行,随着数据量的不断的增加,备份也在不断的进行变大。

第二.于是一些问题就出现了客户的服务器的磁盘的空间有限,定期数据库备份文件太大而导致无法进行保存问题。

第三.从而导致了服务器宕机以及服务器中一些应用程序以及网站无法使用等等。

第四.所以需要进行解决这个问题就需要开发一个应用程序进行定期的删除数据库的备份以及其他的文件。

第五.在进行删除数据库的备份的时候需要注意是的删除设置的几天前的数据库备份,其他最新的数据库的备份的文件不要删除。

第六:可以应用Windows服务进行开发定时删除数据库备份的应用的程序,也可以进行应用控制台开发定时删除数据库的备份的程序当然如果应用控制台应用程序进行开发,那么最好进行结合Windows 系统自带的计划任务程序比较方便。当然你是可以进行选择的,因人而异。

第五.那么如果做到删除指定的数据库备份文件例如DB2,DBName.0.DB2.DBPART000.20161010153053.001等等以及SQLServer DbName.bak等等

以及mysql数据库的备份文件等等,以及其他的文件格式都是支持的。

第七.那么解决这个问题我需要做的是:

   1.首先需要找到数据库备份文件的路径将其读取出来,当然这里所知的路径是指物理路径。

   2.需要做的是将数据库的文件的名称以及数据库备份的时间进行读取出来,为了方便取出最新的以及几天前的数据库备份。

   3.当然你还需要进行应用File文件类中的一些具体的删除的方法。来进行删除。

第八:下面我将自己写的定期删除数据库备份控制台应用程序贴出来供大家参考。

         定期的进行删除数据库备份文件代码如下

class Program
{
    static void Main(string[] args)
    {
        string strDirfile = Properties.Settings.Default.DB_FILE_PATH;
        Console.WriteLine("strDirfile{0}", strDirfile);
        int keepFileCnt = int.Parse(Properties.Settings.Default.KEEP_FILE_CNT);
        try
        {
            if (string.IsNullOrEmpty(strDirfile) || !Directory.Exists(strDirfile))
            {
                Console.WriteLine("配置的文件的路径不正确请检查{0}" + strDirfile);
            }
            if (keepFileCnt <= 0)
            {
                Console.WriteLine("没有配置删除的天数");
            }

            if (strDirfile != null)
            {
                if (Directory.Exists(strDirfile))
                {
                    string[] strDirs = Directory.GetDirectories(strDirfile);
                    string[] strFiles = Directory.GetFiles(strDirfile);
                    DBNameAndTime file = new DBNameAndTime();
                    if (strFiles != null)
                    {
                        foreach (string strFile in strFiles)
                        {
                            if (strFile != null)
                            {
                                FileInfo fi = new FileInfo(strFile);
                                string[] strArr = fi.Name.Split(‘.‘);
                                file.DataName = fi.Name; 
                                file.FileTime = strArr[5]; 
                                file.Url = strFile;
                                DateTime dt1 = DateTime.Now; 
                                if (strArr.Length > 0)
                                {
                                    IFormatProvider provider = new CultureInfo("zh-CN");
                                    string tarStr = "yyyyMMddHHmmss";
                                    DateTime dt2 = DateTime.ParseExact(file.FileTime.ToString(), tarStr, provider);
                                    TimeSpan ts = dt1 - dt2;
                                    Console.WriteLine("时间天数:{0}", ts);
                                    if (ts.TotalDays >= keepFileCnt)
                                    {
                                        if (strFile != null)
                                        {
                                            File.Delete(strFile);
                                            using (StreamWriter sw = new StreamWriter(strDirfile + "数据库备份的删除日志.txt", true))
                                            {
                                                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "数据库备份删除开始:" + "删除的路径:" + strDirfile + "删除数据库备份的名称" + strFile);
                                            }
                                            Console.WriteLine("{0}数据库备份文件删除成功!", DateTime.Now);
                                        }
                                        else
                                        {
                                            Console.WriteLine("删除文件失败!");
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("其他的备份文件都是最新的没有3天前的备份!");
                                    }
                                }
                            }
                        }
                    }

                    //保存删除的根目录的文件夹
                    foreach (string strdir in strDirs)
                    {
                        Directory.Delete(strdir, true);
                    }

                }
                else
                {
                    Console.WriteLine("此目录中只有根目录了!");
                }
            }
            else
            {
                Console.WriteLine("此目录不存在!");
            }

        }
        catch (Exception ex)
        {
            //将数据库备份的异常写入到记事本中
            using (StreamWriter sw = new StreamWriter(strDirfile + "数据库备份的删除日志.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "备份文件都是最新的没有3天前的备份" + ex.Message);
            }
        }
    }

}
//进行声明备份数据库的类
public class DBNameAndTime
{
    private string fileName;
    /// <summary>
    /// 文件名称
    /// </summary>
    public string FileName { get { return fileName; } set { fileName = value; } }

    private string fileTime;
    /// <summary>
    /// 文件的最后修改时间
    /// </summary>
    public string FileTime { get { return fileTime; } set { fileTime = value; } }

    private string dataName;
    /// <summary>
    /// 数据库名称
    /// </summary>
    public string DataName { get { return dataName; } set { dataName = value; } }

    private string url;
    /// <summary>
    /// 文件路径
    /// </summary>
    public string Url { get { return url; } set { url = value; } }

    public string DownUrl { get { return fileName; } }
}

 

  

 

以上是关于数据库备份定期删除程序的开发。的主要内容,如果未能解决你的问题,请参考以下文章

《懒人Shell脚本》之八——定期备份Mysql数据库表的实现

SQL2005自动备份,定期删除的维护计划及自动定期清除日志

RAC RMAN定期备份及删除脚本

ORACLE自动备份-压缩格式,定期删除.bat

mysql数据定期备份删除

Linux下超简单的Mysql自动备份+定期删除之前备份文件脚本