Converter MySQL DB de MyISAM para InnoDB

4

Então eu acho que estou tendo problemas com um componente do Joomla porque eu não tenho minha configuração do banco de dados para usar o mecanismo InnoDB. Eu acho que isso porque eu não mudei nada na execução do MySQL e acredito que o MyISAM seja o defualt. Existe uma maneira de verificar isso antes de tudo?

Em segundo lugar, se o que eu acredito ser verdade, alguém conhece algum bom recurso / guias para converter um DB de um motor para outro? Eu encontrei alguns, mas apresso-me a salientar que eu sou um iniciante massivo de SQL e isso está provando ser um pouco de um batismo de fogo. Os guias que eu olhei até agora são todos um pouco variados em sua abordagem e muitos dos comandos são todos bombeados juntos, tornando um tanto difícil descobrir o que está acontecendo. O grande benefício é que este servidor é virtual e eu já tirei um monte de snapshots para que os erros não sejam grandes.

Estou usando uma pilha de lâmpada com o Ubuntu 9.10 x64, o Apache 2.2.12, o MySQL 5.1.37 e o PHP versão 5.2.10-2

    
por Tim Alexander 16.07.2010 / 11:13

2 respostas

2

believe MyISAM to be the defualt. Is there a way to check this first of all?

Sim, é só olhar em my.ini (ou my.cnf) e procurar por myisam ou innodb ou engine. Se nada for especificado, verifique no site mysql o padrão para sua versão do mysql. Você pode descobrir como as tabelas foram criadas com o comando SHOW TABLE STATUS e procurar o mecanismo na saída.

does anyone know any good resources/guides for converting a DB from one engine to another?

A maneira mais simples que eu conheço é apenas o banco de dados atual do mysqldump, então abra o arquivo despejado e substitua todo o myisam pelo innodb. Em seguida, elimine o banco de dados antigo, crie um novo e importe do despejo modificado.

PS: os mecanismos estão no nível de tabela não no nível do banco de dados!

    
por 16.07.2010 / 11:37
5

Em resposta à primeira parte da sua pergunta. A maneira mais rápida de determinar qual mecanismo de armazenamento é padrão é emitir o seguinte;

$mysql -h localhost -u user -p -e "SHOW ENGINES"

Isso resultará em uma lista de mecanismos suportados com os quais o servidor de banco de dados ao qual você está conectado está ativado. O padrão terá "Support DEFAULT" indicando qual engine está configurado como o padrão de serviços.

Em relação à segunda parte da sua pergunta. Existem várias maneiras de fazer isso. A primeira maneira é usar o SQL, então você pode editar;

ALTER TABLE mytable ENGINE = InnoDB;

Isso pode ter várias desvantagens. Levará algum tempo se a sua mesa for grande também. Consulte o link para obter mais informações sobre ele. Mas se for um método rápido e sujo, tudo ficará bem.

A outra opção é usar o mysqldump para despejar todo o seu banco de dados MyISAM. Você pode então alterar o despejo SQL resultante usando uma substituição de localização;

sed -i 's/MyISAM/INNODB/g' file.sql

No entanto, como Patkos sugeriu, gostaria de copiar apenas a sintaxe de criação e criar um novo banco de dados, mas definir seu mecanismo padrão para que esse esquema seja Innodb e reimportar os dados

    
por 16.07.2010 / 15:28

Tags