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

f3temu5u  于 2023-05-16  发布在  Mysql
关注(0)|答案(5)|浏览(256)

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

eivnm1vs1#

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

更新:

我是这个图书馆的作者之一。

ttp71kqs

ttp71kqs2#

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

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] < dumpfilename.sql
http://www.thegeekstuff.com/2008/09/backup-and-restore-mysql-database-using-mysqldump/

lskq00tm

lskq00tm3#

  • 不要把整个调用放在“path =“里面,你应该使用“Arguments”来指定参数,就像name说的那样。如果库检查被调用文件的存在(你的整个路径),它不应该找到它!
  • 你确定这条路是正确的吗?你应该使用注册表找到MySQL服务器路径,而不是硬编码路径,或者如果它对你来说不容易,你可以从命令行传递它作为一个参数,或者从你的表单(设置页面)指定。
  • 您可能已丢失凭据:-u应该用于用户名(即使我使用--user),-p应该用于密码(即使我使用--password)。为什么传递txtBoxDBName.Text作为密码?!
  • 可能您的目标路径无效:它包含空格,如果你使用空格,你应该使用引号。
  • txtBoxDBName.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 + @"""";
为了更好的可读性: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}""";

8ehkhllq

8ehkhllq4#

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文件

b4wnujal

b4wnujal5#

你可以试试这个。

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();
    }
    catch(MySqlException ex)
    {
        msgErr(ex.Message + " connection error.");
        return;
    }

    try
    {
        mb.ExportToFile(file);
    }
    catch(MySqlException ex)
    {
        msgErr(ex.Message + " sql query error.");
    }
}

相关问题