之前在维护一个项目的时候,有备份数据库的需求,使用了xtrabackup配合cron定时任务每天备份,现在数据量不是很大,所以做的全量备份,后期数据量大了可以换成增量备份。
另外为了安全考虑,数据只备份成本地文件肯定是不够的,还需要异机、异地进行备份。因为当时比较忙,虽然知道rsync这个东西,但是看了看命令使用手册那么复杂,就很头大,直接用一台Windows电脑安装Drive来进行同步了。
我来描述一下我这奇葩的操作,Windows Server中添加定时任务,执行backup.ps1
脚本,脚本中使用scp拉取服务器上备份的文件到D盘,使用Drive对D盘的文件进行同步,我自己的两台电脑都有安装Drive,都会自动同步。这就有了三处备份,我还是嫌不够,又在NAS上用了Cloud Sync把备份同步到对象存储上。这些服务商蛮多的,选了比较靠谱的两家,阿里云和腾讯云的。这样足够安全了吧,笑哭。
最近感觉比较闲(希望领导不要看到这句话),就想着研究一下rsync使用方法,真的是相见恨晚啊,因为研究完了只需要一条命令就能代替我之前整的那些乱七八糟的东西。
先欣赏一下:
rsync -avzu /mysql/*.tar.gz xueye@nas.example.com::NetBackup/mysql/ --password-file=/etc/rsync.passwd
听完了我的啰嗦,接下来就进入正题了。
首先得有一台远程可访问的服务器
这个可选择的太多啦,NAS、VPS、普通电脑等等的都是可以的,只需要确保可以通过公网IP访问。还有一个要求就是安装rsyncd服务。这个自行解决吧,不同平台也不一样。
博主选择的自然是群辉NAS,直接在控制面板中的文件服务里开启rsync服务即可。
如果为了使用不加密的传输方式,需要勾选启用rsync账户,并且设置单独的密码,后面会讲到。
选择合适的传输方式
rsync服务有两种传输模式,加密和不加密。
加密模式
加密其实就是使用SSH来传输,可以不启动rsync daemon服务,然后可以通过SSH免登陆或者账号密码的形式进行用户权限认证,需要注意的是,用户需要有对目的路径的写入权限。
rsync -av -e 'ssh -p 2222' /local/backup_dir/ rsync_user@nas:/var/services/NetBackup/
-av
分别表示使用归档模式递归传输并且保持文件属性,和显示命令执行详细信息。
-e
参数用于指定用于远程连接的shell程序,默认为SSH,但是我们一般为了安全都不用默认22端口,所以可以通过这个参数指定端口号。
接着就是本地目录,和远程目录,这里注意的是本地路径的写法,如果末尾没有/
表示包含backup_dir目录本身,如果有/
表示只传输backup_dir目录下的文件。远程目录使用一个冒号表示连接的shell路径,使用两个冒号表示目的地址是一个module名称开头的,这个module是在服务端的rsync daemon配置文件中指定的,对于群辉,这个module名称为NetBackup。module后面的路径是相对模块目录的路径。
不加密模式
使用加密模式有个明显的缺点,就是会暴露SSH用户名和密码,或者需要设置免登陆,比较麻烦。所以可以设置单独的rsync用户来执行同步命令。
rsync -av --password-file=/etc/rsync.passwd /local/backup_dir/ rsync_user@nas::NetBackup/backup
不加密模式只能使用module名称开头的地址,注意是两个冒号,群辉的module名就是NetBackup,对应存储的位置就是共享文件夹中的NetBackup。
--password-file
指定一个存储密码的文本文件,只有第一行有效,文件的权限必须是600。
很显然不加密模式才是最适合用来做自动备份的选择。所以就有了一开始的那条命令:
rsync -avzu /mysql/*.tar.gz xueye@nas.example.com::NetBackup/mysql/ --password-file=/etc/rsync.passwd
更多参数看这个这位博主翻译的man手册:https://www.cnblogs.com/f-ck-need-u/p/7221713.html
好记性不如烂笔头,再熟悉的命令,时间长不用都会忘记,这种写了一次就很长时间不会写第二次的命令更是如此,有必要好好记录一下。