Importar products, category, customers, sales y attributes Magento
Ya cabros, aquí les traigo la papita calentita…
Empezaré contando que un cliente me ha solicitado migrar una tienda, la cual estaba corrupta en todos lados, por actualizaciones de Magento mal realizadas y módulos de dudosa reputación. Bueno hice mi tradicional migración en la cual grabo una base de datos con data y le tiro un Magento limpio arriba y puff zuacatela error por todos lados. Dado esto empece a buscar módulos de migración de productos y probé algunos de los cuales no sirvieron de nada, ya que fallaban en algo básico. Y eso básico es que para poder traer los productos de una tienda a otra, se deben de crear primero los atributos y ojo que no es crearlos a mano uno a uno, porque eso no sirve, ya que hay un orden en los cuales quedan y los productos los leen.
Bueno los módulos de pagos y no pago, que dicen importar y exportar productos con sus atributos, solo sirven para tiendas con productos simples y de niñitas. Para hacer una migración muy dificil, con unos 100 atributos bastante complicados y categorías amarrados a ellos y productos entrelazados, todos como atrapados por la fuerza gravitatoria de un agujero de gusano, se debe tomar una actitud de macho cabrio y picar hondo.
1.- Ir a phpMyAdmin y seleccionar su base de datos de la tienda original.
2.- Exportar todos los atributos y estos son, todos los prefijos con “eav_” es decir:
eav_attribute eav_attribute_group eav_attribute_label eav_attribute_option eav_attribute_option_value eav_attribute_set eav_entity eav_entity_attribute eav_entity_datetime eav_entity_decimal eav_entity_int eav_entity_store eav_entity_text eav_entity_type eav_entity_type eav_entity_varchar eav_form_element eav_form_fieldset eav_form_fieldset_label eav_form_type eav_form_type_entity Nota 31-03-2014, para Magento 1.8.1.0 se debe exportar la siguiente tabla también "catalog_eav_attribute".
Estos atributos les quedaran en un archivo sql el cual llamaremos creativamente “atributos.sql”
3.- Ubicar en la misma base de datos la tabla “catalog_eav_attribute.sql” y exportarla y les quedará el archivo llamado “catalog_eav_attribute.sql”
4.- Para las categorías, exportar todas las tablas con el prefijo catalog_category_ es decir:
catalog_category_anc_categs_index_idx catalog_category_anc_categs_index_tmp catalog_category_anc_products_index_idx catalog_category_anc_products_index_tmp catalog_category_entity catalog_category_entity_datetime catalog_category_entity_decimal catalog_category_entity_int catalog_category_entity_text catalog_category_entity_varchar catalog_category_flat_store_1 catalog_category_product catalog_category_product_index catalog_category_product_index_enbl_idx catalog_category_product_index_enbl_tmp catalog_category_product_index_idx catalog_category_product_index_tmp
Y nombrar ese archivo como “categorias.sql”
5.- Para los clientes lo mismo, ubicar todas las tablas con el prefijo customer_ es decir:
customer_address_entity customer_address_entity_datetime customer_address_entity_decimal customer_address_entity_int customer_address_entity_text customer_address_entity_text customer_address_entity_varchar customer_eav_attribute customer_eav_attribute_website customer_entity customer_entity_datetime customer_entity_decimal customer_entity_int customer_entity_text customer_entity_varchar customer_form_attribute customer_group
Guardar el archivo como “clientes.sql”
6.- Ubicar la tabla “log_quote.sql” y exportar y llamarla así mismo
7.- Para las ventas exportar todas las tablas con el prefijo sales_flat y otros es decir:
sales_flat_creditmemo sales_flat_creditmemo_comment sales_flat_creditmemo_grid sales_flat_creditmemo_item sales_flat_invoice sales_flat_invoice_comment sales_flat_invoice_grid sales_flat_invoice_item sales_flat_order sales_flat_order_address sales_flat_order_address sales_flat_order_grid sales_flat_order_item sales_flat_order_payment sales_flat_order_status_history sales_flat_quote sales_flat_quote_address sales_flat_quote_address_item sales_flat_quote_item sales_flat_quote_item_option sales_flat_quote_payment sales_flat_quote_shipping_rate sales_flat_shipment sales_flat_shipment_comment sales_flat_shipment_grid sales_flat_shipment_item sales_flat_shipment_track sales_invoiced_aggregated sales_invoiced_aggregated_order sales_order_aggregated_created sales_order_aggregated_updated sales_order_status sales_order_status_label sales_order_status_state sales_order_tax sales_order_tax_item sales_payment_transaction sales_recurring_profile sales_recurring_profile_order sales_refunded_aggregated sales_refunded_aggregated_order sales_shipping_aggregated sales_shipping_aggregated_order
Y guardar el archivo como “sales.sql”
8.- Para los productos, debemos exportar todas la tablas que indico aquí:
catalogrule catalogrule_affected_product catalogrule_customer_group catalogrule_group_website catalogrule_product catalogrule_product_price catalogrule_website catalogsearch_fulltext catalogsearch_query catalogsearch_result cataloginventory_stock cataloginventory_stock_item cataloginventory_stock_status cataloginventory_stock_status_idx cataloginventory_stock_status_tmp catalog_product_bundle_option catalog_product_bundle_option_value catalog_product_bundle_selection catalog_product_enabled_index catalog_product_entity catalog_product_entity_datetime catalog_product_entity_decimal catalog_product_entity_gallery catalog_product_entity_int catalog_product_entity_media_gallery catalog_product_entity_media_gallery_value catalog_product_entity_text catalog_product_entity_tier_price catalog_product_entity_varchar catalog_product_link catalog_product_link_attribute catalog_product_link_attribute_decimal catalog_product_link_attribute_int catalog_product_link_attribute_varchar catalog_product_link_type catalog_product_option catalog_product_option_price catalog_product_option_title catalog_product_option_type_price catalog_product_option_type_title catalog_product_option_type_value catalog_product_super_attribute catalog_product_super_attribute_label catalog_product_super_attribute_pricing catalog_product_super_link catalog_product_website
Y grabar el archivo como “productos.sql”
9. Ahora deben intervenir cada archivo creado, es decir a “atributos.sql”, “catalog_eav_attribute.sql”, “categorias.sql”, “clientes.sql”, “sales.sql” y a “productos.sql” con lo siguiente para cada atributo:
Ejemplo para atributo cataloginventory_stock :
Está así:
CREATE TABLE `cataloginventory_stock`
Debe quedar así:
DROP TABLE IF EXISTS `cataloginventory_stock`; CREATE TABLE `cataloginventory_stock`
9.1 Y muy importante es que deben ingresar arriba en el principio del archivo esto:
SET FOREIGN_KEY_CHECKS=0;
Esto se debe hacer para cada atributo en todos los archivos. Es una tarea larga de hacer que les llevará aprox unos 30 min.
10.- Tomar la carpeta “media” de su tienda original, comprimirla y bajarla a tu escritorio.
11.- Instalar un Magento limpio e inmaculado, luego renombrar la carpeta “media” como “media_community” y traer la carpeta “media” que comprimimos en el punto 10, descomprimirla…
12.- Ir a phpMyAdmin a la base de datos nueva, que hemos creado para instalar el Magento limpio e importar uno a uno los archivos que hemos creados, es decir debemos importar a “atributos.sql”, “catalog_eav_attribute.sql”, “categorias.sql”, “clientes.sql”, “sales.sql” y a “productos.sql” todos con el arreglo de
DROP TABLE IF EXISTS `xxxxxx-atributo-xxxxxx`; CREATE TABLE `xxxxxx-atributo-xxxxxx`
13.- Ir al admin, deshabilitar la cache, hacer un reindex data y verás a la cara de la virgen Maria bella e inmaculada!
Atte
Boris Durán R.
Magento Chile Google+
RichardMax
hahahahahahaha Que loco que eres mi hermano!!! Tienes razón. cuando se migra y se instalan módulos va quedan flor de desastre. te voy a armar un script que automatice esto así se evita errores humanos
Un abrazo
Boris Durán
Hola Richard, sí has de tu genialidad y armate algo decende… que esto lo hice a mi manera neandertal pero su fundamento es lógico y coherente… demoré semanas en entender como estaba todo encadenado…
Saludos…
Pingback: Migrar tienda desde base de datos | Servicios Magento
daniela
Hola Boris, Primero que todo mil gracias por tus Guías siempre me han ayudado mucho! Y justo ahora estaba intentando importar muuuuchoooooss productos, categorias, etc… de una tienda a otra pero como no soy especialista en el tema y he aprendido hechando a perder… me queda una duda cuando dices que hay que “intervenir cada atributo”… Eso lo haces directamente en el PHPMyAdmin? o usas otra herramienta? y mas menos cuales serían los pasos a seguir? Muchas Gracias!!
Daniela.
Boris Durán
Hola Daniela,
Hay que intervenir cada tabla descargada, por ejemplo la tabla “cataloginventory_stock” está así:
CREATE TABLE `cataloginventory_stock`
Y debe de quedar así:
DROP TABLE IF EXISTS `cataloginventory_stock`;
CREATE TABLE `cataloginventory_stock`
Mándame un archivo sql (tabla) y te la modifico y así puedes ir guiandote. Mi correo es bduran@magentochile.cl
Saludos,
Boris D.
gflores29
Hola, muchas gracias con el tutorial. Lo he seguido paso a paso pero no me permite importar las tablas me marca el siguiente error:
#1215 – Impossible d’ajouter des contraintes d’index externe
A pesar de tener agregado la instruccion:
SET FOREIGN_KEY_CHECKS=0;
No se que puedo estar haciendo mal.
Mi versión de magento es la 1.9.1
Espero alguien pueda orientarme un poco para poder dar con el problema…