Después de varios días liado con este tema, por fin tengo listo el script para clonar instalaciones de wordpress, lo voy a publicar en fase “beta”, ya que solo se ha problado en
una máquina con ubuntu server y un wordpress recién instalado, supongo que habrá que realizar más modificaciones si por ejemplo usuamos permant links.
Nuestro proyecto se va a componer de los siguientes puntos.
- Crear copia de base de datos y carpeta wordpress
- Modificar datos de conexión de la instalación clonada para emplear la base de datos generada.
- Dar privilegios al nuevo usuario mysql para trabajar sobre la nueva base de datos.
- Cambiar url del nuevo blog para que funcione correctamente.
Ahí va el script, si tenéis algún problema o duda, ruego me informéis para poder revisarlo, también se aceptan sugerencias.
#!/bin/bash # SCRIPT DE CLONACION PARA WORDPRESS, CREADO POR ELAYO.ES ################################################################################ ################# EMPIEZA LA PARTE DEL SCRIPT MODIFICABLE ###################### ################################################################################ # Definimos la raiz de nuestro servidor apache RUTA=/var/www # Indicamos la base de datos a clonar DBA=dba1 # Base de datos a crear, también será el nombre del nuevo usuario mysql DBADEST=dba2 # Usuario con privilegios para crear bases de datos. SERVER=localhost USER=usuario PASS=contraseña # Password para el nuevo usuario mysql PASS1=contraseña2 # Carpeta wordpress a copiar FOLDER=wordpress # dominio actual, ejemplo: elayo.es o www.elayo.es DOMAIN=elayo.es ################################################################################ ################# TERMINA LA PARTE DEL SCRIPT MODIFICABLE ###################### ################################################################################ # Carpeta wordpress a copiar WPDIR1=$RUTA/$FOLDER # Definimos la ruta de la nueva carpeta a crear WPDIR2=$RUTA/$DBADEST # Hacemos un backup de la base de datos a clonar BACKUP=`mysqldump --add-drop-table -h $SERVER -u $USER --password=$PASS $DBA > $TEMP/$DBADEST.sql` $BACKUP # Copiamos la carpeta de wordpress cp -rp $WPDIR1 $WPDIR2 # Creamos la base de datos DBADEST y volcamos todos los datos mysqladmin create -u $USER --password=$PASS $DBADEST mysql -h $SERVER -u $USER --password=$PASS $DBADEST < $TEMP/$DBADEST.sql # Eliminamos archivos temporales rm -rf $TEMP/$DBADEST.sql # Sustituimos la base de datos de wordpress en wp-config.php sed s/$DBA/$DBADEST/g $WPDIR2/wp-config.php > $WPDIR2/wp-config.php-new rm $WPDIR2/wp-config.php mv $WPDIR2/wp-config.php-new $WPDIR2/wp-config.php # Establecemos comunicación con el servidor mysql, creamos el nuevo usuario y le damos privilegios sobre la nueva DBA. # Aprovechamos la conexión para modificar los campos siteurl y home de la nueva DBA. MYSQL="mysql -u $USER --password=$PASS" $MYSQL << END use $DBADEST; GRANT ALL PRIVILEGES ON $DBADEST.* TO '$DBADEST'@'localhost' IDENTIFIED BY '$PASS1' WITH GRANT OPTION; update ap_options set option_value='http://$DOMAIN/$DBADEST' where option_name='siteurl'; update ap_options set option_value='http://$DOMAIN/$DBADEST' where option_name='home'; END
Revisión 1 script 18/11/2009:
Efectivamente se ha probado el script con una instalación de wordpress que tiene configurados “enlaces permanentes” y no ha ido bien, la web se clona correctamente pero algunos links aún hacen referencia a la web clonada.
Solución temporal Revisión 1:
Si entramos en el wordpress clonado y dejamos los enlaces permanentes por defecto, el blog funciona correctamente.
Pendiente solución definitiva
Bugs encontrados
1 – Si en la variable DBADEST, definimos un nombre con un “-”, recibimos un error de mysql, para evitarlo, no crear nombres con guiones u otros caracteres especiales.