半岛小生 发表于 2016-2-22 11:03:23

LNMP 1.2一键包下的backup.sh备份功能如何使用?

lnmp一键包第一次使用,刚装上正在研究,不甚熟悉。/lnmp1.2-full/tools/下有个backup.sh备份脚本,看代码是可以用来备份数据库和网站目录的。我有三个问题想咨询下坛主:
1、如何手动运行backup.sh备份功能?
在运行bash backup.sh后报错,backup.sh放在/root/下:
# bash backup.sh
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
: command not found
'ackup.sh: line 37: syntax error near unexpected token `
'ackup.sh: line 37: `Backup_Dir()
2、如何将backup.sh添加到crontab中定时自动运行备份?
3、如何只备份数据库并用FTP上传备份?
网站目录备份对我来说不需要用到,是否可以直接注释掉带"WWWBackup"、"Backup_Dir"、"Backup_Home"特征的部分代码来去掉网站目录备份?

请坛主指教,感谢坛主的无私奉献!

我的backup.sh文件内容如下,里面的mysql名和password实际使用是正确的,以下做了示例隐藏处理:
#!/bin/bash

#Funciont: Backup website and mysql database
#Author: licess
#Website: http://lnmp.org

#IMPORTANT!!!Please Setting the following Values!

Backup_Home="/home/backup/"
MySQL_Dump="/usr/local/mysql/bin/mysqldump"
######~Set Directory you want to backup~######
Backup_Dir=("/home/wwwroot/vpser.net" "/home/wwwroot/lnmp.org")

######~Set MySQL Database you want to backup~######
Backup_Database=("db1" "db2")

######~Set MySQL UserName and password~######
MYSQL_UserName='root'
MYSQL_PassWord='1***1'

######~Enable Ftp Backup~######
Enable_FTP=1
# 0: enable; 1: disable
######~Set FTP Information~######
FTP_Host='1.2.3.4'
FTP_Username='vpser.net'
FTP_Password='yourftppassword'
FTP_Dir="backup"

#Values Setting END!

TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
OldWWWBackup=www-*-$(date -d -3day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").sql

Backup_Dir()
{
    Backup_Path=$1
    Dir_Name=`echo ${Backup_Path##*/}`
    Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
    tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql()
{
    ${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}

if [ ! -f ${MySQL_Dump} ]; then
    echo "mysqldump command not found.please check your setting."
    exit 1
fi

if [ ! -d ${Backup_Home} ]; then
    mkdir -p ${Backup_Home}
fi

type lftp >/dev/null 2>&1 || { echo >&2 "lftp command not found. Install: centos:yum install lftp,debian/ubuntu:apt-get install lftp."; }

echo "Backup website files..."
for dd in ${Backup_Dir[@]};do
    Backup_Dir ${dd}
done

echo "Backup Databases..."
for db in ${Backup_Database[@]};do
    Backup_Sql ${db}
done

echo "Delete old backup files..."
rm -f ${Backup_Home}${OldWWWBackup}
rm -f ${Backup_Home}${OldDBBackup}

if [ ${Enable_FTP} = 0 ]; then
    echo "Uploading backup files to ftp..."
    cd ${Backup_Home}
    lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
cd ${FTP_Dir}
mrm ${OldWWWBackup}
mrm ${OldDBBackup}
mput ${TodayWWWBackup}
mput ${TodayDBBackup}
bye
EOF

echo "complete."
fi

[ 本帖最后由 半岛小生 于 2016-2-22 12:19 编辑 ]

licess 发表于 2016-2-22 13:22:13

1 不要加bash之类的,直接chmod +x 文件名加上执行权限直接执行
另外你用什么编辑器编辑的

2 crontab教程自行去www.vpser.net网站上搜索

3不备份网站就删除Backup_Dir 那些

半岛小生 发表于 2016-2-22 13:38:42

回复 2# 的帖子

用加执行权限的方法会报如下错:
# chmod +x /root/backup.sh
# ./backup.sh
-bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory

我是在ssh secure file transfer里用dreamwave直接打开编辑并保存的。

感谢您的回复!

licess 发表于 2016-2-22 16:30:49

回复 3# 的帖子

这个错误很明显是使用windows下的记事本之类的工具保存成dos文件格式造成的

vi /etc/init.d/nginx
输入:set fileformat=unix
输入:wq
再运行试试,vi教程 https://www.vpser.net/manage/vi.html

如果已安装dos2unix命令可以执行:dos2unix 文件名来完成转换。

或使用notepad++编辑,编辑-》档案格式转换-》转为UNIX格式

半岛小生 发表于 2016-2-23 20:02:55

回复 4# 的帖子

坛主真是太强大了!果然是文件格式的问题,用notepad++转换格式并覆盖后就可以备份成功了。您写的脚本用来备份非常方便了。只是.sql文件未经压缩,稍大的数据库文件FTP上传备份会偏慢。请问如何才能将导出的数据库.sql文件像网站目录备份一样直接打包成.tar.gz压缩包存储?

licess 发表于 2016-2-24 12:53:20

回复 5# 的帖子

Backup_Sql语句里加上个 | gzip 就压缩成gz的了
${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 | gzip > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql.gz

半岛小生 发表于 2016-2-24 19:38:09

回复 6# 的帖子

万分感激军哥的帮助!
页: [1]
查看完整版本: LNMP 1.2一键包下的backup.sh备份功能如何使用?