CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

yizhihongxing

下面是CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中的完整攻略。

1. 准备工作

在开始之前,我们需要先进行一些准备工作。

1.1 安装必要的软件

首先,我们需要安装一些必要的软件,包括mysqldumptarftp等。可以使用以下命令进行安装:

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下,详细过程如下:

  1. 编辑/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
  1. 将备份脚本文件和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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SpringBoot事务不回滚的解决方案

    针对SpringBoot事务不回滚的问题,我们可以通过以下几个步骤来进行解决: 1.确认事务正常工作 首先,我们需要确认事务的确不会自动回滚。可以在事务中对一个数据库表进行操作,然后将该操作后面的代码注释掉,确保事务提交的同时没有任何异常抛出,这样可以验证事务框架是否生效。 2.添加事务管理器 如果事务确实没有通过Spring事务管理器自动回滚,那么需要手动…

    database 2023年5月21日
    00
  • Centos6.7 Redis3.2.8的主从搭建

    首先参看一下redis 3.2.8的安装 传送门:biubiubiu 飞去吧:http://www.cnblogs.com/bing-yu12/p/6582086.html 我的主从搭建:   redis 主环境:     centos 6.7      ip:192.168.184.3     redis 3.2.8     redis.conf的重要配置…

    Redis 2023年4月13日
    00
  • 非常不错的MySQL优化的8条经验

    非常不错的MySQL优化的8条经验 MySQL 是一种现代的数据库管理系统,广泛用于各种类型的 Web 应用程序中。当您的应用程序承载大量数据时,优化 MySQL 数据库非常重要。本文将介绍一些简单的技术,可以帮助您优化MySQL 数据库性能,提高您的应用程序的响应速度。 1. 使用正确的数据类型 当设计表时,请始终使用最小的数据类型。例如,如果您需要存储一…

    database 2023年5月22日
    00
  • 手把手教你MySQL运算符

    手把手教你MySQL运算符 前言 MySQL运算符是处理数据时必不可少的一部分,掌握好运算符的使用可以提高SQL语句的执行效率,从而提升系统的性能。本文将手把手地教你MySQL中常用的运算符及其使用方法,并通过两条示例进行说明。 运算符列表 下面是MySQL中常用到的运算符列表: 算术运算符:加(+)、减(-)、乘(*)、除(/)、求余(%) 比较运算符:等…

    database 2023年5月22日
    00
  • Flutter 常用插件汇总

    Flutter 常用插件汇总 1. 简介 在 Flutter 开发中,很多时候需要使用到一些插件来实现某些功能,这些插件大多数都是社区开发者开发并维护的,在 Flutter 中有很多常用的插件可供使用。本文将着重介绍一些常用的插件,并提供一些代码示例,帮助读者们更快速地熟悉和应用这些插件。 2. 插件列表 2.1 http http 插件是用来发送网络请求的…

    database 2023年5月21日
    00
  • Mysql利用group by分组排序

    在数据库查询中,使用 GROUP BY 子句可以将数据按照指定的字段分组,然后进行聚合操作,例如计算总数、平均值、最大值、最小值等。在 GROUP BY 子句后面可以使用 ORDER BY 子句对分组后的数据进行排序。这种方式可以使用户方便地获取所需的聚合数据,并且结果还能根据需求进行排序。 下面是使用MySQL的GROUP BY子句进行分组排序的完整攻略:…

    database 2023年5月22日
    00
  • mysql存储过程如何利用临时表返回结果集

    MySQL 存储过程可以利用临时表来返回结果集,具体步骤如下: 1. 创建临时表 使用 CREATE TEMPORARY TABLE 语句来创建临时表。 示例一: CREATE TEMPORARY TABLE temp_table ( id INT NOT NULL PRIMARY KEY, name VARCHAR(100) NOT NULL, age I…

    database 2023年5月21日
    00
  • sql集合运算符使用方法

    SQL集合运算符是一种非常常见的查询技巧,用于处理多个数据表之间的数据交集、并集、差集等关系,主要包括UNION、UNION ALL、INTERSECT、EXCEPT这四种运算符。下面将详细讲解这些运算符在SQL中的使用方法。 一、UNION运算符 UNION运算符用于合并两个或多个SELECT语句的结果集,且去除重复的行,基本语法如下: SELECT co…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部