c # консольное приложение резервного копирования MySQL - PullRequest
0 голосов
/ 19 января 2011

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

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!");
    }
}

Ответы [ 3 ]

0 голосов
/ 19 января 2011

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

string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > ""{4}"";",
    "root", "", "localhost", "dbfile", tmestr);
0 голосов
/ 19 января 2011

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

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

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

В итоге:

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

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

0 голосов
/ 19 января 2011

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

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...