Com arreglar un problema amb les actualitzacions de BDD del Drupal

Així et quedes amb un problema d’aquests en cercle viciós…

M’he trobat entrampat en un error d’actualització de la base de dades que ataca un Drupal de forma que no podia instal·lar, actualitzar ni fer res amb els mòduls pel fet que el sistema intentava aplicar uns canvis a la BDD que ja s’havien fet en algun moment anterior, però ell es pensava que encara estaven pendents, entrant en un cercle sense fi.

En intentar instal·lar nous mòduls o actualitzar els que disposen de noves versions:

No s'ha pogut afegir el camp <em class="placeholder"webform_confirm_email</em.<em class="placeholder"request_lifetime</em: el camp ja existeix. [error]

Fent una actualització de la base de dades, per intentar resoldre el problema, deia:

root@vhost1:/var/www/vhost1/sites/all/modules# drush updb
The following updates are pending:

webform_confirm_email module :
7101 - Add request_lifetime column.

backup_migrate module :
7205 - Increase the length of all ids to 255.

panels module :
7303 - Add a custom cache table for Panels

Efectivament, mirant la taula al mysql,

mysql use vhost1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql describe webform_confirm_email;
+------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------+-------+
| nid | int(10) unsigned | NO | PRI | NULL | |
| eid | smallint(5) unsigned | NO | PRI | 0 | |
| email_type | tinyint(4) | NO | | 0 | |
| request_lifetime | int(11) | YES | | NULL | |
+------------------+----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

El primer que se m’ha acudit, donat que no trobava l’arrel del problema i reinstal·lar o actualitzar el mòdul problemàtic no era viable, ha estat esborrar manualment el camp de la taula (lleig, però és un mòdul menor que no faig servir encara) i seguidament intentar aplicar l’actualització de BDD que el torni a crear i ja es quedi estable tot plegat:

alter table webform_confirm_email drop request_lifetime;

En tornar a fer un drush updb:

No s'ha pogut afegir el camp <em class="placeholder"webform_confirm_email_code</em.<em class="placeholder"datetime</em: el camp ja existeix.
alter table webform_confirm_email_code drop datetime;

Bé, sembla que el tema té el dia “catxondu”…
Torno a repetir l’operació d’esborrar la columna de la taula i demés, però em surt un 3r error similar…això no té fi.

En situacions desesperades, actuacions desesperades: Drupal utilitza una taula que es diu “system” per a controlar les versions dels mòduls i de les actualitzacions de la BDD.

mysql describe system;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| filename | varchar(255) | NO | PRI | | |
| name | varchar(255) | NO | | | |
| type | varchar(12) | NO | MUL | | |
| owner | varchar(255) | NO | | | |
| status | int(11) | NO | MUL | 0 | |
| bootstrap | int(11) | NO | | 0 | |
| schema_version | smallint(6) | NO | | -1 | |
| weight | int(11) | NO | | 0 | |
| info | blob | YES | | NULL | |
+----------------+--------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

Aquesta té un camp que es diu “schema_version” que ja haureu vist abans al missatge d’actualitzacions pendents del “drush updb”:

webform_confirm_email module :
7101 - Add request_lifetime column.

aquest “7101” és el valor del camp “schema_version” per al mòdul “webform_confirm_email”.

Mirant quin valor té actualment aquest camp a la BDD:

mysql select max(schema_version) from system where filename="sites/all/modules/webform_confirm_email/webform_confirm_email.module";
+---------------------+
| max(schema_version) |
+---------------------+
| 7000 |
+---------------------+
1 row in set (0.00 sec)

Així doncs, si la base de dades ja té els camps correctament creats, però el sistema de control de canvis a la BDD de Drupal pensa que encara són pendents per culpa d’aquest “7000”, què fem? efectivament, actualitzar-li el valor i veure si així ja es queda content (evidentment, aquí s’apliquen totes les mesures necessàries de còpia de seguretat i prevenció de desastres, avisats quedeu):

mysql update system set schema_version=7101 where filename="sites/all/modules/webform_confirm_email/webform_confirm_email.module";

Verifiquem el valor actual del camp:

mysql select max(schema_version) from system where filename="sites/all/modules/webform_confirm_email/webform_confirm_email.module";
+---------------------+
| max(schema_version) |
+---------------------+
| 7101 |
+---------------------+
1 row in set (0.00 sec)

Així, ara tornem a provar a fer el “drush updb”:

root@laboratori2:/var/www/vhost1/sites/all/modules# drush updb
The following updates are pending:

backup_migrate module :
7205 - Increase the length of all ids to 255.

panels module :
7303 - Add a custom cache table for Panels.

Do you wish to run all pending updates? (y/n): y
Performed update: panels_update_7303 [ok]
Performed update: backup_migrate_update_7205 [ok]
Finished performing updates. [ok]

Com podeu veure, ja no surt com a pendent l’actualizació 7101, al haver-li dit al sistema que ja ho havia fet.

root@laboratori2:/var/www/vhost1/sites/all/modules# drush updb
The following updates are pending:

backup_migrate module :
7205 - Increase the length of all ids to 255.

panels module :
7303 - Add a custom cache table for Panels.

Do you wish to run all pending updates? (y/n): y
Performed update: panels_update_7303 [ok]
Performed update: backup_migrate_update_7205 [ok]
Finished performing updates. [ok]
root@laboratori2:/var/www/vhost1/sites/all/modules# drush up
Comprovant dades d'actualitzacions disponibles ... [ok]
Verificades les dades d'actualització disponibles per String Overrides. [ok]
Verificades les dades d'actualització disponibles per Token. [ok]
Verificades les dades d'actualització disponibles per Universally Unique ID. [ok]
Verificades les dades d'actualització disponibles per Variable. [ok]
Verificades les dades d'actualització disponibles per Views. [ok]
Verificades les dades d'actualització disponibles per Views Slideshow. [ok]
Verificades les dades d'actualització disponibles per Webform. [ok]
Verificades les dades d'actualització disponibles per Webform Conditional. [ok]
Verificades les dades d'actualització disponibles per Webform Confirm Email. [ok]
Verificades les dades d'actualització disponibles per Webform Phone Number. [ok]
Verificades les dades d'actualització disponibles per Webform Validation. [ok]
Verificades les dades d'actualització disponibles per Wysiwyg. [ok]
Verificades les dades d'actualització disponibles per XML sitemap. [ok]
Verificades les dades d'actualització disponibles per Administration menu. [ok]
Verificades les dades d'actualització disponibles per Advanced help. [ok]
Verificades les dades d'actualització disponibles per Arrange Fields. [ok]
Verificades les dades d'actualització disponibles per Block. [ok]
Verificades les dades d'actualització disponibles per Bundle copy. [ok]
Verificades les dades d'actualització disponibles per CAPTCHA. [ok]
Verificades les dades d'actualització disponibles per Chaos tools. [ok]
Verificades les dades d'actualització disponibles per Cycle. [ok]
Verificades les dades d'actualització disponibles per Devel. [ok]
Verificades les dades d'actualització disponibles per DHTML Menu. [ok]
Verificades les dades d'actualització disponibles per Drupal for Firebug. [ok]
Verificades les dades d'actualització disponibles per File entity. [ok]
Verificades les dades d'actualització disponibles per Google Map Field. [ok]
Verificades les dades d'actualització disponibles per HTML Export. [ok]
Verificades les dades d'actualització disponibles per Internationalization. [ok]
Verificades les dades d'actualització disponibles per Views translation. [ok]
Verificades les dades d'actualització disponibles per IMCE. [ok]
Verificades les dades d'actualització disponibles per IMCE Wysiwyg API bridge. [ok]
Verificades les dades d'actualització disponibles per jQuery plugins. [ok]
Verificades les dades d'actualització disponibles per jQuery UI. [ok]
Verificades les dades d'actualització disponibles per Localization client. [ok]
Verificades les dades d'actualització disponibles per Localization update. [ok]
Verificades les dades d'actualització disponibles per Language Switcher Dropdown. [ok]
Verificades les dades d'actualització disponibles per Libraries. [ok]
Verificades les dades d'actualització disponibles per Menu breadcrumb. [ok]
Verificades les dades d'actualització disponibles per Node export. [ok]
Verificades les dades d'actualització disponibles per Panels. [ok]
Verificades les dades d'actualització disponibles per Pathauto. [ok]
Verificades les dades d'actualització disponibles per Pathologic. [ok]
Verificades les dades d'actualització disponibles per Phone. [ok]
Verificades les dades d'actualització disponibles per PNG Behave. [ok]
Verificades les dades d'actualització disponibles per reCAPTCHA. [ok]
Verificades les dades d'actualització disponibles per RSS Permissions. [ok]
Verificades les dades d'actualització disponibles per simplehtmldom API. [ok]
Verificades les dades d'actualització disponibles per Site map. [ok]
Verificades les dades d'actualització disponibles per String Overrides. [ok]
Verificades les dades d'actualització disponibles per Token. [ok]
Verificades les dades d'actualització disponibles per Universally Unique ID. [ok]
Verificades les dades d'actualització disponibles per Variable. [ok]
Verificades les dades d'actualització disponibles per Views. [ok]
Verificades les dades d'actualització disponibles per Views Slideshow. [ok]
Verificades les dades d'actualització disponibles per Webform. [ok]
Verificades les dades d'actualització disponibles per Webform Conditional. [ok]
Verificades les dades d'actualització disponibles per Webform Confirm Email. [ok]
Verificades les dades d'actualització disponibles per Webform Phone Number. [ok]
Verificades les dades d'actualització disponibles per Webform Validation. [ok]
Verificades les dades d'actualització disponibles per Wysiwyg. [ok]
Verificades les dades d'actualització disponibles per XML sitemap. [ok]
Verificades les dades d'actualització disponibles per Administration menu. [ok]
Verificades les dades d'actualització disponibles per Advanced help. [ok]
Verificades les dades d'actualització disponibles per Arrange Fields. [ok]
Verificades les dades d'actualització disponibles per Block. [ok]
Verificades les dades d'actualització disponibles per Bundle copy. [ok]
Verificades les dades d'actualització disponibles per CAPTCHA. [ok]
Verificades les dades d'actualització disponibles per Chaos tools. [ok]
Verificades les dades d'actualització disponibles per Cycle. [ok]
Verificades les dades d'actualització disponibles per Devel. [ok]
Verificades les dades d'actualització disponibles per DHTML Menu. [ok]
Verificades les dades d'actualització disponibles per Drupal for Firebug. [ok]
Verificades les dades d'actualització disponibles per File entity. [ok]
Verificades les dades d'actualització disponibles per Google Map Field. [ok]
Verificades les dades d'actualització disponibles per HTML Export. [ok]
Verificades les dades d'actualització disponibles per Internationalization. [ok]
Verificades les dades d'actualització disponibles per Views translation. [ok]
Verificades les dades d'actualització disponibles per IMCE. [ok]
Verificades les dades d'actualització disponibles per IMCE Wysiwyg API bridge. [ok]
Verificades les dades d'actualització disponibles per jQuery plugins. [ok]
Verificades les dades d'actualització disponibles per jQuery UI. [ok]
Verificades les dades d'actualització disponibles per Localization client. [ok]
Verificades les dades d'actualització disponibles per Localization update. [ok]
Verificades les dades d'actualització disponibles per Language Switcher Dropdown. [ok]
Verificades les dades d'actualització disponibles per Libraries. [ok]
Verificades les dades d'actualització disponibles per Menu breadcrumb. [ok]
Verificades les dades d'actualització disponibles per Node export. [ok]
Verificades les dades d'actualització disponibles per Panels. [ok]
Verificades les dades d'actualització disponibles per Pathauto. [ok]
Verificades les dades d'actualització disponibles per Pathologic. [ok]
Verificades les dades d'actualització disponibles per Phone. [ok]
Verificades les dades d'actualització disponibles per PNG Behave. [ok]
Verificades les dades d'actualització disponibles per reCAPTCHA. [ok]
Verificades les dades d'actualització disponibles per RSS Permissions. [ok]
Verificades les dades d'actualització disponibles per simplehtmldom API. [ok]
Verificades les dades d'actualització disponibles per Site map. [ok]
Verificades les dades d'actualització disponibles per String Overrides. [ok]
Verificades les dades d'actualització disponibles per Token. [ok]
Verificades les dades d'actualització disponibles per Universally Unique ID. [ok]
Verificades les dades d'actualització disponibles per Variable. [ok]
Verificades les dades d'actualització disponibles per Views. [ok]
Verificades les dades d'actualització disponibles per Views Slideshow. [ok]
Verificades les dades d'actualització disponibles per Webform. [ok]
Verificades les dades d'actualització disponibles per Webform Conditional. [ok]
Verificades les dades d'actualització disponibles per Webform Confirm Email. [ok]
Verificades les dades d'actualització disponibles per Webform Phone Number. [ok]
Verificades les dades d'actualització disponibles per Webform Validation. [ok]
Verificades les dades d'actualització disponibles per Wysiwyg. [ok]
Verificades les dades d'actualització disponibles per XML sitemap. [ok]
Comprovades les dades d'actualització disponibles per 109 projectes. [status]
Update information last refreshed: dv., 21/02/2014 - 12:37

Update status information on all installed and enabled Drupal projects:
Nom Versió instal·lada Proposed version Estat
Administration menu (admin_menu) 7.x-3.0-rc4 7.x-3.0-rc4 Actualitzat
Advanced help (advanced_help) 7.x-1.0 7.x-1.1 Actualització disponible
Arrange Fields (arrange_fields) 7.x-1.14 7.x-1.14 Actualitzat
Drupal 7.24 7.26 SECURITY UPDATE available
Bundle copy (bundle_copy) 7.x-2.x-dev 7.x-2.x-dev Actualitzat
CAPTCHA (captcha) 7.x-1.0 7.x-1.0 Actualitzat
Chaos tools (ctools) 7.x-1.4 7.x-1.4 Actualitzat
Cycle (cycle) 7.x-1.x-dev 7.x-1.x-dev Actualitzat
Devel (devel) 7.x-1.3 7.x-1.4 Actualització disponible
DHTML Menu (dhtml_menu) 7.x-1.0-beta1 7.x-1.0-beta1 Actualitzat
Drupal for Firebug (drupalforfirebug) 7.x-1.4 7.x-1.4 Actualitzat
Media (media) 7.x-1.3 7.x-1.4 SECURITY UPDATE available
Google Map Field (google_map_field) 7.x-2.4 7.x-2.4 Actualitzat
HTML Export (html_export) 7.x-2.x-dev 7.x-2.x-dev Actualitzat
Internationalization (i18n) 7.x-1.10 7.x-1.10 Actualitzat
Views translation (i18nviews) 7.x-3.x-dev 7.x-3.x-dev Actualitzat
IMCE (imce) 7.x-1.7 7.x-1.8 Actualització disponible
IMCE Wysiwyg API bridge (imce_wysiwyg) 7.x-1.0 7.x-1.0 Actualitzat
jQuery plugins (jquery_plugin) 7.x-1.0 7.x-1.0 Actualitzat
jQuery UI (jquery_ui) 7.x-1.x-dev 7.x-1.x-dev Actualitzat
Localization client (l10n_client) 7.x-1.3 7.x-1.3 Actualitzat
Localization update (l10n_update) 7.x-1.0-beta3 7.x-1.0-beta3 Actualitzat
Language Switcher Dropdown (lang_dropdown) 7.x-1.5 7.x-1.5 Actualitzat
Libraries (libraries) 7.x-2.1 7.x-2.2 Actualització disponible
Menu breadcrumb (menu_breadcrumb) 7.x-1.5 7.x-1.5 Actualitzat
Node export (node_export) 7.x-3.0 7.x-3.0 Actualitzat
Panels (panels) 7.x-3.4 7.x-3.4 Actualitzat
Pathauto (pathauto) 7.x-1.2 7.x-1.2 Actualitzat
Pathologic (pathologic) 7.x-2.11 7.x-2.12 Actualització disponible
Phone (phone) 7.x-1.x-dev 7.x-1.0-beta1 Actualització disponible
PNG Behave (pngbehave) 7.x-1.9 7.x-1.9 Actualitzat
reCAPTCHA (recaptcha) 7.x-1.10 7.x-1.11 Actualització disponible
RSS Permissions (rss_permissions) 7.x-1.0-beta1 7.x-1.0-beta1 Actualitzat
simplehtmldom API (simplehtmldom) 7.x-1.12 7.x-1.12 Actualitzat
Site map (site_map) 7.x-1.0 7.x-1.0 Actualitzat
String Overrides (stringoverrides) 7.x-1.8 7.x-1.8 Actualitzat
Token (token) 7.x-1.5 7.x-1.5 Actualitzat
Universally Unique ID (uuid) 7.x-1.0-alpha5 7.x-1.0-alpha5 Actualitzat
Variable (variable) 7.x-2.3 7.x-2.4 Actualització disponible
Views (views) 7.x-3.7 7.x-3.7 Actualitzat
Views Slideshow (views_slideshow) 7.x-3.0 7.x-3.1 Actualització disponible
Webform (webform) 7.x-3.19 7.x-3.20 SECURITY UPDATE available
Webform Conditional (webform_conditional) 7.x-1.0-beta2 7.x-1.0-beta2 Actualitzat
Webform Confirm Email (webform_confirm_email) 7.x-1.2 7.x-1.2 Actualitzat
Webform Phone Number (webform_phone) 7.x-1.14 7.x-1.17 Actualització disponible
Webform Validation (webform_validation) 7.x-1.3 7.x-1.4 SECURITY UPDATE available
Wysiwyg (wysiwyg) 7.x-2.2 7.x-2.2 Actualitzat
XML sitemap (xmlsitemap) 7.x-2.0-rc2 7.x-2.0-rc2 Actualitzat

NOTE: A security update for the Drupal core is available.
Drupal core will be updated after all of the non-core modules are updated.

Security and code updates will be made to the following projects: Advanced help [advanced_help-7.x-1.1], Devel [devel-7.x-1.4], Media [media-7.x-1.4], IMCE [imce-7.x-1.8], Libraries API [libraries-7.x-2.2], Pathologic [pathologic-7.x-2.12], Phone [phone-7.x-1.0-beta1], reCAPTCHA [recaptcha-7.x-1.11], Variable [variable-7.x-2.4], Views Slideshow [views_slideshow-7.x-3.1], Webform [webform-7.x-3.20], Webform Phone Number [webform_phone-7.x-1.17], Webform Validation [webform_validation-7.x-1.4]

Note: A backup of your project will be stored to backups directory if it is not managed by a supported version control system.
Note: If you have made any modifications to any file that belongs to one of these projects, you will have to migrate those modifications after updating.
Do you really want to continue with the update process? (y/n): y
Project advanced_help was updated successfully. Installed version is now 7.x-1.1.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/advanced_help. [ok]
Project devel was updated successfully. Installed version is now 7.x-1.4.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/devel. [ok]
Project media was updated successfully. Installed version is now 7.x-1.4.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/media. [ok]
Project imce was updated successfully. Installed version is now 7.x-1.8.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/imce. [ok]
Project libraries was updated successfully. Installed version is now 7.x-2.2.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/libraries. [ok]
Project pathologic was updated successfully. Installed version is now 7.x-2.12.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/pathologic. [ok]
Project phone was updated successfully. Installed version is now 7.x-1.0-beta1.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/phone. [ok]
Project recaptcha was updated successfully. Installed version is now 7.x-1.11.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/recaptcha. [ok]
Project variable was updated successfully. Installed version is now 7.x-2.4.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/variable. [ok]
Project views_slideshow was updated successfully. Installed version is now 7.x-3.1.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/views_slideshow. [ok]
Project webform was updated successfully. Installed version is now 7.x-3.20.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/webform. [ok]
Project webform_phone was updated successfully. Installed version is now 7.x-1.17.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/webform_phone. [ok]
Project webform_validation was updated successfully. Installed version is now 7.x-1.4.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/modules/webform_validation. [ok]

Code updates will be made to drupal core.
WARNING: Updating core will discard any modifications made to Drupal core files, most noteworthy among these are .htaccess and robots.txt. If you have made any modifications to these files, please back them up before updating so that you can re-create your modifications in the updated version of the file.
Note: Updating core can potentially break your site. It is NOT recommended to update production sites without prior testing.

Do you really want to continue? (y/n): y
Project drupal was updated successfully. Installed version is now 7.26.
Backups were saved into the directory /root/drush-backups/vhost1/20140221113749/drupal. [ok]
'all' cache was cleared in /var/www/vhost1#vhost1 [success]
You have pending database updates. Run `drush updatedb` or visit update.php in your browser. [warning]
The following updates are pending:

system module :
7079 - Convert the 'filesize' column in {file_managed} to a bigint.

node module :
7014 - Add an index on {node}.language.

taxonomy module :
7011 - Drop unpublished nodes from the index.

devel module :
7005 - Delete variable 'devel_form_weights' from database as it was removed from code.
7006 - Change variable 'dev_mem' to 'devel_memory'.

file_entity module :
7101 - Create the {image_dimensions} database table.

Do you wish to run all pending updates? (y/n): y
Performed update: devel_update_7005 [ok]
yPerformed update: devel_update_7006 [ok]
Performed update: file_entity_update_7101 [ok]
Performed update: taxonomy_update_7011 [ok]
Performed update: node_update_7014 [ok]
Performed update: system_update_7079 [ok]
Finished performing updates.

Quedant tot el sistema actualitzat, funcional i estable.

Be Sociable, Share!
Aquesta entrada va ser publicada en General i etiquetada com , , , . Guardar l'enllaç permanent. Afegeix un comentari o deixa un trackback: URL del Trackback.

Un Comentari

  1. Escrit el 10.03.2014 a les 13:08 | Enllaç permanent

    Bona crònica!!

Publicar un comentari

El teu email mai serà publicat ni compartit. Els camps obligatoris estan marcats amb un *

Pots utilitzar aquestes etiquetes i atributs HTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
*