Bash备份脚本

问题描述:

我想做一个bash脚本来备份我的sevrer,但是它正在创建空的tar归档文件和空的sql文件,我不知道为什么。任何人都可以在这里看到问题?Bash备份脚本

#!/bin/bash 
SERVER_DIR="/var/www/vhosts/site.org" 
DATE=$(date +"%d-%m-%Y") 
BACKUP_DIR="/backups/$DATE" 
NAME="full-$DATE" 

MYSQLUSER="admin" 
MYSQLPASS="pass" 
MYSQLDUMP="$(which mysqldump)" 
GZIP="$(which gzip)" 

mkdir -p $BACKUP_DIR 
tar -zcvf $BACKUP_DIR/$NAME.tar.gz $SERVER_DIR 
$MYSQLDUMP -u $MYSQLUSER -p$MYSQLPASS --all-databases | $GZIP -9 > $BACKUP_DIR/$NAME.sql 
find /backup/ -mtime +31 -exec rm -rf {} \; 
+0

tar是否提供任何输出? –

+0

您是否尝试输出您定义的变量,看看他们是否正常?并使用它们的值手动运行备份命令(由值替换)? – AbiusX

+0

,你能回应$ BACKUP_DIR/$ NAME来确定它实际上是你想要的吗? –

我认为你只是缺少使用gzip线-c,尝试:

$MYSQLDUMP -u $MYSQLUSER -p$MYSQLPASS --all-databases | $GZIP -c9 > $BACKUP_DIR/$NAME.sql.gz 
+0

欢迎@gbp。我同意你的分析。祝你好运。 – shellter

你确定你有访问权SERVER_DIR权限=“/无功/网络/虚拟主机/网站.org“,当你运行你的脚本。

您正在创建/backups,但从/backup删除旧备份。这对最终结果并不重要,但几个月后你将会用光盘。

我不确定在目录名和文件名中都有这个日期是有用的,但这显然取决于您。

SQL文件名应该有一个.gz后缀?

使用which将MYSQLDUMP和GZIP放入变量中几乎没有用;如果可以在PATH上找到它们,外壳也会找到它们;或者说,如果shell找不到东西,那么which也不能。