我有 .sql 文件(550 MB),我想将它导入到正在运行的 mysql 服务器。我知道 mysql.exe 的路径。
我的想法是模仿命令行导入mysql -u user -ppass db_name < file.sql
。这从命令行运行良好(我设置了高 max_allowed_packet)。根据 Stackoverflow 上的另一个线程,我发现这很有效:
Process process = new Process();
process.StartInfo.FileName = mysqlexepath;
process.StartInfo.Arguments = "-v -u user -ppassworddbname";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
try
{
process.Start();
StreamWriter input = process.StandardInput;
using (StreamReader sr = new StreamReader(sqlfilepath))
{
while ((line = sr.ReadLine()) != null)
{
if (process.HasExited == true)
throw new Exception("DB went away.");
input.WriteLine(line);
input.Flush();
}
}
process.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
我可以看到如何在 DB 中创建表。但我的问题是大约一半的过程退出。我在谷歌上搜索一些超时设置,但找不到任何东西。
我也尝试先读取文件:
var file = FileInfo(sqlfilepath);
StreamReader reader = file.OpenText();
string fileContents = reader.ReadToEnd();
StreamWriter input = process.StandardInput;
input.AutoFlush = true;
input.Write(fileContents);
input.Close();
但我得到 OutOfMemory 异常。所以正确的方法不会通过字符串。
对于如何找出问题所在的任何建议,我将不胜感激。我什至不知道它的进程超时或mysql超时,或者问题是否出在StreamReader中。