3

我已经成功创建了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();
4

2 回答 2

0

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

于 2011-08-12T07:02:17.910 回答
0

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

如果数据库已经存在,如果你想恢复它,你可能需要使用 mysqlimport -u [uname] -p[pass] [dbname] [backupfile.sql]

我还注意到您使用了 psi.RedirectStandardOutput = false; 在备份中它是真实的还原。您没有使用输出,因此它们可能都是错误的。

如果这一切都失败了,如果您可以包含您在恢复时遇到的错误,这可能会有所帮助

于 2011-08-12T07:27:38.637 回答