一位同事正在按计划从linux机器上备份Windows机器上的mysql数据库。 linux和windows机器使用不同版本的mysql,所以我们不能在linux机器上运行mysqldump并将它连接到Windows机器,所以他通过SSH在Windows机器上运行mysqldump,并将输出传输到一个文件。 他写了一个脚本,testing了它,然后用cron(没有testing过)安排它,当然,它失败了 – 当通过cron运行时,mysqldump的SSH没有输出,所以备份文件是0字节。 相同的脚本运行没有cron产生一个mysql备份。
那时候我介入了。
我用几种不同的方式摆弄它。 我已经将env引导到磁盘,添加了SSH冗长,想知道是否与TTY有什么关系,所以尝试了-t , -tt和-T ,但是我仍然不知道为什么失败。 通过向SSH添加-v可以看到正在build立连接,validation成功,正在发送命令。 唯一真正的区别是,当我通过cron调度脚本时,mysqldump输出丢失。
如果有人认为他们会帮助,我可以发布SSHdebugging日志的清理输出。 可以得到Windows,CentOS和MySQL版本,如果他们是相关的。 乐于尝试build议。
最终,我们可能会将mysqldump输出redirect到Windows磁盘上,然后复制该文件,所以可能有一个替代path,但是我对发生的事情感到困惑,而且我更愿意理解。 ;)
事实certificate,这是OpenSSH for Windows中的一个bug,最终我发现了一篇关于Windows的博客文章 ,这个博客文章反过来又与一个bug报告相关联。
有一个解决方法,但它也是固定的,所以如果我们升级Windows上的OpenSSH,它应该走的方式。