Comme d'autres l'ont mentionné, MySQL prend en charge une option pour INSERT IGNORE...
qui signifie essayer l'insert, mais pour chaque ligne, si elle est en conflit avec une clé unique (ou les résultats d'une autre erreur comme défaut d'un NOT NULL ou une clé étrangère check), il saute simplement la ligne et continue pour insérer la ligne suivante.
Vous connaissez probablement l'outil mysqldump
fourni avec MySQL. Il a une option pour exporter des données avec la syntaxe INSERT IGNORE
.
Vous devez également ignorer CREATE TABLE car si vous importez quatre jeux de données dans la même table de destination, vous n'avez pas besoin de créer la table quatre fois.
Alors, voici ce que je recommande:
Sur un de vos serveurs, obtenir la définition de table uniquement. Si elles sont toutes identiques, peu importe quel serveur vous obtenez ce à partir de:
mysqldump --no-data mydatabase mytable > create.sql
alors obtenir des données que de chacun de vos quatre serveurs:
mysqldump --no-create-info --insert-ignore mydatabase mytable > data1.sql
(également pour data2.sql , data3.sql, data4.sql, un pour chaque serveur)
Copiez les fichiers de vidage sur le serveur sur lequel vous souhaitez fusionner les données.
Créer la table:
mysql mydestdatabase < create.sql
charge toutes les données:
pv -pert data*.sql | mysql mydestdatabase
J'aime utiliser pv -pert
pour cela, car il montre une barre de progression. Vous devrez peut-être installer pv
car il n'est pas présent par défaut sur la plupart des systèmes. Si vous ne voulez pas faire cela, utilisez simplement cat
.
Merci pour la réponse en profondeur! ça a marché – KyleK