C# mysql转储-未知数据库';mysqldump';

C# mysql转储-未知数据库';mysqldump';,c#,mysql,C#,Mysql,我正在尝试使用mysqldump从c#导出数据库 当我运行它时,我会收到以下消息:选择数据库时,未知数据库“mysqldump”。 我找不到解决办法 public static void mysqlBackup() { try { //string time = DateTime.Now.ToString("dd-MM-yyyy"); Log.Info("Starting MySQL dump"); Process MySql

我正在尝试使用mysqldump从c#导出数据库

当我运行它时,我会收到以下消息:选择数据库时,未知数据库“mysqldump”。 我找不到解决办法

public static void mysqlBackup()
{
    try
    {
        //string time = DateTime.Now.ToString("dd-MM-yyyy");

        Log.Info("Starting MySQL dump");


        Process MySqlDump = new Process();
        MySqlDump.StartInfo.FileName = @"mysqldump.exe";
        MySqlDump.StartInfo.UseShellExecute = false;
        MySqlDump.StartInfo.Arguments = 
           "mysqldump -uroot -p******** b3 >"+ 
           " C:/Users/Administrator/Documents/temp/backups/backup.sql";
        MySqlDump.StartInfo.RedirectStandardInput = false; 
        MySqlDump.StartInfo.RedirectStandardOutput = false;

        MySqlDump.Start();

        MySqlDump.WaitForExit();
        MySqlDump.Close();

        Log.Info("Successfull created");
    }

    catch (IOException ex)
    {
        Log.Error("Unable to write the database file" + ex.ToString());
    }
}

我试图从参数中删除mysqldump,这有点像同一个问题。

我认为您需要指定要转储的数据库的名称作为第一个参数。多亏了nathan,它在最后的
--databases
后面。我认为您需要指定要转储的数据库的名称作为第一个参数。多亏了nathan,它在结尾处使用了
--databases

Mysql文档说明有3种方法可以使用mysqldump命令:

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
通过命令行确保命令正常工作。如果这样做,则直接在代码中执行该命令。如果可行,那么就开始提取参数,并在代码中用自己的参数替换它们

基本上,你希望得到尽可能基本的,并从那里恢复工作

如果文件在命令行中工作,请尝试以下操作:

using (Process p = new Process())
{        
        p.StartInfo.FileName = @"mysqldump.exe -u root -p *** --database b3 -r test.sql"; <~~~ note the change here
        p.Start();
        p.WaitForExit();
}

Mysql文档说明有3种方法可以使用mysqldump命令:

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
通过命令行确保命令正常工作。如果这样做,则直接在代码中执行该命令。如果可行,那么就开始提取参数,并在代码中用自己的参数替换它们

基本上,你希望得到尽可能基本的,并从那里恢复工作

如果文件在命令行中工作,请尝试以下操作:

using (Process p = new Process())
{        
        p.StartInfo.FileName = @"mysqldump.exe -u root -p *** --database b3 -r test.sql"; <~~~ note the change here
        p.Start();
        p.WaitForExit();
}

重定向操作符
不是
mysqldump
的参数。当您在命令行上执行它时,它是由命令行本身解释的,而不是由mysqldump解释的。您有两种选择:

  • 使用其他人提到的
    --result file
    选项
  • 捕获流程的标准输出,并通过将
    StartInfo
    RedirectStandardOutput
    属性设置为
    true
    来处理输出。在此之后,您可以从流程的
    StandardOutput
    流中读取

  • 重定向操作符
    不是
    mysqldump
    的参数。当您在命令行上执行它时,它是由命令行本身解释的,而不是由mysqldump解释的。您有两种选择:

  • 使用其他人提到的
    --result file
    选项
  • 捕获流程的标准输出,并通过将
    StartInfo
    RedirectStandardOutput
    属性设置为
    true
    来处理输出。在此之后,您可以从流程的
    StandardOutput
    流中读取
  • 您也不需要在命令中再次指定mysqldump(这并不是说它应该有多大区别)



    您也不需要在命令中再次指定mysqldump(这并不是说它会有很大的区别)。

    从参数中删除mysqldump时会发生什么情况?如果从等式中删除进程,它会起作用吗?@tware mysqldump:找不到表:“>”从参数中删除mysqldump时会发生什么情况?如果从等式中删除该进程,它会起作用吗?@tweet mysqldump:找不到表:“>”它跟在选项后面当我直接在命令行中键入它时,它会跟在选项后面,但当我从c#运行它时,我会得到上面的消息。这会导致崩溃,因为你必须添加p.StartInfo.Arguments。它将读取数据库,但它出现在控制台窗口中,而不是backup.sql文件中。我以前运行过带参数的程序,但没有使用StartInfo.arguments参数,因此我不确定它为什么会崩溃。。。但是,如果它将数据输出到控制台窗口,那么我们知道大部分命令都在工作,而导致问题的是重定向。找不到表:“>”?不,我在控制台中获得数据库输出,而不是在backup.sql文件中。如果不起作用,您也可以尝试--result file=file_name而不是-rw,当我直接在命令行中键入它时,它可以工作,但当我从c#运行它时,会收到上面的消息。这将导致崩溃,因为您必须添加p.StartInfo.Arguments。它将读取数据库,但它出现在控制台窗口中,而不是backup.sql文件中。我以前运行过带参数的程序,但没有使用StartInfo.arguments参数,因此我不确定它为什么会崩溃。。。但是,如果它将数据输出到控制台窗口,那么我们知道大部分命令都在工作,而导致问题的是重定向。找不到表:“>”?否,我在控制台中获得数据库输出,而不是在backup.sql文件中。如果这不起作用,您也可以尝试--result file=file\u name,而不是-r感谢您这是解决方案+1.谢谢你。。。另一方面,我在尝试用引号存储mysqldump命令行语句时遇到了以下错误,以便记录该命令并执行它<代码>mysqldump:选择数据库时出现错误:1049:未知数据库“>”谢谢,这就是解决方案+1.谢谢你。。。另一方面,我在尝试用引号存储mysqldump命令行语句时遇到了以下错误,以便记录该命令并执行它<代码>mysqldump:选择数据库时出现错误:1049:未知数据库“>”