帮助编写 Linux 脚本来备份和将文件 ftp 到另一台服务器

帮助编写 Linux 脚本来备份和将文件 ftp 到另一台服务器

我在 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

该脚本将:

  1. 检查是否已设置所有必需参数
  2. 将所有 MySQL 数据库转储到指定的备份目录下名为 YYYY-mm-dd.sql 的文件中(如果该目录不存在,则会创建该目录)
  3. 对文件进行 GZIP 压缩,如果 GZIP 操作成功,则删除原始 SQL 文件

如果您愿意,此脚本应该相当简单,您可以自定义 - 请参阅高级 Bash 脚本指南以了解更多有关此操作的信息。

... 一旦你的数据库备份完毕,并且可以在特定位置找到,为什么不使用 WinSCP 自动检索备份而不是通过 FTP 传输文件?

相关内容