Caminho de Navegação Mysql / Artigos / Tutorial sobre o novo MySQL 4

Mysql

 

Nenhuma avalição
Indique ao Ueba Indique ao BlogBlogs Indique ao Delicious Indique ao Technorati Indique ao Google Bookmarks Indique ao Newsgator
TAGS

Nenhuma tag foi definida ainda!

Defina as tags para esta página preenchendo o campo abaixo.

  • Máximo de 100 tags
  • Cada tag deve ter até 20 caracteres.
  • Separar as tags com virgula. Ex.: php, sql, html, xml, fireworks
COMENTAR

INDICAR
Nome do amigo: E-mail do amigo: Comentário:
REPORTAR ERRO Descreva o erro:

Tutorial sobre o novo MySQL 4Postada em: 17/08/2004

Otavio James Bernardes Junior
Por: Otavio James Bernardes Junior Nº de Visualizações: 3314.



Eis a notícia: Sai como estável a versão 4.0 do banco de dados MySQL , agora adotando o handler InnoDB (http://www.innodb.com) como padrão na distribuição, possibilitando assim que o mesmo possa ter Integridade referencial (Incluindo CASCADE DELETE/UPDATE) e transação já de fábrica ;). Disponível tambem para download a versão 4.1 do MySQL (oficialmente anunciada como beta) que traz 'derived tables', 'sub-querys' e suporte até 64GB de RAM na arquitetura I386.



MySQL - Como utilizar todo o poder da versão 4.x

O MySQL é um banco de dados conhecido e utilizado pelo mundo todo, agora em sua versão 4.x vem agregar alguns recursos que não eram disponíveis em sua versão estável (3.23) e que são de extrema importância, como transações , cache de querys mais utilizadas , integridade referencial e muito mais. Neste tutorial eu pretendo explicar como funciona e como habilitar transações e integridade referencial.


O MySQL trabalha de uma maneira diferente de outros bancos de dados , ele possue "Tipo de tabela" ou "Table handler" que é onde se esconde os segredos , para utilizar o total poder do MySQL 4.x voce deverá utilizar o "Tipo de tabela" InnoDB.

O InnoDB oferece suporte a transação e a integridade referencial (com CASCADE REFERS) bem como suporte a "crash recovery" no caso de uma queda de luz ou falha fisica, a maneira de gravação e manipulação dos dados é semelhante ao Oracle , ele trabalha com um tablespace ou seja , um tamanho pre-defenido (que pode ser alterado a qualquer momento) de espaco em disco onde vão ser armazenados os dados e indices de suas tabelas, também possue um sistema transacional baseado em logs onde se por qualquer motivo o banco de dados for "interrompido" o mesmo recupera o ultimo estado íntegro do banco.

O tablespace pode ser definido por um arquivo, ou uma partição diretamente , caso voce queira maior performance a partição é a melhor escolha pois o MySQL não vai depender do sistema de arquivos para agilizar a procura e gravação. A versão 4.x traz consigo suporte a UNION e também a MULTI-TABLE DELETE. Talvez uma das maiores implementações da versão 4.x seja o "Query Cache" que armazena o resultado de querys repetitivas, para portais no estilo do PHPNuke e PostNUKE isso é muito comum tendo em vista que quase nada se altera, e a informação é sempre a mesma, o "Query Cache" pode ser utilizado automaticamente ou somente naquelas querys que o programador decidir.

Outra facilidade da versão 4.x é o "Embedded MySQL Server Library" , que nada mais é do que o MySQL linkado diretamente com a sua aplicação , ou seja... nao precisa instalar o banco de dados , ele vai dentro da sua aplicação. Ainda em fase beta , o "Embedded MySQL Server Library"* se demonstra estáel e funcional.

A transação proporcionada pelo subsistema InnoDB do MySQL 4.x é funcional desde casos pequenos a grandes transações onde muitos registros são alterados, com o suporte a integridade referencial bem maduro a dupla MySQL+InnoDB tem conquistado muitos fans adeptos de tal funcionalidade. O funcionamento é bastante simples, toda vez que o mysql inicia ele tambem inicia o InnoDB , o mesmo entra no ar fazendo uma verificação de integridade do banco de dados. Abaixo vemos uma situação que o "servidor foi desligado da tomada" e o InnoDB ao retornar fez as alterações necessárias para que o banco voltasse a posição que ele estava antes de sair repentinamente:



021111 11:53:08 InnoDB: Database was not shut down normally.

InnoDB: Starting recovery from log files...

InnoDB: Starting log scan based on checkpoint at

InnoDB: log sequence number 8 613915027

InnoDB: Doing recovery: scanned up to log sequence number 8 613945266

021111 11:53:08 InnoDB: Starting an apply batch of log records to the database...

InnoDB: Progress in percents: 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

InnoDB: Apply batch completed

021111 11:53:09 InnoDB: Flushing modified pages from the buffer pool...

021111 11:53:09 InnoDB: Started

/usr/local/mysql/libexec/mysqld: ready for connections



Como visto acima , o InnoDB detectou que algo teria acontecido de errado , verificou seus logs , constatou que o banco de dados estava em situação "irregular" , voltou as transações em aberto e iniciou normalmente. Esta funcionalidade de "crash recovery" faltava no mysql para consolidar ele como um banco de dados confiavel para operações de risco como por ex: transações financeiras , sistemas de controle de caixa, etc...

As aplicações que hoje funcionam com MyISAM ( Tipo de tabela oficial do MySQL ) podem ser convertidos para utilizar InnoDB com um simples "ALTER TABLE nome_da_tabela Type = InnoDB;" , mas para isso voce precisa habilitar o InnoDB no seu MySQL , siga os passos a seguir:


Vamos pelo inicio de tudo , baixe a versão 4.x no site http://www.mysql.com/downloads/mysql-pro-4.0.html , no site de download voce tera uma infinidade de plataformas , desde Linux até Windows , baixe e instale. Após a instalação edite o seu arquivo my.cfg e descomente as seguintes linhas:


innodb_data_file_path = ibdata1:300M


Este parâmetro serve para definir o tamanho do tablespace que o seu banco de dados vai utilizar , no caso trabalharemos com arquivos pelo fato de ser mais facil de explicar. O arquivo deve conter a seguinte sintaxe: nomedoarquivo:TAMANHO , no caso estamos criando um arquivo chamado ibdata1 que vai armazenar em si 300M para tabelaspace, no caso de precisar ampliar o tamanho do seu tablespace voce deve separar os arquivos por ; ex: ibdata1:300M;ibdata2:2G .


innodb_data_home_dir = c:\mysql\data


Este parâmetro serve para definir aonde vão ficar armazenados os arquivos que vão formar o tablespace , neste caso vamos armazenar dentro do diretório data do mysql



innodb_log_group_home_dir = c:\mysql\data\

innodb_log_arch_dir = c:\mysql\data\

Este parâmetro serve para definir aonde vão ficar armazenados os arquivos de logs que serão gerados para o sistema de transação.



set-variable = innodb_mirrored_log_groups=1

set-variable = innodb_log_files_in_group=3

Estes dois parâmetros definem se os logs do InnoDB vão ser duplicados e quantos arquivos de logs ele vai gerar respectivamente. Normalmente são valores padrão e não devem ser alterados



set-variable = innodb_log_file_size=30M

Este parâmetro define o tamanho do arquivo de LOG, este arquivo vai ser utilizado para realizar as transações do banco de dados , normalmente o tamanho dele é de 30M , se voce tiver transações mais robustas , aumente este valor.



set-variable = innodb_log_buffer_size=8M

Este parâmetro indica a quantidade de BUFFER DE MEMORIA que o InnoDB vai utilizar para gravar suas transações antes de recorrer aos arquivos fisicos, este valor varia de 1M até 8M , normalmente eu sugiro deixar em 8M , pois quanto menor for a dependencia do disco maior vai ser a velocidade.



innodb_flush_log_at_trx_commit=2

innodb_log_archive=0

Este dois parâmetros definem a maneira de gravação da transação no banco de dados.Normalmente são valores padrão e não devem ser alterados.



set-variable = innodb_buffer_pool_size=80M

Este parâmetro é um dos mais importantes , ele diz ao InnoDB o quanto ele pode utilizar de memoria para guardar indices , referencias e fazer cache de tabelas , quanto maior este valor melhor. Mas atenção, este valor nunca deve ultrapassar 80% da memoria fisica do computador , isso ocasiona lentidão extrema.



set-variable = innodb_additional_mem_pool_size=2M

Este parâmetro define o quanto o InnoDB vai poder utilizar de memoria para a estrutura interna do sistema , normalmente um valor bom é 2M , se caso o InnoDB detectar que precisa de mais memoria ele vai avisar pelo do log MySQL e alocara automaticamente.



set-variable = innodb_file_io_threads=4

Este parâmetro define quantas threads o InnoDB vai utilizar para ler/gravar simultaneamente, normalmente um valor muito bom é 4 , se vc estiver utilizando o MySQL para Windows incremente este valor para 9.



set-variable = innodb_lock_wait_timeout=50

Este parâmetro define o quanto o InnoDB vai esperar antes de voltar uma transação automaticamente, ex: Se vc iniciar uma transacao , alterar uma tabela e deixar parado e outra conexao tenta alterar o mesmo dado , o innodb espera 50 segundos a primeira transação se concretizar , se isso não ocorrer o mesmo volta a transação corrente para o primeiro estado. O valor de 50 segundos normalmente é suficiente.





Pronto , apos setar estes valores é só iniciar o mysql , o log vai conter linhas parecidas com estas:



InnoDB: The first specified data file c:\mysql\data\ibdata1 did not exist:

InnoDB: a new database to be created!

021113 9:16:18 InnoDB: Setting file c:\mysql\data\ibdata1 size to 300 MB

InnoDB: Database physically writes the file full: wait...

021113 9:16:38 InnoDB: Log file c:\mysql\data\ib_logfile0 did not exist: new to be created

InnoDB: Setting log file c:\mysql\data\ib_logfile0 size to 30 MB

InnoDB: Database physically writes the file full: wait...

021113 9:16:41 InnoDB: Log file c:\mysql\data\ib_logfile1 did not exist: new to be created

InnoDB: Setting log file c:\mysql\data\ib_logfile1 size to 30 MB

InnoDB: Database physically writes the file full: wait...

021113 9:16:43 InnoDB: Log file c:\mysql\data\ib_logfile2 did not exist: new to be created

InnoDB: Setting log file c:\mysql\data\ib_logfile2 size to 30 MB

InnoDB: Database physically writes the file full: wait...

InnoDB: Doublewrite buffer not found: creating new

InnoDB: Doublewrite buffer created

InnoDB: Creating foreign key constraint system tables

InnoDB: Foreign key constraint system tables created

021113 9:16:46 InnoDB: Started

mysqld: ready for connections



Pronto , você está com o innodb instalado e funcionando, agora já pode criar suas tabelas e usufruir de transações , integridade referencial e mais uma porção de coisas que esse "Table Handler" pode oferecer. Contudo lembre-se de especificar o tipo da tabela na hora da criação , ex: CREATE TABLE TESTE ( cod Integer(4) ) Type = InnoDB . Qualquer referência a mais pode ser obtida na pagina do MySQL ( http://www.mysql.com ) , na página do InnoDB ( http://www.innodb.com ) ou atravéz do meu email dyego@escriba.com.br. Agradeço pelo espaço cedido e espero ter exclarecido um grande mito no mundo do MySQL , a tal da "transação".