Восстановление БД MySQL из backup-файла restore.sql с помощью утилиты mysql в C#
Код:
// функция резервного сохранения БД
public bool RunBackup(string fileSave, string server, string port, string db, string login, string pass)
{
StreamWriter file = new StreamWriter(fileSave, false, Encoding.Unicode);
string output;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "mysqldump.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.Arguments = string.Format(@"-l -u{0} {1} -h{2} -P {3} {4}", login, string.IsNullOrEmpty(pass) ? "" : "-p" + pass, server, port, db);
Process pr = Process.Start(psi);
try
{
output = pr.StandardOutput.ReadToEnd();
file.WriteLine(output);
pr.WaitForExit();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
finally
{
file.Close();
pr.Close();
}
return true;
}
public bool RunBackup(string fileSave, string server, string port, string db, string login, string pass)
{
StreamWriter file = new StreamWriter(fileSave, false, Encoding.Unicode);
string output;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "mysqldump.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.Arguments = string.Format(@"-l -u{0} {1} -h{2} -P {3} {4}", login, string.IsNullOrEmpty(pass) ? "" : "-p" + pass, server, port, db);
Process pr = Process.Start(psi);
try
{
output = pr.StandardOutput.ReadToEnd();
file.WriteLine(output);
pr.WaitForExit();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
finally
{
file.Close();
pr.Close();
}
return true;
}
Код:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "mysql.exe";
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = false;
psi.UseShellExecute = false;
Process pr = Process.Start(psi);
pr.StandardInput.WriteLine("-uroot -p555 -hlocalhost test < restore.sql");
try
{
pr.WaitForExit();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
psi.FileName = "mysql.exe";
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = false;
psi.UseShellExecute = false;
Process pr = Process.Start(psi);
pr.StandardInput.WriteLine("-uroot -p555 -hlocalhost test < restore.sql");
try
{
pr.WaitForExit();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
Код:
Process.Start("cmd", "/C mysql.exe -uroot -p555 -hlocalhost test < restore.sql").WaitForExit();
Цитата: Der Meister
Код:
Process.Start("cmd", "/C mysql.exe -uroot -p555 -hlocalhost test < restore.sql").WaitForExit();
Спасибо огромное!!!!!!
Вот решение проблемы:
Код:
Process.Start("cmd.exe", "/C mysql.exe -uroot -p555 -hlocalhost test <restore.sql").WaitForExit();
Что значит "не работает"? Какие сообщения выводит?
Ничего не выводит... просто в бд не появляются таблицы... значит что-то не так.
Цитата: Aндрей
Ничего не выводит... просто в бд не появляются таблицы... значит что-то не так.
ну наверное не так. Аргументы передаются процессу? В каком виде? Вероятно совершенно не так, как вы ожидаете.
Код:
pr.StandardInput.WriteLine("-uroot -p555 -hlocalhost test < restore.sql");
Код:
//pr.StandardInput.WriteLine("mysql -uroot -p555 -hlocalhost test < restore.sql");
// psi.Arguments = "-uroot -pp10452105 -hlocalhost test < t.sql";
// psi.Arguments = "mysql -uroot -pp10452105 -hlocalhost test < t.sql";
// psi.Arguments = "-uroot -pp10452105 -hlocalhost test < t.sql";
// psi.Arguments = "mysql -uroot -pp10452105 -hlocalhost test < t.sql";
Цитата: Aндрей
Все-равно не получается, что-то я явно делаю не так...
как задать аргументы приведено в вашем же коде - там где выполняется бекап.
Если задать их именно так - то же не работает?
Функцию сохранения я нашел в статье интернете, но обратной там не было(( Вот нужно разобраться, как сделать обрутную
Код:
//Здесь все приготовили, задали параметры
string line = "";
Process pr = Process.Start(psi);
while (!pr.StandardOutput.EndOfStream) {
line = pr.StandardOutput.ReadLine();
}
string line = "";
Process pr = Process.Start(psi);
while (!pr.StandardOutput.EndOfStream) {
line = pr.StandardOutput.ReadLine();
}
Я не понимаю, нужно ли работать с файлом, как в первой функции или можно просто передать параметры... Если передаю параметры
Потому что надо использовать не WriteLine - как у вас, а задать параметры.
Цитата: kot_
Потому что надо использовать не WriteLine - как у вас, а задать параметры.
Вот здесь я сразу задаю во второй переменной параметры, без использования pr.StandardInput.WriteLine или ProcessStartInfo.
Process pr = Process.Start("mysql.exe", "mysql -uroot -p555 test < c4.sql");
и результат, как написал выше, появляется командная строка, быстро выводит что-то типо справки и исчезает.. Значит я передаю параметры как-то не так((