无法在C#中使用mysql.exe恢复mysql转储文件

时间:2011-08-12 06:57:58

标签: c# mysql mysqlbackup.net

我已成功创建了mysql数据库转储文件(utf8):

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Application.StartupPath + "\\mysqldump.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-r D:\\backup.sql --user=root --password=1234 --opt databasename";
psi.UseShellExecute = false;

Process process = Process.Start(psi);
process.WaitForExit();
process.Close();

通过使用带有此单行命令的Windows CMD,我能够将utf8转储文件成功恢复到数据库中:

mysql.exe -u root --password=1234 databasename < d:\backup.sql

但是,我无法在C#中执行该命令。你能告诉我哪里出了问题吗?非常感谢你。以下是我的命令:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Application.StartupPath + "\\mysql.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = false;
psi.Arguments = "--user=root --password=1234 databasename < D:\\backup.sql";
psi.UseShellExecute = true;

Process process = Process.Start(psi);
process.WaitForExit();
process.Close();

3 个答案:

答案 0 :(得分:1)

这是由于参数中的管道。

见这里:

Piping in a file on the command-line using System.Diagnostics.Process

你必须自己传递转储文件......

答案 1 :(得分:0)

您确定您的C#exe是在安装MySQL的同一目录中执行的吗?如果从c命令行运行:FileName将是C:\ mysqldump.exe。我怀疑它躺在那里。如果mysqldump.exe在路径中,您可能不需要附加Application.StartupPath或任何其他路径......

答案 2 :(得分:0)

您可能希望在还原中省略数据库名称。因为您创建了带有DB名称的转储文件,所以它不需要,也可能不喜欢您提供的数据库名称。我知道它在命令行运行,所以可能不是它,但我看到的语法是 psi.Arguments =“ - user = root --password = 1234&lt; D:\ backup.sql”;

如果数据库已存在,您想要还原它,则可能需要使用 mysqlimport -u [uname] -p [pass] [dbname] [backupfile.sql]

我也注意到你使用了psi.RedirectStandardOutput = false;在还原中备份中的位置。你没有使用输出,所以它们可能都是假的。

如果全部失败,如果您可以包含可能有用的恢复错误