web-dev-qa-db-fra.com

Comment synchroniser deux tables MySQL?

Si j’ai une table (appelons-la orders) sur l’un de mes serveurs, nommée par exemple local. Et j'ai cette même table un autre de mes serveurs, nommé, par exemple, remote.

Mon problème est, quel est le meilleur moyen de synchroniser ces deux tables?

Je voudrais une solution qui remplace un registre si le local est différent de celui distant. Et insérez le registre s'il n'existe pas sur la table locale.

J'avais essayé d'utiliser dump une commande dump similaire à celle-ci, mais je n'ai pas fonctionné comme prévu:

/usr/bin/mysqldump --defaults-file=~/my/conf.cnf --skip-opt --skip-add-locks --default-character-set=latin1 --disable-keys --no-create-db --no-create-info --dump-date --compress --quick --replace --where='date > DATE_SUB(NOW(), INTERVAL 1 DAY)' mydb orders >> /backup/myDump

Comment puis-je faire ceci? Comment pourrais-je faire un script pour faire cela?

10
GarouDan

pt-table-sync peut le faire: http://www.percona.com/doc/percona-toolkit/2.1/pt-table-sync.html

Voir aussi autre SO questions et réponses mentionnant pt-table-sync.

9
Bill Karwin

On peut dire que la "meilleure" méthode consiste à utiliser la réplication MySQL, documentée ici: http://dev.mysql.com/doc/refman/5.5/fr/replication.html

0
Joni

Je résous le problème similaire de la synchronisation constante de deux tables.

Parmi tous les scripts (dont la plupart sont anciens), j'ai trouvé cette application activement développée (prometteuse)

https://github.com/mrjgreen/db-sync

Je vais l'essayer et peut-être que plus tard, j'écrirai un exemple.

0
BlackTea