2010-07-19 9 views
2

J'ai un projet qui nous oblige à maintenir plusieurs bases de données MySQL sur plusieurs ordinateurs. Ils auront des schémas identiques.Agrégation de plusieurs bases de données MySQL distribuées

périodiquement, chacune de ces bases de données doivent envoyer leur contenu à un serveur maître, qui agréger toutes les données entrantes. Le contenu doit être sauvegardé dans un fichier qui peut être transporté via un lecteur flash vers un ordinateur connecté à Internet à envoyer.

Les clés seront namespace'd, donc il ne devrait pas y avoir de conflit, mais je ne suis pas tout à fait sûr d'une manière élégante de concevoir cela. Je pense à l'horodatage de chaque ligne et à l'exécution de la requête "SELECT * FROM [table] WHERE timestamp > last_backup_time" sur chaque table, puis le vidage dans un fichier et le chargement en bloc sur le serveur maître.

Les ordinateurs distribués ne seront pas avoir accès à Internet. Nous sommes dans une partie très rurale d'un pays du tiers monde.

Des suggestions?

Répondre

1

Votre

SELECT * FROM [table] WHERE timestamp > last_backup_time 

manquera lignes DELETEed.

Qu'est-ce que vous voulez sans doute faire est d'utiliser la réplication MySQL via une clé USB. C'est-à-dire, activez le binlog sur vos serveurs source et assurez-vous que le binlog n'est pas éliminé automatiquement. Copiez les fichiers binlog sur une clé USB, puis PURGE MASTER LOGS TO ... pour les effacer sur le serveur source.

Sur le serveur d'agrégation, tournez le binlog dans un script executable en utilisant la commande mysqlbinlog, puis importer ces données en tant que script SQL. Le serveur d'agrégation doit avoir une copie de chaque base de données des serveurs source, mais sous un nom de schéma différent tant que votre SQL utilise des noms de table non qualifiés (n'utilise jamais la syntaxe schema.table pour faire référence à une table).). L'importation du script généré par mysqlbinlog (avec une commande USE appropriée préfixée) reflétera ensuite les changements de serveur source sur le serveur d'agrégation.

agrégation dans toutes les bases de données peut être effectuée à l'aide des noms de table entièrement qualifiés (à savoir en utilisant la syntaxe schema.table dans JOIN ou INSERT ... SELECT).

+0

c'est vraiment super. Je vais regarder ça. Merci! – user358829

Questions connexes