c # консольное приложение резервного копирования MySQL

0

Я пытаюсь использовать этот код в качестве консольного приложения, чтобы я мог создать резервную копию mydatabase automatics Я не уверен, что с ним не так.

static void Main(string[] args)
{    
    try
    {
        DateTime backupTime = DateTime.Now;
        int year = backupTime.Year;
        int month = backupTime.Month;
        int day = backupTime.Day;
        int hour = backupTime.Hour;
        int minute = backupTime.Minute;
        int second = backupTime.Second;
        int ms = backupTime.Millisecond;

        String tmestr = backupTime.ToString();
        tmestr = "C:\\" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + ".sql";
        StreamWriter file = new StreamWriter(tmestr);
        ProcessStartInfo proc = new ProcessStartInfo();
        string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");
        proc.FileName = "mysqldump";
        proc.RedirectStandardInput = false;
        proc.RedirectStandardOutput = true;
        proc.Arguments = cmd;//"-u root -p smartdb > testdb.sql";
        proc.UseShellExecute = false;
        Process p = Process.Start(proc);
        string res;
        res = p.StandardOutput.ReadToEnd();
        file.WriteLine(res);
        p.WaitForExit();
        file.Close();

    }

    catch (IOException ex)
    {
        MessageBox.Show("Disk full or other IO error , unable to backup!");
    }
}
  • 0
    Пожалуйста, примите некоторые из ваших предыдущих вопросов ... Вы пытались отладить свой код? Это не наша работа, чтобы делать вашу работу.
Теги:
c#-4.0

3 ответа

0

Почему вы создаете StreamWriter и пытаетесь получить вывод mysqldump, почему бы просто не сказать mysqldump для записи непосредственно в файл резервной копии?

string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > ""{4}"";",
    "root", "", "localhost", "dbfile", tmestr);
0

для начала я бы изменил, как вы выводите информацию. Вы по существу открываете файл, чтобы вы могли перенаправить вывод утилиты резервного копирования в этот файл. > в вызове процесса для этой цели. Просто измените параметр "backup.sql" на tmestr.

Кроме того, поскольку выход уже перенаправляется в файл, вашему процессу нечего возвращать. Но поскольку у нас теперь есть дамп по правильному пути, это должно быть неуместным.

Одно окончательное изменение, добавьте пробел между вашим -u{0}, чтобы он -u {0}. И то же самое с -h {2}.

Вкратце:

  • удалить StreamWriter и все связанные с ним переменные
  • измените String.Format в ваших аргументах процесса, чтобы использовать `tmestr
  • добавьте пробелы в вашу переменную cmd для -u & -h

И вы должны быть хорошими в работе (при условии, что это не проблема с поиском исполняемого файла mysqldump.

0

Так как я не уверен, какую ошибку вы получаете, по крайней мере, это может быть изменено.

string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");

Позже вы прокомментировали, что это должно быть -u root -p smartdb > testdb.sql"; кроме вышеперечисленного, отсутствует пробел после -u, поэтому я бы изменил его на:

string cmd = string.Format(@"-u {0} -p {1} -h {2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню