之前尝试Rsync+inotify-tools实时同步数据库,但是inotify-tools无法监听到数据库文件的变化。
所以现在改用mysqldump + rsync + cron定时任务来完成备份。
实验环境:centos7.7
软件版本:rsync version 3.1.2
1.先进行源服务器与备份服务器免密登录
源服务器:生成密钥
ssh-keygen -t rsa
一路回车 会在root
目录下自动创建.ssh
目录并生成密钥文件
ll /root/.ssh/
-rw------- 1 root root 1675 11月 23 15:30 id_rsa #密钥文件
-rw-r--r-- 1 root root 408 11月 23 15:30 id_rsa.pub #公钥文件
-rw-r--r-- 1 root root 176 11月 23 15:32 known_hosts #执行ssh-copy-id 后生成的文件
把公钥上传复制到备份服务器上
ssh-copy-id root@192.168.1.11
该命令会把id_rsa.pub
文件的内容 上传到目标服务器.ssh
目录下并生成一个authorized_keys
文件
登录测试
ssh root@192.168.1.11
设置好了之后源服务器要连接备份服务器就不用密码了。
2.安装Rsync
源服务器与备份服务器安装rsync
yum -y install rsync
启动并设置开启自启动查看状态
systemctl enable rsyncd
systemctl start rsyncd
systemctl status rsyncd
查看端口 Rsync
的端口为 873
netstat -antp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 585/rsync
tcp6 0 0 :::873 :::* LISTEN 585/rsync
查看进程
ps aux | grep rsync
root 585 0.0 0.1 114756 1132 ? Ss Nov24 0:00 /usr/bin/rsync --daemon --no-detach
root 21821 0.0 0.2 112820 2264 pts/0 S+ 10:59 0:00 grep --color=auto rsync
3.设置mysqldump免密备份
/etc/my.cnf
...
[mysqldump] #添加该模块填写用户和密码
user=root
password=123456
设置好了之后使用mysqldump
命令生成备份文件直接 -u user,不用加 -p 了
4.设置cron定时任务
确认开启了crond
默认开启
systemctl status crond
编辑cron
配置文件
vim /etc/crontab #全部生效
或者使用命令
crontab -e #使用该命令的用户生效
添加先设置每分钟执行一次进行测试,命令最好使用绝对路径
先创建/data
目录 可自定义
* * * * * root /usr/bin/mysqldump -uroot data > /data/data.sql ; /usr/bin/rsync -avz /data/data.sql root@192.168.11.1:/data
该任务触发会把data
数据库备份成data.sql
并保存在 /data/
下
然后通过rsync
发送给备份服务器
5.测试
设置好定时任务后进入备份服务器,进入相应目录查看是否出现相应文件 data.sql
出现文件后过一分钟使用 md5sum
命令查看文件MD5值是否发生变化。
查看源服务器与备份服务器文件MD5值是否相同。
md5sum data.sql
后可根据自己需求调整定时任务时间
可使用crontab执行时间计算在线工具:网址 https://tool.lu/crontab/