MySQL 5.6: Estou experimentando copiar dados de uma tabela para outra de maneiras diferentes. A tabela de origem está em um servidor remoto e possui cerca de 500.000 linhas - eu uso o mecanismo federado para conectar. Eu tentei isso primeiro:
mysql > create table tgt as select * from src;
Isso é muito rápido, leva apenas alguns segundos, mas dá avisos:
...
| Warning | 1299 | Invalid TIMESTAMP value in column 'created_timestamp' at row 265975 |
| Warning | 1299 | Invalid TIMESTAMP value in column 'created_timestamp' at row 265976 |
...
64 rows in set (0.00 sec)
Em vez disso, tentei fazer isso com um procedimento armazenado, abrindo um cursor, buscando linhas e inserindo-as, mas demora uma eternidade; Cancelei depois de 10 min.
Então, existe uma maneira de localizar as linhas que causam o problema? Eu tentei select ... limit #first_row,#last_row;
, mas não parece funcionar, e não tenho certeza se é totalmente confiável de alguma forma.
Para localizar as linhas que você deseja ver, você deve fazer duas coisas:
Por que mudar a maneira como você cria a tabela ???
Quando você fez isso
Você cria a
tgt
tabela sem nenhum índice. Você pode verificar isso executandoe você verá
src
com seus índices etgt
sem eles.Consequentemente, sem índices ao redor, o carregamento da tabela seria o mais rápido. Se você pelo menos tivesse uma chave primária. você pode navegar na tabela por alguma
id
coluna numérica.Então, para criar uma tabela com os índices no lugar, faça assim:
Você poderia então correr
e ver que eles são os mesmos em estrutura.
Por que alterar a maneira como você carrega os dados na tabela ???
Você poderia simplesmente começar a carregar assim
Quando o carregamento estiver concluído, você poderá executar
Você pode ter um vislumbre de quando a linha se parece, mas
created_timestamp
pode não ser preenchida. Se estiver preenchido corretamente, o problema estará essencialmente resolvido.Outra maneira de ver qual linha sem carregar dados
Você pode isolar quais linhas têm um problema com o
created_timestamp
fazendo outra coisaIsso mostrará as linhas que teriam sido inseridas.
Esta é toda a ajuda que posso sugerir, pois não sei quais são as estruturas da tabela.