如何通过SSH在后台执行gunzip文件导入MySQL,避免连接中断?
直接后台运行并避免SSH断开中断的几种方法
方法1:用nohup直接后台执行
这是最简便的方案,nohup会让进程忽略SSH断开时发送的HUP信号,确保任务持续运行,同时还能记录日志方便排查问题。
执行命令:
nohup gunzip -c test.sql.gz | mysql test_db > import.log 2>&1 &
nohup:让进程脱离当前SSH会话,不受连接断开影响> import.log 2>&1:把命令的正常输出和错误信息都写入import.log文件,后续可通过tail -f import.log查看实时导入进度或报错&:将命令放到后台运行
执行后直接关闭SSH即可,任务会在服务器后台继续执行。
方法2:用screen创建持久化终端会话
如果需要后续重新连接查看导入状态,screen是更适合的工具——它能创建独立的终端会话,SSH断开后会话内的进程不会终止。
操作步骤:
- 创建新的screen会话:
screen -S mysql_import
- 在新会话中运行导入命令:
gunzip -c test.sql.gz | mysql test_db
- 按下
Ctrl+A再按D,脱离当前会话,此时可以安全关闭SSH连接 - 后续重新登录服务器后,恢复会话查看状态:
screen -r mysql_import
若存在多个screen会话,用screen -ls列出所有会话,再通过screen -r 会话ID连接指定会话。
方法3:用tmux(更现代的会话管理工具)
tmux是screen的进阶替代工具,功能更丰富,用法类似:
操作步骤:
- 创建新tmux会话:
tmux new -s mysql_import
- 在会话内运行导入命令:
gunzip -c test.sql.gz | mysql test_db
- 按下
Ctrl+B再按D,脱离会话 - 重新登录后恢复会话:
tmux attach -t mysql_import
用tmux ls查看所有会话,在会话内输入exit即可关闭会话。
内容的提问来源于stack exchange,提问作者BT643
相关产品推荐
相关产品推荐

