Не удается восстановить файл дампа mysql с помощью mysql.exe в C # - PullRequest
2 голосов
/ 12 августа 2011

Я успешно создал файл дампа базы данных mysql (utf8) с этим:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Application.StartupPath + "\\mysqldump.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-r D:\\backup.sql --user=root --password=1234 --opt databasename";
psi.UseShellExecute = false;

Process process = Process.Start(psi);
process.WaitForExit();
process.Close();

Я могу успешно восстановить файл дампа utf8 в базу данных, используя windows CMD с помощью этой однострочной команды:

mysql.exe -u root --password=1234 databasename < d:\backup.sql

но мне не удалось выполнить команду в C #.Не могли бы вы посоветовать мне, где что-то пошло не так?Большое вам спасибо.Ниже приведены мои команды:

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Application.StartupPath + "\\mysql.exe";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = false;
psi.Arguments = "--user=root --password=1234 databasename < D:\\backup.sql";
psi.UseShellExecute = true;

Process process = Process.Start(psi);
process.WaitForExit();
process.Close();

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Это из-за конвейера в аргументах.

см. Здесь:

Передача файла в командной строке с использованием System.Diagnostics.Process

вам придется передать файл дампа в себя ...

0 голосов
/ 12 августа 2011

Возможно, вы захотите пропустить имя базы данных при восстановлении.поскольку вы создали файл дампа с именем БД, он не нужен и может не понравиться имени базы данных, которое вы указали.Я знаю, что он запускался в командной строке, так что это может быть не так, но синтаксис, который я видел, был psi.Arguments = "--user = root --password = 1234

Если база данных уже существует, и вы хотите ее восстановить, вам может потребоваться использовать mysqlimport -u [uname] -p [pass] [dbname] [backupfile.sql]

Я также заметил, что вы использовали psi.RedirectStandardOutput = false;в восстановлении, где это было верно в резервной копии.вы не используете выходные данные, поэтому они оба, скорее всего, будут ложными.

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

0 голосов
/ 12 августа 2011

Вы уверены, что ваш C # exe выполняется в том же каталоге, где установлен MySQL? Если вы работаете из командной строки в c: имя файла будет C: \ mysqldump.exe. Я сомневаюсь, что он там лежит. Если файл mysqldump.exe находится в пути, вам, вероятно, не потребуется добавлять Application.StartupPath или любой другой путь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...