繁体   English   中英

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

[英]Cannot restore mysql dump file with mysql.exe in C#

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

这是由于 arguments 中的 pipe 所致。

看这里:

使用 System.Diagnostics.Process 在命令行上输入文件

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

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

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

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

我还注意到您使用了 psi.RedirectStandardOutput = false; 在备份中它是真实的还原。 你没有使用 output 所以它们应该都是假的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM