was successfully added to your cart.

Script para Duplicar BBDD en otro Prestashop

Modifica tu tienda en un solo sitio

Si por algún motivo, no utilizas multitienda y dispones de dos tiendas exactamente iguales, con el mismo producto, mismo stock…

Ojo, este script es potencialmente peligroso, usalo solo si sabes lo que hace y comprendes linea por linea.
Como verás, borra las tablas de la tienda destino y copia las tablas de la tienda origen. Además, es necesario disponer de un usuario de lectura escritura en ambas tablas.

Este es el script que deberías utilizar para migrar las tablas de tu tienda:

<?php
	
	ini_set('display_errors', 1);
	ini_set('display_startup_errors', 1);
	error_reporting(E_ALL);	
	
	$user = 'usuario_base_de_datos';
	$pass = 'passowr_base_de_datos';
	$db_origen = 'nombre_bd_tienda_origen';
	$db_destino = 'nombre_bd_tienda_destino';
	
	$con = mysqli_connect('localhost', $user, $pass, $db_destino);
	if (!$con) {
	    echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
	    echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
	    echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
	    exit;
	}
	
	
	//Eliminamos tablas que vamos a migrar.
	
	/*
		ps_product
		ps_product_attachment
		ps_product_attribute
		ps_product_attribute_combination
		ps_product_attribute_image
		ps_product_attribute_shop
		ps_product_carrier
		ps_product_country_tax
		ps_product_download
		ps_product_lang
		ps_product_sale
		ps_product_shop
		ps_product_supplier
		ps_product_tag
		ps_category_product
		ps_feature_product
		ps_category
		ps_category_lang
		ps_category_shop
		ps_image
		ps_image_lang
		ps_image_shop
		ps_image_type
		ps_attribute
		ps_attribute_lang
		ps_attribute_shop
		ps_attribute_group
		ps_attribute_group_lang
		ps_attribute_group_shop
	*/
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_attachment';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_attribute';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_attribute_combination';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_attribute_image';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_attribute_shop';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_carrier';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_country_tax';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_download';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_lang';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_sale';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_shop';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_supplier';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_product_tag';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_category_product';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_feature_product';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_category';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_category_lang';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_category_shop';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_image';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_image_lang';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_image_shop';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_image_type';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute_lang';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute_shop';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute_group';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute_group_lang';
	$resultado = $con->query($sqlRemove);
	$sqlRemove = 'DROP TABLE '.$db_destino.'.ps_attribute_group_shop';
	$resultado = $con->query($sqlRemove);
	
	
	//Creaciones e inserciones
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product LIKE '.$db_origen.'.ps_product';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product SELECT * FROM '.$db_origen.'.ps_product';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_attachment LIKE '.$db_origen.'.ps_product_attachment';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_attachment SELECT * FROM '.$db_origen.'.ps_product_attachment';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_attribute LIKE '.$db_origen.'.ps_product_attribute';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_attribute SELECT * FROM '.$db_origen.'.ps_product_attribute';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_attribute_combination LIKE '.$db_origen.'.ps_product_attribute_combination';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_attribute_combination SELECT * FROM '.$db_origen.'.ps_product_attribute_combination';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_attribute_image LIKE '.$db_origen.'.ps_product_attribute_image';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_attribute_image SELECT * FROM '.$db_origen.'.ps_product_attribute_image';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_attribute_shop LIKE '.$db_origen.'.ps_product_attribute_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_attribute_shop SELECT * FROM '.$db_origen.'.ps_product_attribute_shop';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_carrier LIKE '.$db_origen.'.ps_product_carrier';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_carrier SELECT * FROM '.$db_origen.'.ps_product_carrier';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_country_tax LIKE '.$db_origen.'.ps_product_country_tax';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_country_tax SELECT * FROM '.$db_origen.'.ps_product_country_tax';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_download LIKE '.$db_origen.'.ps_product_download';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_download SELECT * FROM '.$db_origen.'.ps_product_download';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_lang LIKE '.$db_origen.'.ps_product_lang';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_lang SELECT * FROM '.$db_origen.'.ps_product_lang';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_sale LIKE '.$db_origen.'.ps_product_sale';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_sale SELECT * FROM '.$db_origen.'.ps_product_sale';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_shop LIKE '.$db_origen.'.ps_product_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_shop SELECT * FROM '.$db_origen.'.ps_product_shop';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_supplier LIKE '.$db_origen.'.ps_product_supplier';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_supplier SELECT * FROM '.$db_origen.'.ps_product_supplier';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_product_tag LIKE '.$db_origen.'.ps_product_tag';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_product_tag SELECT * FROM '.$db_origen.'.ps_product_tag';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_category_product LIKE '.$db_origen.'.ps_category_product';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_category_product SELECT * FROM '.$db_origen.'.ps_category_product';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_feature_product LIKE '.$db_origen.'.ps_feature_product';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_feature_product SELECT * FROM '.$db_origen.'.ps_feature_product';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_category LIKE '.$db_origen.'.ps_category';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_category SELECT * FROM '.$db_origen.'.ps_category';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_category_lang LIKE '.$db_origen.'.ps_category_lang';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_category_lang SELECT * FROM '.$db_origen.'.ps_category_lang';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_category_shop LIKE '.$db_origen.'.ps_category_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_category_shop SELECT * FROM '.$db_origen.'.ps_category_shop';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_image LIKE '.$db_origen.'.ps_image';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_image SELECT * FROM '.$db_origen.'.ps_image';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_image_lang LIKE '.$db_origen.'.ps_image_lang';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_image_lang SELECT * FROM '.$db_origen.'.ps_image_lang';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_image_shop LIKE '.$db_origen.'.ps_image_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_image_shop SELECT * FROM '.$db_origen.'.ps_image_shop';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_image_type LIKE '.$db_origen.'.ps_image_type';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_image_type SELECT * FROM '.$db_origen.'.ps_image_type';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute LIKE '.$db_origen.'.ps_attribute';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute SELECT * FROM '.$db_origen.'.ps_attribute';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute_lang LIKE '.$db_origen.'.ps_attribute_lang';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute_lang SELECT * FROM '.$db_origen.'.ps_attribute_lang';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute_shop LIKE '.$db_origen.'.ps_attribute_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute_shop SELECT * FROM '.$db_origen.'.ps_attribute_shop';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute_group LIKE '.$db_origen.'.ps_attribute_group';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute_group SELECT * FROM '.$db_origen.'.ps_attribute_group';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute_group_lang LIKE '.$db_origen.'.ps_attribute_group_lang';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute_group_lang SELECT * FROM '.$db_origen.'.ps_attribute_group_lang';
	$resultado = $con->query($sqlInsert);
	
	$sqlCreate = 'CREATE TABLE '.$db_destino.'.ps_attribute_group_shop LIKE '.$db_origen.'.ps_attribute_group_shop';
	$resultado = $con->query($sqlCreate);
	$sqlInsert = 'INSERT '.$db_destino.'.ps_attribute_group_shop SELECT * FROM '.$db_origen.'.ps_attribute_group_shop';
	$resultado = $con->query($sqlInsert);
		
	
	
	

Posteriormente, en Linux, programaremos un cron que ejecute las siguientes lineas para mover la carpeta imágenes de un origen a un destino:

rm -rf RUTA_DESTINO/img/p/*
cp -R RUTA_ORIGEN/img/p/* RUTA_DESTINO/img/p/
sudo chown -R USUARIO:GRUPO RUTA_DESTINO/img/p/*

Ahora debemos programar los crones que reindexan las tablas justo después de lanzar estos scripts.

El proceso de ejecución no dura ni 1 min. Por lo que es algo bastante rápido.