Le vidage d'une table mysql à l'importation a remplacé les enregistrements existants

9

J'ai fait un vidage en utilisant mysqldump ..

mysqldump -u... -p... mydb t1 > mydb_table.sql

Ensuite, j'ai importé le vidage dans une autre base de données ayant la même table, mais des enregistrements différents ..

mysql -u...-p... mydb < mydb_tables.sql

La base de données importatrice avait des enregistrements de clé_principale 1 à 1 000 et la base de données exportatrice en avait 5 000 à 10 000.

Mais lors de l'importation, les enregistrements existants, c'est-à-dire 1 à 1 000, ont été supprimés.

Comment?? Pourquoi?? S'il s'agit d'un comportement par défaut, quelles options je peux donner au vidage pour ne pas le laisser se produire la prochaine fois.

Rajat Singhal
la source

Réponses:

12

Le mysqldump, par défaut, supprimera la table. Vous devez spécifier l' --no-create-infooption comme ceci:

mysqldump -u... -p... --no-create-info --skip-extended-insert mydb t1 > mydb_table.sql

De cette façon, vous n'avez que des encarts à traiter. L'utilisation --skip-extended-insertinsère une ligne à la fois. Cela permet de traiter les problèmes en double, mais vous aurez l'importation comme ceci:

mysql -u...-p... --force mydb < mydb_tables.sql

L' --forceoption est dans le seul but de continuer INSERT dans le cas où une clé en double est rencontrée. Dans ce cas, l'erreur INSERT incriminée est ignorée et transmise au INSERT suivant.

RolandoMySQLDBA
la source
est-il possible de récupérer les données supprimées lors du vidage?
Arun Kumaresh