¿Estas atascado? ¡Yo te ayudo!, pregunta aquí.

Sincronizar estructura de dos bases de datos distintas (en el mismo servidor)

Comando, instrucciones y trucos para trabajar y gestionar este motor de base de datos.

Notapor alexiter » Mié Oct 11, 2017 9:09 am

Despues de mucho buscar y encontrar solo soluciones de pago (algo que considero completamente respetable), me decidi ha programar una solucion facil, sencilla y para toda la familia.

Básicamente lo que necesitaba era poder sincronizar la estructura de dos bases de datos sin alterar los datos de ninguna de ellas, independientemente que una tuviera tablas que la otra no tuviese o que las tablas coincidentes tuvieran distinto numero de columnas.

Asi pues, os copio el codigo a continuacion:
Código: Seleccionar todo
<?
$conectado=@mysql_connect("localhost","usuario","contraseña");
$BD_ORIGINAL='base de datos original';
$BD_SINCRONIZADA='base de datos destino';
$cif=$BD_SINCRONIZADA;
$sql = "SHOW TABLES FROM ".$BD_ORIGINAL;
$resultado = mysql_query($sql);



if (!$resultado) {
    echo "Error de BD, no se pudieron listar las tablas\n";
    echo 'Error MySQL: ' . mysql_error();
    exit;
}

$crea_base="CREATE DATABASE IF NOT EXISTS ".mysql_real_escape_string($cif).";";
      $hacer_base=mysql_query($crea_base,$conectado);
      mysql_select_db($cif,$conectado);

while ($fila = mysql_fetch_row($resultado)) {
   mysql_select_db($cif,$conectado);
       
   $crea_tabla='CREATE TABLE '.mysql_real_escape_string($cif).'.'.$fila[0].' LIKE '.$BD_ORIGINAL.'.'.$fila[0].';';
   $hacer_tabla=mysql_query($crea_tabla,$conectado);
   
   mysql_select_db($BD_ORIGINAL,$conectado);
   $sqlC = "SHOW COLUMNS FROM $fila[0]";
   $resultadoC = mysql_query($sqlC);
   while ($filaC = mysql_fetch_row($resultadoC)) {
      $crea_tablaC='ALTER TABLE '.$cif.'.'.$fila[0].' ADD '.$filaC[0].' '.$filaC[1].' NOT NULL  ;';
      echo $crea_tablaC.'<br>';
   $hacer_tablaC=mysql_query($crea_tablaC,$conectado);
      
   }
   mysql_free_result($resultadoC);
   
   
}

mysql_free_result($resultado);


?>


Ahora una breve explicacion del funcionamiento:
-Primero lee toda la estructura de la base de datos origen tabla por tabla (y la estructura de la tabla).
-Despues va creando las tablas una por una en la base de datos destino, que si no existe la crea y si existe trabajara sobre ella.
-Si una tabla ya existe en ambas bases de datos, leera la estructura de la tabla de la base de datos origen y añadira las columnas no coincidentes en la base de datos destino con el tipo de columna de la tabla de la base de datos origen.

Logicamente no se altera ninguno de los datos de ninguna de las bases de datos, ni el orden de las columnas preexistentes en cualquiera de las dos bases.
alexiter
Site Admin
 
Mensajes: 142
Registrado: Dom Nov 17, 2013 9:54 pm

Volver a MySQL y phpmyadmin

cron
  • Buscar mensajes nuevos
  • Buscar temas sin respuesta
  • ¿Quién está conectado?
  • Hay 6 Usuarios identificados :: 0 registrado, 0 ocultos y 6 invitados (basados en usuarios activos en los últimos 5 minutos)
  • La mayor cantidad de usuarios identificados fue 86 el Mié Feb 26, 2020 5:18 pm
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados