Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: darg94 en 17 Julio 2014, 11:41 am



Título: [AYUDA] Sincronizar tablas de dos bases de datos
Publicado por: darg94 en 17 Julio 2014, 11:41 am
Hola,

tengo dos bases de datos con usuarios, una base de datos está recibiendo nuevos usuarios constantemente y la otra no. Necesito poder sincronizar ambas bases de datos automáticamente cada X tiempo (una de las bases de datos, es de WORDPRESS).

La cosa se complica un poco más teniendo en cuenta que la estructura de las tablas de cada base de datos es distinta, por lo que no puedo copiar a pelo todo el contenido de una base de datos a otra tan facilmente.

Podría meter en el wordpress un script que se ejecute automaticamente una hora concreta, cada dia? tal como se haría en una crontab.


Título: Re: [AYUDA] Sincronizar tablas de dos bases de datos
Publicado por: MinusFour en 17 Julio 2014, 18:21 pm
Puedes hacer un INSERT INTO LEFT JOIN siempre y cuando haya una llave igual en las dos tablas.

Teniendo por ejemplo:

PersonsA
Código
  1. CREATE TABLE PersonsA
  2. (
  3. PersonID INT NOT NULL AUTO_INCREMENT,
  4. LastName VARCHAR(255),
  5. FirstName VARCHAR(255),
  6. Address VARCHAR(255),
  7. City VARCHAR(255),
  8. PRIMARY KEY(PersonID)
  9. );

PersonsB
Código
  1. CREATE TABLE PersonsB
  2. (
  3. PersonID INT NOT NULL AUTO_INCREMENT,
  4. LastName VARCHAR(255),
  5. FirstName VARCHAR(255),
  6. Address VARCHAR(255),
  7. City VARCHAR(255),
  8. PRIMARY KEY(PersonID)
  9. );

Los registros:

PersonsA
Código
  1. INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Tepo", "Nano", "street #1234", "Jamaica");
  2. INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Tep", "Nan", "street #123", "Jamaic");
  3. INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Te", "Na", "street #12", "Jamai");
  4. INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("T", "N", "street #1", "Jama");

PersonsB
Código
  1. INSERT INTO PersonsB(LastName, FirstName, Address, City) VALUES("Tepo", "Nano", "street #1234", "Jamaica");
  2. INSERT INTO PersonsB(LastName, FirstName, Address, City) VALUES("Tep", "Nan", "street #123", "Jamaic");

Tu puedes vaciar los registros 3 y 4 de la tabla PersonsA a PersonsB así:

Código
  1. INSERT INTO PersonsB(PersonID, LastName, FirstName, Address, City) SELECT PersonsA.PersonID, PersonsA.LastName, PersonsA.FirstName, PersonsA.Address, PersonsA.City FROM PersonsA LEFT JOIN PersonsB ON PersonsA.PersonID = PersonsB.PersonID WHERE PersonsB.PersonID IS NULL

Y en cuanto a tu crontab puedes hacerte un archivo PHP que haga la query cada X mins:

Código:
*/X       *       *       *       *       /usr/bin/php ruta/a/archivo/php &> /dev/null

Por cierto, esto no actualiza los campos de registros viejos, solo agrega registros diferentes.