2

我正在尝试备份 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();

问题是当数据库大小很小时它可以正常工作,但是Out Of Memory Exception当我尝试备份大型数据库(大约 800 MB)时我得到了。

4

2 回答 2

1

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

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

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

-或者-

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

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

res = p.StandardOutput.ReadToEnd();
于 2012-12-06T07:03:30.630 回答
0

看起来很大的字符串吃掉了内存。

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

这是两个带有示例的链接-

  1. Process.OutputDataReceived 事件
  2. Process.BeginOutputReadLine 方法
于 2012-12-06T07:40:00.037 回答