VPS侦探论坛

 找回密码
 注册
查看: 6438|回复: 1

分享个一键自动备份数据库和网站文件的脚本

[复制链接]
发表于 2012-3-11 17:36:38 | 显示全部楼层 |阅读模式

我自己才装了老大的lnmp,相当好用。

目前运行正常。

开始寻思备份问题,于是论坛上找,没有一个较为完整的方案。

搜索之,发现网上有个叫啊黄的人做了个脚本,目前版本到0.2了,还不错,于是转载来这里给大家分享。

功能还是不错的,支持数据库和网页文件备份。

这个是脚本下载,他的站点提供的那个我用超级终端老是下载不了,是不是站点被强了也不知道。



再不行,自己写脚本加入也行,这个是他的脚本:
  1. #!/bin/bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH

  4. # SET FTP server you want back up to
  5. FTP_HOST="ahuang.org"
  6. FTP_USER=""
  7. FTP_PASS=""

  8. # Databases information
  9. DB_USER="root"
  10. DB_PASS="root"
  11. DB_PORT=3306

  12. # Auto clear the backup tar file
  13. AUTO_CLEAN="no"

  14. # Set Server-Configure file to back up
  15. CONF_NGINX=/usr/local/nginx/conf
  16. CONF_APACHE=/usr/local/apache/conf

  17. # Set WWWROOT to back up
  18. WWWROOT=/home/wwwroot

  19. # Set Other File to back up
  20. FILE=


  21. ########## No Change ############
  22. # Begin
  23. TMP_FILE="dbs_tmp"
  24. RE_FILE="easyup-0.2.sh"
  25. function alert(){
  26.     echo -e "\e[0;32m$1\e[0m"
  27. }
  28. function warn(){
  29.     echo -e "\e[0;33mWarning:  $1\e[0m"
  30. }
  31. function copyright(){
  32.     echo -e "\e[0;32mEasy back Success. Visit\e[0m \e[0;33mhttp://ahuang.org/easyback\e[0m \e[0;32mfor more information.\e[0m"
  33. }
  34. function cmdExist()
  35. {
  36.     IFS=":"
  37.     for directory in $PATH
  38.     do
  39.         if [ -x $directory/$1 ]
  40.         then
  41.             return 0
  42.         fi
  43.     done
  44.     return 1
  45. }

  46. # Processing
  47. clear
  48. alert "rocessing ..."
  49. BAK_NAME=backup_`date +%Y.%m.%d_%H%M`
  50. mkdir $BAK_NAME
  51. cd $BAK_NAME

  52. ##
  53. if [ -n "$CONF_NGINX" ]; then
  54.     if [ -d "$CONF_NGINX" ]; then
  55.         alert "Copy nginx-conf files ..."
  56.         mkdir -p conf/nginx
  57.         cp -rf $CONF_NGINX/. conf/nginx
  58.     else
  59.         warn "$CONF_NGINX not exist. Skip it."
  60.     fi
  61. fi
  62. if [ -n "$CONF_APACHE" ]; then
  63.     if [ -d "$CONF_APACHE" ]; then
  64.         alert "Copy apache-conf files ..."
  65.         mkdir -p conf/apache
  66.         cp -rf $CONF_APACHE/. conf/apache
  67.     else
  68.         warn "$CONF_APACHE not exist. Skip it."
  69.     fi
  70. fi

  71. ##
  72. if [ -n "$WWWROOT" ]; then
  73.     if [ -d "$WWWROOT" ]; then
  74.         alert "Copy wwwroot ..."
  75.         mkdir wwwroot
  76.         cp -rf $WWWROOT/. wwwroot
  77.     else
  78.         warn "$WWWROOT not exist. Skip it."
  79.     fi
  80. fi
  81. if [ -n "$FILE" ]; then
  82.     if [ -d "$FILE" ]; then
  83.         alert "Copy other files ..."
  84.         mkdir file
  85.         cp -rf $FILE/. file
  86.     else
  87.         warn "$FILE not exist. Skip it."
  88.     fi
  89. fi

  90. ##
  91. alert "Buid $RE_FILE ..."
  92. cat >$RE_FILE<<eof
  93. #!/bin/bash
  94. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  95. export PATH

  96. # database information
  97. DB_USER="$DB_USER"
  98. DB_PASS="$DB_PASS"
  99. DB_PORT=$DB_PORT


  100. #####
  101. clear
  102. echo "Copy the conf-files..."
  103. if [ -d "conf/nginx" ]; then
  104.     mkdir -p $CONF_NGINX
  105.     cp -rf conf/nginx/. $CONF_NGINX
  106. fi
  107. if [ -d "conf/apache" ]; then
  108.     mkdir -p $CONF_APACHE
  109.     cp -rf conf/apache/. $CONF_APACHE
  110. fi

  111. ##
  112. if [ -d "dbs" ] && [ -n "\$DB_USER" ] && [ -n "\$DB_PASS" ] && [ -n "\$DB_PORT" ]; then
  113.     if ! which mysql; then
  114.         echo "Error: You have never install mysql!"
  115.         exit
  116.     else
  117.         echo "Import the databases..."
  118.         DB_FILES=\`ls dbs/*.sql\`
  119.         for DB_FILE in \$DB_FILES
  120.         do
  121.             mysql -u\$DB_USER -p\$DB_PASS -P\$DB_PORT < \$DB_FILE
  122.         done
  123.     fi
  124. fi

  125. ##
  126. if [ -d "wwwroot" ]; then
  127.     echo "Copy the wwwroot..."
  128.     cp -rf wwwroot/. $WWWROOT
  129.     chown -R www:www $WWWROOT
  130. fi
  131. if [ -d "file" ]; then
  132.     echo "Copy the other files..."
  133.     cp -rf file/. $FILE
  134. fi
  135. echo " "
  136. echo -e "Easy up Success, Visit \e[0;32mhttp://ahuang.org/easyback\e[0m for more information."
  137. echo " "
  138. echo " "
  139. EOF
  140. chmod +x $RE_FILE

  141. ##
  142. if [ -n "$DB_USER" ] && [ -n "$DB_PASS" ] && [ -n "$DB_PORT" ]; then
  143.     alert " "
  144.     cmdExist mysql
  145.     if [ $? -ne 0 ]; then
  146.         warn "No mysql installed. Skip it."
  147.     else
  148.         alert "Export databases ..."
  149.         mkdir dbs
  150.         mysql -u$DB_USER -p$DB_PASS -P$DB_PORT -BN -e 'show databases;' | grep -v mysql | grep -v information_schema > $TMP_FILE
  151.         while read DB
  152.         do
  153.             mysqldump -u$DB_USER -p$DB_PASS -P$DB_PORT \
  154.                     --quick --add-drop-table --order-by-primary \
  155.                     --complete-insert --extended-insert=false --skip-comments \
  156.                     --default-character-set=utf8 --add-locks \
  157.                     --databases $DB > dbs/$DB.sql
  158.             if [ -f "dbs/$DB.sql" ]; then
  159.                 alert "  name: $DB \tfile: dbs/$DB.sql \tsize: `du -sh dbs/$DB.sql| awk '{print $1}'`"
  160.             fi
  161.         done < $TMP_FILE
  162.         rm $TMP_FILE
  163.     fi
  164. fi

  165. ##
  166. cd ..
  167. alert " "
  168. alert "Compress backup files ..."
  169. tar czf $BAK_NAME.tar $BAK_NAME
  170. rm -rf $BAK_NAME
  171. if [ -f "$BAK_NAME.tar" ]; then
  172.     alert "  file: $BAK_NAME.tar"
  173.     alert "  size: `du -sh $BAK_NAME.tar | awk '{print $1}' `"
  174. fi

  175. ##
  176. if [ -n "$FTP_HOST" ] && [ -n "$FTP_USER" ] && [ -n "$FTP_PASS" ]; then
  177.         alert " "
  178.     cmdExist ftp
  179.     if [ $? -ne 0 ]; then
  180.         warn "No Ftp client install! Skip it."
  181.     else
  182.         alert "Ftp file to server, waiting for a while ......"
  183. # start ftp
  184. ftp -n $FTP_HOST > ftp.log 2>&1 <<eof
  185. user $FTP_USER $FTP_PASS
  186. binary
  187. put $BAK_NAME.tar
  188. bye
  189. EOF
  190. # end ftp
  191.         if [ "$AUTO_CLEAN" = "yes" ]; then
  192.             alert "auto clean files ..."
  193.             rm -rf $BAK_NAME.tar
  194.         fi
  195.         cat ftp.log
  196.     rm -f ftp.log
  197.     fi
  198. fi

  199. alert " "
  200. copyright
  201. alert " "
复制代码

[ 本帖最后由 ShunYea 于 2012-3-11 17:43 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
美国VPS推荐: 遨游主机LinodeLOCVPS主机云搬瓦工80VPSVultr美国VPS主机中国VPS推荐: 阿里云腾讯云。LNMP付费服务(代装/问题排查)QQ 503228080
 楼主| 发表于 2012-3-11 17:38:26 | 显示全部楼层


这个是他的站点的介绍:

Changelog

version 0.2
  • 修改0.1中一处bug;
  • 修改数据库导出方式,数据库导出更智能,现在可以自动导出除Mysql自带数据库外的所有库;
  • 将数据库分开导出,每个数据库一个文件,导入时脚本自动创建数据库,更加安全方便;
  • 增加备份操作提示,可以预览数据库导出和备份文件的详细信息;
  • 增加异常处理,在缺少相关软件时自动忽略并给出警告,便于修改和调整;
  • 更改信息提示方式,将正常操作提示和警告提示以颜色进行区分;
  • 优化备份压缩包文件命名,优化代码结构及命令检查逻辑。
  • 执行脚本时必须使用bash执行。
Screenshots
  • 系统中缺少相应的目录或者easyback配置错误,或者未安装相应的软件(比如Mysql),则用黄色给出警告,并跳过相应操作。
  • 备份完成后,将显示备份的数据库、数据脚本和脚本大小,显示压缩后的备份包大小。

Introduction

lnmp 是比较常用的Linux服务器安装包,lnmp = Linux + nginx + mysql + php,Easyback是一个简单的lnmp备份脚本,默认配置可兼容lnmp.org提供的lnmp和lnmpa安装包,兼容ngro.org的MAP和MAPn安装包,更改其中的配置后可兼容所有的Linux服务器环境,甚至是虚拟主机。备份内容包括:
  • nginx配置文件
  • apache配置文件
  • Mysql数据库脚本
  • wwwroot站点目录
  • 一键恢复脚本easyup
  • 其他可选目录

Instructions

下载easyback脚本:
wget http://file.heaphy.me/ahuang/easyback-0.2.sh

编辑脚本:
vim easyback-0.2.sh

修改easyback配置(如果配置有误,easyback将给出提示):
# SET FTP server you want back up to
# 备份服务器(FTP)的地址、用户名和密码,任一为空,则只备份打包,不做FTP异地备份

FTP_HOST
="ahuang.org"
FTP_USER
=""
FTP_PASS=""

# Databases information

# 本地数据用户名、密码,端口,脚本自动备份用户的数据库

DB_USER
="root"
DB_PASS
="root"
DB_PORT=3306

# Auto clear the backup file
# FTP备份完成后,是否删除备份时的压缩包,填写yes则删除
AUTO_CLEAN
="no"

# Set Server-Configure file to back up# Nginx和Apache的配置文件目录,默认即可,也可为空
CONF_NGINX
=/usr/local/nginx/conf
CONF_APACHE=/usr/local/apache/conf

# Set WWWROOT to back up# 站点目录
WWWROOT
=/home/wwwroot

# Set Other File to back up
# 其他需要备份的目录路径,默认为空
FILE=

执行脚本:
bash easyback-0.2.sh

备份后文件名如:backup_2011.11.02_1554.tar,2011.11.02为备份日期,1554为备份时的时间。

Easyup

easyup
是easybac对应的还原脚本,脚本在备份后的压缩包里。
tar xvf backup_2011.11.02_1554.tar
cd backup_2011.11.02_1554

还原时,修改还原脚本
vim easyup-0.2.sh

修改数据库配置
# database information
DB_USER="root"
DB_PASS
="root"
DB_PORT=3306

还原所有备份时,将自动重建数据库、导入数据并且还原所有备份的文件,还原执行:
bash easyup-0.2.sh

[ 本帖最后由 ShunYea 于 2012-3-11 17:45 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
Linux下Nginx+MySQL+PHP自动安装工具:https://lnmp.org
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|VPS侦探 ( 鲁ICP备16040043号-1 )

GMT+8, 2024-12-23 09:41 , Processed in 0.027003 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表