前几日博客挂了,为了保护数据,避免再挂了导致很久不能访问或者数据丢失,自己整一个数据备份.
1,将网站文件tar打包压缩.
2,将网站数据库用mysqldump备份.
3,然后用scp把文件和数据库传到另外的机器上,为实现scp免输秘密,制作一对密钥.
4,删除本机上的备份文件.
5,删除远程机器上的超过30天的备份.
6,输出备份完成时间
将以上六个步骤写成shell脚本,然后用crontab定期执行shell脚本.
首先制作密钥,为了方便,路径和短语全用默认设置,在发起scp的机器上,用要发起scp的用户执行:
ssh-keygen -t rsa
公钥被写入 ~/.ssh/id_rsa.pub,密钥被写入 ~/.ssh/id_rsa只有该用户能使用这对密钥.然后把公钥scp传到被连接的机器上,的家目录中的.ssh中:
scp 家目录.ssh/id_rsa.pub 接收用户@接收IP:家目录/.ssh/authorized_keys
然后用mysqldump备份数据库:
mysqldump -u用户 -p密码 数据库 > 目标文件
然后打包压缩网站文件:
tar -zcf 生成的文件 要备份的目录
然后把数据库和文件备份scp到别的机器上,这个时候因为有密钥,就不用输密码了,可以写在shell中执行.
定期执行shell:
crontab -e
内容如下:
# m h dom mon dow command 0 3 */2 * * /脚本目录/脚本 1>>/日志目录/日志文件 2>&1 #每两天3点执行一次,如果有输出,输出到指定文件
下面附上脚本代码:
#!/bin/bash # 1,备份数据库 mysqldump -u用户 -p密码 数据库 > /目录/文件名-`date +%y%m%d`.sql # 2,备份网站文件 tar -zPcf /目录/文件名-`date +%y%m%d`.tat.gz /目录 # 3,传到指定服务器上 scp /目录/文件名-`date +%y%m%d`.tat.gz 用户@IP:/目录 scp /目录/文件名-`date +%y%m%d`.sql 用户@IP:/目录 # 4,删掉本地临时文件 rm -rf /目录/* # 5,远程删掉超过30天的文件 ssh 用户@IP "find /目录 -mtime +30 -exec rm -rf {} \;" # 6,输出完成 echo "backup done at `date +%Y-%m-%d-%T`"