Estoy en situación de migrar una web que programé por mi cuenta años atrás, con mis propias tablas para almacenar información a WordPress. Si tuviese 5 o 10 entradas, la migración se podría hacer a mano sin ningún problema, pero el problema viene cuando ya tengo más de 2000 entradas. Es necesario la integración de un script que automatice esta ardua tarea.
migración
No voy a entrar en PHP, (cadenas de conexión a la base de datos, etc) sino en MySQL. Este código que pongo a continuación es un ejemplo muy básico en el que se modifica el tipo de dato de un campo, se elimina una tabla existente y se migran datos a partir de una consulta. También se reemplazan cadenas con funciones de MySQL.
<?php function conectar_origen(){ $host = "host"; $usuario = "usuario"; $contrasenya= "pass"; $db = "database"; $enlace = mysql_connect($host,$usuario,$contrasenya) or die("No pudo conectarse a la base de datos por: " . mysql_error()); if (!$enlace) { die('No conectado : ' . mysql_error()); } $seldb = mysql_select_db($db,$enlace); if (!$seldb) { die ('No se puede seleccionar la base de datos: ' . mysql_error()); } return $enlace; } function desconectar($conexion){ mysql_close($conexion); } function consulta($sql){ $res = mysql_query($sql) or die ("No se pudieron obtener datos en la consulta por: ".mysql_error()); return $res; } //ORIGEN DE DATOS: $link_origen= conectar_origen(); //QUITAR AUTO INCREMENT DE NOTICIA. consulta("ALTER TABLE noticia MODIFY COLUMN id_noticia smallint(6);"); //ELIMINAR LA TABLA ANTERIOR. consulta("TRUNCATE TABLE noticia;"); //MIGRACION DE DATOS if(consulta("INSERT INTO noticia(id_noticia, titulo, url, url_video, url_foto, descripcion, fecha, visitas, hd) SELECT id_dia_noticia, titulo, url, REPLACE(url_video, 'cadena1', 'cadena2'), REPLACE(url_foto, 'cadena1', 'cadena2'), descripcion, fecha, visitas, 'NO' FROM dia_noticia WHERE fecha >'2010-09-01';")){ printf("NOTICIAS MIGRADAS CON EXITO\n"); } //CONTINUARIA... desconectar($link_origen); ?>
diferentes bases de datos
Puede ser que haya tablas que queramos migrar que estén en diferentes bases de datos (noticia en basededatos1 y dia_noticia en basededatos2), para ello habría que comentar el código anterior:
$seldb = mysql_select_db($db,$enlace); if (!$seldb) { die ('No se puede seleccionar la base de datos: ' . mysql_error()); }
e indicar antes del nombre de cada tabla la base de datos a la que pertenece:
if(consulta("INSERT INTO basededatos1.noticia(id_noticia, titulo, url, url_video, url_foto, descripcion, fecha, visitas, hd) SELECT id_dia_noticia, titulo, url, REPLACE(url_video, 'cadena1', 'cadena2'), REPLACE(url_foto, 'cadena1', 'cadena2'), descripcion, fecha, visitas, 'NO' FROM basededatos2.dia_noticia WHERE fecha >'2010-09-01';")){ printf("NOTICIAS MIGRADAS CON EXITO\n"); }
Últimos comentarios