Резервное копирование базы данных в MySQL с помощью C#
Я создал Winforms для резервного копирования моей базы данных. Затем, когда я запускаю свою программу, она дает исключение Win32Exception. "Система не может найти указанный файл", хотя файл уже существует и привел к этому исключению.
вот мой код относительно моей проблемы
using System.Diagnostics;
private void btnProceed_Click(object sender, EventArgs e)
{
path = @"D:MySQLMySQL Server 5.5binmysqldump.exe -u " + txtBoxDBUsername.Text + @" -p " + txtBoxDBName.Text + @" > D:C#ClientSalesmate - EMCSalesMateBackup" + maskeTxtBoxDBFile.Text + @"";
Process p = new Process();
p.StartInfo.FileName = path;
p.Start();
}
6 ответов
Вы можете использовать MySqlBackup.NET как альтернатива MySqlDump
Documentation:
http://www.codeproject.com/Articles/256466/MySqlBackup-NET-MySQL-Backup-Solution-for-Csharp-V
https://github.com/MySqlBackupNET/MySqlBackup.Net
Пример кода:
резервное копирование базы данных MySQL
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();
}
}
}
}
обновление:
Я один из авторов этой библиотеки.
Я попробовал этот код, но проблема возникает перед запуском. exeption is-необработанное исключение типа ' System.ИО.FileLoadException ' произошло в системе.Окна.Формы.dll файлы
дополнительная информация: не удалось загрузить файл или сборку MySql.Данные, версия=6.5.4.0, культура=нейтральная, PublicKeyToken=c5687fc88969c44d' или одна из его зависимостей. Определение манифеста сборки расположены не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Я считаю, что вы должны упомянуть пользователя, 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
восстановить:# mysql-u root-p[root_password] [имя_базы_данных]
http://www.thegeekstuff.com/2008/09/backup-and-restore-mysql-database-using-mysqldump/
- не помещайте весь вызов внутри " path =", вы должны использовать" аргументы", чтобы указать аргументы, как говорит name. Если библиотека проверяет наличие вызываемого файла (весь ваш путь), она не должна его найти!
- вы уверены, что путь правильный? Вы должны найти MySQL Server path с помощью реестра, а не жесткого кодирования пути, или если это может быть нелегко для вас, вы можете передать его в качестве аргумента из командной строки или указать из своей формы (страница настроек).
- вы можете иметь пропущенные учетные данные:- u должен использоваться для имени пользователя (даже если я использую --user) и-p должен быть для пароля (даже если я использую --password). Почему вы передаете " txtBoxDBимя.Текст" как пароль?!
- возможно, ваш путь назначения недействителен: он содержит пробелы, если вы используете пробелы, вы должны использовать кавычки.
- что делает txtBoxDBName.Текст (?пароль?) содержит? Пространства тоже? Если да, то это не работает.
- последнее присутствие
+ @""
совершенно бесполезно, это не вставить любые кавычки.
правильная версия вашего кода с исправленными кавычками:
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}""";
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-файл
вы можете попробовать это.
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;
}
}
}
}
}