数据库异地备份(脚本)
一:前期准备
至少需要两台主机
192.168.175.200 vip
192.168.175.250 node1
做密钥否则不能拷贝过去
命令:[ ~]#cd /root/.ssh
命令:[ .ssh]#ssh-copy-id -i id_rsa.pub 192.168.175.250
测试一下,命令:[ .ssh]# ssh 192.168.175.250 #不需要密码直接连接
1.另一台主机最好提前创建一个数据存放地
命令:[ ~]# mkdir -p /data/rsyncdata/databak/
2..备份脚本内容
命令:[ ~]# vim databak.sh
#!/bin/bash
date=$(date +%Y%m%d%H%M%S) #设置时间变量,括号内是设置时间的格式
mysqldump -uroot -p‘123456‘ -A > /root/$date-192.168.175.200.sql
#MySQL所有数据导出复制到/root/$date-192.168.175.200.sql文件中
#注意:yum安装最好是用命令mysqldump的绝对路径而用tar包安装,可以不用
if [ $? -eq 0 ];then #判断上次执行命令是否正确,正确为0,不正确非0
echo "数据备份完成" #正确执行,输出结果
scp /root/$date-192.168.175.200.sql 192.168.175.250:/data/rsyncdata/databak/
#将导出的文件远程复制到192.168.175.250主机上的/data/rsyncdata/databak/文件中
sleep 4 #睡眠4秒
echo "远程备份完成" #输出结果
rm -rf /root/$date-192.168.175.200.sql #删除本地主机导出的数据
fi #结束
3.设置执行计划任务
(1)先将脚本加执行权限(x)
命令:[ ~]# chmod +x databak.sh
(2)周期性任务要用的命令是crontab,那么这里有个选项-e(edit)表示编辑输入
命令:[ ~]# crontab -e
0 * * * * sh /root/databak.sh #分时日月周的顺序,这是每小时执行一次脚本
(3)编写完这个计划任务以后,还是要检查一下这个任务是否在启动
命令:[ ~]# ps -le | grep cron
S表示确实是启动的,如果没有启动可以输入命令:/etc/rc.d/init.d/cron start就可以了
远程复制数据库就已经搭建好了,接下来在192.168.175.250上需要搭建rsync同步服务然后通过防火墙映射出去
二:搭建rsync同步服务
1.安装rsync并查看端口号
命令:[ ~]# yum -y install xinetd rsync
命令:[ ~]# rsync --daemon
命令:[ ~]# netstat -antup | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2897/rsync
tcp6 0 0 :::873 :::* LISTEN 2897/rsync
2.[ ~]# vim /etc/rsyncd.conf
uid = root #运行进程的身份
gid = root #运行进程的组
address =192.168.1.64 #监听IP是南阳IP
port=873 #监听端口
hosts allow=192.168.0.0/24 #允许同步客户端的IP地址,可以是网段,或者用*表示所有192.168.1.0/24或192.168.1.0/255.255.255.0
use chroot = yes #是否囚牢,锁定家目录,rsync被黑之后,黑客无法再rsync运行的家目录之外创建文件,选项设置为yes
max connections=5 #最大连接数
pid file =/var/run/rsyncd.pid #进程PID,自动生成
lock file =/var/run/rsync.lock #指max connectios参数的锁文件
log file =/var/log/rsyncd.log #日志文件位置
motd file =/etc/rsyncd.motd
#客户端登陆之后弹出的消息,需要创建
[wwwroot] #共享模块名称
path =/web-back/ #路径
comment=used for web-data root #描述
readonly=false #设置服务端文件读写权限
list=yes #是否允许查看模块信息
auth users=rsyncuser #备份的用户,和系统用户无关
secrets file=/etc/rsync.passwd #存放用户的密码文件,格式是用户名:密码
创建客户端弹出消息文件和用户密码
命令:[ ~]# echo "Welcome to Backup Server" > /etc/rsyncd.motd #提示文件
命令:[ ~]# vi /etc/rsync.passwd
rsyncuser:password123
命令:[ ~]# chmod 600 /etc/rsync.passwd
测试说明:格式(不需要操作)
命令:[ ~]# rsync -avz --delete /var/www/html ::wwwroot --password-file=/etc/rsync.passwd
#rsync语法:rsync选项 用户名@备份源服务器IP::共享模块名 目标目录,新建一个文件保存好密码,然后在rsync命令中使用--password-file指定此文件即可
3.启动服务使配置生效
命令:[ ~]# rsync --daemon --config=/etc/rsyncd.conf
命令:[ ~]# netstat -antup | grep :873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2897/rsync
tcp6 0 0 :::873 :::* LISTEN 2897/rsync
4.设置脚本
(1)南阳数据到本地执行脚本
命令:[ ~]# mkdir -p /data/nanyang
命令:[ ~]# cd /data/ && vim /data/nanyangto-bendi.sh
#!/bin/bash
export RSYNC_PASSWORD="password123"
rsync -avz --progress ::wwwroot /data/nanyang/ #通过南阳外网将数据传到本地,rsyncuser是rsync自带用户
exit
命令:[ ~]# chmod +x /data/nanyangto-bendi.sh
(2)每天删除一次旧的数据 因为打包的数据也同步过来了
命令:[ ~]# vim /data/rm-jiubao.sh
#!/bin/bash
rm -rf /data/nanyang/databak/*
命令:[ ~]# chmod +x /data/rm-jiubao.sh[ ~]# chmod +x /data/rm-jiubao.sh
5.设置分时日月周
本地服务器
命令:[ ~]# crontab -e
0 * * * * sh /root/databak.sh
*/2 * * * * sh /data/nanyangto-bendi.sh
1 0 * * * sh /data/rm-jiubao.sh
命令:[ ~]# crontab -l
总结:。。。。。。。。。。。。。此处省略一万字