Проблема автоматизации mysqldump с использованием C#
Я хотел бы автоматизировать процесс копирования базы данных с удаленного сервера на локальный сервер. Когда я запускаю это в командной строке, он работает нормально:
mysqldump -h [remote server] -u [remote user] -p[password] --compress=FALSE --skip-lock-tables=TRUE --skip-add-locks=TRUE [db name] [list of tables I want to copy] | mysql -u root [db name]
Я пытаюсь автоматизировать это с помощью C#, используя стандартный Process.Start(), но я получаю сообщение об ошибке "Ошибка: 1045: доступ запрещен для пользователя 'root'@'rrcs-[некоторый IP-адрес].nyc.biz.rr.com (используя пароль: НЕТ) при попытке подключения.
Если я изменяю командную строку и удаляю "| mysql -u root [имя базы данных]", он запускается (он просто не делает то, что я хочу). Похоже, что | сбрасывает вещи Что особенного в |, что я могу сделать, чтобы обойти это?
РЕДАКТИРОВАТЬ: Если я использую Process Explorer, я вижу, что C# не в состоянии передать любые аргументы командной строки в mysqldump. Я не думаю, что проблема в mysqldump, я думаю, что проблема в том, что process.start() не может обрабатывать специальные символы в аргументах.
2 ответа
Я думаю, что вы пытаетесь направить вывод mysqldump в другой процесс, который не существует. Я нашел это, который объясняет, как передать вывод. Это не красиво:
http://channel9.msdn.com/Forums/TechOff/202091-ProcessStartInfo-pipe-output-to-another-exe
Mysql потенциально видит соединение с разных хостов;
Localhost / netbios при использовании mysqldump;
rrcs- [некоторый IP-адрес].nyc.biz.rr.com при использовании Process.Start()
попробуйте добавить разрешения для 'root'@'rrcs-[некоторый IP-адрес].nyc.biz.rr.com', чтобы они соответствовали разрешениям 'root'@'localhost'/'root'@'machinename'