我在这里做错了什么?
我登录到第一台服务器(使用 putty)并运行以下查询:
sh -c 'nohup mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &
如果我查看这两个数据库,我可以看到 MySQLDump 正在第一个数据库上运行,并在第二个数据库上导入。
但是当我关闭 Putty 会话(或者超时)时,mysqldump 停止运行。我认为使用nohup
应该让它保持运行?
由于运行大约需要 8 个小时,我不能坐在那里看着 Putty 8 个小时来阻止它超时。
答案1
由于您在没有 的情况下运行 shell ,因此当您关闭会话时,nohup
它会收到信号,并将其发送到管道中的所有进程。SIGHUP
由于第二个mysql
命令再次在没有 的情况下运行nohup
,因此它终止并发送到SIGPIPE
,nohup mysqldump
后者又终止。
尝试
nohup sh -c 'mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &
答案2
不知何故,我承认我自己并不完全确定它nohup
没有保护正确的位。幸运的是,有一个解决方案 -在第一台服务器上的screen
或会话内启动此进程。tmux
然后您可以断开screen
/tmux
会话并关闭 PuTTY 窗口,MySQL 转储/导入仍将运行。