Escolar Documentos
Profissional Documentos
Cultura Documentos
MySQL
Fernando Lozano
www.lozano.eti.br
fernando@lozano.eti.br
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,
Introduo ao Banco de Dados MySQL, Pag. 2
Objetivos e Pr-requisitos
Demonstrar o bsico necessrio para utilizar o MySQL no desenvolvimento de um aplicativo Espera-se do aluno:
Conhecimento de alguma linguagem de programao Conhecimentos de SQL Conceitos de bancos de dados cliente/servidor
Agenda
Por que Bancos de Dados Livres Por que MySQL Histrico e Caractersticas do MySQL Quando no usar o MySQL Instalao do MySQL em Linux Administrao do MySQL Desenvolvendo para o MySQL em Linux Instalao do MySQL em Windows Desenvolvendo para o MySQL em Windows
Introduo ao Banco de Dados MySQL, Pag. 4
"Bancos de dados se tornaram parte integrante da infraestrutura tecnolgica de qualquer empresa, por isso devem ser abertos" SAP AG, http://www.sapdb.org
Softwares livres j so dominantes em diversos nichos e participantes importantes na maioria dos servios de rede, tais como:
Web servers, portais Firewall, Proxy caches, VPN Arquivos e Impresso E-mail, fax O IDC estima que em 2004 o Linux ser o NOS mais utilizado nas empresas
Ser que os bancos de dados so o prximo nicho a ser ocupado pelos bancos livres?
So to confiveis quanto os bancos proprietrios? So to rpidos quanto? H servios 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!
Oracle em Linux 40% mais rpido do que em Windows, segundo a prpria 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 verses tier1 para Linux, com uma nica exceo (advinhem qual!)
Otimizao de consultas Histogramas sobre colunas Comandos SQL sofisticados Grants Campos binrios longos Grandes volume de dados, usurios e transaes (com ajuda de recursos de SMP, RAID e Journaling) Replicao
Organizao fsica em Tablespaces Clustering (no com discos compartilhados para HA e failover, mas sim com heartbeat e replicao) Transaes distribudas Consultas paralelas Particionamento Views Materializadas Bancos Multidimensionais / Aplicaes OLAP
o banco de dados livres mais popular um projeto antigo e maduro Download relativamente pequeno, vivel para quem utiliza modem de 28.8Kbps No tem uma curva de aprendizado muito ngreme Amplo suporte de ferramentas livres:
PHP, Perl, Python, Glade / Gnome-DB, ...
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 verso Windows era shareware H dois anos foi re-licenciado sob a GNU GPL A empresa mudou de nome para MySQL AB
Caractersticas do MySQL
Foco em facilidade de administrao e baixo consumo de recursos do hardware Se tornou popular graas Internet, pois os bancos tradicionais tinham tempos de conexo extremamente elevados, inadequados para aplicaes CGI Para atingir seus objetivos, no implementava funes de overhead elevado, como integridade referencial, commit, rollback e nveis de isolamento de transao
Caractersticas do MySQL
Servidor multithreaded: um nico processo mysqld atende a todos os clientes Tabelas e ndices correspondem arquivos fsicos e bancos de dados correspondem diretrios Distribuio de dados em mltiplos discos deve ser feita manualmente, por meio de links simblicos Segurana via SSL (4.x)
Mecanismos de armazenamento (tipos de tabela) com suporte transaes Recursos SQL mais sofisticados, como agregados Ainda no implementa alguns recursos bsicos como views e foreign keys Full text search (4.x) Maior compatibilidade com o padro ANSI Views e procedimentos armazenados
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 Drivers ODBC (3.0) e dbExpress para Unix e Windows Vrias ofertas de drivers JDBC 2.0 100% Java
Cliente:
Back-end para gerao de contedo de web sites Aplicaes envolvendo basicamente consultas e insero de dados Sistemas altamente replicados, onde o custo de licenas de banco se torna proibitivo Sistemas com ampla variao de demanda, pois o MySQL (ao contrrio de outros bancos "light") foi validado para grandes volumes de dados ou de usurios
Aplicaes com fortes demandas transacionais, especialmente se houverem muitas atualizaes concorrentes! Aplicaes que necessitem de recursos sofisticados do SQL, como agrupamentos e agregados para gerao de relatrios Aplicaes OLAP Empresas como o Yahoo Finance combinam o MySQL (aplicaes web) com um outro banco de dados (retaguarda financeira)
Introduo ao Banco de Dados MySQL, Pag. 18
partir dos fontes (no recomendado) partir dos binrios fornecidos em mysql.com partir dos pacotes RPM fornecidos em mysql.com
Os binrios e pacotes RPM esto prontos para execuo, sem necessidade de configurao prvia Recomenda-se criar um usurio "mysql" para o banco em vez de rodar como root
MySQL
MySQL-client
Utilitrios de cliente
MySQL-devel
MySQL-shared MySQL-max
Iniciando o MySQL
Basta invocar o comando mysqld ou ento utilizar o script instalado em /etc/rc.d/init.d No Red Hat: service mysqld start Incio automtico no boot do sistema: chkconfig on mysqld Testando a disponibilidade do servidor: mysqladmin version
Encerrando o MySQL
Trs opes
Ele ser desligado corretamente durante o shutdown do sistema se foi configurado para incio no boot com o comando chkconfig No utilize o comando kill para encerrar o MySQL, pois pode acarretar perda de dados!
mysqladmin create nome-do-banco mysqladmin drop nome-do-banco mysqlshow lista os bancos existentes Tambm possvel copiar (ou remover) o diretrio do banco de um servidor para o outro, com o servidor inativo (/var/lib/mysql/nome-do-banco)
Utilize o utilitrio mysql, que similar ao isql do Sybase ou ao sqlplus do Oracle Encerre os comandos SQL com um ponto-e-vrgula ou \g Retorne ao prompt do shell com um [Ctrl+D] ou \q
[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)
A instalao padro do MySQL inclui um usurio "root" sem senha, e um usurio annimo local (@localhost) tambm sem senha Qualquer usurio local pode especificar o nome de usurio "root" e criar ou remover bancos de dados set password for root@localhost = password ('senha');
-u login -p
nome do usurio
-h host
especifica o servidor MySQL em outro computador (desde que o firewall no bloqueie o acesso)
Segurana no MySQL
Ao contrrio de outros bancos, onde so associados usurios (login) a senhas, no MySQL so associados tambm a um nome de host ou endereo IP Ou seja, o mesmo login do banco pode ter senhas diferentes, de acordo com o host de origem Tambm possvel especificar restries de acesso por banco, tabela e mesmo coluna
[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)
[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 | +---+----------+
Normalmente o MySQL acessado por aplicaes web, sendo que o web server est na mesma mquina. Assim sendo basta criar o usurio @localhost Aplicaes cliente/servidor tradicionais (ODBC, dbExpress, JDBC, DBI) iro acessar o banco em outra mquina. Pode ser definido um host mscara ou especificar o usurio host a host.
[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)
[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 | +---+----------+
Scripts SQL
Em geral inserimos vrios comandos DDL (create table, create index) em um script SQL que pode ser executado diretamente pelo mysql redirecionando a entrada padro: mysql -u teste -p banco < cria_agenda.sql
Backup do MySQL
Cpia do diretrio do banco de dados, com o servidor desativado (apenas entre a mesma verso, na mesma plataforma) Utilitrio mysqldump, que gera um script SQL para recriao do banco ou das tabelas selecionadas
Distribuies binrias do PHP costumam vir prconfiguradas com um cliente MySQL Pode-se baixar e compilar o DBI e DBD-MySQL para Perl (ou usar os pacotes da sua distrbuio preferida do Linux) Em geral, aplicaes em C ou Pascal, alm dos drivers Perl e Python, exigem recomplicao para a verso do cliente MySQL instalada
mysql_connect
Conecta a um servidor
mysql_freeresult / mysql_close
Outras APIs
Quando existe uma API independente de banco, recomenda-se o uso desta API com o driver especfico, em vez da API de cliente do MySQL API do MySQL
PHP, C/C++, Pascal
Java (JDBC), PHP (Pear), Perl (DBI), Python (PyDB), Kylix (dbExpress)
Exemplos
Agenda de Contatos
Verso em PHP (API do MySQL) Verso em PHP (PEAR) Verso em Pascal Verso em Java
Um nico arquivo auto-instalador (estilo InstallShield) fornece o servidor, cliente e bibliotecas para desenvolvimento fornecido um utilitrio grfico para incio e trmino do servidor Ou ento podemos utilizar a linha de comando do mesmo modo que no Linux (mysqld, mysqladmin, mysqlm, mysqldump)
Linguagens como PHP, Perl, Java, C e Pascal funcionam da mesma forma nos dois ambientes Java no necessitam do cliente MySQL instalado; as demais exigem recompilao O Delphi fornece um driver dbExpress para o MySQL Pode ser baixado e instalado separadamente um driver ODBC para Visual Basic, Excel, etc
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 definio de chaves primrias nas tabelas, caso contrrio os Datasets no sero atualizveis
Referncias
MySQL
www.mysql.com
Freshmeat
www.freshmeat.net
Sourceforge
www.sourceforge.net
Perguntas