c#console应用程序备份mysql

时间:2011-01-19 07:05:48

标签: mysql c#-4.0

我尝试将此代码用作控制台应用程序,以便我可以备份mydatabase automatics 我不确定它有什么问题

static void Main(string[] args)
{    
    try
    {
        DateTime backupTime = DateTime.Now;
        int year = backupTime.Year;
        int month = backupTime.Month;
        int day = backupTime.Day;
        int hour = backupTime.Hour;
        int minute = backupTime.Minute;
        int second = backupTime.Second;
        int ms = backupTime.Millisecond;

        String tmestr = backupTime.ToString();
        tmestr = "C:\\" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + ".sql";
        StreamWriter file = new StreamWriter(tmestr);
        ProcessStartInfo proc = new ProcessStartInfo();
        string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");
        proc.FileName = "mysqldump";
        proc.RedirectStandardInput = false;
        proc.RedirectStandardOutput = true;
        proc.Arguments = cmd;//"-u root -p smartdb > testdb.sql";
        proc.UseShellExecute = false;
        Process p = Process.Start(proc);
        string res;
        res = p.StandardOutput.ReadToEnd();
        file.WriteLine(res);
        p.WaitForExit();
        file.Close();

    }

    catch (IOException ex)
    {
        MessageBox.Show("Disk full or other IO error , unable to backup!");
    }
}

3 个答案:

答案 0 :(得分:0)

由于我不确定你所犯的是什么样的错误,至少可以改变它。

string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");

后来你评论它应该是-u root -p smartdb > testdb.sql"; 除了以上之外,在-u之后缺少空格,所以我将它改为:

string cmd = string.Format(@"-u {0} -p {1} -h {2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");

答案 1 :(得分:0)

为什么要创建StreamWriter并尝试获取mysqldump的输出,为什么不告诉mysqldump写入备份文件本身?

string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > ""{4}"";",
    "root", "", "localhost", "dbfile", tmestr);

答案 2 :(得分:0)

对于初学者,我会改变你输出信息的方式。您实际上是打开一个文件,因此您可以将备份实用程序的输出重定向到该文件。进程调用中的>就是出于此目的。只需将"backup.sql"参数更改为tmestr

此外,由于输出已被重定向到文件,因此您的进程将无法返回任何内容。但是因为我们现在正在将它转移到正确的路径上,这应该是无关紧要的。

最后一项更改,请在-u{0}之间添加一个空格,使其为-u {0}。与-h {2}相同。

总结:

  • 删除StreamWriter以及与之关联的所有变量
  • 修改进程参数中的String.Format以使用`tmestr
  • cmd-u
  • -h变量中添加空格

你应该做得很好(假设找到mysqldump可执行文件不是问题。