Estou migrando para um novo servidor e tentando mover meu banco de dados de um servidor 5.1 para 5.5.
Eu criei um dump com
mysqldump -u root -p --add-drop-database --triggers dbname > dbname.sql
Quando tento restaurá-lo no novo servidor, recebo um erro:
mysql -u root -p dbname < dbname.sql
ERROR 1439 (42000) at line nnnn: Display width out of range for column 'ID' (max = 255)
O col. é definido como ID bigint(1536)
.
Editar: a tabela que está tentando restaurar é, na verdade, uma exibição.
É provável que seja um bug na versão do MySQL 5.1 que você está executando, fazendo com que o servidor forneça metadados incorretos
mysqldump
quando ele usaDESCRIBE
para aprender sobre a composição de visualizações.http://bugs.mysql.com/bug.php?id=65379
Plano de fundo: sempre que você cria uma visão que faz referência a uma tabela, essa tabela já deve existir antes que você possa criar uma visão que a faça referência. Por esse motivo, o mysqldump cria todas as tabelas e, em seguida, todas as visualizações. Isso resolve o problema "exibições dependem de tabelas"... mas quando as exibições fazem referência a outras exibições, a exibição referenciada também deve existir antes que uma exibição que faça referência a ela possa ser criada. Para contornar essas dependências semicirculares sem ter que realmente resolvê-las, o mysqldump gera uma tabela fictícia de espaço reservado para cada exibição, com as mesmas colunas que a exibição tem, primeiro ... e depois descarta cada tabela fictícia e a substitui pela atual Visão.
O bug faz com que o mysqldump gere
CREATE TABLE
instruções inválidas para essas tabelas fictícias de espaço reservado.Você pode editar o dumpfile existente manualmente corrigindo a definição da tabela fictícia, ou atualizar o servidor antigo e executar novamente o dump, ou -- possivelmente -- usar a versão do mysqldump que vem com a versão GA mais recente do MySQL, que (estou trabalhando da memória, aqui) também pode conter uma solução alternativa que evita a tentativa de gerar declarações incorretas quando o servidor retorna metadados sem sentido. A versão do mysqldump para 5.6 é compatível com servidores 5.1, exceto bugs ou regressões.
Se você não tiver nenhuma visualização dependendo dessas visualizações, poderá simplesmente remover as definições da tabela fictícia dos arquivos de despejo, que devem ser carregados sem problemas.
Aqui está um exemplo de um dumpfile, com algum ruído removido.
Com as demais tabelas, é criada a tabela fictícia, após descartar qualquer tabela ou view que já exista no destino:
Então, muito mais abaixo no arquivo de despejo, a tabela de espaço reservado é descartada e a visualização real é criada: