一个空格惹的祸

12年前 9

今天一下午就干了一件事——重装lnmp。其实装lnmp只需要半个小时的时间,当然这取决于VPS的性能。装了N遍了,重装lnmp对我来说是一件很痛苦的事。但今天不得不做,因为我犯了一个错,多打了一个空格。同时也表示我对这位朋友的歉意。丢了一个月的数据。

记得上次犯过这样的错误,当时用mv的命令,mv xxx /* /home/wwwroot/xxx.com,于是整站乃至整个vps就错乱了。不管是FTP客户端还是SSH都失效了。怎么办?我已经记不起当时是怎么解决的。貌似提前备份了一下,只需要用另外一台vps将数据拷过来就好了。可这次不同的是用了rm -r xxx /* ,咔,看出来了没,一个空格,就这么一个空格,全部数据被删除了,甚至系统文件都没了。我恨,恨不得将自己碎尸万段。这就好比本山大叔那双手一样,一抖多按了一个零,3000变30000,没了!钱乃小事,关键那么多数据没了,多可惜啊!

所以今天特别百度了很多关于SSH最简单最快速的备份教程。其实很久以前我也研究过这个教程,当时愣是没整明白。今天,我终于搞明白了。这跟win下的批处理是一样的道理和效果。老霸气了。

#!/bin/bash
#Funciont: Backup website and mysql database
#Author: 皇家元林
#Website: http://hjyl.org/
#IMPORTANT!!!Please Setting the following Values!
######~Set MySQL UserName and password~######
MYSQL_UserName=数据库用户名
MYSQL_PassWord=数据库密码

######~Set MySQL Database you want to backup~######
Backup_Database_Name1=数据库名
Backup_Database_Name2=数据库名
Backup_Database_Name3=数据库名
Backup_Database_Name4=数据库名

######~Set FTP Information~######
FTP_HostName=FTP的地址
FTP_UserName=FTP用户名
FTP_PassWord=FTP密码
FTP_BackupDir=/home/backup #备份文件路径

#Values Setting END!
TodayWWWBackup=xhjyl_$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql.gz
OldWWWBackup=xhjyl_$(date -d -7day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -7day +"%Y%m%d").sql.gz

# backup nginx configure files
tar -czvf /home/wwwroot/nginx_conf_$(date +%Y%m%d).tar.gz /usr/local/nginx/conf/vhost

#backup mysql
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name1 | gzip > /home/backup/db-$Backup_Database_Name1-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name2 | gzip > /home/backup/db-$Backup_Database_Name2-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name3 | gzip > /home/backup/db-$Backup_Database_Name3-$(date +"%Y%m%d").sql.gz
/usr/local/mysql/bin/mysqldump --add-drop-table -u$MYSQL_UserName -p$MYSQL_PassWord $Backup_Database_Name4 | gzip > /home/backup/db-$Backup_Database_Name4-$(date +"%Y%m%d").sql.gz

# backup wwwroot and mysql
tar -czvf /home/backup/xhjyl_$(date +%Y%m%d).tar.gz /home/wwwroot --exclude=ftp --exclude=phpmyadmin
rm $OldWWWBackup
rm $OldDBBackup
cd /home/backup
lftp fish://$FTP_UserName:$FTP_PassWord@$FTP_HostName << EOF
cd $FTP_BackupDir
mrm $OldWWWBackup
mrm $OldDBBackup
mput $TodayWWWBackup
mput $TodayDBBackup
bye
EOF

保存为backup.sh,上传到VPS,并添加755权限,执行。经测试是有效果的。

如果能定时自动备份就更棒了,据说crontab -e,测试了好几遍,没反应,不知道是什么原因。慢慢折腾吧!暂且记录这些。洗洗睡了。

P.s.这些代码在hilau.com也有记录。

P.s.有人说我的博客https在chrome下的那把锁被打上叉叉了,这是因为本站有些js调用来自外链,其中JQ库换成HTTPS已经好了,然后就那些Google广告的代码,不过这些貌似改不了的。

9 条评论

  1. #1

    摸摸头,rm之类的命令你要审核后再按 enter,养成习惯。

  2. #2

    小刘强大,以后有时间再来学习这个代码

  3. #3

    不仅要小心空格,还要小心网上的一些Shell代码,直接复制下来就扔到终端,可能会有隐藏命令

    • @郑杰 对,所以对于不懂那些代码的我,备份很重要!
      你真的换上Ubuntu了,搞的我都心动了

  4. #4

    空格的威力挺猛的嘛

  5. #5

    今天又看了一遍,这。。。我也有过一次,用了rm -r xxx /*

    我当时只是想删除当前目录下的所有文件 用 rm -r xxx ./* ,没想到少打了一个. 全删完了。。。