Tengo dos BD mysql identicas, en la que se supone que una esta en LOCAL y la otra en otro lugar...
Una opción que barajé fue la de exportar los datos e importarlos a la otra BD o borrar e insertar de nuevo todos los datos, pero esas opciones estan bien si tenemos pocos DATOS, si hablamos de mucha inormación, ese proceso puede ser lento...
Mi intención es un sincronizado entre las dos BD sobre una tabla, para ello comparo los "id" y la fecha de actualización intentando que me muestre las tuplas a actualizar,borrar y nuevos.
A ver si alguien me puede ayudar en el planteamiento pues no salgo del mio y es incorrecto...
Código PHP:
<?php
/*
* Script para sincronizar los Datos en LOCAL con una conexion guardada de una BD en internet o en LOCAL
* MYSQL
*/
//conexion a la BD local
include("../../nucleo/config/BD/conexionBD.php");
//Datos de otra BD para sincronizar.
$urls = $_POST["url"];
$BDs = $_POST["BD"];
$usuarios = $_POST["usuario"];
$claves = $_POST["clave"];
$error = 0;
if($linkSincro = mysql_connect($urls,$usuarios,$claves)){
if(mysql_select_db($BDs, $linkSincro)){
$sql = "SELECT * FROM tDocumentos";
$resultSincro = mysql_query($sql,$linkSincro);
$numResult = mysql_num_rows($resultSincro);
$link = abrirBD();
//copiar todos los datos de la BD local al nuevo servidor o actualiza.
//Copio los Documentos
if($numResult == 0){
//selecciono los documentos en local para guardar todos en otro servidor.
if($result = mysql_query($sql,$link)){
while ($row = mysql_fetch_array($result)) {
//funcion mysql_real_escape_string(): Escapa caracteres especiales en una cadena para ser usado en una sentencia SQL
$textarea = mysql_real_escape_string($row["contenido"],$link);
$sqlInsert = "INSERT INTO tDocumentos VALUES('".$row["id"]."','".$row["titulo"]."','".$textarea."','".$row["privacidad"]."','".$row["fecha"]."','".$row["actualizacion"]."')";
if(!(mysql_query($sqlInsert,$linkSincro))){
errorBD($linkSincro);
$error++;
}
}
$sql = "SELECT * FROM tEtiquetas";
if($result = mysql_query($sql,$link)){
while ($row = mysql_fetch_array($result)) {
$sqlInsert = "INSERT INTO tEtiquetas VALUES('".$row["id"]."','".$row["nombre"]."')";
if(!(mysql_query($sqlInsert,$linkSincro))){
errorBD($linkSincro);
$error++;
}
}
}else{
errorBD($link);
$error++;
}
$sql = "SELECT * FROM DocuEti";
if($result = mysql_query($sql,$link)){
while ($row = mysql_fetch_array($result)) {
$sqlInsert = "INSERT INTO DocuEti VALUES('".$row["idDocu"]."','".$row["idEti"]."')";
if(!(mysql_query($sqlInsert,$linkSincro))){
errorBD($linkSincro);
$error++;
}
}
}
}else{
errorBD($link);
$error++;
}
}else if($numResult > 0){
//actualizar los registro adecuados...
if($result = mysql_query($sql,$link)){
//datos local
while($row = mysql_fetch_array($result)){
$arrLocalId[] .= $row["id"];
$arrLocalAct[] .= $row["actualizacion"];
}
//datos otro DB
while ($row = mysql_fetch_array($resultSincro)) {
$arrSincrId[] .= $row["id"];
$arrSincrAct[] .= $row["actualizacion"];
}
}else{
errorBD($link);
$error++;
}
$numSincro = count($arrSincrId);
$numLocal = count($arrLocalId);
for($i=0;$i<$numLocal;$i++){
$cn=0;
$cl=0;
for($j=0;$j<$numSincro;$j++){
if($arrLocalId[$i] == $arrSincrId[$j] && $arrLocalAct[$i] > $arrSincrAct[$j]){
$actualizar[] .= $arrLocalId[$i];
}else if($arrLocalId[$i] != $arrSincrId[$j] && $cn <= $numSincro){
if($cn == $numSincro){
$nuevo[] .= $arrLocalId[$i];
}
$cn++;
}else if($arrLocalId[$i] != $arrSincrId[$j] && $cl <= $numLocal){
if($cl == $numLocal){
$borrar[] .= $arrLocalId[$i];
}
$cl++;
}
}
}
echo "act: <br>";
print_r($actualizar);
echo "<hr>nuev: <br>";
print_r($nuevo);
echo "<hr>borr: <br>";
print_r($borrar);
}
cerrarBD($link);
cerrarBD($linkSincro);
if($error == 0){
echo "<img title='Sincronización correcta' src='css/iconos/ok.png'/>";
}else{
echo "<img title='num errores: ".$error."' src='css/iconos/error.png'/>";
}
}else{
echo "<img title='Imposible conectar' src='css/iconos/error.png'/>";
}
}else{
echo "<img title='Imposible conectar' src='css/iconos/error.png'/>";
}
?>
Saludos y gracias.