18.高性能MySQL --- 大文件传输

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就是瓶颈,而磁盘和网络的承载能力还可以,就可以不压缩。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值