操作方法:自动将 MySQL 数据库、Web 服务器文件备份到 FTP 服务器
这是一个简单的备份解决方案,适用于在专用或 VPS 服务器上运行自己的 Web 服务器和 MySQL 数据库服务器的人员。大多数专用托管提供商使用 NAS 或 FTP 服务器提供备份服务。这些服务提供商将通过私有 VLAN 将您连接到他们的冗余集中式存储阵列。由于我管理几个盒子,因此这是我自己的自动化解决方案。如果您只想要一个 shell 脚本,请转到此处(您只需提供适当的输入,它就会为您动态生成 FTP 备份脚本,您也可以获取我的 php 脚本生成器代码)。
使用 tar 进行增量备份
您可以进行磁带备份。但是,有时磁带不是一个选项。GNU tar 允许您使用 -g 选项进行增量备份。在此示例中,tar 命令将对 /var/www/html、/home 和 /etc 目录进行增量备份,运行:
# tar -g /var/log/tar-incremental.log -zcvf /backup/today.tar.gz /var/www/html /home /etc
在哪里,
- -g:创建/列出/提取新的 GNU 格式增量备份并将信息存储到 /var/log/tar-incremental.log 文件中。
备份 MySQL 数据库
mysqldump 是一个用于转储或备份 mysql 数据库、表和数据的客户端程序。例如,以下命令显示数据库列表:
$ mysql -u root -h localhost -p -Bse 'show databases'
输出:
Enter password: brutelog cake faqs mysql phpads snews test tmp van wp
接下来,您可以使用 mysqldump 命令备份每个数据库:
$ mysqldump -u root -h localhost -pmypassword faqs | gzip -9 > faqs-db.sql.gz
为您的安装创建一个简单的备份系统
使用 FTP 或 NAS 备份的主要优点是防止数据丢失。您可以使用各种协议来备份数据:
- FTP
- SSH
- 同步
- 其他商业解决方案
不过,我这里要写一下 FTP 备份解决方案。思路如下:
- 每周日晚上进行完整备份,即每周日备份所有内容
- 下次仅备份自完整备份(增量备份)以来被修改过的文件。
- 这是一个七天的备份周期。
我们的示例设置
Your-server ===> ftp/nas server IP:202.54.1.10 ===> 208.111.2.5
假设您的 ftp 登录详细信息如下:
- FTP 服务器 IP:208.111.2.5
- FTP 用户名:示例
- FTP 密码:somepassword
- FTP 目录:/home/example (或 /)
您按如下方式存储所有数据:
=> /home/example/full/mm-dd-yy/files – 完整备份
=> /home/example/incremental/mm-dd-yy/files – 增量备份
使用 tar 自动备份
现在,您知道如何使用 tar 和 mysqldump 命令备份文件和 mysql 数据库。现在是时候编写一个可以自动执行整个过程的 shell 脚本了:
- 首先,我们的脚本将使用 tar 命令将 MySQL 数据库服务器和文件系统的所有数据收集到名为 /backup 的临时目录中。
- 接下来,脚本将登录到您的 ftp 服务器并创建如上所述的目录结构。
- 脚本将会把 /backup 中的所有文件转储到 ftp 服务器。
- 脚本将从 /backup 目录中删除临时备份。
- 如果 ftp 备份由于任何原因失败,脚本将向您发送电子邮件通知。
您必须安装以下命令(使用 yum 或 apt-get 包管理器来安装名为 ncftp 的 ftp 客户端):
- ncftp FTP 客户端
- mysqldump 命令
- GNU tar 命令
以下是示例脚本:
#!/bin/sh # System + MySQL backup script # Full backup day - Sun (rest of the day do incremental backup) # Copyright (c) 2005-2006 example <http://www.example.com/fb/> # This script is licensed under GNU GPL version 2.0 or above # Automatically generated by http://bash.example.com/backup/wizard-ftp-script.php # --------------------------------------------------------------------- ### System Setup ### DIRS="/home /etc /var/www" BACKUP=/tmp/backup.$$ NOW=$(date +"%d-%m-%Y") INCFILE="/root/tar-inc-backup.dat" DAY=$(date +"%a") FULLBACKUP="Sun" ### MySQL Setup ### MUSER="admin" MPASS="mysqladminpassword" MHOST="localhost" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" ### FTP server Setup ### FTPD="/home/vivek/incremental" FTPU="vivek" FTPP="ftppassword" FTPS="208.111.11.2" NCFTP="$(which ncftpput)" ### Other stuff ### EMAILID="admin@theos.in" ### Start Backup for file system ### [ ! -d $BACKUP ] && mkdir -p $BACKUP || : ### See if we want to make a full backup ### if [ "$DAY" == "$FULLBACKUP" ]; then FTPD="/home/vivek/full" FILE="fs-full-$NOW.tar.gz" tar -zcvf $BACKUP/$FILE $DIRS else i=$(date +"%Hh%Mm%Ss") FILE="fs-i-$NOW-$i.tar.gz" tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS fi ### Start MySQL Backup ### # Get all databases name DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" for db in $DBS do FILE=$BACKUP/mysql-$db.$NOW-$(date +"%T").gz $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE done ### Dump backup using FTP ### #Start FTP backup using ncftp ncftp -u"$FTPU" -p"$FTPP" $FTPS<<eof mkdir $FTPD mkdir $FTPD/$NOW cd $FTPD/$NOW lcd $BACKUP mput * quit EOF ### Find out if ftp backup failed or not ### if [ "$?" == "0" ]; then rm -f $BACKUP/* else T=/tmp/backup.fail echo "Date: $(date)">$T echo "Hostname: $(hostname)" >>$T echo "Backup failed" >>$T mail -s "BACKUP FAILED" "$EMAILID" <$T rm -f $T fi
如何设置 Cron Job 来自动备份数据?
只需根据您的要求添加cron 作业:
13 0 * * * /home/admin/bin/ftpbackup.sh >/dev/null 2>&1
生成 FTP 备份脚本
由于我设置了许多 Linux 机器,因此这里是我自己的 FTP 备份脚本生成器。您只需提供适当的输入,它就会为您动态生成 FTP 备份脚本。