
Drupal 8: Migración drupal 7 drupal 8
Autor: fjavimartin
Fecha de Creación: 17/09/2020
Categorías:
Nuestro artículo de hoy tendrá el objetivo de realizar la migración de contenidos desde drupal 7 a drupal 8. Para ello utilizaremos los módulos Migrate Upgrade, Migrate Plus y Migrate Tools junto la inestimable ayuda de drush.
El procedimiento será instalar unas determinadas herramientas en nuestro nuevo sitio drupal 8 y desde ahí conectarnos a la base de datos del sitio drupal 7 y desde ahí traernos los contenidos junto con la parte estática. Ni que decir tiene que, estén los sitios en la misma máquina o en distintas, desde nuestro drupal 8 tendremos que tener acceso tanto a la base de datos como a la parte estática de drupal 7.
1. Instalación drush
Drush es una herramienta de línea de comandos que nos permitirá interactuar con nuestro sitio drupal. Los diferentes módulos que instalemos podrán aportar sus propios comandos a drush de tal manera que podremos hacer un millón de cosas con un simple comando.
La instalación la realizaremos utilizando composer desde el directorio raíz de nuestro sitio drupal y no olvidéis ejecutarlo con un usuario que tenga permisos suficientes sobre todo el directorio:
$ composer require drush/drush
Una vez instalado y para ejecutarlo:
$ cd /var/www/instalaciondrupal
$ cd /vendor/bin
$ ./drush –version
2. Instalación Módulos Migrate Upgrade, Migrate Plus, Migrate Tools
Nuestra primera tarea será descargar y activar los siguientes módulos:
- Migrate Upgrade: https://www.drupal.org/project/migrate_upgrade
- Migrate Plus: https://www.drupal.org/project/migrate_plus
- Migrate Tools: https://www.drupal.org/project/migrate_tools
Una vez descargados solo tendremos que ir a la sección correspondiente y activarlos.
Si todo ha ido bien iremos a /var/www/instalaciondrupal/vendor/bin y ejecutaremos el siguiente comando:
$ ./drush
Entre los múltiples comandos disponibles se encontrará:
migrate:
migrate:fields-source (mfs) List the fields available for mapping in a source.
migrate:import (mim) Perform one or more migration processes.
migrate:messages (mmsg) View any messages associated with a migration.
migrate:reset-status (mrs) Reset a active migration's status to idle.
migrate:rollback (mr) Rollback one or more migrations.
migrate:status (ms) List all migrations with current status.
migrate:stop (mst) Stop an active migration operation.
migrate:upgrade (mup) Perform one or more upgrade processes.
migrate:upgrade-rollback (mupr) Rolls back and removes upgrade migrations.
3. Migrando contenidos
Lo tenemos todo listo para empezar. Nos posicionaremos en ./vendor/bin de nuestro sitio drupal 8 y el primer paso será ejecutar el siguiente comando para comprar las migraciones generadas, que como veremos más abajo, será las que hay por defecto:
$ ./drush migrate:status
------------------- ----------------------------------- -------- ------- ---------- ------------- ---------------
Group Migration ID Status Total Imported Unprocessed Last Imported
------------------- ----------------------------------- -------- ------- ---------- ------------- ---------------
Default (default) block_content_type Idle 1 0 1
Default (default) block_content_body_field Idle 1 0 1
Default (default) block_content_entity_display Idle 1 0 1
Default (default) block_content_entity_form_display Idle 1 0 1
Default (default) user_picture_field Idle 1 0 1
Default (default) d6_upload_field Idle 1 0 1
------------------- ----------------------------------- -------- ------- ---------- ------------- ---------------
Una vez ya estamos en marcha lanzaremos el siguiente el siguiente comando para simular la migración desde nuestro antiguo sitio donde los parámetros a utilizar serán los siguientes:
--legacy-db-url: Introduciremos la cadena de conexión contra nuestro sitio drupal 7.
--legacy-root: Introduciremos la ruta al sitio drupal 7.
$ ./drush migrate:upgrade --legacy-db-url=mysql://usuariobbdd:passbbdd@maquinabbdd/bbdddrupal7 --legacy-root=/var/www/sitiodrupal7 --simulate
[notice] Upgrading d7_color
[notice] Upgrading d7_dblog_settings
[notice] Upgrading d7_file_private
[notice] Upgrading d7_filter_format
[notice] Upgrading d7_filter_settings
[notice] Upgrading d7_global_theme_settings
[notice] Upgrading d7_image_settings
[notice] Upgrading d7_image_styles
[notice] Upgrading d7_language_types
[notice] Upgrading d7_node_settings
[notice] Upgrading d7_search_page
[notice] Upgrading d7_search_settings
[notice] Upgrading d7_system_authorize
[notice] Upgrading d7_system_cron
[notice] Upgrading d7_system_date
[notice] Upgrading d7_system_file
[notice] Upgrading d7_system_mail
[notice] Upgrading d7_system_performance
[notice] Upgrading d7_theme_settings
[notice] Upgrading d7_url_alias
[notice] Upgrading d7_user_flood
[notice] Upgrading d7_user_mail
[notice] Upgrading file_settings
[notice] Upgrading locale_settings
[notice] Upgrading menu_settings
[notice] Upgrading system_image
[notice] Upgrading system_image_gd
[notice] Upgrading system_logging
[notice] Upgrading system_maintenance
[notice] Upgrading system_rss
[notice] Upgrading system_site
[notice] Upgrading taxonomy_settings
[notice] Upgrading text_settings
[notice] Upgrading update_settings
[notice] Upgrading block_content_type
[notice] Upgrading block_content_body_field
[notice] Upgrading d7_custom_block
[notice] Upgrading d7_user_role
[notice] Upgrading d7_block
[notice] Upgrading block_content_entity_display
[notice] Upgrading block_content_entity_form_display
[notice] Upgrading d7_node_type
[notice] Upgrading d7_comment_type
[notice] Upgrading d7_comment_field
[notice] Upgrading d7_comment_field_instance
[notice] Upgrading d7_comment
[notice] Upgrading d7_comment_entity_display
[notice] Upgrading d7_comment_entity_form_display
[notice] Upgrading d7_comment_entity_form_display_subject
[notice] Upgrading d7_field
[notice] Upgrading d7_taxonomy_vocabulary
[notice] Upgrading d7_field_instance
[notice] Upgrading d7_field_instance_widget_settings
[notice] Upgrading d7_view_modes
[notice] Upgrading d7_field_formatter_settings
[notice] Upgrading d7_file
[notice] Upgrading language
[notice] Upgrading language_prefixes_and_domains
[notice] Upgrading d7_language_content_settings
[notice] Upgrading d7_language_negotiation_settings
[notice] Upgrading default_language
[notice] Upgrading d7_menu
[notice] Upgrading d7_menu_links
[notice] Upgrading d7_node_title_label
[notice] Upgrading d7_shortcut_set
[notice] Upgrading user_picture_field
[notice] Upgrading user_picture_field_instance
[notice] Upgrading user_picture_entity_display
[notice] Upgrading user_picture_entity_form_display
[notice] Upgrading d7_user
[notice] Upgrading d7_shortcut_set_users
[notice] Upgrading d7_shortcut
----------------------------------------
Executed migrations
----------------------------------------
d7_color
d7_dblog_settings
d7_file_private
d7_filter_format
d7_filter_settings
d7_global_theme_settings
d7_image_settings
d7_image_styles
d7_language_types
d7_node_settings
d7_search_page
d7_search_settings
d7_system_authorize
d7_system_cron
d7_system_date
d7_system_file
d7_system_mail
d7_system_performance
d7_theme_settings
d7_url_alias
d7_user_flood
d7_user_mail
file_settings
locale_settings
menu_settings
system_image
system_image_gd
system_logging
system_maintenance
system_rss
system_site
taxonomy_settings
text_settings
update_settings
block_content_type
block_content_body_field
d7_custom_block
d7_user_role
d7_block
block_content_entity_display
block_content_entity_form_display
d7_node_type
d7_comment_type
d7_comment_field
d7_comment_field_instance
d7_comment
d7_comment_entity_display
d7_comment_entity_form_display
d7_comment_entity_form_display_subject
d7_field
d7_taxonomy_vocabulary
d7_field_instance
d7_field_instance_widget_settings
d7_view_modes
d7_field_formatter_settings
d7_file
language
language_prefixes_and_domains
d7_language_content_settings
d7_language_negotiation_settings
default_language
d7_menu
d7_menu_links
d7_node_title_label
d7_shortcut_set
user_picture_field
user_picture_field_instance
user_picture_entity_display
user_picture_entity_form_display
d7_user
d7_shortcut_set_users
d7_shortcut
----------------------------------------
Una vez hemos simulado la migración y analizado los datos generados tenemos dos opciones: Podemos ejecutar el anterior comando eliminando –simulate y cambiándolo por –configure-only con el que generaremos las migraciones, pero todavía no se habrán ejecutado o por el contrario lanzar el comando simplemente eliminado la opción –simulate y dando por hecho que queremos ejecutar todas las migraciones posibles.
Para el caso en el que queramos solamente generar las migraciones el resultado será el siguiente:
$ ./drush migrate:upgrade --legacy-db-url=mysql://usuariobbdd:passbbdd@maquinabbdd/bbdddrupal7 --legacy-root=/var/www/sitiodrupal7 --configure-only
------------------------------------------------
Generated migrations
------------------------------------------------
upgrade_d7_color
upgrade_d7_dblog_settings
upgrade_d7_file_private
upgrade_d7_filter_format
upgrade_d7_filter_settings
upgrade_d7_global_theme_settings
upgrade_d7_image_settings
upgrade_d7_image_styles
upgrade_d7_language_types
upgrade_d7_node_settings
upgrade_d7_search_page
upgrade_d7_search_settings
upgrade_d7_system_authorize
upgrade_d7_system_cron
upgrade_d7_system_date
upgrade_d7_system_file
upgrade_d7_system_mail
upgrade_d7_system_performance
upgrade_d7_theme_settings
upgrade_d7_url_alias
upgrade_d7_user_flood
upgrade_d7_user_mail
upgrade_file_settings
upgrade_locale_settings
upgrade_menu_settings
upgrade_system_image
upgrade_system_image_gd
upgrade_system_logging
upgrade_system_maintenance
upgrade_system_rss
upgrade_system_site
upgrade_taxonomy_settings
upgrade_text_settings
upgrade_update_settings
upgrade_block_content_type
upgrade_block_content_body_field
upgrade_d7_custom_block
upgrade_d7_user_role
upgrade_d7_block
upgrade_block_content_entity_display
upgrade_block_content_entity_form_display
upgrade_d7_node_type
upgrade_d7_comment_type
upgrade_d7_comment_field
upgrade_d7_comment_field_instance
upgrade_d7_comment
upgrade_d7_comment_entity_display
upgrade_d7_comment_entity_form_display
upgrade_d7_comment_entity_form_display_subject
upgrade_d7_field
upgrade_d7_taxonomy_vocabulary
upgrade_d7_field_instance
upgrade_d7_field_instance_widget_settings
upgrade_d7_view_modes
upgrade_d7_field_formatter_settings
upgrade_d7_file
upgrade_language
upgrade_language_prefixes_and_domains
upgrade_d7_language_content_settings
upgrade_d7_language_negotiation_settings
upgrade_default_language
upgrade_d7_menu
upgrade_d7_menu_links
upgrade_d7_node_title_label
upgrade_d7_shortcut_set
upgrade_user_picture_field
upgrade_user_picture_field_instance
upgrade_user_picture_entity_display
upgrade_user_picture_entity_form_display
upgrade_d7_user
upgrade_d7_shortcut_set_users
upgrade_d7_shortcut
------------------------------------------------
Una vez generadas las migraciones, con migrate:status podremos consultar el estado de las migraciones generadas:
$ ./drush migrate:status
----------------------------------------- ------------------------------------------------ -------- ------- ---------- ------------- ---------------
Group Migration ID Status Total Imported Unprocessed Last Imported
----------------------------------------- ------------------------------------------------ -------- ------- ---------- ------------- ---------------
Import from Drupal 7 (migrate_drupal_7) upgrade_block_content_type Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_color Idle 0 0 0
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_dblog_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_file_private Idle 0 0 0
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_filter_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_global_theme_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_image_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_image_styles Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_language_types Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_node_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_search_page Idle 0 0 0
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_search_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_authorize Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_cron Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_date Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_file Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_mail Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_system_performance Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_theme_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_url_alias Idle 165 0 165
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_user_flood Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_user_mail Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_file_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_locale_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_menu_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_image Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_image_gd Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_logging Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_maintenance Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_rss Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_system_site Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_taxonomy_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_text_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_update_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_block_content_body_field Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_block_content_entity_display Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_block_content_entity_form_display Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_filter_format Idle 5 0 5
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_custom_block Idle 6 0 6
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_user_role Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_block Idle 102 0 102
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_type Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment Idle 0 0 0
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_node_type Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_field Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_field_instance Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_entity_display Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_entity_form_display Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_comment_entity_form_display_subject Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_field Idle 6 0 6
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_taxonomy_vocabulary Idle 2 0 2
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_field_instance Idle 11 0 11
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_view_modes Idle 5 0 5
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_field_formatter_settings Idle 24 0 24
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_field_instance_widget_settings Idle 11 0 11
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_file Idle 67 0 67
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_language_content_settings Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_language Idle 2 0 2
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_language_negotiation_settings Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_menu Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_menu_links Idle 9 0 9
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_node_title_label Idle 4 0 4
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_shortcut_set Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_shortcut Idle 2 0 2
Import from Drupal 7 (migrate_drupal_7) upgrade_default_language Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_user_picture_field Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_user_picture_field_instance Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_user_picture_entity_display Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_user_picture_entity_form_display Idle 1 0 1
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_user Idle 2 0 2
Import from Drupal 7 (migrate_drupal_7) upgrade_d7_shortcut_set_users Idle 0 0 0
Import from Drupal 7 (migrate_drupal_7) upgrade_language_prefixes_and_domains Idle 2 0 2
Default (default) block_content_type Idle 1 0 1
Default (default) block_content_body_field Idle 1 0 1
Default (default) block_content_entity_display Idle 1 0 1
Default (default) block_content_entity_form_display Idle 1 0 1
Default (default) user_picture_field Idle 1 0 1
Default (default) d6_upload_field Idle 1 0 1
----------------------------------------- ------------------------------------------------ -------- ------- ---------- ------------- ---------------
Ahora podremos elegir entre ejecutar una a una solamente las que estimemos oportunas:
$ ./drush migrate:import <migration-name>
o podremos ejecutar todas las generadas con:
$ ./drush migrate:import -all
Para el caso en el que no queramos realizar ninguna simulación ni generar migraciones sin ejecutarlas sino hacer la migración en un solo paso:
$ ./drush migrate:upgrade --legacy-db-url=mysql://usuariobbdd:passbbdd@maquinabbdd/bbdddrupal7 --legacy-root=/var/www/sitiodrupal7
Solo nos quedará comprobar en la interface de administración que todo se ha migrado correctamente.
4. Conclusiones
Antes de utilizar el combo migrate_upgrade, migrate_plus y migrate_tools probé con las tradicionales migrate, migrate_drupal y migrate_ui………..algunas de ellas están abandonadas y ni que decir tiene que el resultado obtenido fue un fracaso.
Con las herramientas actualizadas podremos realizar una migración desde drupal 7 fácil, sencilla y nada traumática. Es muy interesante generar las migraciones sin ejecutarlas puesto que nos permitirá fácilmente elegir los elementos que necesitemos migrar y ya sabéis, drupal 7 y drupal 8 se parecen como un huevo a una castaña.
Espero que hayáis disfrutado de este artículo y no os olvidéis de ….
Disfrutar!!!!!!!
Referencias
https://www.drupal.org/project/migrate_upgrade
https://www.drupal.org/project/migrate_plus
https://www.drupal.org/project/migrate_tools
https://www.cloudways.com/blog/upgrade-drupal-7-to-drupal-8/
https://www.lullabot.com/articles/overview-migrating-drupal-sites-8