Esse artigo faz parte da revista Java Magazine edição 40. Clique aqui para ler todos os artigos desta edição

AN style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: red; FONT-FAMILY: Verdana; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML.

Java Livre

MySQL para Desenvolvedores Java

Primeiros passos com o MySQL 5.0

 

Aprenda a instalar e configurar o mais popular dos bancos de dados livres

 

Fernando Lozano

 

O MySQL é, indiscutivelmente, o mais popular dos bancos de dados livres. Entretanto, em alguns círculos ele ainda tem certa fama de “bancos de brinquedo” – que não é de forma alguma justificada, dados os recursos acrescentados nas últimas versões, como o suporte a stored procedures. Também não são novidade no MySQL recursos avançados como dados especiais (usados em sistemas de informações geográficas) e indexação e pesquisas textuais (full-text search). E o suporte a transações está presente desde a versão 3.2.23, disponível há mais de cinco anos. Para saber sobre os principais recursos disponíveis no MySQL, e em que versão eles foram acrescentados, veja o quadro “Versões do MySQL”.

Na verdade, há registro de aplicações de missão crítica que não conseguiram performance ou confiabilidade adequadas com bancos de dados “mais poderosos”, por exemplo aplicações da NASA (veja os links no final do artigo), mas que foram perfeitamente atendidas – e com facilidade – pelo MySQL. Não faremos aqui uma comparação entre o MySQL e outros bancos de dados, mas o leitor pode estar seguro de que será difícil justificar tecnicamente a preferência por outro banco para muitas aplicações.

Mais ainda, se você acha que o principal motivo para se preferir o MySQL em relação a outros bancos é o custo (zero), pense novamente. Os desenvolvedores do MySQL afirmam que o downtime (tempo em que o servidor fica parado) desse banco livre é 60% inferior ao de bancos proprietários1. Esta alegação é sustentada pela quantidade de grandes sites web que usam o MySQL como seu principal banco de dados, por exemplo o Yahoo.

Diferentemente de muitos projetos de software livre, o MySQL já nasceu dentro de uma empresa – a TCX Datakonsult AB2 da Suíça. Inicialmente o MySQL era apenas parte das bibliotecas que a TCX usava em sistemas desenvolvidos sob encomenda, mas o sucesso foi tão grande que a empresa mudou de nome para MySQL AB e passou a se dedicar a serviços de consultoria em torno do banco de dados. Apesar disso, o MySQL foi criado e evoluiu dentro da comunidade de software livre, com vários desenvolvedores importantes fora da Datakonsult / MySQL AB.

Este artigo apresenta os primeiros passos para o desenvolvedor Java interessado em usar o MySQL, demonstrando como acessar o MySQL em aplicações Java e os procedimentos essenciais de administração do banco. Embora o nosso foco seja na versão 5.0, a maioria do que será visto neste artigo vale para versões anteriores. Quando houver diferenças importantes isso será indicado ao longo do texto.

 

Como saber se posso usar o MySQL

A questão legal (relativa a licenças de uso) do MySQL é motivo de vários mal-entendidos. O MySQL é distribuído sob a licença dual, que pode ser a GNU GPL (a mesma usada pelo Kernel do Linux) ou uma licença proprietária tradicional, com custo por servidor (mas sem restrições sobre a quantidade de processadores, usuários ou o volume de dados armazenado). O MySQL chama a sua licença proprietária de “licença comercial”, embora este não seja um uso estritamente correto do termo3. Já a versão do MySQL distribuída sob o GPL é chamada de “Community Edition”.

Basicamente, se for usada a licença GPL, a aplicação que utiliza o MySQL também deve ser distribuída sob a GPL ou outra licença de software livre, como a Apache Software License (ASL). O caso da Apache License merece destaque aqui, porque normalmente código sob a GPL não pode ser misturado em uma mesma aplicação com código sob a ASL. Mas a MySQL AB inclui explicitamente uma exceção que garante a possibilidade de se usar o código do MySQL junto com código sob qualquer licença livre, onde “licença livre” é definido como sendo uma licença aprovada pela Open Source Initiative (OSI – opensource.org).

 

O uso do MySQL por aplicações criadas estritamente para uso in-house (mesmo que o desenvolvimento seja terceirizado) está OK sob a licença livre do MySQL.

 

Caso a aplicação que utiliza o MySQL seja distribuída sob uma licença proprietária, será necessário adquirir uma licença comercial do MySQL. Na maioria dos casos, seus clientes (isto é, empresas que adquiriram licenças de uso para o seu aplicativo) também terão que adquirir licenças para cada servidor que utilizarem junto com a aplicação. Por outro lado, o mesmo servidor (e a mesma licença comercial) pode ser usada com várias aplicações diferentes.

Em alguns casos, será suficiente que o desenvolvedor da aplicação proprietária adquira licenças apenas para os conectores do MySQL. Um conector, neste caso, é o componente que permite a uma linguagem de programação acessar o banco de dados, por exemplo o driver JDBC para Java. Esta possibilidade existe quando a aplicação pode ser configurada em tempo de execução para usar outro banco de dados que não o MySQL, sem perda de funcionalidade.

 

Caso uma aplicação comercial possa usar bancos de dados diferentes do MySQL, por exemplo o PostgreSQL ou Oracle, sem perda de funcionalidade, o desenvolvedor da aplicação necessita ter apenas a licença comercial para o conector, e pode redistribuir este conector para seus usuários sem incidência de royalties.

 

A versão “Communit Edition” do MySQL e a sua versão comercial contêm exatamente o mesmo código e os mesmos recursos. Não há diferença, para o desenvolvedor ou para o administrador, entre as duas edições do MySQL. A escolha entre uma ou outra depende apenas da licença GPL ser ou não adequada para o desenvolvedor e para os usuários.

 

Instalação do MySQL

Se esta é a sua primeira experiência com bancos de dados livres (exceto bancos escritos inteiramente em Java, como o Apache Derby ou o HSQLDB) prepare-se para uma mudança de filosofia importante em relação a bancos de dados proprietários. A mudança decorre do fato que o MySQL, como a maioria dos projetos de software livre, se especializa em fornecer apenas um software de alto padrão de qualidade – em vez de fornecer um “bundle” ou “suíte”, que tenta ser uma solução completa para uma vasta gama de necessidades.

O download do MySQL fornece apenas o servidor de banco de dados, e nada mais além do indispensável para configurar e executar o servidor. Ferramentas gráficas de administração, utilitários para migração e conversão de outros bancos de dados, drivers para linguagens de programação e outros “brindes” normalmente encontrados na instalação de bancos de dados proprietários são dowloads separados no site mysql.com. Existe até mesmo um download específico para a integração do MySQL com servidores de aplicações Java EE – veja detalhes no quadro “MySQL e Java EE”.

Muitas vezes, o componente que falta para sua empresa é fornecido por um projeto de software livre externo à MySQL AB e ao site mysql.com, por exemplo o popular phpMysqulAdmin (phpmyadmin.net), uma interface web para administração do banco de dados.

Usuários Linux provavelmente já terão uma versão recente do MySQL embutida em sua distribuição. Neste caso, recomenda-se que sejam utilizados os pacotes fornecidos com a própria distribuição. Mas usuários de outras plataformas como Windows, Solaris e Mac OS provavelmente terão que baixar o servidor, além de ferramentas de administração e conectores, a partir do site do projeto. Veja mais detalhes sobre os procedimentos de instalação específicos a cada plataforma nos quadros “Instalação do MySQL em Windows” e “Instalação do MySQL em Linux”.

Aqui serão fornecidas instruções genéricas para a instalação, configuração inicialização do MySQL independente da plataforma adotada. O local (path) onde o MySQL foi instalado será chamado daqui em diante de MYSQL_HOME.

Em algumas plataformas, a instalação poderá iniciar o servidor; em outras, o servidor terá que ser iniciado manualmente. Uma vez instalado o servidor MySQL, verifique se o executável mysqld está ativo em seu sistema operacional, usando por exemplo o Gerenciador de Tarefas (Ctrl-Alt-Del) no Windows ou o comando os no Linux. Este processo poderá ser chamado mysqld-max ou mysqd-nt, dependendo das opções de instalação, mas para este artigo não importa qual a versão usada. Por enquanto, basta saber que a versão “-nt” utiliza recursos do Windows NT/2000/XP não disponíveis no Windows 98, como serviços e named pipes; e que a versão “-max” oferece todos os recursos do servidor, mesmo aqueles não usados na maioria das configurações, como o suporte a clustering.

Para verificar se o servidor MySQL está aceitando conexões, entre a pasta MYSQL_HOME/bin e execute o comando mysqladmin version. Este comando irá fazer uma conexão ao servidor e retornar o seu número de versão e outras informações de status, como apresentado na Listagem 1.

Ou então experimente o comando mysquladmin ping, que deve retornar uma mensagem bem mais sucinta:

 

mysqld is alive

 

O programa ou os pacotes de instalação do MySQL poderão ou não acrescentar a pasta MYSQL_HOME/bin ao path de comandos do seu sistema operacional. Caso isso não tenha sido feito, recomenda-se que o leitor o faça manualmente, pois os comandos de administração do MySQL (no diretório bin) serão usados freqüentemente ao longo deste artigo.

 

Listagem 1. Resultado da execução do comando mysqladmin version                            

 

mysqladmin Ver 8.41 Distrib 5.0.18, for redhat-linux-gnu on i386

Copyright (C) 2000 MySOL AB & MySQL Finland AB & TCX DataKonsult AB

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL license

 

Server version    5. 0.18

Protocol version  10

Connection         Localhost via UNIX socket

UNIX socket       /var/lib/mysql/mysql.sock

Uptime:             36 sec

 

Threads: 1 Questions: 3  Slow queries: 0 Opens: 0 Flush tables: 1 Open tables: 6 Queries per second avg: 0.083

 

Ferramentas administrativas

O download do MySQL fornece apenas ferramentas de linha de comando para administração. Elas permitem criar e remover bancos de dados, fazer backups, e executar comandos SQL. Veja as principais ferramentas e suas funções:

mysqladmin: criação e remoção de bancos de dados e monitoração do servidor;

mysqlshow: visualização dos bancos de dados existentes e sua estrutura de tabelas;

mysql: execução interativa de comandos SQL;

mysqldump: exportação e backup do banco de dados (a restauração é feita pelo comando mysql);

mysqlimport: carga de dados em grande volume;

mysqlchk e mysqlcheck: verificação de integridade dos arquivos físicos do banco de dados.

 

Antes da versão 4.1 do MySQL, a maior parte das tarefas de administração do banco exigiam o uso de APIs específicas. Daí a existência dos utilitários mysqladmin e mysqlshow. Mas a versão 4.1 em diante, todas estas tarefas passaram a serem suportadas também por comandos SQL, de modo que basta usar o utilitário mysql, ou qualquer outro utilitário de execução interativa de comandos SQL, como os inclusos em diversos IDEs Java.

Todos os utilitários de linha de comando do MySQL suportam um conjunto de opções padrão, que servem para definir o servidor a ser contactado e o login:

-h – nome ou endereço IP do servidor MySQL remoto

-u – usuário para login no banco

-p – solicita a digitação da senha de login

 

O uso destes comandos e opções será apresentado em mais detalhes nas próximas seções.

A maioria das operações pode também ser realizada pelas ferramentas gráficas fornecidas como downloads opcionais em mysql.com (veja o quadro “MySQL GUI Tools”)  ou por uma grande quantidade de ferramentas de terceiros, como o já citado phpMyAdmin. Mas este artigo foca nos utilitários de linha de comando fornecidos no download básico do servidor, de modo que os roteiros apresentados para administração do banco sejam universais, independentes da plataforma utilizada.

O uso das ferramentas de linha de comando também tem a vantagem de permitir a criação de scripts (Shell scripts do Linux ou arquivos .bat do Windows). Estes scripts possibilitam a automatização de tarefas, especialmente o backup e a instalação de aplicações, ou que será apreciado pelos adeptos da Integração Contínua.

 

Criando e populando bancos de dados

Para criar um banco de dados, use o comando mysqladmin create<nome do banco>, por exemplo:

 

mysqladmin –u root create banco

 

Observe o uso da opção –u root para especificar o usuário administrador do MySQL. Apesar do nome, este “root” não tem nada a ver com o usuário de mesmo nome no Unix. Caso durante a instalação do MySQL tenha sido configurada uma senha de administração do banco, utilize a opção –p para forçar o prompt pedindo a senha para conexão:

 

mysqladmin –u root –p create banco

Enter password:

 

Se o administrador estiver sem senha, pressione apenas Enter quando for pedida a senha. Versões anteriores do MySQL costumavam criar o “root” do banco sem senha, mas os instaladores mais recentes obrigam a definição de uma senha para a administração do servidor de banco de dados, tornando obrigatório acrescentar as opções –u e –p.

Para confirmar que o banco realmente existe, ou ver quais bancos foram definidos nos servidor MySQL local, experimente:

 

mysqlshow –u root –p

 

O resultado será:

 

Observe que, se o comando for executado sem a opção –u, o nosso banco de dados “banco” não será listado, porque no momento nenhum usuário recebeu ainda permissão de acessar este banco recém-criado.

A maioria dos instaladores do MySQL define um usuário anônimo, sem senha, que pode ser usado para criar tabelas e executar comandos no banco de dados “test” (sem o “e”). Algumas aplicações disponíveis na internet inclusive esperam que este usuário anônimo e o banco “test” estejam disponíveis, o que é indesejável em termos de segurança do servidor.

Os bancos de dados “information_schema”, “mysql” e “test” são criados na instalação do MySQL. O primeiro fornece tabelas de catálogo no padão ANSI SQL. O segundo é usado internamente pelo próprio servidor MySQL para armazenar informações como usuários e suas permissões, e não pode ser removido. O terceiro é um banco de dados de exemplo, para que o iniciante possa testar o MySQL sem necessidade de configuração prévia.

Caso deseje remover um banco de dados, use o comando mysqladmin delete, por exemplo:

 

mysqladmin –u delete test

 

Observe que este commando remove o banco de dados “test”, que é parte da instalação padrão, em vez do banco “banco” recém-criado. O motivo disto é deixar o servidor mais seguro. Em ambiente de produção, não é desejável manter logins default nem bancos de dados e aplicações de exemplo, pois estes podem ser explorados por hackers para obter acesso ao servidor.

 

Desde a versão 4.1 do MySQL é possível usar os comandos SQL create database e drop database, via o utilitário mysql, como alternativo ao utilitário mysqladmin. E a exibição dos bancos de dados existentes pode ser feita pelo comando SQL show databases.

 

Para criar tabelas e inserir dados nelas, basta conectar ao banco de dados usando o comando mysql, e então digitar comandos SQL como create e insert. É mais prático salvar previamente os comandos SQL em um arquivo texto e depois executá-los como um script. Por exemplo, se o script estiver salvo no arquivo inicializa.sql no diretório corrente, o comando seria:

 

mysql –u root –p banco<inicializa.sql

 

Os comandos SQL para inicializar o banco de exemplo deste artigo (chamado de “banco”) são apresentados na Listagem 2.

O comando mysqlshow pode ser usado para visualizar as tabelas existentes em um banco de dados. Por exemplo:

 

mysqlshow –u root –p banco

Enter password:

Database: banco

 

Se o comando mysqlshow receber como argumentos ambos o nome de um banco e o nome de uma tabela, ele lista em detalhes a definição da tabela, incluindo todas as suas colunas e índices. Veja um exemplo na Listagem 2.5.

 

...

Quer ler esse conteúdo completo? Tenha acesso completo