netcat(命令行中使用 nc )是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中传输数据。通过与其他工具结合和重定向,我们可以在脚本中以多种方式使用它,比如传输文件,目录,用于网络安全中扫描端口,命令行聊天(现在估计没有多少人无聊做这个)。
nc的参数有很多,常用的有如下几个。
-l 用于指定nc将处于侦听模式。执行nc命令的机器被当作server,监听听并接受连接,而非向其它地址发起连接。
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息,新手调试时尤为有用
-w 超时时间,单位是秒
可以指定具体的端口或者端口范围
传输具体的文件夹和文件在命令上没有什么差异。需要注意的是对于包含大量小文件的文件夹,推荐和tar命令一起使用,对文件压缩,打包之后再传输。测试机器
server1: 192.168.2.20
server2: 192.168.2.21
接收端 在server1上执行如下命令 ,监听端口12345并将接收到的数据解压缩到 my3307 目录
nc -l 12345 | tar xizvf - -C /data/my3307/
在*源机器 * 上执行命令将目录下的所有文件打包并压缩传递到
tar -czf - * | nc server2 12345
作为DBA 我们最常用的是它的网络传输功能,在不同的机器之间拷贝数据库文件,日志或者备份。使用nc 传输数据基本可以将网络带宽用满。如果是新的机器则可以不用限制带宽,但是如果是生产机器有数据库在运行,推荐使用 pv 命令做限速。
需求:日常运维中有极个别非标的数据库实例不能使用自动化的方式重建slave,想要快速的搭建一套主从,则可以使用nc。
在主库直接使用innobackupex以流式做备份 通过nc将备份文件传递到目标端。
1.在目标机器监听12345端口
sudo nc -l 12345 | tar xivf - -C 3306/
2.在主库做备份并且通过nc传递到目标端
/opt/percona-xtrabackup-24/bin/innobackupex --defaults-file=/srv/my3306/my.cnf --user=root --password='' --backup --slave-info --stream=tar ./ | nc data-mysql1 12345
3.在目标机器恢复实例。
/opt/percona-xtrabackup-24/bin/innobackupex --apply-log /data/my3307/data/
4.搭建主从(略)
四 小结
nc是一款高效的数据传输工具利器。感兴趣的小伙伴可以尝试研究。