前言
在管理mysql,初始化服务器、复制和备份/还原,跨网络的传输大文件是很常见的操作。

1、基本的操作

● 压缩大文件
● 发送到另一台服务器上
● 解压大文件
● 校验文件的完整性,是否有损坏

2、具体的操作  
 
(1)一般的步骤(scp)
server1:
gzip   -c   /backup/mysql/mytable.MYD     > mytable.MYD.gz
scp    mytable.MYD.gz    root@server2: /var/lib/mysql/
server2:
gunzip     /var/lib/mysql/mytable.MYD.gz
特点:
scp传输速度较慢,但保证了传输的安全性,而这些操作大量的对磁盘进行读写,使传输的效率不高。
备注:
scp -r  /data/file root@ip:/data/
scp -C  /data/sda.img root@ip:/data/img/
# -r: 支持目录
# -C: 启用压缩传送          

(2)管道传输(ssh)
gzip -c mytable.MYD | ssh root@192.168.1.110"gunzip -c - > /var/lib/mysql/mytable.MYD"
特点:
比上一种降低了磁盘的I/O,使传输效率有所提高。
备注:
# 对mytable.MYD使用gzip压缩,-c参数表示输出到stdout,即通过管道传送
# gunzip -c - 中的"-"表示接收从管道传进的stdin

(3)数据流重定向传输(nc)
原理:
在目的服务器中开启一个监听的端口,源端口会将文件传输到目的服务器的监听端口中即可。
server1:
gzip  -c -    /var/lib/mysql/mytable.MYD    |nc  -q   1    server1   12345
server2:开启监听端口12345
nc  -l  -p  12345   |gunzip  -c  - >/var/lib/mysql/mytable.MYD
备注:
# -q :即传输完成该文件,便关闭并退出
# -l:开启监听模式
特点:netcat可以在传输过程中,不会对数据加解密,而ssh会对数据传输中加解密,使netcat工具可以将传输的速度提高。

(4)rsync传输(断点续传)
rsync  -av  /backup/  -e  ssh  root@192.168.1.110:/bak
# -a: archive归档模式,表示以递归方式传输文件,并保持所有文件属性,链接等
特点:
支持断点续传,加密传输数据,可以保持原文件的权限、时间、软硬链接等。

3、总结

     以上只是针对各种工具命令做的比较,但是具体哪个在文件传输中效率更高,需要针对该服务器的环境考虑,分析磁盘驱动器、网卡、CPU,经测试实验得出最高效的方法。
     假如:使用vmstat  -n  5 分析磁盘或CPU是否是传输速度的瓶颈。若CPU很高,而网络和磁盘比较宽裕,则可以不压缩直接传输;若网络是瓶颈,而CPU宽裕,可以压缩再传输文件;考虑到速度的问题,可以使用并行,但是需要负载不高的时候,否则过度的并发反而会降低速度。