生命不息
折腾不止

教程:Linux用定时把数据库和网站打包备份到FTP上

其实服务器备份最好用的是 rsync ,具体教程可以看: rsync 教程

但由于各种条件限制, ftp 在 windows 下的配置也比 rsync 简单,也更适合大部分人。今天就分享个我自用的 ftp 备份代码。每天把数据库和网站压缩后传到指定的 ftp ,并删除 7 天前的文件,就是只备份 7 天的数据。具体情况大家可以根据配置文件修改。有问题可以留言,我尽量解答。

步骤一:下载代码

代码下载地址: https://github.com/91yun/code/blob/master/ftp_backup.sh

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#==============================================
#www.9yun.org 备份数据相关设置 
#==============================================

# 数据库用户名 
dbuser='root'
# 数据库用密码 
dbpasswd='rootpassword'
# 需要备份的数据库,多个数据库用空格分开 
dbname='91yun'
# 要备份的网站地址 
webbakpath='/home/wwwroot/www.91yun.org'
# 备份时间 
backtime=`date +%Y%m%d`
# 删除备份的时间(保留 7 天) 
deldate=` date -d -7day +%Y%m%d `
# 数据备份路径 
datapath='/home/bak/www.91yun.org'

mkdir -p $datapath

#==============================================
#www.9yun.orgFTP 相关设置 
#==============================================

#ftp 地址 
ftpserver='www.91yun.org'
#ftp 端口 
ftpprot='21'
#ftp 用户名 
ftpuser='www.91yun.org'
#ftp 密码 
ftppassword='www.91yun.org'

#==============================================
#www.9yun.org 开始备份 
#==============================================

# 正式备份数据库 
for table in $dbname; do
source=`mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${datapath}/${backtime}.sql` 2>> ${datapath}/mysqllog.log;
# 备份成功以下操作 
if [ "$?" == 0 ];then
	cd $datapath
	# 为节约硬盘空间,将数据库压缩 
	tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null
	# 同时压缩打包网站程序 
	tar jcf ${table}web${backtime}.tar.bz2 ${webbakpath}/ > /dev/null
	# 删除原始文件,只留压缩后文件 
	rm -f ${datapath}/${backtime}.sql
	# 删除七天前备份,也就是只保存 7 天内的备份 
	find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
fi
done

#==============================================
#www.9yun.org 开始 FTP 上传 
#==============================================
ftp -n<<!
open $ftpserver $ftpport
user $ftpuser $ftppassword
pass
binary
lcd $datapath
prompt
mput ${table}${backtime}.tar.bz2  ${table}${backtime}.tar.bz2
mput ${table}web${backtime}.tar.bz2  ${table}web${backtime}.tar.bz2
mdelete ${table}${deldate}.tar.bz2
mdelete ${table}web${deldate}.tar.bz2
close
bye !

请根据实际情况修改配置参数

步骤二:给文件添加执行权限

chmod +x ftp_backup.sh

步骤三:添加 crontab 每日定时运行

crontab 的使用方法可以看:

http://www.91yun.org/archives/112

* * */1 * * /root/ftp_backup.sh

 

赞(0)
未经允许不得转载:91云(91yun.co) » 教程:Linux用定时把数据库和网站打包备份到FTP上

留言 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #0

    你好,我按照您的方法一步步缺这样报错 不知道是什么原因。环境是Centos7.8
    ./ftp_backup.sh: line 44: mysqldump: command not found
    ./ftp_backup.sh: line 74: warning: here-document at line 62 delimited by end-of-file (wanted `!’)
    ./ftp_backup.sh: line 62: ftp: command not found

    Yook8年前 (2016-07-11)回复
    • mysqldump和ftp命令都没装

      91yun8年前 (2016-07-11)回复
  2. #0

    不知道哪里有问题。FTP配置内容应该是没错的。
    tar: 从成员名中删除开头的“/”
    ftp: connect: 连接超时
    Not connected.
    Passive mode off.
    Not connected.
    Local directory now /home/bak/xieyang
    Interactive mode off.
    Not connected.
    Not connected.
    Not connected.
    Not connected.
    Not connected.

    斜阳晚暮8年前 (2016-05-07)回复
    • 是ftp连接超时?你手动打下ftp那段代码。一步步。看哪步有问题。

      91yun8年前 (2016-05-07)回复