我已成功创建了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();
答案 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;在还原中备份中的位置。你没有使用输出,所以它们可能都是假的。
如果全部失败,如果您可以包含可能有用的恢复错误