2012-12-06 176 views
2

我正在嘗試備份一個mysql數據庫。 我正在創建的代碼是使用C的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)的。

+1

錯誤消息解釋了許多things.How多大的空間,你有在C盤確定備份操作的空間在進行備份或任何curd內存管理時使用臨時內存。 – Pratik

+0

@Ptik約有64 GB的可用空間.. – Rakesh

+0

讀取數據庫文件的方法可以ü發佈樣本,因爲這可能是原因 – Pratik

回答

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} 

你會遇到試圖讀取mysqldump的整個輸出到存儲在C#以下行(當可能已經造成了Out of memory異常通常發生在一個字符串時超過一定的尺寸)。

res = p.StandardOutput.ReadToEnd(); 
+0

謝謝Tanzeel讓我試試。 – Rakesh

+0

我認爲「>」是爲DOS命令,它給了我錯誤「找不到表格」。「 – Rakesh

+0

@Vijesh是的,就像我在通過命令行回答中所說的那樣。你可以使用'--result-file'參數來使用第一個建議,或者你也可以通過'cmd/c「{command to run}」'來運行它。 –