我想自动化将数据库从远程服务器复制到本地服务器的过程。当我在命令提示符下运行它时,它工作正常:
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- [some ip地址] .nyc.biz.rr.com(使用密码:NO)尝试连接时。
如果我修改命令行并删除“| mysql -u root [db name]”它会运行(它只是不按我想要的那样)。它似乎是|把事情搞砸了。什么是特别的|,我该怎么做才能解决这个问题?
编辑: 如果我使用进程资源管理器,我可以看到C#无法将任何命令行参数传递给mysqldump。我不认为问题是mysqldump,我认为问题是process.start()无法处理参数中的特殊字符。
答案 0 :(得分:1)
我认为你试图将mysqldump的输出传递给另一个不存在的进程。我找到了这个,它解释了如何管道输出。它不漂亮:
http://channel9.msdn.com/Forums/TechOff/202091-ProcessStartInfo-pipe-output-to-another-exe
答案 1 :(得分:0)
Mysql可能会看到来自不同主机的连接;
使用mysqldump时的Localhost / netbios;
使用Process.Start()时,rrcs- [some ip address] .nyc.biz.rr.com
尝试添加'root'@ rrcs- [some ip address] .nyc.biz.rr.com'的权限以匹配'root'@'localhost'/'root'@'machinename'的权限