Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Восстановление БД MySQL из backup-файла restore.sql с помощью утилиты mysql в C#

58K
05 мая 2013 года
Aндрей
17 / / 21.11.2010
Не получается восстановить бд из backup файла. С помощью этой функции создается backup файл.
Код:
// функция резервного сохранения БД
        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;
        }
Если вручную восстановить из командной строки, то все нормально. Но нужно именно из C#. Вот, пытался написать функцию для восстановления, но она не работает.... помогите.

Код:
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;
            }
341
17 мая 2013 года
Der Meister
874 / / 21.12.2007
 
Код:
Process.Start("cmd", "/C mysql.exe -uroot -p555 -hlocalhost test < restore.sql").WaitForExit();
58K
17 мая 2013 года
Aндрей
17 / / 21.11.2010
Цитата: Der Meister
 
Код:
Process.Start("cmd", "/C mysql.exe -uroot -p555 -hlocalhost test < restore.sql").WaitForExit();


Спасибо огромное!!!!!!

58K
17 мая 2013 года
Aндрей
17 / / 21.11.2010
Не знаю, куда пропало сообщение Der Meister 843 / / 21.12.2007, но спасибо ему огромное!!!!
Вот решение проблемы:
 
Код:
Process.Start("cmd.exe", "/C mysql.exe -uroot -p555 -hlocalhost test <restore.sql").WaitForExit();
1
05 мая 2013 года
kot_
7.3K / / 20.01.2000
Что значит "не работает"? Какие сообщения выводит?
58K
05 мая 2013 года
Aндрей
17 / / 21.11.2010
Ничего не выводит... просто в бд не появляются таблицы... значит что-то не так.
1
05 мая 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Aндрей
Ничего не выводит... просто в бд не появляются таблицы... значит что-то не так.


ну наверное не так. Аргументы передаются процессу? В каком виде? Вероятно совершенно не так, как вы ожидаете.

58K
05 мая 2013 года
Aндрей
17 / / 21.11.2010
Я здесь жестко их вбил в этой строке, в целях тестирования, утилита mysql.exe и backup файлик валяются в bin рядом с исходником.
 
Код:
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";
Все-равно не получается, что-то я явно делаю не так...
1
05 мая 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Aндрей

Все-равно не получается, что-то я явно делаю не так...


как задать аргументы приведено в вашем же коде - там где выполняется бекап.
Если задать их именно так - то же не работает?

58K
06 мая 2013 года
Aндрей
17 / / 21.11.2010
Да нет, тоже самое... в бд никакой реакции
Функцию сохранения я нашел в статье интернете, но обратной там не было(( Вот нужно разобраться, как сделать обрутную
1
06 мая 2013 года
kot_
7.3K / / 20.01.2000
Во-первых, выясните что выводит ваша команда - например что-то типа такого:

 
Код:
//Здесь все приготовили, задали параметры
string line = "";
Process pr = Process.Start(psi);

while (!pr.StandardOutput.EndOfStream) {
             line = pr.StandardOutput.ReadLine();
}
Ну и попробуйте задать вместо localhost - 127.0.0.1, либо вообще опустить этот параметр,
58K
12 мая 2013 года
Aндрей
17 / / 21.11.2010
Я не понимаю, нужно ли работать с файлом, как в первой функции или можно просто передать параметры... Если передаю параметры
 
Код:
Process pr = Process.Start("mysql.exe", "mysql -uroot -p555 test < c4.sql");
то появляется командная строка, в ней быстро отображается что-то типо справки. в бд таблцы не создаются(
1
12 мая 2013 года
kot_
7.3K / / 20.01.2000
Потому что надо использовать не WriteLine - как у вас, а задать параметры.
58K
12 мая 2013 года
Aндрей
17 / / 21.11.2010
Цитата: kot_
Потому что надо использовать не WriteLine - как у вас, а задать параметры.


Вот здесь я сразу задаю во второй переменной параметры, без использования pr.StandardInput.WriteLine или ProcessStartInfo.

Process pr = Process.Start("mysql.exe", "mysql -uroot -p555 test < c4.sql");

и результат, как написал выше, появляется командная строка, быстро выводит что-то типо справки и исчезает.. Значит я передаю параметры как-то не так((

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог