MySQL - ibdata1

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MySQL - ibdata1

Mensagem por asimoes »

Amigos,

Estou trabalhando com um banco MySQL 5.1.31. a pergunta é a seguinte:

Depois de ter populado o banco com algumas tabelas para teste verifiquei que o arquivo ibdata1 ficou com um determinado tamanho.
Depois apaguei vários registros de uma tabela, percebi que o ibdata1 não diminuiu de tamanho. Como pode ser feito um re-dimensionamento no banco arquivo baseado no tamanho das tabelas existentes?

[]´
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: MySQL - ibdata1

Mensagem por Maligno »

Se for como no Firebird, você terá de fazer um back-up e restaurar em cima do original. Tentou isso?
Mas o apagamento sem a devida compressão do banco é normal. Evita-se perder um tempo precioso.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: MySQL - ibdata1

Mensagem por asimoes »

Olá Maligno,

Vou tentar a sua sugestão.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: MySQL - ibdata1

Mensagem por asimoes »

Olá Maligno,

Não consegui pela sua dica, alguem que me le sabe como faze-lo?

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: MySQL - ibdata1

Mensagem por Maligno »

Agora que olhei o diretório do meu MySQL (só tenho pra teste :). Na instalação é incluído um utilitário de linha de comando chamado "myisampack.exe", que faz justamente o que você precisa. Aliás, faz back-up também. Só não sei dizer se esse back-up comprime as tabelas, como eu havia mencionado antes. Seria lógico esperar que comprimisse. Afinal de contas, não há motivo pra fazer cópia de lixo. Mas está aí um bom teste pra você fazer.

Mas antes de executar, (faça cópia do seu banco, claro, e...) leia o "help" de linha, executando-o sem qualquer argumento. Há algumas observações importantes lá. Inclusive, parece que depois do processo a tabela se torna read-only (vi num site) e as chaves de índices não são atualizadas (o programa diz isso), o que torna necessário executar outro utilitário: "myisamchk.exe" para reconstruir os índices.

Tem outro utilitário na minha instalação, chamado "pack_isam.exe", que parece idêntico ao outro, apesar do tamanho do EXE ser ligeiramente menor. Não sei se faz o mesmo efeito. Tudo indica que sim. Mas aí você pode dar uma lida no help e descobrir. :)

Faça os testes. E depois, por favor, conte-nos o resultado. Assim, o pessoal que usa esse banco ficará atualizado sobre esse assunto. Aliás, pelo que me consta, essa matéria ainda não foi discutida no fórum.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: MySQL - ibdata1

Mensagem por asimoes »

Olá Maligno,

Este exemplo só funciona com tabelas MyISAM no meu caso estou usando InnoDB.

Eu resolvi da maneira bem lusitana.

1-Faço um backup full do esquema pela ferramenta: Mysqladministrator
2-Removo a instancia do MySql:
net stop mysql
mysqld --remove
3-Apago todo o conteúdo da pasta c:\mysql\data
4-Copio um mysql (zerado, original sem dados) para a mesma pasta
5-Restauro a instancia de novo, pra isso eu criei 2 bats: instala.bat e remove.bat
----------------------------
instala.bat:
mysqld install
net start mysql
----------------------------
remove.bat:
net stop mysql
mysqld --remove
----------------------------
6-Executo o mysqladministrator e faço um restore do backup
7-Crio o usuário do sistema e defino os seus previlégios novamente.

Pronto, o arquivo ibdata1 está enxuto.

Aceito sugestões para este procedimento.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: MySQL - ibdata1

Mensagem por Maligno »

Este exemplo só funciona com tabelas MyISAM no meu caso estou usando InnoDB.
Ah, sim. Me desculpe. Esqueci que o MySQL tem esse engine também.
Faço um backup full do esquema pela ferramenta: Mysqladministrator
Então, no final das contas, foi pelo back-up mesmo. :)

Mas tente não faz disso um exercício regular. Além de dar mais trabalho, em certos casos pode ajudar o servidor, uma vez que a inclusão aproveita os "buracos" deixados pelo apagamento.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: MySQL - ibdata1

Mensagem por asimoes »

Olá Maligno,

Exatamente, este procedimento é para quando houver uma expanção muito grande do banco e o tamanho das tabelas + indices forem muito menores do que o alocado. Imagina um banco com 4g e com tabelas e indices somados não chega a 1g. Vale a pena o trabalho até desenvolverem algo automatizado.

Ainda mais que os recursos de máquina são escassos e tem empresa que não gosta de investir em hardware.
O ideal é não fazer isto, contando sempre com espaço disponível no servidor se for o caso.

:)Pos
[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder