lunes, 16 de enero de 2012

Migrar tablas entre base de datos MySQL con PHP

Migrar tablas entre base de datos MySQL con PHP: Para pasar una tabla de una base de datos de MySQL a otra base de datos es muy sencillo con estos dos SQL:

Pasar la estructura de la tabla:

Código :

CREATE TABLE `bd_destino`.`nombre_tabla` LIKE `bd_fuente`.`nombre_tabla`
Pasar los datos de la tabla a la otra:

Código :

INSERT INTO `bd_destino`.`nombre_tabla` SELECT * FROM `bd_fuente`.`nombre_tabla`

Migración de Base de Datos MySQL con PHP




Conociendo estos sql, podemos automatizar la migración de una base de datos de forma muy sencilla con PHP. Aquí les dejo un script de ejemplo:
Código :
// Si la base de datos tiene muchos datos habilitar esto
// set_time_limit(0);


header('Content-type: text/plain');

$conexion = mysql_connect('localhost', 'root', '');

// De que base de datos vamos a tomar las tablas
$db_from = 'cristal_cristalab';
// A que base de datos vamos a migrar las tablas
$db_to = 'migrarbd';
// Con los datos o no
$data = true;


// Leemos todas las tablas de db_from
$sql = "SHOW TABLES FROM $db_from";

$result = mysql_query($sql);

$list_tables = array();
while ($row = mysql_fetch_assoc($result))
{
$list_tables[] = current($row);
}

// Migramos las estructuras de las tablas
foreach ($list_tables as $tbname)
{
$sql = "CREATE TABLE IF NOT EXISTS $db_to.$tbname LIKE $db_from.$tbname";
$result = mysql_query($sql);
if ($result)
{
echo "Migrada la estructura de la tabla $db_from.$tbname a $db_to.$tbname \n";
}

}

// Si data es true pasamos los datos de cada tabla vieja a la nueva
if ($data)
{
echo "Comienza la migracion de datos \n";
foreach ($list_tables as $tbname)
{
$sql = "INSERT INTO $db_to.$tbname SELECT * FROM $db_from.$tbname";
$result = mysql_query($sql);
if ($result)
{
echo "Migrados datos de la tabla $db_from.$tbname a $db_to.$tbname \n";
}
}
echo "Termina la migracion de datos \n";
}

?>

Advertencia


Existe la posibilidad de realizar la siguiente consulta

Código :


CREATE TABLE `bd_destino`.`nombre_tabla` SELECT * FROM `bd_fuente`.`nombre_tabla`

Crea una tabla con los campos y los datos pero nada más. Es decir, ignora los índices definidos y otros, por poner un ejemplo: las claves primarias NO se definen en la nueva tabla.


Espero les sirva, y si pueden compartirlo en otro lenguaje por ejemplo python (o simplemente quieren mejorar el script) la comunidad de cristalab se los agradecerá.

Enviar comentario



No hay comentarios:

Publicar un comentario