Drush是drupal管理的必备利器,因此drush的一些命名可以很好的帮我们备份和发布站点。推荐一个drush的参考网站,可以详细的查阅drush的各个命令:
http://drushcommands.com
Drush有一个命令archive-dump可以把整个站点dump成一个压缩包,还有另外一个命令archive-restore可以通过我们dump出来的压缩包恢复站点,因此这两个命令可以快速的帮我们备份和恢复站点,用起来及其方便。
几个参数说明一下:
?overwrite 如果站点存在,则覆盖站点。这个参数比较有用,尤其是多次备份到同一个地方。
?db-su 指定mysql的超级用户,配合?db-su-pw参数,如果数据库不存在,自动创建数据库。(好用吧!)
基于以上两个命令,笔者写了一个简单的小脚本,用于发布站点到另外一台机器上。
不过要用ssh登录,因此需要输入两次密码,解决办法有两种:
1. ssh密钥的方式免密码
2. 用expect调用此脚本,自动输入密码
整个代码如下,需要注意的是,使用前需要配置一下本地站点的root、dburl以及远程站点的root、dburl等参数。
其他相关drush的问题,请参考Drupal大学中关于Drush的问答: http://drupal001.net/search/apachesolr_search/drush
#!/bin/bash
##############################################################
# Backup and deployment your site via drush
# Usage: bash auto_backup.sh get #download remote to local
# bash auto_backup.sh put #push local to remote
# Version: 1.0
# Author: robbin (robbin.joe@gmail.com)
##############################################################
remote_user=robbin
remote_host=192.168.6.229
remote_root=/var/www/html/drupal7_robbin
##if you need to restore the remote server to use this
##remote_db_url=mysql://root:root@localhost/drupal7_robbin_test
local_root=/Users/robbin/Works/htdocs/drupal7_robbin_test
local_db_url=mysql://root:root@localhost/drupal7_robbin_test
#tmp filename
file=mydrupal.tar.gz
##################################
### Backup remote server to local
##################################
if [ "$1" == "get" ]; then
ssh $remote_user@$remote_host "drush --verbose --root=$remote_root archive-dump --destination=/tmp/$file --overwrite 2>&1"
scp $remote_user@$remote_host:/tmp/$file .
###drush arr ./$file default --db-su=root --db-su-pw=root --destination=$local_dir --db-url=$db_url --overwrite
drush --verbose arr ./$file default --destination=$local_root --db-url=$local_db_url --overwrite
fi;
##################################
### Backup local server to remote
##################################
if [ "$1" == "put" ]; then
drush --verbose --root=$remote_root archive-dump --destination=/tmp/$file --overwrite 2>&1
scp /tmp/$file $remote_user@$remote_host:/tmp/
###ssh $remote_user@$remote_host "drush --verbose arr /tmp/$file default --destination=$remote_root --db-url=$remote_db_url --overwrite 2>&1"
ssh $remote_user@$remote_host "drush --verbose arr /tmp/$file default --destination=$remote_root --overwrite 2>&1"
fi;