使用C#在MySQL中备份数据库

时间:2012-09-07 03:54:03

标签: c# mysql winforms

我创建了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();
}

6 个答案:

答案 0 :(得分:21)

您可以使用 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();
            }
        }
    }
}

<强>更新
我是这个图书馆的作者之一。

答案 1 :(得分:1)

我已尝试该代码,但在运行之前出现问题。 exeption是 - 一个未处理的类型&#39; System.IO.FileLoadException&#39;发生在System.Windows.Forms.dll

其他信息:无法加载文件或程序集&#39; MySql.Data,Version = 6.5.4.0,Culture = neutral,PublicKeyToken = c5687fc88969c44d&#39;或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

答案 2 :(得分:0)

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

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]&gt; dumpfilename.sql

恢复:#mysql -u root -p [root_password] [database_name]&lt; dumpfilename.sql

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

答案 3 :(得分:0)

你可以试试这个。

    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 :(得分:0)

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

更正引号的代码的正确版本是:     ORG_UNIT_ID

为了更好的可读性:     + @""

答案 5 :(得分:0)

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}<{4}", "root", "password", "localhost", "your_dbname", "your_.sql_file");
psi.UseShellExecute = false;
Process process = Process.Start(psi);
process.StandardInput.WriteLine(input);
process.StandardInput.Close();
process.WaitForExit();
process.Close();

这个对我有用,只要您备份了.sql文件,就可以试用它