不去在乎结果,热情地付出过,就好了.

自动备份网站文件和数据库

前几日博客挂了,为了保护数据,避免再挂了导致很久不能访问或者数据丢失,自己整一个数据备份.

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`"
打赏

Add comment

2 − 1 =

不去在乎结果,热情地付出过,就好了.
某一天,你所坚持的,和承担过的一切,会有回应。它们并非失去踪迹,只是需要时间抵达。这和星光落入眼睛里,是一样的道理。

近期文章

近期评论