2009-11-18 5 views
1

J'essaie de créer un script PHP pour lire une poignée de tables MySQL de la base de données A, puis les insérer dans les bases de données B et C. C'est un scénario très simple. copié peut même être vidé ou abandonné avant d'y avoir inséré des valeurs. Toutes les bases de données sont sur le même serveur, et je n'ai pas besoin de conserver les anciennes données, il suffit de les écraser.Synchroniser des tables identiques dans des bases de données séparées avec php

La seule chose que je ne peux pas faire est la réplication de table; mon installation d'hébergement ne le permet pas.

J'ai essayé quelques méthodes que j'ai trouvées et j'ai lu plusieurs questions et réponses ici sur SO et ailleurs, mais je ne trouve pas la réponse - ma question est probablement trop simple! C'est quelque chose que je voudrais appeler d'un travail cron ou manuellement, peut-être une fois par jour au maximum. Cela n'a même pas besoin d'être très efficace. Merci, j'apprécie toute aide que vous pourriez avoir à offrir - même des liens vers des questions précédentes avec la réponse serait génial si mon mojo de recherche était faible.

Frank

Répondre

2

Je ne pense pas que vous auriez même besoin d'utiliser PHP pour y arriver. Si les bases de données sont sous la même instance MySQL, vous pouvez simplement utiliser une requête cross-database pour sélectionner les données d'une table et les déposer dans une autre. Par exemple, y compris votre vouloir purger la table avant la main:

TRUNCATE TABLE DatabaseA.Table1; 
INSERT INTO DatabaseA.Table1A SELECT 
     ColumnFoo, ColumnBar, ColumnBaz 
     FROM DatabaseB.Table1B; 

Vous pouvez écrire ceci dans un script PHP, qui pourrait alors appeler Cron. Tout autre langage de script avec un adaptateur MySQL fonctionnerait probablement, vraiment. Pour ce faire, en chargeant les données dans un script et en les remettant à nouveau dans le DB, cela impliquerait beaucoup plus de bande passante réseau, de stockage et de traitement que nécessaire. Une dernière remarque, si vous commencez à utiliser d'autres bases de données par la suite, n'oublie pas que toutes ne supportent pas les requêtes cross-database (je connais au moins PostgreSQL).

+0

J'ai été capable de déposer ce droit dans un script avec mes noms de base de données et de table et cela a fonctionné au premier essai. Agréable! Merci beaucoup pour votre réponse. –

1

Il existe plusieurs solutions.

  • Configurer la réplication de table. Cette fonctionnalité de MySQL est destinée aux données distribuées, mais devrait fonctionner de base de données à la base de données (même si je ne l'ai pas essayé).

  • tomber périodiquement la table et de recréer avec:

     
    use b; 
    drop table table; 
    create table table as 
    select * 
    from a.table;

    use c; drop table table; create table table as select * from a.table;

    Cela suppose que contient le maître.

+0

Huh ... Je ne pouvais pas que cela fonctionne comme ça, mais si j'ajusta juste un peu ... 'drop table databaseb.table; create table databaseb.table as select * from databasea.table; ' Ensuite, cela fonctionne très bien. –

+0

Oups. Oui, mon mal. – wallyk

2

Vous pouvez simplement faire ceci:

D'abord, créer 3 tables.

  • A = table à partir de la base de données A
  • B = table à partir de la base de données B
  • C = tableau dans l'une des bases de données, mais elle doit être une ...

(Supposons que C est dans la base de données A)

TRUNCATE TABLE DatabaseA.C; 
INSERT INTO DatabaseA.C SELECT 
    ColumnFoo, ColumnBar, ColumnBaz 
    FROM DatabaseB.B; 
INSERT INTO DatabaseA.C SELECT 
    ColumnFoo, ColumnBar, ColumnBaz 
    FROM DatabaseA.A; 
TRUNCATE TABLE DatabaseA.A; 
TRUNCATE TABLE DatabaseB.B; 
INSERT INTO DatabaseA.A SELECT 
    ColumnFoo, ColumnBar, ColumnBaz 
    FROM DatabaseA.C; 
INSERT INTO DatabaseB.B SELECT 
    ColumnFoo, ColumnBar, ColumnBaz 
    FROM DatabaseA.C; 

Maintenant, vous avez deux bases de données en synchronisation avec l'autre et aucune donnée n'a été perdu.

Si je comprends le mot synchronisent correctement, cela signifie que pour obtenir des données à partir des deux bases de données en toute sécurité et de les mélanger tous ensemble ...

Bien sûr, il pourrait y avoir des problèmes avec des ID et des choses, mais si les taux d'index de base de données sont synchronisés aussi, alors il pourrait bien faire l'affaire ...

Vérifiez ce lien, ainsi: About Data Overwrite and Identical Keys

Questions connexes