使用C#进行MySQL数据库备份

时间:2012-12-06 06:48:33

标签: c# mysql mysqldump

我正在尝试取回一个mysql数据库。 我创建的代码是

ProcessStartInfo proc = new ProcessStartInfo();
string cmd = string.Format(@"-u{0} -p{1} -E -R -h{2} {3}", UserName, PWD, hostname, dbname);
proc.FileName = "Path to mysqldump.exe";
proc.RedirectStandardInput = false;
proc.RedirectStandardOutput = true;
proc.Arguments = cmd;
proc.UseShellExecute = false;
Process p = Process.Start(proc);
string res;
res = p.StandardOutput.ReadToEnd();
file.WriteLine(res);
p.WaitForExit();
file.Close();

问题是当数据库大小很小时它正常工作,但当我试图恢复大型数据库(大约800 MB)时,我得到Out Of Memory Exception

2 个答案:

答案 0 :(得分:1)

不是在C#中读取标准输出,为什么不通过命令行直接将其写入文件?

我通常使用以下命令获取mysqldump。它适用于Windows和Linux。

mysqldump -u{user} -p{password} --routines --triggers --result-file={dest_filename} {dbname}

-OR -

mysqldump -u{user} -p{password} --routines --triggers {dbname} > {dest_filename}

当您尝试在下一行中读取C#中的整个mysqldump输出到内存时,可能会遇到Out of memory异常(通常在字符串超过一定大小时发生)。

res = p.StandardOutput.ReadToEnd();

答案 1 :(得分:0)

看起来非常大的字符串吃了内存。

尝试使用OutputDataReceived事件在输出文件中写入数据。

以下是两个带示例的链接 -

  1. Process.OutputDataReceived Event
  2. Process.BeginOutputReadLine Method