Mysql 通过mysqldump 备份

本文介绍了一个使用C#实现的数据库备份工具,该工具通过mysqldump命令将数据库备份为.sql文件,并进一步压缩为.zip文件,同时清理了备份目录中多余的旧备份文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        static string outDataFile = "";
        static string backupPath = "";
        static int sqlBackupNum = 3;


        #region 备份数据库到特定目录

        
        /// <summary>
        /// 备份数据库到特定目录
        /// </summary>
        /// <param name="binfolderpath">Bin文件夹目录,用于得到mysqldump.exe文件</param>
        /// <param name="server">服务器</param>
        /// <param name="user">用户名</param>
        /// <param name="pass">密码</param>
        /// <param name="db">要备份的数据库名</param>
        /// <param name="backupfile">备份完生成的文件名称</param>
        /// BackupDB(dataSourcePath,hostIp, "utf8",dataUser,dataPwd, dataBaseName, outputfile, backuppath, sqlbacknum, backupDirectory);
        /// <returns></returns>
        public static bool BackupDB(string binfolderpath, string server, string character, string user, string pass, string db, string backupfile,  int sqlBackNumPara,string backupDirectory)
        {
            outDataFile = backupfile;
            sqlBackupNum = sqlBackNumPara;
            backupPath = backupDirectory;

            string command = string.Format("mysqldump --host={0} --default-character-set={1} --lock-tables  --routines --force --port=3306 --user={2} --password={3}  --quick   --hex-blob \"{4}\" > \"{5}\"", server, character.Trim().ToLower(), user, pass, db, backupfile);
            StartCmd(binfolderpath + @"\", new string[] { command });
            //备份文件夹
            backupFiles(outDataFile.Replace(".sql", ".zip"));
             
            if (File.Exists(backupfile))
            {
                return true;
            }
            else
            {
                return false;
            }

        }  
        static string CmdPath = @"C:\Windows\System32\cmd.exe";

        /// <summary>
        /// 执行Cmd命令
        /// </summary>
        /// <param name="workingDirectory">要启动的进程的目录</param>
        /// <param name="command">要执行的命令</param>
        public static void StartCmd(string workingDirectory, string[] commands)
        {
            Process process = new Process();

            process.StartInfo.FileName = CmdPath;
            process.StartInfo.WorkingDirectory = workingDirectory;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;
            process.OutputDataReceived += Process_OutputDataReceived;
            process.Start();
            process.BeginOutputReadLine();
            process.StandardInput.WriteLine(commands[0]);
            process.StandardInput.WriteLine("exit");
            process.StandardInput.WriteLine("exit");
            process.Close();


        }

        private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e != null && e.Data != null)
            {
                Console.WriteLine("out:" + e.Data.ToString());
                if (e.Data.ToString().Contains("exit"))
                { 
                    Console.WriteLine("backupPath: " + backupPath);
                    DeleteFile(backupPath, sqlBackupNum, "*.zip");
                    DeleteFile(backupPath, sqlBackupNum, "*.sql");
                    BackupMysql.backupAble = true;
                }
            }

        }
        #endregion


        #region  备份 文件夹backupFiles
        private static void   backupFiles(string outputfile)
        {
            string Source =/* Environment.CurrentDirectory +*/"..\\Files";
            compressDirectory(Source, outputfile);
        }
        private static void compressDirectory(string DirectoryPath, string OutputFilename, int CompressionLevel = 9)
        {

            try
            {
                ICSharpCode.SharpZipLib.Zip.FastZip z = new ICSharpCode.SharpZipLib.Zip.FastZip();
                z.CreateEmptyDirectories = true;
                z.CreateZip(OutputFilename, DirectoryPath, true, "");

                if (File.Exists(OutputFilename))
                    LogHelper.WriteLog(LogHelper.LOGINFO, "backupFiles success:  " + OutputFilename);
                else
                    LogHelper.WriteLog(LogHelper.LOGINFO, "backupFiles fail" + OutputFilename);
            }
            catch (System.Exception ex)
            {
                LogHelper.WriteLog("compressDirectory ", ex);
            } 
        }

        #endregion


        #region 备份完成后删除多余文件


        //remove the oldest backup files  
        //pattern: *.zip | *.sql
        private static void DeleteFile(string path, int keepnum, string pattern)
        {

            DateTime lasttime = DateTime.MaxValue;

            DirectoryInfo Dir = new DirectoryInfo(path);

            var files = Dir.GetFiles(pattern);


            if (files.Length <= keepnum)
            {
                Console.WriteLine("return ");
                return;
            }

            FileInfo temp = null;

            foreach (var item in files)
            {
                if (item.LastWriteTime < lasttime)
                {
                    lasttime = item.LastWriteTime;
                    temp = item;
                }
            }

            Console.WriteLine("temp==null? " + temp != null);

            if (temp != null)
            {
                Console.WriteLine("temp.FullName:" + temp.FullName);
                File.Delete(temp.FullName);
            }
        }

        #endregion

需要引用的DLL

 ICSharpCode.SharpZipLib.dll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值