My SQL

Page 1

Introdução ao Banco de Dados

MySQL Fernando Lozano www.lozano.eti.br

fernando@lozano.eti.br Consultor Independente Prof. Faculdades UniABEU Prof. Universidade Estácio de Sá

© 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 1


Sobre o Autor ●

Red Hat Certified Engineer LPI Certified Professional Level I Sair GNU/Linux Certified Professional IBM Certified Network Engineer IBM Certified DB2 Administrator & Developer Microsoft Certified Systems Engineer Microsoft 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. 2


Objetivos 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. 3


Agenda ●

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. 4


Por que Bancos de Dados Livres?

"Bancos de dados se tornaram parte integrante da infraestrutura 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. 5


Software Livre e a InfraEstrutura 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. 6


Bancos 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. 7


Bancos Proprietários e o Software 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. 8


Bancos 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. 9


Bancos 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. 10


Por 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árias

Kylix, Java, Delphi, Visual Basic, ColdFusion, ER-Win, ...

© 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 11


Sobre 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. 12


Caracterí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. 13


Caracterí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. 14


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. 15


Plataformas Suportadas pelo MySQL ●

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. 16


Quando 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. 17


Quando 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. 18


Instalação do MySQL em Linux ●

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. 19


Pacotes RPM do MySQL ●

MySQL

Servidor básico, sem transações ●

MySQL-client

Utilitários de cliente ●

MySQL-devel

Headers e bibliotecas estáticas para linguagem C ●

MySQL-shared

bibliotecas dinâmicas para aplicações cliente ●

MySQL-max

Servidor completo, com transações © 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 20


Iniciando 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. 21


Encerrando 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. 22


Criaçã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. 23


Acessando um Banco no MySQL ●

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. 24


Exemplo de Uso do MySQL ●

[root@laptop root]# mysql banco Welcome 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. 25


Exemplo de Uso do MySQL ●

mysql> select * from teste; +---+----------+ | i | s | +---+----------+ | 1 | primeiro | | 2 | segundo | +---+----------+

2 rows in set (0.00 sec) mysql>\q Bye [root@laptop root]#

© 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 26


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. 27


Opções do Cliente MySQL ●

Os utilitários de linha de comando do MySQL aceitam as seguintes opções ●

-u login

nome do usuário ●

-p

pede a digitação da senha ●

-h host

especifica 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. 28


Seguranç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. 29


Criando um Usuário no MySQL ●

[root@laptop root]# mysql -p Enter 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 mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> 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. 30


Utilizando o Usuário RecémCriado ●

[lozano@laptop lozano]$ mysql -u teste -p banco Enter password: Reading table information for completion of table and column names You 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. 31


Acesso 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. 32


Criando um Usuário Remoto no MySQL ●

[root@laptop root]# mysql -p Enter password: ... mensagens suprimidas ... mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> 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. 33


Utilizando o Usuário Remoto ●

[lozano@laptop lozano]$ mysql -h servidor -u teste -p banco Enter 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. 34


Scripts 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. 35


Backup 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. 36


Desenvolvendo Para o MySQL 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. 37


A API de Cliente do MySQL ●

mysql_connect

Conecta a um servidor ●

mysql_selectdb

Seleciona um banco de dados no servidor ●

mysql_query

Executa um comando SQL qualquer ●

mysql_fetch

Retorna uma linha de resultado ●

mysql_freeresult / mysql_close

liberam os recursos ocupados pelo cliente © 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 38


Outras 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 MySQL

PHP, C/C++, Pascal ●

API independente de banco

Java (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. 39


Exemplos ●

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. 40


Instalando o MySQL em Windows ●

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. 41


Desenvolvendo para o MySQL 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. 42


Exemplos ●

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. 43


Referências ●

MySQL www.mysql.com

Freshmeat

www.freshmeat.net ●

Sourceforge www.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. 44


Perguntas ●

Dúvidas: fernando@lozano.eti.br Palestra e atualizações: www.lozano.eti.br

© 2003 Fernando Lozano, http://www.lozano.eti.br

Introdução ao Banco de Dados MySQL, Pag. 45


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.