Despejo de uma tabela mysql na importação substituiu os registros existentes

9

Peguei um despejo usando mysqldump ..

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

Importei o despejo em outro banco de dados com a mesma tabela, mas com registros diferentes.

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

O banco de dados de importação tinha registros da chave_primária 1 a 1000, e o banco de dados de exportação tinha 5000 a 10.000.

Mas na importação dos registros existentes, ou seja, 1 a 1000 foram excluídos.

Quão?? Por quê?? Se for um comportamento padrão, que opções posso dar para despejar para não deixar que isso aconteça na próxima vez.

Rajat Singhal
fonte

Respostas:

12

O mysqldump, por padrão, descartará a tabela. Você deve especificar a --no-create-infoopção como esta:

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

Dessa forma, você só tem inserções para lidar. Usar --skip-extended-insertirá inserir uma linha de cada vez. Isso ajuda a lidar com problemas duplicados, mas você terá uma importação como esta:

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

A --forceopção tem como único objetivo continuar INSERTs no caso de uma chave duplicada ser encontrada. Nesse caso, o erro do INSERT ofensivo é ignorado e passa para o próximo INSERT.

RolandoMySQLDBA
fonte
é possível recuperar os dados que são excluídos durante o despejo?
Arun Kumaresh