之前迁移服务器站点和数据的时候,我能想到的唯一办法是使用 ftp 工具将程序和数据库打包下载来,然后再使用 ftp 工具上传到另外一台服务器。这样的解决方案很浪费时间,经过同事介绍,使用 Linux 下的 scp 工具很容易的去完成服务器迁移工作,看来我这个半吊子程序员做运维还是不行滴 :)。。
scp 基于 ssh 登录,将当前主机文件 upload 给远程主机,或者将远程主机的文件 download 到当前操作主机。
当前主机文件 upload 给远程主机
复制文件
# 将本地的 /var/data.tar.gz 文件上传到 222.222.222.222 服务器的 data 目录下
# 文件名不变,命令执行后需要输入远程主机的 root 用户密码
scp /var/data.tar.gz root@222.222.222.222:/data/
# 将本地的 /var/data.tar.gz 文件上传到 222.222.222.222 服务器的 data 目录下
# 文件名变为 upload.tar.gz,命令执行后需要输入远程主机的 root 用户密码
scp /var/data.tar.gz root@222.222.222.222:/data/upload.tar.gz
# 将本地的 /var/data.tar.gz 文件上传到 222.222.222.222 服务器的 data 目录下
# 文件名不变,命令执行后需要输入远程主机的用户名字的密码
scp /var/data.tar.gz 222.222.222.222:/data/
# 将本地的 /var/data.tar.gz 文件上传到 222.222.222.222 服务器的 data 目录下
# 文件名变为 upload.tar.gz,命令执行后需要输入远程主机的用户名和密码
scp /var/data.tar.gz 222.222.222.222:/data/upload.tar.gz
复制目录
# 将本地的 /var/log 目录上传到 222.222.222.222 服务器的 data 目录下
# 即远程主机产生 /data/log/ 目录,命令执行后需要输入远程主机的 root 用户密码
scp -r /var/log/ root@222.222.222.222:/data/
# 将本地的 /var/log 目录上传到 222.222.222.222 服务器的 data 目录下
# 即远程主机产生 /data/log/ 目录,命令执行后需要输入远程主机的 root 用户密码
scp -r /var/log/ 222.222.222.222:/data/
远程主机文件 download 到当前主机文件
只要将上面《当前主机文件 upload 给远程主机》的后面两个参数(本地目录和远程目录)调换顺序就好,例如:
# 将远程主机的 data.tar.gz 文件下载到本地 /var/ 目录下
# 文件名不变,命令执行后需要输入远程主机的 root 用户密码
scp root@222.222.222.222:/data/data.tar.gz /var/
# 将远程主机的 /var/log/ 目录下载到当前主机的 data 目录下
# 即本地主机产生 /data/log/ 目录,命令执行后需要输入远程主机的 root 用户密码
scp -r 222.222.222.222:/var/log/ /data/
其他
如果远程主机的默认 SSH 端口被改的话,可以使用 -p
参数,例如:
scp -p 22001 root@222.222.222.222:/data/data.tar.gz /var/
还有一些其他参数, -v
(显示进度)、 -4
(使用 IPV4 地址), -6
(使用 IPV6 地址)。
在使用 scp 的过程中,注意所使用的用户是否具有可读取远程服务器相应文件的权限。
如果你使用的是 OS X
系统或者 Linux
系统,还可以实现本地的文件上传,下载等功能。如果是 windows
系统的话,我没折腾过,大家可以试试。
Linux 之间传输文件的其他方式:
- 一台主机安装 ftp Server,另外一台使用ftp的Client程序。
- 采用samba服务。
- 将文件放到 Web 目录下,另外一台进行
wget
下载(我能想到的只有这么多了)。
前两方式我没试过,不保证很简单。