首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#备份MySQL数据库

使用C#备份MySQL数据库
EN

Stack Overflow用户
提问于 2012-12-06 14:48:33
回答 2查看 2.6K关注 0票数 2

我正在尝试备份mysql数据库。我创建的代码是

代码语言:javascript
复制
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();

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 15:03:31

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

我通常使用以下命令获取mysqldump。它可以在Windows和Linux上运行。

代码语言:javascript
复制
mysqldump -u{user} -p{password} --routines --triggers --result-file={dest_filename} {dbname}

-或者-

代码语言:javascript
复制
mysqldump -u{user} -p{password} --routines --triggers {dbname} > {dest_filename}

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

代码语言:javascript
复制
res = p.StandardOutput.ReadToEnd();
票数 1
EN

Stack Overflow用户

发布于 2012-12-06 15:40:00

看起来很大的线吃掉了内存。

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

这里有两个链接和示例-

  1. Process.OutputDataReceived Event
  2. Process.BeginOutputReadLine Method
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13738361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档