© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 1
Introdução aoIntrodução aoBanco de DadosBanco de Dados
MySQLMySQL
Fernando LozanoFernando [email protected]
Consultor IndependenteProf. Faculdades UniABEU
Prof. Universidade Estácio de Sá
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 2
Sobre o AutorSobre o Autor
● Red Hat Certified EngineerLPI Certified Professional Level ISair GNU/Linux Certified Professional
● IBM Certified Network EngineerIBM Certified DB2 Administrator & Developer
● Microsoft Certified Systems EngineerMicrosoft Certified Solutions Developer
● Conselheiro do LPI Brasil
● Webmaster da Free Software Foundation
● Autor do Livro "Java em GNU/Linux"ed. Alta Books, 2002,
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 3
Objetivos e Pré-requisitosObjetivos e Pré-requisitos
● Demonstrar o básico necessário para utilizar o MySQL no desenvolvimento de um aplicativo
● Espera-se do aluno:● Conhecimento de alguma linguagem de programação● Conhecimentos de SQL● Conceitos de bancos de dados cliente/servidor
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 4
AgendaAgenda
● Por que Bancos de Dados Livres
● Por que MySQL
● Histórico e Características do MySQL
● Quando não usar o MySQL
● Instalação do MySQL em Linux
● Administração do MySQL
● Desenvolvendo para o MySQL em Linux
● Instalação do MySQL em Windows
● Desenvolvendo para o MySQL em Windows
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 5
Por que Bancos de Dados Por que Bancos de Dados Livres?Livres?
"Bancos de dados se tornaram parte integrante da infra-estrutura tecnológica de qualquer empresa, por isso devem ser abertos"
SAP AG, http://www.sapdb.org
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 6
Software Livre e a Infra-Software Livre e a Infra-Estrutura de TIEstrutura de TI
● Softwares livres já são dominantes em diversos nichos e participantes importantes na maioria dos serviços de rede, tais como:
● Web servers, portais● Firewall, Proxy caches, VPN● Arquivos e Impressão● E-mail, fax● O IDC estima que em 2004 o Linux será o NOS mais
utilizado nas empresas
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 7
Bancos de Dados LivresBancos de Dados Livres
● Será que os bancos de dados são o próximo nicho a ser ocupado pelos bancos livres?
● São tão confiáveis quanto os bancos proprietários?● São tão rápidos quanto?● Há serviços de suporte e consultoria?● Funcionam com as ferramenas de desenvolvimento
legadas (Visual Basic, Delphi, PowerBuilder) ou apenas com as ferramentas da era Web (Java, PHP, Perl) ?
● Sim, Sim, Sim e Sim!
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 8
Bancos Proprietários e o Bancos Proprietários e o Software LivreSoftware Livre
● Oracle em Linux é 40% mais rápido do que em Windows, segundo a própria Oracle
● DB2 vem com interface DBI para Perl
● Oracle AAS 9i é baseado no Apache e no Jserv
● IBM Websphere é baseado no Apache e no Tomcat
● Sybase, OpenIngres, Informix... todos os bancos importantes tem versões “tier1” para Linux,com uma única exceção (advinhem qual!)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 9
Bancos Livres x ProprietáriosBancos Livres x Proprietários
● Os bancos livres em geral suportam:● Otimização de consultas● Histogramas sobre colunas● Comandos SQL sofisticados● Grants● Campos binários longos● Grandes volume de dados, usuários e transações
(com ajuda de recursos de SMP, RAID e Journaling)● Replicação
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 10
Bancos Livres x ProprietáriosBancos Livres x Proprietários
● Os bancos livres ainda não suportam:● Organização física em Tablespaces● Clustering (não com discos compartilhados para HA e
failover, mas sim com heartbeat e replicação)● Transações distribuídas● Consultas paralelas● Particionamento● Views Materializadas● Bancos Multidimensionais / Aplicações OLAP
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 11
Por que MySQLPor que MySQL
● É o banco de dados livres mais popular
● É um projeto antigo e maduro
● Download relativamente pequeno, viável para quem utiliza modem de 28.8Kbps
● Não tem uma curva de aprendizado muito íngreme
● Amplo suporte de ferramentas livres:PHP, Perl, Python, Glade / Gnome-DB, ...
● Amplo suporte de ferramentas proprietáriasKylix, Java, Delphi, Visual Basic, ColdFusion, ER-Win, ...
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 12
Sobre o MySQLSobre o MySQL
● Surgiu à partir de um formato de arquivos ISAM desenvolvido pela Datakonsult AB
● Implementava o mesmo protocolo de rede e APIs do mSQL (miniSQL), um banco de dados freeware
● A versão Windows era shareware
● Há dois anos foi re-licenciado sob a GNU GPL
● A empresa mudou de nome para MySQL AB
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 13
Características do MySQLCaracterísticas do MySQL
● Foco em facilidade de administração e baixo consumo de recursos do hardware
● Se tornou popular graças à Internet, pois os bancos tradicionais tinham tempos de conexão extremamente elevados, inadequados para aplicações CGI
● Para atingir seus objetivos, não implementava funções de overhead elevado, como integridade referencial, commit, rollback e níveis de isolamento de transação
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 14
Características do MySQLCaracterísticas do MySQL
● Servidor multithreaded:um único processo mysqld atende a todos os clientes
● Tabelas e índices correspondem à arquivos físicos e bancos de dados correspondem à diretórios
● Distribuição de dados em múltiplos discos deve ser feita manualmente, por meio de links simbólicos
● Segurança via SSL (4.x)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 15
O MySQL Hoje e AmanhãO MySQL Hoje e Amanhã
● Hoje (versões 3.23.x e 4.0.x):● Mecanismos de armazenamento (tipos de tabela) com
suporte à transações● Recursos SQL mais sofisticados, como agregados● Ainda não implementa alguns recursos básicos como
views e foreign keys● Full text search (4.x)
● Próximas versões (4.1, 4,2, ... 5.x, ...):● Maior compatibilidade com o padrão ANSI● Views e procedimentos armazenados
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 16
Plataformas Suportadas pelo Plataformas Suportadas pelo MySQLMySQL
● Servidor● Sistemas Unix-Like:
GNU/Linux, FreeBSD, Solaris, AIX, HP-UX, ...● Win32:
Windows 95/98/ME, Windows NT/2000/XP/NET● OS/2 (Em desenvolvimento para BeOS e LynxOS)● MacOS X e Netware
● Cliente:● Drivers ODBC (3.0) e dbExpress para Unix e Windows● Várias ofertas de drivers JDBC 2.0 100% Java
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 17
Quando Usar o MySQLQuando Usar o MySQL
● Back-end para geração de conteúdo de web sites
● Aplicações envolvendo basicamente consultas e inserção de dados
● Sistemas altamente replicados, onde o custo de licenças de banco se torna proibitivo
● Sistemas com ampla variação de demanda, pois o MySQL (ao contrário de outros bancos "light") foi validado para grandes volumes de dados ou de usuários
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 18
Quando Não Usar o MySQLQuando Não Usar o MySQL
● Aplicações com fortes demandas transacionais, especialmente se houverem muitas atualizações concorrentes!
● Aplicações que necessitem de recursos sofisticados do SQL, como agrupamentos e agregados para geração de relatórios
● Aplicações OLAP
● Empresas como o Yahoo Finance combinam o MySQL (aplicações web) com um outro banco de dados (retaguarda financeira)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 19
Instalação do MySQL em Instalação do MySQL em LinuxLinux
● Três formas de instalar o MySQL● À partir dos fontes (não recomendado)● À partir dos binários fornecidos em mysql.com● À partir dos pacotes RPM fornecidos em mysql.com
● Os binários e pacotes RPM estão prontos para execução, sem necessidade de configuração prévia
● Recomenda-se criar um usuário "mysql" para o banco em vez de rodar como root
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 20
Pacotes RPM do MySQLPacotes RPM do MySQL
● MySQLServidor básico, sem transações
● MySQL-clientUtilitários de cliente
● MySQL-develHeaders e bibliotecas estáticas para linguagem C
● MySQL-sharedbibliotecas dinâmicas para aplicações cliente
● MySQL-maxServidor completo, com transações
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 21
Iniciando o MySQLIniciando o MySQL
● Basta invocar o comando mysqld ou então utilizar o script instalado em /etc/rc.d/init.d
● No Red Hat:service mysqld start
● Início automático no boot do sistema:chkconfig on mysqld
● Testando a disponibilidade do servidor:mysqladmin version
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 22
Encerrando o MySQLEncerrando o MySQL
● Três opções● mysqladmin shutdown● /etc/rc.d/init.d/mysqld stop● service mysqld stop (Red Hat)
● Ele será desligado corretamente durante o shutdown do sistema se foi configurado para início no boot com o comando chkconfig
● Não utilize o comando kill para encerrar o MySQL, pois pode acarretar perda de dados!
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 23
Criação e Destruição de BdsCriação e Destruição de Bds
● mysqladmin create nome-do-banco
● mysqladmin drop nome-do-banco
● mysqlshow lista os bancos existentes
● Também é possível copiar (ou remover) o diretório do banco de um servidor para o outro, com o servidor inativo (/var/lib/mysql/nome-do-banco)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 24
Acessando um Banco no Acessando um Banco no MySQLMySQL
● Utilize o utilitário mysql, que é similar ao isql do Sybase ou ao sqlplus do Oracle
● Encerre os comandos SQL com um ponto-e-vírgula ou \g
● Retorne ao prompt do shell com um [Ctrl+D] ou \q
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 25
Exemplo de Uso do MySQLExemplo de Uso do MySQL
● [root@laptop root]# mysql bancoWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9 to server version: 3.23.49
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create table teste ( i integer primary key, s varchar (20) );Query OK, 0 rows affected (0.00 sec)
mysql> insert into teste values (1, 'primeiro');Query OK, 1 row affected (0.00 sec)
mysql> insert into teste values (2, 'segundo');Query OK, 1 row affected (0.00 sec)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 26
Exemplo de Uso do MySQLExemplo de Uso do MySQL
● mysql> select * from teste;+---+----------+| i | s |+---+----------+| 1 | primeiro || 2 | segundo |+---+----------+2 rows in set (0.00 sec)
mysql>\qBye[root@laptop root]#
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 27
Mude a senha do root!Mude a senha do root!
● A instalação padrão do MySQL inclui um usuário "root" sem senha, e um usuário anônimo local (@localhost) também sem senha
● Qualquer usuário local pode especificar o nome de usuário "root" e criar ou remover bancos de dados
● set password for root@localhost =password ('senha');
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 28
Opções do Cliente MySQLOpções do Cliente MySQL
● Os utilitários de linha de comando do MySQL aceitam as seguintes opções
● -u loginnome do usuário
● -ppede a digitação da senha
● -h hostespecifica o servidor MySQL em outro computador(desde que o firewall não bloqueie o acesso)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 29
Segurança no MySQLSegurança no MySQL
● Ao contrário de outros bancos, onde são associados usuários (login) a senhas, no MySQL são associados também a um nome de host ou endereço IP
● Ou seja, o mesmo login do banco pode ter senhas diferentes, de acordo com o host de origem
● Também é possível especificar restrições de acesso por banco, tabela e mesmo coluna
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 30
Criando um Usuário no Criando um Usuário no MySQLMySQL
● [root@laptop root]# mysql -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 12 to server version: 3.23.49
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A
Database changedmysql> grant all on banco.* to teste@localhost identified by 'senha';Query OK, 0 rows affected (0.05 sec)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 31
Utilizando o Usuário Recém-Utilizando o Usuário Recém-CriadoCriado
● [lozano@laptop lozano]$ mysql -u teste -p bancoEnter password: Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 15 to server version: 3.23.49
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from teste;+---+----------+| i | s |+---+----------+| 1 | primeiro || 2 | segundo |+---+----------+2 rows in set (0.00 sec)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 32
Acesso Remoto ao MySQLAcesso Remoto ao MySQL
● Normalmente o MySQL é acessado por aplicações web, sendo que o web server está na mesma máquina. Assim sendo basta criar o usuário @localhost
● Aplicações cliente/servidor tradicionais (ODBC, dbExpress, JDBC, DBI) irão acessar o banco em outra máquina. Pode ser definido um host máscara ou especificar o usuário host a host.
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 33
Criando um Usuário Remoto Criando um Usuário Remoto no MySQLno MySQL
● [root@laptop root]# mysql -pEnter password: ... mensagens suprimidas ...
mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A
Database changedmysql> grant all on banco.* to teste@'%' identified by 'remoto';Query OK, 0 rows affected (0.05 sec)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 34
Utilizando o Usuário RemotoUtilizando o Usuário Remoto
● [lozano@laptop lozano]$ mysql -h servidor -u teste -p bancoEnter password: ... mensagens suprimidas ...
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from teste;+---+----------+| i | s |+---+----------+| 1 | primeiro || 2 | segundo |+---+----------+2 rows in set (0.00 sec)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 35
Scripts SQLScripts SQL
● Em geral inserimos vários comandos DDL (create table, create index) em um script SQL que pode ser executado diretamente pelo mysql redirecionando a entrada padrão:
● mysql -u teste -p banco < cria_agenda.sql
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 36
Backup do MySQLBackup do MySQL
● Pode ser feito de duas formas:● Cópia do diretório do banco de dados, com o servidor
desativado (apenas entre a mesma versão, na mesma plataforma)
● Utilitário mysqldump, que gera um script SQL para recriação do banco ou das tabelas selecionadas
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 37
Desenvolvendo Para o Desenvolvendo Para o MySQL em LinuxMySQL em Linux
● Distribuições binárias do PHP costumam vir pré-configuradas com um cliente MySQL
● Pode-se baixar e compilar o DBI e DBD-MySQL para Perl (ou usar os pacotes da sua distrbuição preferida do Linux)
● Em geral, aplicações em C ou Pascal, além dos drivers Perl e Python, exigem recomplicação para a versão do cliente MySQL instalada
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 38
A API de Cliente do MySQLA API de Cliente do MySQL
● mysql_connectConecta a um servidor
● mysql_selectdbSeleciona um banco de dados no servidor
● mysql_queryExecuta um comando SQL qualquer
● mysql_fetchRetorna uma linha de resultado
● mysql_freeresult / mysql_closeliberam os recursos ocupados pelo cliente
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 39
Outras APIsOutras APIs
● Quando existe uma API independente de banco, recomenda-se o uso desta API com o driver específico, em vez da API de cliente do MySQL
● API do MySQLPHP, C/C++, Pascal
● API independente de bancoJava (JDBC), PHP (Pear), Perl (DBI), Python (PyDB),Kylix (dbExpress)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 40
ExemplosExemplos
● Agenda de Contatos● Versão em PHP (API do MySQL)● Versão em PHP (PEAR)● Versão em Pascal● Versão em Java
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 41
Instalando o MySQL em Instalando o MySQL em WindowsWindows
● Um único arquivo auto-instalador (estilo InstallShield) fornece o servidor, cliente e bibliotecas para desenvolvimento
● É fornecido um utilitário gráfico para início e término do servidor
● Ou então podemos utilizar a linha de comando do mesmo modo que no Linux(mysqld, mysqladmin, mysqlm, mysqldump)
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 42
Desenvolvendo para o Desenvolvendo para o MySQL em WindowsMySQL em Windows
● Linguagens como PHP, Perl, Java, C e Pascal funcionam da mesma forma nos dois ambientes
● Java não necessitam do cliente MySQL instalado; as demais exigem recompilação
● O Delphi fornece um driver dbExpress para o MySQL
● Pode ser baixado e instalado separadamente um driver ODBC para Visual Basic, Excel, etc
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 43
ExemplosExemplos
● Agenda de Contatos● PHP, Java e Pascal
(iguais aos exemplos no Linux)● Access (tabelas vinculadas via ODBC)● Open Office (via ODBC)
● O uso do driver ODBC exige a definição de chaves primárias nas tabelas, caso contrário os Datasets não serão atualizáveis
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 44
ReferênciasReferências
● MySQLwww.mysql.com
● Freshmeatwww.freshmeat.net
● Sourceforgewww.sourceforge.net
● Porque software livre?www.dwheeler.com/oss_fs_why.html
© 2003 Fernando Lozano, http://www.lozano.eti.br Introdução ao Banco de Dados MySQL, Pag. 45
PerguntasPerguntas
● Dúvidas:[email protected]
● Palestra e atualizações:www.lozano.eti.br