![帮助编写 Linux 脚本来备份和将文件 ftp 到另一台服务器](https://linux22.com/image/524518/%E5%B8%AE%E5%8A%A9%E7%BC%96%E5%86%99%20Linux%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E5%A4%87%E4%BB%BD%E5%92%8C%E5%B0%86%E6%96%87%E4%BB%B6%20ftp%20%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我在 Linux 系统上使用 MySQL 作为应用程序的数据库系统。每周我都会更新系统并备份(mysqldump)更改的数据库(2 个数据库)。然后我将它们压缩成 .tar.gz 并将生成的文件通过 ftp 传输到远程 Windows 服务器,之后我从 Linux 服务器中删除原始备份和 tar.gz 文件。作为 Unix 系统的完全新手,我想知道是否可以编写一个脚本来自动完成所有这些操作,即执行以下步骤。
1) 将数据库 A 备份为 A.sql (mysqldump) 2) 将数据库 B 备份为 B.sql (mysqldump) 3) tar -cvzf dest.tar.gz A.sql B.sql 4) 将 dest.tar.gz ftp 到[电子邮件保护]5)从本地服务器删除A.sql,B.sql,dest.tar
如果我能朝着正确的方向迈出一些步伐,那就太好了!提前谢谢,蒂姆
答案1
我不建议使用 FTP 来保存您关心的任何文件(特别是数据库备份,如果该数据库包含客户信息),但这最终取决于您。
首先,使用以下命令在 Linux 服务器上创建备份:
#!/bin/bash
#
# Call script with:
# /cron-mysql_bkup.sh mysql_hostname mysql_username mysql_password /backup/directory
#
if [ -n "$1" ]; then
MYSQL_HOST="$1"
else
echo "MYSQL_HOST not specified."
exit 1
fi
if [ -n "$2" ]; then
MYSQL_USER="$2"
else
echo "MYSQL_USER not specified."
exit 1
fi
if [ -n "$3" ]; then
MYSQL_PASS="$3"
else
echo "MYSQL_PASS not specified."
exit 1
fi
if [ -n "$4" ]; then
DIR_BKUP="$4"
mkdir -p ${DIR_BKUP}
else
echo "DIR_BKUP not specified."
exit 1
fi
#
# Generate filename
#
BACKUP_FILENAME=`date "+%Y-%m-%d"`".sql"
#
# Dump all databases
#
mysqldump -h${MYSQL_HOST} -u${MYSQL_USER} -p${MYSQL_PASS} --all-databases > ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME}
#
# Write status of the operation to the mysql.log file in the backup directory
#
if [ $? -ne 0 ]; then
echo `date`" - ERROR creating backups of host "${MYSQL_HOST} >> ${DIR_BKUP}/mysql.log
else
echo `date`" - MySQL Backup complete for "${MYSQL_HOST} >> ${DIR_BKUP}/mysql.log
BACKUP_TAR_NAME=${BACKUP_FILENAME}".tar.gz"
tar czf ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_TAR_NAME} ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME} && rm ${DIR_BKUP}/${MYSQL_HOST}/${BACKUP_FILENAME}
fi
该脚本将:
- 检查是否已设置所有必需参数
- 将所有 MySQL 数据库转储到指定的备份目录下名为 YYYY-mm-dd.sql 的文件中(如果该目录不存在,则会创建该目录)
- 对文件进行 GZIP 压缩,如果 GZIP 操作成功,则删除原始 SQL 文件
如果您愿意,此脚本应该相当简单,您可以自定义 - 请参阅高级 Bash 脚本指南以了解更多有关此操作的信息。
... 一旦你的数据库备份完毕,并且可以在特定位置找到,为什么不使用 WinSCP 自动检索备份而不是通过 FTP 传输文件?