WordPress: migrar sitios de un multisite a otro

Pues la de hoy (de las últimas semanas mas bien), es la de que tengo que migrar los sitios de un wordpress multisite a otro. El multisite actual lleva muchos años en funcionamiento y tras toquetear hace unos años arrastro algunos problemas que espero que se solucionen con la migración de los sitios a otro wordpress multisite nuevo. Para hacer la migración ambos wordpress deben estar en la última versión y actualizados.

El wordpress multisite de origen lleva 10 años funcionando y hay mogollón de basurilla en la base de datos, sitios que ya no existen, usuarios que pasaron a mejor vida y tablas de plugins que ya no se usan. Además aprovecho para hacer limpieza de plugins y temas que ya no se usan.

Lo primero de todo es hacer un backup del sitio de origen, tanto de la base de datos como de los datos.

A continuación instalo el nuevo en un nuevo contenedor (servidor), en mi caso, lo configuro tal como indico en este otro post que hice hace unos días sobre como montar el varnish y el apache. Anoto que para hacer la instalación del multisite es posible e incluso por mi experiencia recomendable hacerlo sobre el varnish configurado, así nos daremos cuenta de si algo está fallando desde el principio. A fecha de hoy poner PHP8 no es buena idea, hay muchos plugins y temas que aún no están adaptados a esta versión de PHP, así que mejor usar la 7.3 o la 7.4.

Lo siguiente es montar un wordpress multisite con domain mapping tal como explico en este post del 2010! (flipo que aún sirva!).

En mi caso he estado 3 semanas con problemas porque no funcionaba el plugin elementor (putadón porque es la primera vez que pago por un plugin xD), así que he aprovechado para instalar primero el plugin elementor y probar que funciona.

A partir de aquí, recomendación, hacer backup de la maquina que contenga el nuevo wordpress multisite, ya que a partir de aquí la cosa se pone mas “interesante” para decirlo de alguna forma hehe. Si no te manejas bien con mover ficheros de un sitio a otro y de manejo de bases de datos, te recomiendo abortar tu intento de migrar los sitios de uno a otro, prometo unas próximas líneas un poco densas. Quien avisa no es traidor. Si te va la marcha… ahí vamos! :D

Empezamos moviendo los plugins, temas y ficheros del sitio antiguo al nuevo. El sitio viejo ahora mismo está en 2 maquinas distintas, wordpress10-prod para el varnish+apache+wordpress y mysql10 para la base de datos mysql. El nuevo server tiene la ip interna 172.31.0.146 y la base de datos de momento está alojada en este mismo servidor con el plan de que una vez terminada la migración moveré los datos de la base de datos al servidor mysql10.

Copiar Datos (plugins, temas y contenido de los sitios)
Comprimimos los datos del servidor viejo y los movemos al nuevo. Mi recomendación es hacer un tar.gz que luego descomprimiremos en el server nuevo e iremos pasando los datos que nos interesen en “local”. Recomiendo hacer una buena limpieza de usuarios, sitios, plugins y temas que no usamos antes de este paso.

VIEJO:

root@wordpress10-prod:~# cd /var/www/
root@wordpress10-prod:/var/www# tar cvzf 2021_03_13_wp_lmdb.tar.gz wp
root@wordpress10:/var/www# ls -lh
total 3.2G
-rw-r--r-- 1 root     root     3.2G Mar 13 22:40 2021_03_13_wp_lmdb.tar.gz
drwxr-xr-x 2 root     root     4.0K Jan  7 17:01 html
drwxr-xr-x 5 www-data www-data 4.0K Mar 13 20:07 wp
root@wordpress10:/var/www# scp 2021_03_13_wp_lmdb.tar.gz root@172.31.0.145:/root/
2021_03_13_wp_lmdb.tar.gz                         100% 3241MB 101.7MB/s   00:31 

NUEVO:

root@wordpress10:~# cd
root@wordpress10:~# tar xvzf 2021_03_13_wp_lmdb.tar.gz
root@wordpress10:~# cd /var/www/wp/wp-content/

root@wordpress10:/var/www/wp/wp-content# mv plugins{,.old}
root@wordpress10:/var/www/wp/wp-content# mv themes{,.old}
         
root@wordpress10:/var/www/wp/wp-content# cp -R /root/wp/wp-content/themes .
root@wordpress10:/var/www/wp/wp-content# cp -R /root/wp/wp-content/plugins .

root@wordpress10:/var/www/wp/wp-content# chown -R www-data:www-data plugins
root@wordpress10:/var/www/wp/wp-content# chown -R www-data:www-data themes

root@wordpress10:/var/www/wp/wp-content# cd languages
root@wordpress10:/var/www/wp/wp-content/languages# cp -R /root/wp/wp-content/languages/* .
root@wordpress10:/var/www/wp/wp-content/languages# chown -R www-data:www-data *

Ahora comprobamos que el wordpress nuevo funciona correctamente y han aparecido los plugins y temas del sitio antiguo.

Igualar la configuración de plugins y temas de ambos sitios multisite (viejo/nuevo)

Este paso es importante hacerlo antes de cargar los sitios para que no haya problemas en plugins o temas que se desactiven. No tiene mas secreto que ir al sitio antiguo e ir igualando la configuración con el nuevo.

Recomiendo habilitar el auto-update tanto para los plugins como de los temas.

Migración de los sitios

¿Bien? Seguimos! ahora vamos a identificar el id de los sitios que queremos migrar. El id del sitio se puede saber en network>sitios, cuando te pones encima del sitio en la url podrás ver el id del sitio. Listos. Te los apuntas y nos vamos a la base de datos del sitio antiguo.

He preparado este sencillo script para hacer un dump de las tablas que corresponden a cada sitio para hacer este paso mas sencillo

root@mysql10:~/migra_wordpress# vi dump_site.sh 
#!/bin/bash

SITE=$1
echo "********************************"
echo "     EXPORTANT LLOC ${SITE}     "
echo "********************************"
echo ""

mysql wordpress -N -e "show tables like 'wp\_${SITE}\_%'" | grep -v Tables_in | xargs mysqldump wordpress > wordpress_site_${SITE}_dump.sql

Ahora simplemente ejecutamos el script con los sitios que queremos exportar. Lo repetimos para todos y cada uno de los sitios que queremos migrar a excepción del 1.

root@mysql10:~/migra_wordpress# chmod +x dump_site.sh
root@mysql10:~/migra_wordpress# ./dump_site.sh 3
********************************
     EXPORTANT LLOC 3     
********************************

Ahora lo copiamos todo al servidor nuevo

root@mysql10:~/migra_wordpress# cd ..
root@mysql10:~# scp -r migra_wordpress root@172.31.0.145:/root/

Ahora en el servidor nuevo importamos los dump de las tablas

root@wordpress10:~/migra_wordpress# mysql -f wp_lmdb < wordpress_site_3_dump.sql

Lo repetimos por todos los sitios

Ahora tenemos que copiar los datos de la base de datos del sitio antiguo de las tablas wp_blogmeta, wp_blogs, wp_domain_mapping, wp_usermeta y wp_users. Pero si las migramos a saco en el sitio nuevo la vamos a liar, así que exportaremos el contenido de estas tablas y limpiaremos los datos que se refieren al sitio 1 y al usuario 1.

root@mysql10:~/migra_wordpress# mysqldump wordpress wp_blogmeta wp_blogs wp_domain_mapping wp_usermeta wp_users > wordpress_site_lmdb_dump.sql

Nos descargamos el fichero en nuestro pc para editarlo con un editor de texto.

Una vez terminemos, recomiendo entrar en el mysql del sitio nuevo e inserir los INSERT con los datos limpiados. Cada una de las tablas que menciono son importantes, sobretodo la wp_usermeta que tiene opciones del usuario (cuidado que el dump te puede dejar una línea muuuuuuuuuuy larga, busca ",1," y borra todos los registros que contengan 1 en el segundo campo, yo he usado vim y paciencia para ir limpiando). Te recomiendo también mirar qué contenido hay en las tablas del sitio nuevo antes de insertar los datos.

Revisamos en el wordpress nuevo si aparecen todos los usuarios y la configuración de los dominios y sitios. La comparamos con la del sitio antiguo.

Una vez migrados todos los datos de la base de datos, queda poner los datos de las galerías de los sitios

root@wordpress10:/var/www/wp/wp-content/uploads# cp -R /root/wp/wp-content/uploads/sites .
root@wordpress10:/var/www/wp/wp-content/uploads# chown -R www-data:www-data sites

Y en principio esto es todo! acabo de comprobar todos los sitios y todo parece correcto, en algunos es posible que se recomienda desconectar jetpack y volverlo a conectar, al igual que con el elementor pro si ya lo teníais conectado.

Listos, mientras iba escribiendo este post he ido haciendo la migración que me ha llevado unas 5 horas aproximadamente (la tarea mas larga es la de la limpieza de los datos del fichero sql que importamos en nuestro pc y la previa de limpiar el wordpress viejo). Ya tenía claro que pasos dar por la migración que hice hace 3 semanas con php8 fallida (donde hice la limpieza de sitios, usuarios, plugins y temas) y que duró el doble que esta. No hay nada mejor que saber que es lo que se tiene que hacer para ser más ágil! :)

Espero que este post os sea de utilidad!

Deixa un comentari

L'adreça electrònica no es publicarà.

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.