wordpress利用rsync同步备份

我搭建的wordpress服务器现在使用的系统是opensuse,
服务器上面已做脚本和计划任务将wordpress使用的数据库与web目录每天压缩备份放到
/data/backup目录下
operation@opensuse-wordpress:~> tree /data
/data
├── backup
│   ├── db
│   │   ├── wordpress_20171220.sql
│   │   ├── wordpress_20171220.sql.bak
│   │   └── wordpress_20171221.sql.gz
│   └── wordpress
│   ├── wordpress_20171220.tar.gz
│   ├── wordpress_20171220.tar.gz.bak
│   └── wordpress_20171221.tar.gz
└── shell
├── mysql_backup.sh
└── wordpress_backup.sh

所以现在欠缺的是再弄个异地备份(opensuse充当服务器,平常使用的公司pc充当客户端去拿取数据备份回来),
这一步实现后再考虑在云上专门用一台服务器做为存储备份的服务器,opensuse上传或同步备份数据到文件服务器上,
任意客户端安装同步的客户端软件从文件服务器上面拉取数据下来(其实就是私有性质的坚果云)。

1、opensuse上安装rsync做为同步文件服务端
operation@opensuse-wordpress:~> sudo zypper in rsync
[sudo] password for root:
Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following NEW package is going to be installed:
rsync

1 new package to install.
Overall download size: 323.2 KiB. Already cached: 0 B. After the operation, additional 625.5 KiB will be used.
Continue? [y/n/…? shows all options] (y): y
Retrieving package rsync-3.1.0-8.4.x86_64 (1/1), 323.2 KiB (625.5 KiB unpacked)
Retrieving: rsync-3.1.0-8.4.x86_64.rpm ……………………………………………………………[done]
Checking for file conflicts: …………………………………………………………………….[done]
(1/1) Installing: rsync-3.1.0-8.4.x86_64 ………………………………………………………….[done]

2、配置rsync
rsync服务器端需要两个配置文件:rsyncd.conf、rsyncd.secrets。
其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。
该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.secrets主要用于存储rsync用户名和密码。
如果是编译安装的rsync是不会生成以上这两个配置文件的,需要我们手工进行创建。
不过在这我是用zypper安装的,当然直接在/etc下面就有rsyncd.conf和rsyncd.secrets文件。
sudo vim /etc/rsyncd.conf

gid = users
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = trusted.hosts
slp refresh = 300
use slp = false
secrets file=/etc/rsyncd.secrets
##以上是全局配置
#[Example]
#path = /home/Example
#comment = An Example
#auth users = user
#secrets file = /etc/rsyncd.secrets

[backup]
uid = root
gid = root
path = /data/backup
ignore errors
read only = true
auth users = wordpress
secrets file = /etc/rsyncd.secrets
#以上是针对备份同步目录的配置

rsync默认是在nobody用户下运行的,
但是我们测试为了同步时不为各种权限的事情烦恼,就让其在root用户下运行。

配置文件修改完成后,到创建密码文件:
vim /etc/rsyncd.secrets
将wordpress的用户和密码编辑进去,例如:
wordpress:ABCabc123

注:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户中存在。密码文件创建完毕后,还需要将其权限设置为600,否则会在以后同步时提示验证出错。(zypper安装完成的不用再做此步骤也是600了)
chmod 600 /etc/rsyncd.secrets

一个rsync配置文件中可以包含多个认证模块(比如上面列表的[backup]),同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。

3、启动rsync
sudo rsync –daemon
可以pstree看rsync进程是否有运行和netstat看873端口开起来没有。

4、windows客户端安装rsync
https://www.itefix.net/cwrsync
最新版cwRsync-5.5.0-32位的下载链接如下:
https://www.itefix.net/dl/cwRsync_5.5.0_x86_Free.zip

下载解压完成,双击目录下的cwrsync.cmd或在cmd命令提示窗口下运行完成批处理安装。
安装完成后,阿里云服务器安全组上开通873端口(放行rsync)

运行rsync命令去拉取服务器上的备份目录文件,出现报错:
D:\soft\cwRsync\bin> ./rsync -avz wordpress@39.x.x.x::backup /wordpress
@ERROR: access denied to backup from UNKNOWN (183.x.x.x)
rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]

还是拒绝客户端的访问,于是我在配置文件中直接插入一句
hosts allow = 183.x.x.x

注:x.x.x是指代你服务器和客户端ip地址。在这里我不能直接暴露真实的ip出来。实际上操作的时候当然不是敲x.x.x。

再尝试就可以出现让你输入密码的交互了,可见默认全局配置是禁止了外网访问?
D:\soft\cwRsync\bin> ./rsync -avz wordpress@39.x.x.x::backup /wordpress
Password:
(注:密码交互输入时不会显示密码)
receiving incremental file list
created directory /wordpress
./
db/
db/wordpress_20171220.sql
db/wordpress_20171220.sql.bak
db/wordpress_20171221.sql.gz
db/wordpress_20171222.sql.gz
wordpress/
wordpress/wordpress_20171220.tar.gz
wordpress/wordpress_20171220.tar.gz.bak
wordpress/wordpress_20171221.tar.gz
wordpress/wordpress_20171222.tar.gz

sent 195 bytes received 146,589,159 bytes 133,202.50 bytes/sec
total size is 149,629,764 speedup is 1.02

当然,后面要做成计划任务是不想再弹密码输入交互的,新建一个单纯存放密码的文本文件,
将密码保存进去后,命令就会变成:
D:\soft\cwRsync\bin> ./rsync -avz wordpress@39.x.x.x::backup /wordpress –password-file=/passwd.txt
receiving incremental file list

sent 22 bytes received 331 bytes 706.00 bytes/sec
total size is 149,629,764 speedup is 423,880.35
注意:在上面命令中我是将备份文件都同步到D:\soft\cwRsync\wordpress路径中,/根目录就是cwRsync安装的目录。
如果是要定义放到windows系统的D盘则路径表示为/cygdrive/d/
不想每次都进入到cwRsync目录下再执行命令,就在系统环境变量Path中添加上D:\soft\cwRsync\bin就可以了。

5、执行计划任务去同步服务器的备份文件

把上述命令,写到一个批处理文件中,然后在任务计划中进行配置。
新建rsync_wordpress.bat文件中写入一行:
rsync -az wordpress@39.x.x.x::backup /wordpress –password-file=/passwd.txt
保存。
打开任务计划程序,创建任务,设置好计划任务,
触发器是每天的中午12点40分,操作是运行批处理脚本rsync_wordpress.bat。

验证生效。

文:铁乐与猫

2 thoughts on “wordpress利用rsync同步备份

  1. —————-2018.9.19补充
    因为后面的文件越来越大,开始需要增加上–progress参数来观看进度了。
    rsync -avz –progress wordpress@39.x.x.x::backup /wordpress –password-file=/passwd.txt

    而且由于文件都是压缩备份后再传输的,也就是rsync的增量同步功能完全没用上。
    后面打算做同步的不是同步备份的压缩文件,而是直接同步原数据!

    [wordpress]
    uid = root
    gid = root
    path = /www/wordpress
    hosts allow = 10.8.0.0/255.255.255.0
    ignore errors
    read only = true
    auth users = wordpress
    secrets file = /etc/rsyncd.secrets

    如上,直接同步/www/wordpress目录,这样比起每天备份不同的压缩文件包,其实每次需要同步的量更少!只在第一次同步时需要全部拉取。

    命令脚本则变为:
    rsync -avz –progress wordpress@10.8.0.1::wordpress /cygdrive/e/wordpress –password-file=/passwd.txt

    不使用公网ip是因为通过公网去rsync实在是不够稳定。所以我是搭建好openvpn服务后,使用windows客户端和云服务器用openvpn服务相连后再做rsync同步。如此稳定性就很高了。基本不再出现,同步到某个文件后卡死。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

17 + 20 =