在我的专用服务器上,有一个我想要备份到的5G NAS。最终对每个cPanel的MySQL表和public_html进行备份,
如何读取备份表文件夹(/var/lib/ MySQL )的内容,如果找到了子文件夹,则创建找到这些子文件夹的tar.gz文件,然后将它们复制到/mnt/mysql_backup/date/dbname。
然后转到/home/,遍历每个文件夹以备份其所在的/public_html/文件夹,然后将文件复制到/mnt/ files _ backup /date/cpanelfoler
如果脚本成功完成。删除旧备份,仅保留刚创建的最后一个备份。
任何帮助都将不胜感激
发布于 2012-08-08 18:55:40
尝试以下脚本:
#! /usr/bin/bash
OK=0
KO=1
MYSQL_DIR="/var/lib/mysql"
MYSQL_BACKUP_DIR="/mnt/mysql_backup/date/dbname"
HTML_DIR="/home/public_html"
HTML_BACKUP_DIR="/mnt/files_backup/date/cpanelfoler"
LOG_FILE="/tmp/backup_log.log"
function archiving
{
local return_status=$OK # Function return status
local IN_DIR=$1 # Input directory
local ARC_DIR=$2 # Archiving directory
final_arc_dir=$ARC_DIR
timestamp=`date +%Y%m%d%H%M%S`
# Archive will be like this : archive_YYYYMMDDHHMMSS
final_arc_dir=${final_arc_dir}/archive_$timestamp
if [ ! -d "$final_arc_dir" ]; then
echo "Creating directory $final_arc_dir"
mkdir -p $final_arc_dir
fi
# More secure : copy then delete instead of moving
echo "Copying files ... to $ARC_DIR"
# For each file, or directory we copy than delete
cp -r $IN_DIR $final_arc_dir
return_last_command=`echo $?`
if [ $return_last_command -ne 0 ]
then
return_status=KO
echo "Error copying files ---> $IN_DIR"
else
rm -rf $IN_DIR
fi
# Archive name
archive_name=$(echo $final_arc_dir | awk -F/ '{print $NF}')
# We can compress
tar cvf - $final_arc_dir | gzip > $ARC_DIR/$archive_name.tar.gz
ret=$?
if [ $ret -ne 0 ]
then
echo "Compression failed ---> $final_arc_dir"
return_status=$KO
else
echo "Compression terminated successfully, we can delete original directory"
rm -rf $final_arc_dir
fi
# Cleanup old archives
for f in `ls -l $ARC_DIR | awk '{print $9}' | grep -v "$timestamp"`
do
echo "\nRemove this older backup --------------------> $f\n"
rm -rf $ARC_DIR/$f
done
return $return_status
}
### MAIN ###
### Archiving MYSQL FILES
if ! archiving $MYSQL_DIR $MYSQL_BACKUP_DIR
then
echo "\nError archiving MYSQL FILES ----> KO" | tee -a $LOG_FILE
exit $KO
fi
### Archiving HTML FILES
if ! archiving $HTML_DIR $HTML_BACKUP_DIR
then
echo "\nError archiving HTML FILES ----> KO" | tee -a $LOG_FILE
exit $KO
fi
# All seems to be ok
echo "\nAll seems to be okay\n"
exit $OK发布于 2012-08-08 18:57:40
$ mysqldump my_database > my_database_dump.sql发布于 2012-08-08 20:09:53
为了备份mysql,我会考虑使用mysqldump。但请记住,mysqldump在运行时会锁定表。如果您的数据库中有相当数量的数据,则此过程可能需要相当长的时间。
如果您无法长时间锁定数据库,我将执行镜像并在该镜像上运行备份脚本。(在这里可以找到详细的分步操作过程:http://www.howtoforge.com/mysql_database_replication)
要备份数据库,您可以执行以下操作:
BACKUPDATE=$(date +"%Y%m%d")
BACKUPDIR='/mnt/backup'
BACKUPUSER='bkpUser'
BACKUPPASS='bkpPassword'
mkdir -p $BACKUPDIR/$BACKUPDATE/databases/
for DATABASE in $(mysql -u$BACKUPUSER -pBACKUPPASS -e "show databases" | grep -v Database | grep -v information_schema)
do
mysqldump -u$BACKUPUSER -pBACKUPPASS $DATABASE > $BACKUPDIR/$BACKUPDATE/databases/$DATABASE.sql
done这应该每天创建一个新的文件夹,并将您的所有数据库转储到其中。
对于public_html文件夹,如下所示
tar czvf $BACKUPDIR/$BACKUPDATE/public_html.tar.gz $(find /home/ -type d -name public_html)添加一些错误检查,这应该会让您开始工作。
关于备份的最后一句话。我强烈建议你保留更多的文件,而不仅仅是最后的备份文件。像保留每件东西一周和每月一件这样的事情对我来说听起来很不错。
https://stackoverflow.com/questions/11861510
复制相似问题