Cuando hablamos de pasar una base de datos en mySQL a otro servidor, lo podemos hacer simplemente copiando la carpeta que contiene los archivos de las tablas. Pero cuando se trata de trasladar tablas del tipo innoDB (tipo de tablas que usa MediaWiki) nos encontramos con un problema.
Tabla de contenidos |
Al copiar los archivos de las tablas al nuevo servidor, éstas aparecen en uso y no se pueden acceder, ni reparar ni nada.
Por este motivo puedes hacer un mysqldump, o sea, un volcado a un .sql (instrucciones mySQL); para así luego ejecutarlas en el nuevo servidor. Esto acarrea un problema con las ñ (eñes), acentos y signos de pregunta y admiración, se ven cualquier cosa. Y peor aún, se rompen los vínculos que contengan tales caracteres.
Advierto que esta solución no es la mejor, la página oficial de mySQL propone una, pero yo no tuve éxito al implementarla; por lo que a base de pruebas la siguiente es la que funcionó.
En la consola de unix colocamos:
mysql -u root -p base_de_datos
Nos va a pedir la contraseña del root (o el usuario que hayamos puesto).
Si utilizas Putty copia el siguiente texto (ctrl+c) y luego haz clic con el botón derecho del mouse sobre el putty y hará como si hubieras hecho un (ctrl+v).
ALTER TABLE `archive` ENGINE = MYISAM; ALTER TABLE `categorylinks` ENGINE = MYISAM; ALTER TABLE `externallinks` ENGINE = MYISAM; ALTER TABLE `filearchive` ENGINE = MYISAM; ALTER TABLE `hitcounter` ENGINE = MYISAM; ALTER TABLE `image` ENGINE = MYISAM; ALTER TABLE `imagelinks` ENGINE = MYISAM; ALTER TABLE `interwiki` ENGINE = MYISAM; ALTER TABLE `ipblocks` ENGINE = MYISAM; ALTER TABLE `job` ENGINE = MYISAM; ALTER TABLE `langlinks` ENGINE = MYISAM; ALTER TABLE `logging` ENGINE = MYISAM; ALTER TABLE `math` ENGINE = MYISAM; ALTER TABLE `objectcache` ENGINE = MYISAM; ALTER TABLE `oldimage` ENGINE = MYISAM; ALTER TABLE `page` ENGINE = MYISAM; ALTER TABLE `pagelinks` ENGINE = MYISAM; ALTER TABLE `querycache` ENGINE = MYISAM; ALTER TABLE `querycache_info` ENGINE = MYISAM; ALTER TABLE `recentchanges` ENGINE = MYISAM; ALTER TABLE `revision` ENGINE = MYISAM; ALTER TABLE `searchindex` ENGINE = MYISAM; ALTER TABLE `site_stats` ENGINE = MYISAM; ALTER TABLE `templatelinks` ENGINE = MYISAM; ALTER TABLE `text` ENGINE = MYISAM; ALTER TABLE `trackbacks` ENGINE = MYISAM; ALTER TABLE `transcache` ENGINE = MYISAM; ALTER TABLE `user` ENGINE = MYISAM; ALTER TABLE `user_groups` ENGINE = MYISAM; ALTER TABLE `user_newtalk` ENGINE = MYISAM; ALTER TABLE `watchlist` ENGINE = MYISAM;
Ahora podemos proceder de forma común copiando los archivos de la base de datos al nuevo servidor.
En el nuevo servidor, una vez ubicada la carpeta, mySQL tomará correctamente la base de datos.
En el nuevo servidor conectamos nuevamente a mysql
mysql -u root -p base_de_datos
Y ejecutamos la siguiente consulta:
ALTER TABLE `archive` ENGINE = INNODB; ALTER TABLE `categorylinks` ENGINE = INNODB; ALTER TABLE `externallinks` ENGINE = INNODB; ALTER TABLE `filearchive` ENGINE = INNODB; ALTER TABLE `hitcounter` ENGINE = HEAP; ALTER TABLE `image` ENGINE = INNODB; ALTER TABLE `imagelinks` ENGINE = INNODB; ALTER TABLE `interwiki` ENGINE = INNODB; ALTER TABLE `ipblocks` ENGINE = INNODB; ALTER TABLE `job` ENGINE = INNODB; ALTER TABLE `langlinks` ENGINE = INNODB; ALTER TABLE `logging` ENGINE = INNODB; ALTER TABLE `math` ENGINE = INNODB; ALTER TABLE `objectcache` ENGINE = INNODB; ALTER TABLE `oldimage` ENGINE = INNODB; ALTER TABLE `page` ENGINE = INNODB; ALTER TABLE `pagelinks` ENGINE = INNODB; ALTER TABLE `querycache` ENGINE = INNODB; ALTER TABLE `querycache_info` ENGINE = INNODB; ALTER TABLE `recentchanges` ENGINE = INNODB; ALTER TABLE `revision` ENGINE = INNODB; ALTER TABLE `searchindex` ENGINE = MyISAM; ALTER TABLE `site_stats` ENGINE = INNODB; ALTER TABLE `templatelinks` ENGINE = INNODB; ALTER TABLE `text` ENGINE = INNODB; ALTER TABLE `trackbacks` ENGINE = INNODB; ALTER TABLE `transcache` ENGINE = INNODB; ALTER TABLE `user` ENGINE = INNODB; ALTER TABLE `user_groups` ENGINE = INNODB; ALTER TABLE `user_newtalk` ENGINE = INNODB; ALTER TABLE `watchlist` ENGINE = INNODB;
Hemos terminado el trabajo, la base de datos se encuentra de la misma manera que en el viejo servidor. Las tablas que eran innoDB han vuelto a serlo.