Artículos

Guía de Migración Quirúrgica: Cómo Rescatar o Actualizar tu PrestaShop con Éxito

Thank you for rating this article.

Cuando una actualización automática de PrestaShop falla o una instalación empieza a dar errores inexplicables (como el bucle de redirecciones 302 o errores de Symfony), la solución más robusta no es reparar, sino trasplantar.

Esta técnica, conocida como migración quirúrgica, consiste en instalar un PrestaShop limpio y mover únicamente el "corazón" de tu negocio (productos, categorías y clientes). Es el método definitivo tanto para reparar instalaciones dañadas como para realizar una actualización mayor sin arrastrar errores del pasado.


1. Preparación del Entorno

Antes de tocar la base de datos, prepara el nuevo destino:

  1. Instalación Limpia: Instala la versión de PrestaShop deseada en una carpeta o base de datos nueva.

  2. Verificación: Asegúrate de que el panel de administración (Backoffice) funciona perfectamente.

  3. Copia de archivos: Mueve las carpetas de imágenes y archivos de usuario desde la instalación antigua a la nueva:

En el caso de que sea una actualización NUEVA..

    • /img/ (Fotos de productos y categorías).

    • /download/ y /upload/.

 

En el caso de que sea una ACTUALIZACIÓN ENTRE IGUALES VERSIONES.

 

  • /img/: Contiene todas las fotos de productos, categorías, fabricantes y logos. Es vital.

  • /download/: Si vendes productos virtuales.

  • /upload/: Archivos que los clientes hayan subido.

  • /themes/tu-tema-actual/: La carpeta de tu plantilla.

  • /modules/: Aquí hay un matiz. Copia solo los módulos que hayas comprado o personalizado. No copies los módulos nativos (ps_...), deja que la instalación limpia de la 8.2 instale sus versiones actualizadas.

  • /mails/: Si personalizaste los correos de envío, pedidos, etc.

 


2. El Script de Extracción (Exportación)

Para evitar el "ruido" de configuraciones corruptas, utilizaremos mysqldump desde la terminal (SSH). Este comando extraerá solo las tablas vitales del catálogo, atributos, clientes y pedidos.

Ejecuta este comando en el servidor de la instalación antigua:

# Exportar Catálogo y Clientes (Lo vital)
mysqldump -u usuario -p base_de_datos \
ps_product ps_product_lang ps_product_shop ps_product_attribute \
ps_product_attribute_combination ps_product_attribute_lang ps_product_attribute_shop \
ps_category ps_category_lang ps_category_shop ps_category_product \
ps_attribute ps_attribute_group ps_attribute_group_lang ps_attribute_lang \
ps_feature ps_feature_lang ps_feature_product ps_feature_value ps_feature_value_lang \
ps_customer ps_address ps_orders ps_order_detail > migracion_esencial.sql
 

Nota: Sustituye usuario y base_de_datos por tus credenciales reales. El archivo resultante migracion_esencial.sql contendrá toda la inteligencia de tu negocio.


3. El Script de Restauración (Importación)

Antes de importar, debemos preparar la base de datos de destino. La nueva instalación ya tiene tablas con datos de ejemplo; si importamos encima, los IDs chocarán.

Paso A: Limpiar tablas de destino

Crea un archivo llamado limpiar_destino.sql con el siguiente contenido y ejecútalo en la base de datos nueva:

SQL
 
-- Desactivar revisión de llaves foráneas para poder vaciar tablas
SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE TABLE ps_product; TRUNCATE TABLE ps_product_lang; TRUNCATE TABLE ps_product_shop;
TRUNCATE TABLE ps_product_attribute; TRUNCATE TABLE ps_product_attribute_combination;
TRUNCATE TABLE ps_product_attribute_lang; TRUNCATE TABLE ps_product_attribute_shop;
TRUNCATE TABLE ps_category; TRUNCATE TABLE ps_category_lang; TRUNCATE TABLE ps_category_shop;
TRUNCATE TABLE ps_category_product; TRUNCATE TABLE ps_attribute; TRUNCATE TABLE ps_attribute_group;
TRUNCATE TABLE ps_attribute_group_lang; TRUNCATE TABLE ps_attribute_lang;
TRUNCATE TABLE ps_feature; TRUNCATE TABLE ps_feature_lang; TRUNCATE TABLE ps_feature_product;
TRUNCATE TABLE ps_feature_value; TRUNCATE TABLE ps_feature_value_lang;
TRUNCATE TABLE ps_customer; TRUNCATE TABLE ps_address; TRUNCATE TABLE ps_orders;
TRUNCATE TABLE ps_order_detail;

SET FOREIGN_KEY_CHECKS = 1;

Paso B: Importar los datos

Ahora, inyecta el archivo que exportamos anteriormente en la base de datos nueva:

# Importar los datos esenciales a la nueva tienda
mysql -u usuario -p base_de_datos_nueva < migracion_esencial.sql

4. El "Ancla" de Seguridad: La Cookie Key

Para que las contraseñas de los clientes importados sigan funcionando, debes sincronizar la clave de cifrado.

  1. Busca en tu instalación antigua el archivo app/config/parameters.php.

  2. Localiza el valor de 'cookie_key'.

  3. Pégalo en el archivo app/config/parameters.php de la nueva instalación.


5. Pasos Post-Migración

Una vez completado el trasplante, realiza estas tres acciones en el nuevo panel de administración:

  1. Regenerar .htaccess: Ve a Parámetros de la Tienda > Tráfico & SEO y pulsa "Guardar".

  2. Limpiar Caché: En Parámetros Avanzados > Rendimiento, limpia la caché de Symfony.

  3. Indexar Productos: En Parámetros de la Tienda > Buscar, reconstruye el índice para que el buscador de la web encuentre los productos recién importados.


5. El Proceso de Integración (Post-Trasplante)

Una vez que hayas volcado tus carpetas antiguas (/img, /modules, /themes, /mails) sobre la instalación limpia, el sistema está en un estado "híbrido". Sigue este orden exacto para consolidar la migración:

  1. Sincronizar Identidad: Copia el cookie_key del archivo app/config/parameters.php antiguo al nuevo. Sin esto, las contraseñas importadas no funcionarán.

  2. Limpieza e Importación SQL: Ejecuta el script de TRUNCATE y luego importa tu migracion_esencial.sql.

  3. Regenerar el motor de rutas: Ve a Parámetros de la tienda > Tráfico & SEO, desactiva las "URLs amigables", guarda, y vuelve a activarlas. Esto reconstruye el archivo .htaccess.

  4. Reconstruir el índice de búsqueda: Ve a Parámetros de la tienda > Buscar y pulsa en "Añadir los productos que faltan al índice".


6. Script de Comprobación Final (Salud del Sistema)

Para asegurarte de que la migración ha sido exitosa y no quedan "cabos sueltos", hemos preparado este script de verificación. Puedes ejecutar estas consultas SQL para detectar posibles errores de integridad:

-- 1. Verificar si hay productos sin categorías (Productos huérfanos)
SELECT COUNT(*) FROM ps_product p 
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) 
WHERE cp.id_category IS NULL;

-- 2. Verificar si hay imágenes que no tienen asignado un producto físico
SELECT COUNT(*) FROM ps_image i 
LEFT JOIN ps_product p ON (i.id_product = p.id_product) 
WHERE p.id_product IS NULL;

-- 3. Comprobar que los clientes tienen su dirección asociada
SELECT c.email, a.alias FROM ps_customer c 
LEFT JOIN ps_address a ON (c.id_customer = a.id_customer) 
WHERE a.id_address IS NULL;

Verificación de Permisos (Terminal SSH)

Finalmente, ejecuta este comando para asegurar que PrestaShop tiene permisos de escritura en las carpetas que acabas de mover:

# Comprobar permisos de escritura en carpetas críticas
find img/ modules/ themes/ mails/ -type d -not -perm 755
find img/ modules/ themes/ mails/ -type f -not -perm 644

Consejo final de ExtreHost: Si tras la migración ves una pantalla en blanco, activa el Modo Depuración en config/defines.inc.php cambiando PS_MODE_DEV a true. Esto te dirá exactamente qué módulo está causando el conflicto en la nueva versión.


Resumen para el Administrador

  • Archivos movidos: OK.

  • Base de Datos inyectada: OK.

  • Cookie Key sincronizada: OK.

  • URLs e Índices regenerados: OK.

¡Tu tienda ahora es una instalación limpia, rápida y libre de errores heredados!


Conclusión

Este método es el más limpio y seguro para dejar atrás errores críticos de sistema. Al tratar los datos como piezas modulares, garantizas que la nueva instalación nazca sana y optimizada.


¿Te ha servido esta guía? En ExtreHost recomendamos siempre realizar una copia de seguridad completa antes de ejecutar scripts SQL. ¡Suerte con tu migración!


Imprimir   Correo electrónico

Información corporativa y medios

Horario Comercial

Lunes: 9am - 7:30pm

Martes: 9am - 7:30pm

Miércoles: 9am - 7:30pm

Jueves: 9am - 7:30pm

Viernes: 9am - 1:30pm

(Viernes tarde, cerrado)


Mañanas, 9am-1:30pm

Tardes, 4pm-7:30pm


Sáb y Dom: Cerrado