Digamos que em um banco de dados de teste os dados de um ano foram apagados. Eu obtive os dois IDs para os dados em um ano, no mínimo, e os dados no outro, no máximo, e, portanto, uma série do que está faltando aqui. Minha pergunta; Existe algum perigo em usar o seguinte comando da instância completa do banco de dados, a fim de obter um dump funcional que pode ser usado para reparar o banco de dados com o pedaço de informação ausente nele? O comando:
mysqldump -t --insert-ignore --skip-opt --single-transaction --quick --where="id<156789339" -w"id>124054297" -u root -p database table > partial.sql
E isso para importar depois de gzipar/movê-lo:
zcat partial.sql.gz | mysql -u root -p database table
Pode haver uma advertência que vale a pena mencionar - os dados vêm do mysql 5.5 (percona) enquanto importados para uma instância do mysql 5.1, embora eu ache que não há problemas de compatibilidade que eu conheça de imediato que possam surgir disso.
Eu entendo -t
que é para evitar a criação de CREATE TABLE
instruções ( --no-create-info
), --insert-ignore
caso meu intervalo se sobreponha, ignorando se esse ID já existe e --skip-opt
para garantir que ele não faça um monte de coisas que danificariam as coisas na importação ( --add-drop-tab, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset
de acordo com a página de manual para mysqldump). Só quero ter certeza de que isso é tudo que preciso na exportação e se falta alguma coisa na importação antes que algum possível erro acabe sendo cometido.
Responder1
Provavelmente tudo ficará bem. Existem alguns casos especiais em que pode falhar.
Existem FOREIGN KEYs em seu banco de dados apontando para sua tabela usando a instrução ON DELETE CASCADE, caso em que você perdeu outros dados em consequência da exclusão anterior e também deve localizar e copiar esses dados. Se o seu banco de dados estiver usando MYISAM, você não possui chaves estrangeiras, portanto está seguro.
Você está usando recursos especiais não suportados na versão anterior, por exemplo. Índices FULLTEXT. Como você disse que é um banco de dados de teste, suponho que o modelo seja idêntico. Nesse caso não deverá haver problema.
Você está usando diferentescodificação/agrupamentonos dois bancos de dados e você possui campos de texto não ASCII (localizados) na tabela. Novamente, se o modelo for o mesmo, não deverá haver problema. (Se sua tabela não tiver definição de codificação explícita e a codificação padrão nos servidores mysqldiferevocê pode ter problemas, mas não é provável).
Se você estiver usando o INNODB, você pode querer executar todo o dump em uma TRANSACTION (entre BEGIN; e COMMIT;)