下面是CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中的完整攻略。
1. 准备工作
在开始之前,我们需要先进行一些准备工作。
1.1 安装必要的软件
首先,我们需要安装一些必要的软件,包括mysqldump
、tar
和ftp
等。可以使用以下命令进行安装:
yum install mysql mysql-server mysql-devel mysqldump tar ftp -y
1.2 创建FTP账户和目录
接下来,我们需要创建一个FTP账户,并且在FTP服务器上创建一个用于存放备份文件的目录。我们可以使用以下命令来进行创建:
useradd ftpuser # 创建FTP账户
passwd ftpuser # 设置FTP账户密码
mkdir /home/ftpuser/backup # 在FTP账户的家目录下创建备份目录
注:上述命令中,FTP账户的用户名为ftpuser
,备份目录的路径为/home/ftpuser/backup
,可以根据实际情况进行修改。
1.3 创建Shell脚本文件
最后,我们需要创建一个Shell脚本文件,用于实现自动备份并上传到FTP的操作。可以使用以下命令进行创建:
cd /usr/local/bin # 进入/usr/local/bin目录
touch backup.sh # 创建备份脚本文件
chmod +x backup.sh # 赋予执行权限
vi backup.sh # 编辑备份脚本文件
2. 编写Shell脚本
在创建完备份脚本文件后,我们需要对其进行编辑,并将备份和上传的操作添加到其中。
以下是一个示例备份脚本文件:
#!/bin/sh
# 配置备份相关参数
MYSQL_USER="root"
MYSQL_PASSWORD="mypassword"
MYSQL_DATABASE="mydatabase"
BACKUP_DIR="/opt/backups"
FTP_SERVER="ftp.example.com"
FTP_USER="ftpuser"
FTP_PASSWORD="ftppassword"
FTP_DIR="backup"
# 获取当前时间作为备份文件名
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE > $BACKUP_DIR/$MYSQL_DATABASE-$DATE.sql
# 压缩备份文件
tar -zcvf $BACKUP_DIR/$MYSQL_DATABASE-$DATE.tar.gz $BACKUP_DIR/$MYSQL_DATABASE-$DATE.sql
# 删除备份文件
rm -f $BACKUP_DIR/$MYSQL_DATABASE-$DATE.sql
# 上传备份文件到FTP服务器
ftp -n <<EOF
open $FTP_SERVER
user $FTP_USER $FTP_PASSWORD
binary
cd $FTP_DIR
put $BACKUP_DIR/$MYSQL_DATABASE-$DATE.tar.gz
bye
EOF
在上述脚本中,我们使用了mysqldump
命令来备份指定数据库,然后使用tar
命令将备份文件压缩为一个tar.gz文件,并最终使用ftp
命令将备份文件上传到FTP服务器上指定目录。
3. 配置定时任务
最后,我们需要将备份脚本文件和FTP账户的信息配置到定时任务中,以便每天定时执行备份操作。
可以使用以下命令来编辑定时任务:
crontab -e
将以下内容添加到文件末尾:
0 2 * * * /usr/local/bin/backup.sh
上述定时任务表示,在每天凌晨两点钟自动执行备份脚本文件/usr/local/bin/backup.sh
。
示例说明:
在这里我们来说明一下备份文件和上传的过程,假设备份的文件是/var/www/html/下的所有文件和MySQL数据库的文件,FTP的服务器地址是example.com,FTP的用户名是ftpuser,密码为ftppassword,上传到FTP服务器的目录是backup下,详细过程如下:
- 编辑
/usr/local/bin/backup.sh
文件
vi /usr/local/bin/backup.sh
在文件中添加如下内容:
#!/bin/sh
# 配置备份相关参数
MYSQL_USER="root"
MYSQL_PASSWORD="mypassword"
MYSQL_DATABASE="mydatabase"
BACKUP_DIR="/opt/backups"
FTP_SERVER="example.com"
FTP_USER="ftpuser"
FTP_PASSWORD="ftppassword"
FTP_DIR="backup"
# 获取当前时间作为备份文件名
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 配置参数
BACKUP_SERVER="/var/www/html"
# 备份网站程序源码
if [ ! -d ${BACKUP_DIR}/websource-${DATE} ]; then
mkdir -p ${BACKUP_DIR}/websource-${DATE}
fi
if [ ! -d /tmp/websource ]; then
mkdir -p /tmp/websource
fi
# 静态文件存放目录 static files
cp -r ${BACKUP_SERVER}/static /tmp/websource/
# 媒体文件存放目录 media files
cp -r ${BACKUP_SERVER}/media /tmp/websource/
# 主程序源码存放目录 project source code
cp -r ${BACKUP_SERVER}/* /tmp/websource/
# 移动文件至 每天备份目录
mv /tmp/websource/* ${BACKUP_DIR}/websource-${DATE}
# 备份数据库
mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE > $BACKUP_DIR/$MYSQL_DATABASE-$DATE.sql
# 压缩备份文件
tar -zcvf $BACKUP_DIR/${MYSQL_DATABASE}-${DATE}.tar.gz ${BACKUP_DIR}
# 删除备份目录
rm -rf ${BACKUP_DIR}/websource-${DATE}
rm -f $BACKUP_DIR/$MYSQL_DATABASE-$DATE.sql
# 上传备份文件到FTP服务器
ftp -n <<EOF
open $FTP_SERVER
user $FTP_USER $FTP_PASSWORD
binary
cd $FTP_DIR
put $BACKUP_DIR/${MYSQL_DATABASE}-${DATE}.tar.gz
bye
EOF
- 将备份脚本文件和FTP账户的信息配置到定时任务中,以便每天定时执行备份操作。
crontab -e
将以下内容添加到文件末尾:
0 2 * * * /usr/local/bin/backup.sh
上述定时任务表示,在每天凌晨两点钟自动执行备份脚本文件/usr/local/bin/backup.sh
。
执行完这个脚本后,将会在/opt/backups目录下生成一个以日期为名的文件夹,文件夹内存放了你备份的代码和数据库,数据库备份文件将会以.sql文件存在。MySQL数据库恢复操作,进入mysql数据库操作如下:
//创建数据库user库
mysql> CREATE DATABASE user;
// 进去user库,执行备份恢复操作
mysql> use user;
mysql> source path/user-20210402.sql;
关于FTP的上传,在备份文件上传到FTP服务器上指定目录,可以使用一下操作获得文件,也可以使用文件下载工具将文件下载下来本地进行查看。
ftp example.com
# 输入用户名和密码
ftpuser
ftppassword
cd backup
ls
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中 - Python技术站