【问题标题】:Backing up Database in MySQL using C#使用 C# 在 MySQL 中备份数据库
【发布时间】:2012-08-31 22:43:37
【问题描述】:

我创建了一个 Winforms 来备份我的数据库。然后当我运行我的程序时,它给出了一个未处理的 Win32Exception。 “系统找不到指定的文件”尽管该文件已经存在并导致该异常。

这是关于我的问题的代码

using System.Diagnostics;

private void btnProceed_Click(object sender, EventArgs e)
{
            path = @"D:\MySQL\MySQL Server 5.5\bin\mysqldump.exe -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > D:\C#\Client\Salesmate - EMC\SalesMate\Backup\" + maskeTxtBoxDBFile.Text + @"";
            Process p = new Process();
            p.StartInfo.FileName = path;
            p.Start();
}

【问题讨论】:

    标签: c# mysql winforms


    【解决方案1】:
    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = @"C:\xampp\mysql\bin\mysql.exe";
    psi.RedirectStandardInput = true;
    psi.RedirectStandardOutput = false;
    psi.CreateNoWindow = true;
    psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", "root", "password", "localhost", "your_dbname");
    psi.UseShellExecute = false;
    Process process = Process.Start(psi);
    process.StandardInput.Write(File.ReadAllText(inputFilePath));
    process.StandardInput.Close();
    process.WaitForExit();
    process.Close();
    

    这个对我有用,只要你有备份的 .sql 文件,你就可以尝试一下

    【讨论】:

      【解决方案2】:

      您可以使用 MySqlBackup.NET 替代 MySqlDump
      文档:
      http://www.codeproject.com/Articles/256466/MySqlBackup-NET-MySQL-Backup-Solution-for-Csharp-V
      https://github.com/MySqlBackupNET/MySqlBackup.Net

      示例代码:

      备份 MySQL 数据库

      using MySql.Data.MySqlClient; 
      

      然后是代码,

      private void Backup()
      {
          string constring = "server=localhost;user=root;pwd=qwerty;database=test;";
          string file = "C:\\backup.sql";
          using (MySqlConnection conn = new MySqlConnection(constring))
          {
              using (MySqlCommand cmd = new MySqlCommand())
              {
                  using (MySqlBackup mb = new MySqlBackup(cmd))
                  {
                      cmd.Connection = conn;
                      conn.Open();
                      mb.ExportToFile(file);
                      conn.Close();
                  }
              }
          }
      }
      


      恢复 MySQL 数据库

      private void Restore()
      {
          string constring = "server=localhost;user=root;pwd=qwerty;database=test;";
          string file = "C:\\backup.sql";
          using (MySqlConnection conn = new MySqlConnection(constring))
          {
              using (MySqlCommand cmd = new MySqlCommand())
              {
                  using (MySqlBackup mb = new MySqlBackup(cmd))
                  {
                      cmd.Connection = conn;
                      conn.Open();
                      mb.ImportFromFile(file);
                      conn.Close();
                  }
              }
          }
      }
      

      更新:
      我是这个库的作者之一。

      【讨论】:

      • 感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
      • 通过免责声明,我的意思是您发布有关您自己的产品/网站的事实;您在“更新”底部添加的内容。
      • 如何让它定期备份,比如说每天一次
      • 你能制作一个不使用 Oracle GPL 客户端的库版本吗?因此,您的库也是 GPL!
      • @Abr 我会试着看看这个
      【解决方案3】:

      你可以试试这个。

          public void BackUpData(string file)
          {
              using (MySqlConnection con = new MySqlConnection { ConnectionString = config })
              {
                  using (MySqlCommand cmd = new MySqlCommand { Connection = con })
                  {
                      using (MySqlBackup mb = new MySqlBackup { Command = cmd })
                      {
      
      
                          try
                          {
                              con.Open();
      
                              try
                              {
                                  mb.ExportToFile(file);
                              }
                              catch(MySqlException ex)
                              {
                                  msgErr(ex.Message + " sql query error.");
                                  return;
                              }
                          }
                          catch(MySqlException ex)
                          {
                              msgErr(ex.Message + " connection error.");
                              return;
                          }
      
      
      
                      }
      
                  }
      
              }
      
          }
      

      【讨论】:

        【解决方案4】:
        • 不要把整个调用放在“path =”中,你应该使用“参数”来指定参数,正如名字所说的那样。如果库检查是否存在被调用文件(您的整个路径),它不应该找到它!
        • 您确定路径正确吗?您应该使用注册表找到 MySQL 服务器路径,而不是对路径进行硬编码,或者如果这对您来说不容易,您可以将其作为参数从命令行传递或从您的表单(设置页面)中指定。
        • 您可能错过了凭据:-u 应该用于用户名(即使我使用 --user),-p 应该用于密码(即使我使用 --password)。为什么要传递“txtBoxDBName.Text”作为密码?!
        • 可能您的目标路径无效:它包含空格,如果您使用空格,则应使用引号。
        • txtBoxDBName.Text (?password?) 包含什么?也有空格?如果是,它不起作用。
        • 最后出现+ @"" 完全没用,它不会插入任何引号。

        带引号的正确代码版本是: path = @"""D:\MySQL\MySQL Server 5.5\bin\mysqldump.exe"" -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > ""D:\C#\Client\Salesmate - EMC\SalesMate\Backup\" + maskeTxtBoxDBFile.Text + @"""";

        为了提高可读性: path = $@"""D:\MySQL\MySQL Server 5.5\bin\mysqldump.exe"" -u {txtBoxDBUsername.Text} -p {txtBoxDBName.Text} > ""D:\C#\Client\Salesmate - EMC\SalesMate\Backup{maskeTxtBoxDBFile.Text}""";

        【讨论】:

          【解决方案5】:

          我已经尝试过该代码,但在运行之前出现了问题。 exeption 是 - System.Windows.Forms.dll 中发生了“System.IO.FileLoadException”类型的未处理异常

          附加信息:无法加载文件或程序集 'MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

          【讨论】:

          • “MySql.Data.DLL”的 DLL 未随您的程序集一起提供。您必须在项目中将 DLL 的属性标记为“复制本地”
          【解决方案6】:

          我相信你必须提到用户,密码,数据库名称和目标路径..

          string path = @"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > " + txtBoxDBName.Text + @".sql"; 
          

          备份:#mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

          restore:# mysql -u root -p[root_password] [database_name]

          http://www.thegeekstuff.com/2008/09/backup-and-restore-mysql-database-using-mysqldump/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-25
            • 2011-12-02
            相关资源
            最近更新 更多