Fiz um scriptzinho maroto pra manejar o dump de um banco de dados do WordPress. Ele serve pra exportar os dados do banco para um arquivo texto, substituindo a URL do site por uma string mágica; e também pra importar os dados do arquivo texto para o banco, desfazendo a substituição da URL. Assim, a gente consegue manter os dados do servidor de homologação/produção sob controle de versão, exportando estes dados para o arquivo texto sempre que há modificações no servidor, e importando os dados nas máquinas de desenvolvimento, mantendo o conteúdo do servidor replicado na máquina do desenvolvedor. Deu pra entender? Espero que não.
dodump.sh
#!/bin/bash
function showerror {
echo -n "ERROR: "
echo $*
usage
exit 1
}
function usage {
echo "USAGE: dodump.sh [dump|load] [[-c path/to/wp-config.php] [-f path/to/dumpfile.sql] [-u your.domain.com]]"
}
if [ $# -eq 0 ]; then
usage
else
SITEURL="none"
DOMAIN="none"
ACTION="nothing"
DUMPFILE="dumpfile.sql"
WP_CONFIG="default"
while [ "$1" != "" ]; do
case $1 in
dump | --dump )
ACTION="dump"
;;
load | --load )
ACTION="load"
;;
-c | --config )
shift
WP_CONFIG=$1
;;
-f | --file )
shift
DUMPFILE=$1
;;
-u | --url )
shift
DOMAIN=$1
;;
-h | --help | --? | /? )
usage
exit
;;
* )
usage
exit 1
esac
shift
done
DB_NAME='notfound'
DB_USER='notfound'
DB_PASSWORD='notfound'
DB_HOST='notfound'
if [ "$WP_CONFIG" == "default" ]; then
WP_CONFIG='wp-config.php'
if [ ! -f $WP_CONFIG ]; then WP_CONFIG='www/wp-config.php'; fi
fi
if [ -n "$WP_CONFIG" ]; then
if [ -f $WP_CONFIG ]; then
DB_NAME=`cat ${WP_CONFIG} | grep "define" | grep "DB_NAME" | sed "s/define\s*(\s*'DB_NAME'\s*,\s*'\([^']*\)'\s*)\s*;\r\?/\1/g"`
DB_USER=`cat ${WP_CONFIG} | grep "define" | grep "DB_USER" | sed "s/define\s*(\s*'DB_USER'\s*,\s*'\([^']*\)'\s*)\s*;\r\?/\1/g"`
DB_PASSWORD=`cat ${WP_CONFIG} | grep "define" | grep "DB_PASSWORD" | sed "s/define\s*(\s*'DB_PASSWORD'\s*,\s*'\([^']*\)'\s*)\s*;\r\?/\1/g"`
DB_HOST=`cat ${WP_CONFIG} | grep "define" | grep "DB_HOST" | sed "s/define\s*(\s*'DB_HOST'\s*,\s*'\([^']*\)'\s*)\s*;\r\?/\1/g"`
else
showerror "Config file \"${WP_CONFIG}\" not found."
fi
else
showerror "Config file not specified."
fi
CONNDATA="-h ${DB_HOST} -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME}"
if [ "$DOMAIN" == "" ]; then
showerror "Domain not specified."
elif [ "$DOMAIN" == "none" ]; then
SITEURL=`mysql ${CONNDATA} -e "SELECT option_value FROM wp_options WHERE option_name='siteurl'" --skip-column-names --batch | sed "s/\\\\./\\\\\\\\\\\\./g"`
DOMAIN=`echo ${SITEURL} | sed "s/https\?:\\\\/\\\\/\(.*\)/\1/g"`
DOMAIN=`echo ${DOMAIN} | sed "s/\\\\//\\\\\\\\\\\\//g"`
SITEURL=`echo ${SITEURL} | sed "s/\\\\//\\\\\\\\\\\\//g"`
else
SITEURL="http://${DOMAIN}"
fi
if [ "$SITEURL" == "none" ]; then showerror "Could not retrieve your site URL from database, and [domain] was not specified."; fi
if [ "$ACTION" == "nothing" ]; then
showerror "Action not specified."
elif [ "$ACTION" == "dump" ]; then
echo -n "Dumping... "
mysqldump ${CONNDATA} | sed "s/${SITEURL}/[[INSERT-SITEURL-HERE]]/g" | sed "s/${DOMAIN}/[[INSERT-DOMAIN-HERE]]/g" > ${DUMPFILE}
echo "done!"
echo "Dump written to file \"${DUMPFILE}\"."
elif [ "$ACTION" == "load" ]; then
if [ ! -f $DUMPFILE ]; then
showerror "Dump file \"${DUMPFILE}\" not found."
else
read -n1 -p "Ok to PERMANENTLY overwrite your database information with \"${DUMPFILE}\" file contents? (y/N) "
case "$REPLY" in
"y" | "Y" )
echo
echo -n "Loading... "
cat ${DUMPFILE} | sed "s/\[\[INSERT-DOMAIN-HERE\]\]/${DOMAIN}/g" | sed "s/\[\[INSERT-SITEURL-HERE\]\]/${SITEURL}/g" | mysql ${CONNDATA}
echo "done!"
echo "Dump loaded from file \"${DUMPFILE}\"."
;;
"n" | "N" | "" )
if [ "$REPLY" != "" ]; then echo; fi
echo "Aborted."
;;
* )
echo
echo "What part of the question did you not understand?! Aborted."
;;
esac
fi
fi
fi
Baixe o arquivo dodump.sh (zip)
© Compostela: “Deixe o que puder; leve o que precisar.”
#1 by ldmotta on 02/07/2010 - 9:45 pm
Mas bah chê!!!! Que barbaridade!!! não é que funcionou mesmo
Valeu!
#2 by Michael Granados on 22/03/2011 - 10:27 pm
Caramba!
O legal é que eu fiz uma solução também, mas em PHP usando o serialize/unserialize para alterar os dados do banco quando ele encontrar a URL no meio do projeto. Decidi fazer em PHP porque assim Alice Andrade (que usa windows) pode fazer o import e export usando o browser ;D
Qualquer dia desses eu coloco num github da vida e te aviso pra você dar uma olhada.
Ótima solução… Abraços!
#3 by Ederson Peka on 23/03/2011 - 12:08 am
Pode crer, publica por aê.
Eu já nem uso mais este script (não roda na porcaria do Mac e a galera aqui enche o saco, teria que alterar, sabe como é). Tô juntando umas gambis medonhas pra fazer um bem bolado diferente, mais “amigável” também, assim que der tempo eu publico.
Abraço.
#4 by Michael Granados on 23/03/2011 - 11:15 pm
Taquióh!
https://github.com/dgmike/WP-transfer
enjoy ;D