1.复制文件
这个任务实际上就是完成以下事情的:
1.(可选)压缩数据
2.发送到另外一台服务器
3.把数据解压缩到最终目的地
4.在复制完成后,校验文件是否损坏
2.一个简单是示例
#server1# gzip -c /backup/mydb/mytable.MYD > mytable.MYD.gz
#server1# scp mytable.MYD.gz root@server2:/var/lib/mysql/mydb/
#server2# gunzip /var/lib/mysql/mydb/mytable.MYD.gz
在server1上 gzip 既要读又要写,scp 在server1上读,在server2上写;gunzip 在server2 上既要读又要写。
3.一步到位的方法
#server1 gzip -c /backup/mydb/mytable.MYD | ssh root@server2 "gunzip -c - > /var/lib/mysql/mydb/mytable.MYD.gz"
这个方法比第一个好,因为它极大的降低了磁盘IO,它将压缩,复制文件和在传输的另外一端解压缩文件全部放在一个步骤完成。磁盘活动被减少到
只要在 server1 上读,server2 上写。
也可以使用ssh内建的压缩来完成,但是我们展示的是用管道来做压缩和解压,这是因为这样能给你极大地灵活性。
可以通过调整一些选项来提高这个方法的效率,例如给 gzip 增加选项 -l,使其压缩变得更快。
4.避免加密的开销
ssh 不是跨网传输数据最快的方法,因为它增加了加解密的系统开销。如果不需要加解密,那就使用 netcat 把'裸'数据进行跨网传输。可以通过nc
以非交互方式操作调用这个工具。
在 server2 上监听 12345 端口上的文件,把任何发送到该端口的东西都解压缩到期望的数据文件里。
#server2 nc -l -p 12345 | gunzip -c - > /var/lib/mysql/mydb/mytable.MYD
然后在server1上,开启另外一个netcat 实例,发送数据到目的服务器监听的端口上。-q 选项告诉netcat当到达输入文件的末尾时就关闭连接。这会
触发监听实例关闭接收的文件并退出。
#server1 gzip -c - /var/lib/mysql/mydb/mytable.MYD | nc -q 1 server2 12345
更容易的技术是使用tar,这样文件名称也会通过网络发送出去,从而消除了另外一个错误来源,并会自动将文件写到正确的位置。z 选项告诉tar使用gzip
做压缩和解压。
#server2 nc -l -p 12345 | tar xvzf -
#server1 tar cvzf - /var/lib/mysql/mydb/mytable.MYD | nc -q 1 server2 12345
5.其他选项
另外一个选项是 rsync.rsync 非常简便,因为它易于在源和目标之间做镜像,并且还可以断点续传。但是,当它的二进制差异算法无法被很好的发挥时,它
不会得到很好的应用。在知道文件中的大部分内容都不需要传输的场景下,例如,如果要续传一个中途退出的nc复制的任务,就可以考虑它。
哪一种方法最快于你的系统,其中最大的因素是服务器上的磁盘驱动器,网卡和cpu的数量,以及它们之间相对的速度多快。有个不错的监控方式 vmstat -n 5,
看磁盘或者cpu是否就是速度的瓶颈。
如果有闲置的cpu,就可能通过运行并行的复制操作来加快。相反,如果cpu就是瓶颈,而磁盘和网络的承载能力还可以,就可以不压缩。
mysql 压缩 compress 1366 mysql 压缩传输
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Linux压缩和解压文件
Linux压缩和解压文件
压缩文件 7z linux 解压