Este documento é um manual de referência do MySQL e contém informações gerais sobre o sistema de gerenciamento de banco de dados MySQL, incluindo sua história, características, compatibilidade com padrões e fontes de informação para usuários.
35. Cap´
ıtulo 1: Informa¸˜es Gerais
co 1
1 Informa¸˜es Gerais
co
O programa MySQL R ´ um servidor robusto de bancos de dados SQL (Structured Query
e
Language - Linguagem Estruturada para Pesquisas) muito r´pido, multi-tarefa e multi-
a
usu´rio. O Servidor MySQL pode ser usado em sistemas de produ¸˜o com alta carga e
a ca
a ´
miss˜o critica bem como pode ser embutido em programa de uso em massa. MySQL ´ uma
e
marca registrada da MySQL AB.
O programa MySQL ´ de Licen¸a Dupla. Os usu´rios podem escolher entre usar o pro-
e c a
grama MySQL como um produto Open Source/Free Software sob os termos da GNU General
Public License (http://www.fsf.org/licenses/) ou podem comprar uma licen¸a com-
c
ercial padr˜o da MySQL AB. Veja Se¸˜o 1.4 [Licensing and Support], P´gina 16.
a ca a
O site web do MySQL (http://www.mysql.com/) disp˜e das ultimas informa¸˜es sobre o
o ´ co
programa MySQL.
A seguinte lista descreve algumas se¸˜es de particular interesse neste manual:
co
• Para informa¸˜es sobre a empresa por tr´s do Servidor do Banco de Dados MySQL,
co a
veja Se¸˜o 1.3 [What is MySQL AB], P´gina 12.
ca a
• Para discuss˜es das capacidades do Servidor do Banco de Dados MySQL, veja
o
Se¸˜o 1.2.2 [Features], P´gina 6.
ca a
• Para instru¸˜es de instala¸˜o, veja Cap´
co ca “ptexi tulo 2 [Installing], P´gina 60.
a
• Para dicas sobre a portabilidade do Servidor do Banco de Dados MySQL para novas
arquiteturas ou sistemas operacionais, veja Apˆndice D [Porting], P´gina 1069.
e a
• Para informa¸˜es sobre a atualiza¸˜o da vers˜o 4.0, veja Se¸˜o 2.5.1 [Upgrading-from-
co ca a ca
4.0], P´gina 120.
a
• Para informa¸˜es sobre a atualiza¸˜o da vers˜o 3.23, veja Se¸˜o 2.5.2 [Upgrading-from-
co ca a ca
3.23], P´gina 123.
a
• Para informa¸˜es sobre a atualiza¸˜o da vers˜o 3.22, veja Se¸˜o 2.5.3 [Upgrading-from-
co ca a ca
3.22], P´gina 127.
a
´
• Para um tutorial de introdu¸˜o ao Servidor do Banco de Dados MySQL, veja Cap“ptexi
ca
tulo 3 [Tutorial], P´gina 169.
a
• Para exemplos de SQL e informa¸˜es sobre benchmarks, veja o diret´rio de benchmarks
co o
(‘sql-bench’ na distribui¸˜o).
ca
• Para o hist´rico de novos recursos e corre¸˜es de erros, veja Apˆndice C [News],
o co e
P´gina 948.
a
• Para uma lista de erros atualmente conhecidos e mal-funcionamento, veja Se¸˜o 1.8.6
ca
[Bugs], P´gina 53.
a
• Para projetos futuros, veja Se¸˜o 1.6 [TODO], P´gina 26.
ca a
• Para ver a lista de todos os colaboradores deste projeto, veja Apˆndice B [Credits],
e
P´gina 936.
a
Importante:
Relat´rios de erros (tamb´m chamados bugs), bem como d´vidas e coment´rios, devem ser
o e u a
enviados para a lista de email geral do MySQL. Veja Se¸˜o 1.7.1.1 [Mailing-list], P´gina 33.
ca a
Veja Se¸˜o 1.7.1.3 [Bug reports], P´gina 36.
ca a
36. 2 MySQL Technical Reference for Version 5.0.0-alpha
O script mysqlbug deve ser usado para gerar comunicados de erros no Unix. (A distribui¸˜o
ca
do Windows cont´m um arquivo ‘mysqlbug.txt’ no diret´rio base que pode ser usado como
e o
um template para um relat´rio de erro.
o
Em distribui¸˜es fonte, o script mysqlbug pode ser encontrado no diret´rio ‘scripts’. Para
co o
distribui¸˜es bin´rias, o mysqlbug pode ser encontrado no diret´rio ‘bin’ (‘/usr/bin’ para
co a o
o pacote RMP do servidor MySQL.
Se vocˆ encontrou um erro de seguran¸a no Servidor MySQL, vocˆ deve enviar um email
e c e
para security@mysql.com.
1.1 Sobre Este Manual
Este ´ o manual de referˆncia MySQL; ele documenta o MySQL at´ a vers˜o 5.0.0-alpha.
e e e a
Mudan¸as funcionais s˜o sempre indicadas com referˆncia a vers˜o, assim este manual
c a e a
tamb´m pode ser utiliado caso vocˆ esteja utilizando uma vers˜o mais antiga do MySQL
e e a
(como 3.23 ou 4.0-produ¸˜o). Tamb´m a referˆncias a vers˜o 5.0 (desenvolvimento).
ca e e a
Sendo um manual de referˆncia, ele n˜o fornece instru¸˜es gerais sobre SQL ou conceitos de
e a co
banco de dados relacionais.
Como o Programa da Banco de Dados MySQL est´ sob constante desenvolvimento, o manual
a
tamb´m ´ atualizado freq¨entemente. A vers˜o mais recente deste manual est´ dispon´
e e u a a ivel
em http://www.mysql.com/documentation/ em diferentes formatos, incluindo HTML,
PDF, e vers˜es HLP do Windows.
o
O documento original ´ uma arquivo Texinfo. A vers˜o HTML ´ produzida automatica-
e a e
mente usando uma vers˜o modificada do texi2html. A vers˜o texto e Info s˜o produzidas
a a a
com makeinfo. A vers˜o PostScript ´ produzida usando texi2dvi e dvips. A vers˜o PDF
a e a
´ produzida com pdftex.
e
Se vocˆ tiver dificuldades de encontrar informa¸˜es no manual, vocˆ pode tentar nossa
e co e
vers˜o com busca em http://www.mysql.com/doc/.
a
Se vocˆ tiver qualquer sugest˜o a respeito de adi¸˜es e corre¸˜es neste manual, por favor
e a co co
envie-os para a equipe de documenta¸˜o em docs@mysql.com.
ca
Este manual foi inicialmente escrito por David Axmark e Michael (Monty) Widenius.
Atualmente ´ mantido pela Equipe de Documenta¸˜o da MySQL, que conta com Arjen
e ca
Lentz, Paul DuBois e Stefan Hinz. Para outros colaboradores, veja Apˆndice B [Credits],
e
P´gina 936.
a
Os direitos autorais (2003) deste manual pertence a compania Sueca MySQL AB. Veja
Se¸˜o 1.4.2 [Direitos Autorais], P´gina 17.
ca a
1.1.1 Conven¸˜es Usadas Neste Manual
co
Este manual utiliza algumas conven¸˜es tipogr´ficas:
co a
constant Fonte de largura fixa ´ usada para nomes de comandos e op¸˜es; instru¸˜es
e co co
SQL; nomes de bancos de dados, tabelas e colunas; c´digo C e Perl; e vari´veis
o a
de ambiente. Exemplo: “Para ver como o mysqladmin funciona, execute-o com
a op¸˜o --help.”
ca
37. Cap´
ıtulo 1: Informa¸˜es Gerais
co 3
‘filename’
Fonte de largura fixa com aspas ´ usada para nomes e caminhos de arquivos.
e
Exemplo: “A distribui¸˜o ´ instalada sobre o diret´rio ‘/usr/local’.”
ca e o
‘c’ Fonte de largura constante com aspas ´ tamb´m usada para indicar sequˆncias
e e e
de caracteres. Exemplo: “Para especificar um meta caracter, use o caractere
‘%’.”
italic Fonte It´lica ´ usada para dar ˆnfase, como aqui.
a e e
boldface Fonte em negrito ´ usada em cabe¸alhos de tabela e indicar ˆnfase especial.
e c e
Quando um comando deve ser executado por um programa, ele ´ indicado por um prompt
e
antes do comando. Por exemplo, shell> indica um comando que ´ executado do seu shell
e
atual e mysql> indica um comando que ´ executado no programa cliente mysql;
e
shell> digite um comando shell aqui
mysql> digite um comando mysql aqui
A “shell” ´ seu interpretador de comando. No Unix, ele ´ normalmente um programa
e e
como sh ou csh. No Windows, o equivalente ´ o command.com ou cmd.exe, normalmente
e
executado como um console do Windows.
Comandos Shell s˜o mostrados usando a sintaxe do Shell Bourne. Se vocˆ usa um shell do
a e
estilo csh, pode ser necess´rio alterar algum de seus comandos. Por exemplo, a sequˆncia
a e
para configurar uma vari´vel de ambiente e executar um comando se parece com o listado
a
abaixo na sintaxe Bourne Shell:
shell> NOMEVAR=valor algum_comando
Para csh ou tcsh, execute a sequˆncia desta forma:
e
shell> setenv NOMEVAR valor
shell> algum_comando
Frequentemente, nomes de bancos de dados, tabelas e colunas devem ser substitu´ idos nos
comandos. Para indicar que as substitui¸˜es s˜o necess´rias, este manual usa nome_db,
co a a
nome_tbl e nome_col. Por exemplo, vocˆ pode encontrar uma express˜o assim:
e a
mysql> SELECT nome_col FROM nome_bd.nome_tbl;
Isso significa que se vocˆ estiver trabalhando numa express˜o similar, forneceria seu pr´prio
e a o
nome de banco de dados, tabela e colunas, talvez assim:
mysql> SELECT nome_autor FROM biblio_bd.lista_autor;
SQL keywords n˜o caso sensitivas e podem ser escritas em mai´scula ou min´scula. Este
a u u
manual utiliza letras mai´sculas.
u
Em descri¸˜es de sintaxe, colchetes (‘[’ e ‘]’) s˜o usados para indicar palavras ou cl´usulas
co a a
opcionais. Por exemplo, na seguinte instru¸˜o, IF EXISTS ´ opcional:
ca e
DROP TABLE [IF EXISTS] nome_tbl
Quando elementos da sintaxe possuem mais de uma alternativa, elas s˜o separados por
a
barras verticais (‘|’). Quando um menbro de um conjunto de op¸˜es pode ser escolhido, as
co
alternativas s˜o listadas em colchetes (‘[’ e ‘]’):
a
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
Quando um membro de um conjunto de op¸˜es deve ser selecionado, as alternativas s˜o
co a
listadas dentro de chaves (‘{’ e ‘}’):
{DESCRIBE | DESC} nome_tbl {nome_col | metacar}
38. 4 MySQL Technical Reference for Version 5.0.0-alpha
1.2 Vis˜o Geral do Sistema de Gerenciamento de Banco de
a
Dados MySQL
MySQL, o mais popular sistema de gerenciamento de banco de dados SQL Open Source, ´ e
desenvolvido, distribu´ e tem suporte da MySQL AB. A MySQL AB ´ uma empresa comercial,
ido e
fundada pelos desenvolvedores do MySQL, cujos neg´cios ´ fornecer servi¸os relacionados
o e c
ao sistema de gerenciamento de banco de dados MySQL. Veja Se¸˜o 1.3 [What is MySQL
ca
AB], P´gina 12.
a
O web site do MySQL (http://www.mysql.com/) fornece informa¸˜es mais recentes sobre e
co
programa MySQL e a MySQL AB.
O MySQL ´ um sistema de gerenciamento de bancos de dados.
e
Um banco de dados ´ uma cole¸˜o de dados estruturados. Ele pode ser qual-
e ca
quer coisa desde uma simples lista de compras a uma galeria de imagens ou
a grande quantidade de informa¸˜o da sua rede coorporativa. Para adicionar,
ca
acessar, e processar dados armazenados em um banco de dados de um com-
putador, vocˆ necessita de um sistema de gerenciamento de bancos de dados
e
como o Servidor MySQL. Como os computadores s˜o muito bons em lidar com
a
grandes quantidades de dados, o gerenciamento de bancos de dados funciona
como a engrenagem central na computa¸˜o, seja como utilit´rios independentes
ca a
ou como partes de outras aplica¸˜es.
co
O MySQL ´ um sistema de gerenciamento de bancos de dados relacional.
e
Um banco de dados relacional armazena dados em tabelas separadas em vez
de colocar todos os dados um s´ local. Isso proporciona velocidade e flexibil-
o
idade. A parte SQL do “MySQL” atenda pela “Structured Query Language -
Linguagem Estrutural de Consultas”. SQL ´ linguagem padr˜o mais comum
e a
usada para acessar banco de dados e ´ definida pelo Padr˜o ANSI/ISO SQL. (O
e a
padr˜o SQL est´ vem evoluindo desde 1986 e existem diversas vers˜es. Neste
a a o
manual, ”SQL-92” se refere ao padr˜o liberado em 1992, ”SQL-99” se refere ao
a
padr˜o liberado em 1999, e ”SQL:2003” se refere a vers˜o do que esperamos que
a a
seja liberado no meio de 2003. N´s usamos o termo ”o padr~o SQL” indicando
o a
a vers˜o atual do Padr˜o SQL em qualquer momento).
a a
O ´ MySQL um software Open Source.
e
Open Source significa que ´ poss´ para qualquer um usar e modificar o pro-
e ivel
grama. Qualquer pessoa pode fazer download do MySQL pela Internet e us´-lo
a
sem pagar nada. Se vocˆ quiser, vocˆ pode estudar o c´digo fonte e alter´-lo
e e o a
para adequ´-lo `s suas necessidades. O MySQL usa a GPL (GNU General Public
a a
License - Licen¸a P´blica Geral GNU)
c u http://www.fsf.org/licenses,
para definir o que vocˆ pode e n˜o pode fazer com o software em diferentes
e a
situa¸˜es. Se vocˆ sentir desconforto com a GPL ou precisar embutir o MySQL
co e
em uma aplica¸˜o comercial vocˆ pode adquirir a vers˜o comercial licenciada
ca e a
conosco. Veja Se¸˜o 1.4.3 [Licen¸as MySQL], P´gina 18.
ca c a
Por que usar o Banco de Dados MySQL?
O servidor de banco de dados MySQL ´ extremamente r´pido, confi´vel, e f´cil
e a a a
de usar. Se isto ´ o que vocˆ est´ procurando, vocˆ deveria experiment´-lo. O
e e a e a
Servidor MySQL tamb´m tem um conjunto de recursos muito pr´ticos desen-
e a
volvidos com a coopera¸˜o de nossos usu´rios. Vocˆ pode encontrar compara-
ca a e
39. Cap´
ıtulo 1: Informa¸˜es Gerais
co 5
tivos de performance do Servidor MySQL com outros gerenciadores de bancos
de dados na nossa p´gina de benchmark Veja Se¸˜o 5.1.4 [MySQL Benchmarks],
a ca
P´gina 422.
a
O Servidor MySQL foi desenvolvido originalmente para lidar com bancos de
dados muito grandes de maneira muito mais r´pida que as solu¸˜es existentes
a co
e tem sido usado em ambientes de produ¸˜o de alta demanda por diversos
ca
anos de maneira bem sucedida. Apesar de estar em constante desenvolvimento,
o Servidor MySQL oferece hoje um rico e proveitoso conjunto de fun¸˜es. A
co
conectividade, velocidade, e seguran¸a fazem com que o MySQL seja altamente
c
adapt´vel para acessar bancos de dados na Internet.
a
As caracter´
isticas t´cnicas do MySQL
e
Para informa¸˜es t´cnicas avan¸adas, veja Cap´
co e c “ptexi tulo 6 [Reference],
P´gina 469.
a O Programa de Banco de Dados MySQL ´ um sistema
e
cliente/servidor que consiste de um servidor SQL multi-tarefa que suporta
acessos diferentes, diversos programas clientes e bibliotecas, ferramentas
administrativas e diversas interfaces de programa¸˜o (API’s).
ca
Tamb´m concedemos o Servidor MySQL como uma biblioteca multi-tarefa que
e
vocˆ pode ligar ` sua aplica¸˜o para chegar a um produto mais r´pido, menor
e a ca a
e mais f´cilmente gerenci´vel.
a a
MySQL tem muitos softwares de colaboradores dispon´
ivel.
´
E bem prov´vel que sua aplica¸˜o ou linguagem favorita j´ suporte o Servidor
a ca a
de Banco de Dados MySQL.
A pron´ncia oficial do MySQL ´ “Mai Ess Que Ell” (e n˜o MAI-SEQUEL). Mas n´s n˜o
u e a o a
ligamos se vocˆ pronunciar MAI-SEQUEL ou de outra forma qualquer.
e
1.2.1 Hist´ria do MySQL
o
Quando come¸amos, t´
c inhamos a inten¸˜o de usar o mSQL para conectar `s nossas tabelas
ca a
´ (ISAM). Entretanto, depois de alguns testes,
utilizando nossas r´pidas rotinas de baixo nivel
a
chegamos a conclus˜o que o mSQL n˜o era r´pido e nem flex´
a a a ivel o suficiente para nossas
necessidades. Isto resultou em uma nova interface SQL para nosso banco de dados, mas
com praticamente a mesma Interface API do mSQL. Esta API foi escolhida para facilitar a
portabilidade para c´digos de terceiros que era escrito para uso com mSQL para ser portado
o
facilmente para uso com o MySQL.
A deriva¸˜o do nome MySQL n˜o ´ bem definida. Nosso diret´rio base e um grande n´mero
ca a e o u
de nossas bibliotecas e ferramentas sempre tiveram o prefixo “my” por pelo menos 10 anos.
A filha de Monty tamb´m ganhou o nome My. Qual das duas originou o nome do MySQL
e
continua sendo um mist´rio, mesmo para n´s.
e o
O nome do golfinho do MySQL (nosso logo) ´ Sakila. Sakila foi escolhido pelos fun-
e
dadores da MySQL AB de uma enorme lista de nomes sugeridos pelos usu´rios em nosso
a
concurso "Name the Dolphin". O nome vencedor foi enviado por Ambrose Twebaze, um
desenvolvedor de programas open source de Swaziland, Africa. De acordo com Ambrose, o
nome Sakila tem as suas ra´ em SiSwati, a l´
izes ingua local de Swaziland. Sakila ´ tamb´m o
e e
nome de uma cidade em Arusha, Tanzania, pr´xima ao pais
o ´ de or´
igem de Ambrose, Uganda.
40. 6 MySQL Technical Reference for Version 5.0.0-alpha
1.2.2 As Principais Caracter´
isticas do MySQL
A seguinte lista descreve algumas das caracter´
isticas mais importantes do Progrma de Banco
de Dados MySQL. Veja Se¸˜o 1.5.1 [MySQL 4.0 Nutshell], P´gina 22.
ca a
Portabilidade e
• Escrito em C e C++.
• Testado com um amplo faixa de compiladores diferentes.
• Funciona em diversas plataformas. Veja Se¸˜o 2.2.3 [Quais SO], P´gina 78.
ca a
• Utiliza o GNU Automake, Autoconf, e Libtool para portabilidade.
• APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl est˜o a
dispon´iveis. Veja Cap´ “ptexi tulo 12 [Clients], P´gina 772.
a
• Suporte total a multi-threads usando threads diretamente no kernel. Isto
significa que se pode facilmente usar m´ltiplas CPUs, se dispon´
u ivel.
• Fornece mecanismos de armazenamento transacional e n˜o transacional.
a
• Tabelas em disco (MyISAM) baseadas em ´rvores-B extremamente r´pidas
a a
com compress˜o de ´
a indices.
• ´
E relativamente f´cil se adicionar outro mecanismo de armazenamento.
a
Isto ´ util se vocˆ quiser adicionar uma interface SQL a um banco de
e ´ e
dados caseiro.
• Um sistema de aloca¸˜o de mem´ria muito r´pido e baseado em pro-
ca o a
cesso(thread).
• Joins muito r´pidas usando uma multi-join de leitura unica otimizada.
a ´
• Tabelas hash em mem´ria que s˜o usadas como tabelas tempor´rias.
o a a
• Fun¸˜es SQL s˜o implementadas por meio de uma biblioteca de classes
co a
altamente otimizada e com o m´ximo de performance. Geralmente n˜o h´
a a a
nenhuma aloca¸˜o de mem´ria depois da inicializa¸˜o da pesquisa.
ca o ca
• O c´digo do MySQL foi testado com Purify (um detector comercial de
o
falhas de mem´ria) e tamb´m com o Valgrind, uma ferramenta GPL
o e
(http://developer.kde.org/~sewardj/).
• Dispon´ como vers˜o cliente/servidor ou embutida(ligada).
ivel a
Tipos de Coluna
• Aceita diversos tipos de campos: tipos inteiros de 1, 2, 3, 4 e 8 bytes
com e sem sinal, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME,
DATETIME, TIMESTAMP, YEAR, SET e ENUM. Veja Se¸˜o 6.2 [Tipos de Coluna],
ca
P´gina 482.
a
• Registros de tamanhos fixos ou vari´veis.
a
Comandos e Fun¸˜es
co
• Completo suporte a operadores e fun¸˜es nas partes SELECT e WHERE das
co
consultas. Por exemplo:
mysql> SELECT CONCAT(first_name, " ", last_name)
-> FROM nome_tbl
-> WHERE income/dependents > 10000 AND age > 30;
41. Cap´
ıtulo 1: Informa¸˜es Gerais
co 7
• Suporte pleno `s cl´usulas SQL GROUP BY e ORDER BY. Suporte para fun¸˜es
a a co
de agrupamento (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(),
MAX() e MIN()).
• Suporte para LEFT OUTER JOIN e RIGHT OUTER JOIN com as sintaxes SQL
e ODBC.
• Alias em tabelas e colunas s˜o dispon´
a iveis como definidos no padr˜o SQL92.
a
• DELETE, INSERT, REPLACE, e UPDATE retornam o n´mero de linhas que
u
´
foram alteradas (afetadas). E poss´ ivel retornar o n´mero de linhas com
u
padr˜o coincidentes configurando um parˆmetro quando estiver conectando
a a
ao servidor.
• O comando espec´ ifico do MySQL SHOW pode ser usado para devolver in-
forma¸˜es sobre bancos de dados, tabelas e ´
co indices. O comando EXPLAIN
pode ser usado para determinar como o otimizador resolve a consulta.
• Nomes de fun¸˜es n˜o conflitam com nomes de tabelas ou colunas. Por
co a
exemplo, ABS ´ um nome de campo v´lido. A unica restri¸˜o ´ que para uma
e a ´ ca e
chamada de fun¸˜o, espa¸os n˜o s˜o permitidos entre o nome da fun¸˜o e
ca c a a ca
o ‘(’ que o segue. Veja Se¸˜o 6.1.7 [Palavras reservadas], P´gina 479.
ca a
• Vocˆ pode misturar tabelas de bancos de dados diferentes na mesma
e
pesquisa (como na vers˜o 3.22).
a
Seguran¸a
c
• Um sistema de privil´gios e senhas que ´ muito flex´
e e ivel, seguro e que per-
mite verifica¸˜o baseada em esta¸˜es/m´quinas. Senhas s˜o seguras porque
ca co a a
todo o tr´fico de senhas ´ criptografado quando vocˆ se conecta ao servidor.
a e e
Escalabilidade e limites
• Lida com bancos de dados enormes. Usamos o Servidor MySQL com bancos
de dados que cont´m 50.000.000 registros e sabemos de usu´rios que usam
e a
o Servidor MySQL com 60.000 tabelas e aproximadamente 5.000.000.000
de linhas.
• S˜o permitidos at´ 32 ´
a e indices por tabela. Cada ´indice pode ser composto
de 1 a 16 colunas ou partes de colunas. O tamanho m´ximo do ´
a indice ´
e
´
de 500 bytes (isto pode ser alterado na compila¸˜o do MySQL). Um indice
ca
pode usar o prefixo de campo com um tipo CHAR ou VARCHAR.
Conectividade
• Os clientes podem se conectar ao servidor MySQL usando sockets TCP/IP,
em qualquer plataforma. No sistema Windows na fam´ NT (NT, 2000
ilia
ou XP), os clientes podem se conectar usando named pipes. No sistema
Unix, os clientes podem se conectar usando arquivos sockets.
• A interface Connector/ODBC fornece ao MySQL suporte a progras clientes
que usam conex˜o ODBC (Open-DataBase-Connectivity). Por exemplo,
a
vocˆ pode usar o MS Access para conectar ao seu servidor MySQL. Os
e
clientes podem ser executados no Windows ou Unix. O fonte do Connec-
tor/ODBC est´ dispon´
a ivel. Todas as fun¸˜es ODBC s˜o suportadas, assim
co a
como muitas outras.
Veja Se¸˜o 12.2 [ODBC], P´gina 866.
ca a
42. 8 MySQL Technical Reference for Version 5.0.0-alpha
Localiza¸˜o
ca
• O servidor pode apresentar mensagem de erros aos clientes em v´rias a
l´
inguas. Veja Se¸˜o 4.7.2 [Languages], P´gina 328.
ca a
• Suporte total para v´rios conjuntos de caracteres, que incluem ISO-8859-1
a
(Latin1), big5, ujis e mais. Por exemplo, os caracteres Escandinavos ‘^’,
a
‘¨’, ‘¨’ s˜o permitidos em nomes de tabelas e colunas.
a o a
• Todos os dados s˜o armazenados no conjunto de caracteres escolhido. To-
a
das as compara¸˜es em colunas de seq¨ˆncias caso-insensitivo.
co ue
• A ordena¸˜o ´ feita de acordo com o conjunto de caracteres escolhido (o
ca e
a ´
modo sueco por padr˜o). E poss´ alterar isso quando o servidor MySQL
ivel
´ iniciado. Para ver um exemplo de v´rias ordena¸˜es avan¸adas, procure
e a co c
pelo c´digo de ordena¸˜o Tcheca. O Servidor MySQL suporta diversos con-
o ca
juntos de caracteres que podem ser especificados em tempo de compila¸˜o ca
e execu¸˜o.
ca
Clientes e Ferramentas
• O servidor MySQL foi constru´ com suporte para instru¸˜es SQL que
ido co
verificam, otimizam e reparam tabelas. Estas instru¸˜es est˜o dispon´
co a iveis
a partir da linha de comando por meio do cliente myisamcheck, O MySQL
inclui tamb´m o myisamchk, um utilit´rio muito r´pido para realizar estas
e a a
´
opera¸˜es em tabelas MyISAM. Veja Cap“ptexi tulo 4 [MySQL Database
co
Administration], P´gina 208.
a
• Todos os programas MySQL podem ser chamados com as op¸˜es --help ou
co
-? para obter ajuda online.
1.2.3 Estabilidade do MySQL
Esta se¸˜o discute as quest˜es “Qu˜o est´vel ´ o MySQL?” e “Posso depender do MySQL
ca o a a e
neste projeto?”. Tentaremos deixar claro estes assuntos e responder algumas das quest˜es
o
mais importantes que dizem respeito a muito de nossos usu´rios. A informa¸˜o nesta se¸˜o
a ca ca
´ baseada em dados colhidos da lista de discuss˜o, que ´ muito ativa na identifica¸˜o de
e a e ca
problemas e assim como nos relatos de tipos de uso.
Originalmente, o c´digo vem do in´ dos anos 80, fornecendo um c´digo est´vel e o formato
o icio o a
de tabelas ISAM permanece compativel´ com vers˜es anteriores. Na TcX, a predecessora da
o
MySQLAB, o MySQL vem trabalhando sem problemas em nossos projetos desde o meio de 1996.
Quando o Programa de Banco de Dados MySQL foi disponibilizado para um p´blico maior,
u
nossos novos usu´rios rapidamente encontraram algumas partes de “c´digo sem testes”.
a o
Desde ent˜o, cada distribui¸˜o nova teve menos problemas de portabilidade (mesmo com
a ca
os novos recursos implementados em cada uma destas vers˜es)o
Cada distribui¸˜o do Servidor MySQL foi sendo usado, e os problemas tem ocorrido somente
ca
quando os usu´rios come¸am a usar o c´digo das “´reas cinzentas.” Naturalmente, novos
a c o a
usu´rios n˜o sabem o que s˜o as ´reas cinzentas; esta se¸˜o tenta indicar aquelas que s˜o
a a a a ca a
conhecidas atualmente. As descri¸˜es lidam com a Vers˜o 3.23 e 4.0 do Servidor MySQL.
co a
Todos os erros conhecidos e relatados s˜o corrigidos na ultima vers˜o, com a exce¸˜o dos
a ´ a ca
bugs listados na se¸˜o de erros, os quais s˜o relacionados ao desenho. Veja Se¸˜o 1.8.6
ca a ca
[Bugs], P´gina 53.
a
43. Cap´
ıtulo 1: Informa¸˜es Gerais
co 9
O Servidor MySQL ´ escrito em m´ltiplas camadas com m´dulos independentes. Alguns
e u o
dos novos m´dulos est˜o listados abaixo com indica¸˜es de qu˜o bem-testado foi cada um
o a co a
deles.
Replica¸˜o — Gamma
ca
Grandes grupos de servidores usando replica¸˜o est˜o em uso, com bom resul-
ca a
tados. O trabalho no aprimoramento dos recursos de replica¸˜o continua no
ca
MySQL 4.x.
Tabelas InnoDB — Est´vel (na 3.23, 3.23.49)
a
O mecanismo de armazenamento transacional InnoDB foi declarado est´vel na
a
a
´rvore do MySQL 3.23, a partir da vers˜o 3.23.49. InnoDB tem sido usado em
a
sistema de produ¸˜o grandes e com carga pesada.
ca
Tabelas BDB — Gamma
O c´digo do Berkeley DB ´ muito est´vel, mas ainda estamos melhorando a
o e a
interface do mecanismo de armazenamento transacional do BDB no Servidor
MySQL, assim levar´ algum tempo at´ que ele esteja t˜o bem testado quanto os
a e a
outro tipos de tabela.
Pesquisas Full-text — Beta
Pesquisa full-text funcionam mas ainda n˜o s˜o largamente usadas. Melhora-
a a
mentos importantes forma implementados no MySQL 4.0.
MyODBC 3.51 (usa ODBC SDK 3.51) — Est´vela
Em grande uso na produ¸˜o. Alguns problemas apresentados parecem ser rela-
ca
cionados a aplica¸˜o e independente do driver ODBC ou do servidor de banco
ca
de dados.
Recupera¸˜o autom´tica de tabelas MyISAM — Gamma
ca a
Este status se aplica apenas ao novo c´digo que confere no mecanismo de ar-
o
mazenamento MyISAM que verifica, na inicializa¸˜o, se a tabela foi fechada cor-
ca
retamente e executa uma conferˆncia/reparo autom´tico da tabela em caso
e a
negativo.
Bulk-insert — Alpha
Novo recurso nas tabelas MyISAM no MySQL 4.0 para inser¸˜es mais r´pidas de
co a
v´rios registros.
a
Locking — Gamma
Esse m´dulo ´ muito dependente do sistema. Em alguns sistemas existem certos
o e
problemas por utilizar o locking padr˜o do SO (fcntl(). Nestes casos, vocˆ
a e
deve executar o mysqld com o parˆmetro --skip-external-locking. S˜o
a a
conhecidos alguns problemas ocorridos em alguns sistemas Linux e no SunOS
quando utiliza-se sistemas de arquivos montados em NFS.
Clientes que pagam recebem suporte direto e de alta qualidade da MySQL AB. A MySQL
AB tamb´m fornece uma lista de discuss˜o como um recurso da comunidade onde qualquer
e a
pessoa pode tirar suas d´vidas.
u
Erros s˜o normalmente corrigidos com um patch; para erros s´rios, normalmente ´ lan¸ada
a e e c
uma nova distribui¸˜o.
ca
44. 10 MySQL Technical Reference for Version 5.0.0-alpha
1.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem Ter?
A Vers˜o 3.22 do MySQL tem suporte para tabelas com limite de tamanho at´ 4G. Com
a e
o novo MyISAM no MySQL vers˜o 3.23 o tamanho m´ximo foi expandido at´ 8 milh˜es de
a a e o
terabytes (2 ^ 63 bytes). Com este tamanho de tabela maior permitido, o tamanho m´ximo
a
efetivo das tabelas para o banco de dados MySQL ´ normalmente limitado pelas restri¸˜es
e co
do sistema operacional quanto ao tamanho dos arquivos, n˜o mais por limites internos do
a
MySQL.
A seguinte tabela lista alguns exemplos do limite do tamanho de arquivos do sistema op-
eracional:
Sistema Operacional Limite do tamanho do arquivo
Linux-Intel 32 bit 2G, muito mais usando LFS
Linux-Alpha 8T (?)
Solaris 2.5.1 ´
2G (E poss´ 4GB com patch)
ivel
Solaris 2.6 4G (pode ser alterado com parˆmetro)
a
Solaris 2.7 Intel 4G
Solaris 2.7 ULTRA-SPARC 8T (?)
No Linux 2.2 vocˆ pode ter tabelas maiores que 2 GB usando o patch LFS para o sistema
e
de arquivos ext2. No Linux 2.4 j´ existem patches para o sistema de arquivos ReiserFS para
a
ter suporte a arquivos maiores. A maioria das distribui¸˜es atuais s˜o baseadas no kernel
co a
2.4 e j´ incluem todos os patches Suporte a Arquivos Grandes (Large File Support - LFS)
a
exigidos. No entanto, o tamanho m´ximo dispon´
a ivel ainda depende de diversos fatores,
sendo um deles o sistema de arquivos usado para armazenar as tabelas MySQL.
Para um vis˜o mais detalhada sobre LFS no Linux, dˆ uma olha na p´gina Andreas Jaeger’s
a e a
"Large File Support in Linux" em http://www.suse.de/~aj/linux_lfs.html.
Por padr˜o, o MySQL cria tabelas MyISAM com uma estrutura interna que permite um
a
tamanho m´ximo em torno de 4G. Vocˆ pode verificar o tamanho m´ximo da tabela com
a e a
o comando SHOW TABLE STATUS ou com o myisamchk -dv nome_tabela Veja Se¸˜o 4.6.8 ca
[SHOW], P´gina 303.
a
Se vocˆ precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos
e
grandes), a instru¸˜o CREATE TABLE permite as op¸˜es AVG_ROW_LENGHT e MAX_ROWS. Use
ca co
estas op¸˜es para criar uma tabela que possa ter mais de 4GB. Veja Se¸˜o 6.5.3 [CREATE
co ca
TABLE], P´gina 597. Vocˆ pode tamb´m alterar isso mais tarde com ALTER TABLE. Veja
a e e
Se¸˜o 6.5.4 [ALTER TABLE], P´gina 607.
ca a
Outros modos se contornar o limite do tamanho do arquivo das tabelas MyISAM s˜o os a
seguintes:
• Se sua tabela grande ser´ somente leitura, vocˆ poder´ usar o myisampack para unir
a e a
e comprimir v´rias tabelas em uma. mysisampack normalmente comprime uma tabela
a
em pelo menos 50%, portanto vocˆ pode obter, com isso, tabelas muito maiores. Veja
e
Se¸˜o 4.8.4 [myisampack], P´gina 337.
ca a
• Outra op¸˜o para contornar o limite de tamanho de arquivos do sistema operacional
ca
para arquivos de dados MyISAM usando a op¸˜o RAID. Veja Se¸˜o 6.5.3 [CREATE TABLE],
ca ca
P´gina 597.
a
• O MySQL inclu´ uma biblioteca MERGE que permite acessar uma cole¸˜o de tabelas
i ca
idˆnticas como se fosse apenas uma. Veja Se¸˜o 7.2 [MERGE], P´gina 637.
e ca a
45. Cap´
ıtulo 1: Informa¸˜es Gerais
co 11
1.2.5 Compatibilidade Com o Ano 2000 (Y2K)
O Servidor MySQL n˜o apresenta nenhum problema com o ano 2000 (Y2K compat´
a ivel)
• O Servidor MySQL usa fun¸˜es de tempo Unix que tratam datas at´ o ano 2037 para
co e
valores TIMESTAMP; para valores DATE e DATETIME, datas at´ o ano 9999 s˜o aceitas.
e a
• Todas as fun¸˜es de data do MySQL est˜o no arquivo ‘sql/time.cc’ e codificadas com
co a
muito cuidado para ser compat´ com o ano 2000.
ivel
• No MySQL vers˜o 3.22 e posterior, o novo tipo de campo YEAR pode armazenar anos 0 e
a
1901 at´ 2155 em 1 byte e mostr´-lo usando 2 ou 4 d´
e a igitos. Todos os anos de 2 d´
igitos
s˜o considerados estar na faixa de 1970 at´ 2069; o que significa que se vocˆ armazenar
a e e
01 em uma coluna YEAR, O Servidor MySQL o tratar´ como 2001.
a
O seguinte demonstra¸˜o simples ilustra que o MySQL Server n˜o tem nenhum problema
ca a
com datas at´ depois do ano 2030:
e
mysql> DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE y2k (date DATE,
-> date_time DATETIME,
-> time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO y2k VALUES
-> ("1998-12-31","1998-12-31 23:59:59",19981231235959),
-> ("1999-01-01","1999-01-01 00:00:00",19990101000000),
-> ("1999-09-09","1999-09-09 23:59:59",19990909235959),
-> ("2000-01-01","2000-01-01 00:00:00",20000101000000),
-> ("2000-02-28","2000-02-28 00:00:00",20000228000000),
-> ("2000-02-29","2000-02-29 00:00:00",20000229000000),
-> ("2000-03-01","2000-03-01 00:00:00",20000301000000),
-> ("2000-12-31","2000-12-31 23:59:59",20001231235959),
-> ("2001-01-01","2001-01-01 00:00:00",20010101000000),
-> ("2004-12-31","2004-12-31 23:59:59",20041231235959),
-> ("2005-01-01","2005-01-01 00:00:00",20050101000000),
-> ("2030-01-01","2030-01-01 00:00:00",20300101000000),
-> ("2050-01-01","2050-01-01 00:00:00",20500101000000);
Query OK, 13 rows affected (0.01 sec)
Records: 13 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date | date_time | time_stamp |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
46. 12 MySQL Technical Reference for Version 5.0.0-alpha
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
| 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |
+------------+---------------------+----------------+
13 rows in set (0.00 sec)
O valor da coluna TIMESTAMP final ´ zero porque o ano final (2050) excede o TIMESTAMP
e
maximo. O tipo de dados TIMESTAMP, que ´ usado para armazenar a hora atual, suporta
e
valores na faixa de 19700101000000 a 20300101000000 em m´quinas 32 bits (valor com
a
sinal). Em m´quinas de 64 bits, TIMESTAMP trata valores at´ 2106 (valores sem sinal).
a e
O exemplo mostra que os tipos DATE e DATETIME n˜o tem problemas com as datas usadas.
a
Eles ir˜o conseguir trabalhar com datas at´ o ano 9999.
a e
Embora o MySQL Server seja seguro em rela¸˜o ao ano 2000, vocˆ pode ter problemas se vocˆ
ca e e
us´-lo com aplica¸˜es que n˜o s˜o seguras com o ano 2000. Por exemplo, muitas aplica¸˜es
a co a a co
antigas armazenam ou manipulam anos usando valores de 2 digitos (que s˜o amb´
a iguos) em
´
vez de 4 digitos. Este problema pode ser aumentado por aplica¸˜es que usam valores como
co
00 ou 99 como indicadores de valores “perdidos”. Infelizmente, estes problemas pode ser
dif´
iceis de corrigir, cada um deles pode usar um conjunto diferente de conven¸˜es e fun¸˜es
co co
de tratamento de datas.
Assim, apesar do Servidor MySQL n˜o ter problemas com o ano 2000, ´ de responsabilidade
a e
de sua aplica¸˜o fornecer datas que n˜o sejam amb´
ca a iguas. Veja Se¸˜o 6.2.2.1 [Y2K issues],
ca
P´gina 490 para as regras do Servidor MySQL para lidar com entrada de datas amb´
a iguas
que contenham valores de ano com 2 d´ igitos.
1.3 Vis˜o Geral da MySQL AB
a
MySQL AB ´ a companhia dos fundadores e principais desenvolvedores do MySQL. A MySQL
e
AB foi estabelecida originalmente na Su´cia por David Axmark, Allan Larsson e Michael
e
“Monty” Widenius.
Os desenvolvedores do servidor MySQL s˜o todos empregados pela companhia. ny N´s somo
a o
uma organiza¸˜o virtual com pessoas em uma d´zia de pa´
ca u ises. Nos comunicamos exten-
sivamente na internet todos os dias uns com os outros e com nossos usu´rios, agentes de
a
suporte e parceiros.
N´s nos dedicamos a desenvolver o programa MySQL e propagar nosso banco de dados a
o
novos usu´rios.A MySQL AB det´m os direitos autorais do c´digo fonte do MySQL, do logo e
a e o
da marca MySQL e deste manual. Veja Se¸˜o 1.2 [What-is], P´gina 4.
ca a
A ideologia do MySQL mostra nossa dedica¸˜o ao MySQL e ao Open Source.
ca
N´s desejamos que o Programa de Banco de Dados MySQL seja:
o
47. Cap´
ıtulo 1: Informa¸˜es Gerais
co 13
O melhor e o mais usado banco de dados no mundo.
• Acess´ e dispon´ para todos.
ivel ivel
• F´cil de usar.
a
• Melhorado continuamente, permanecendo r´pido e seguro.
a
• Divertido de se usar e aprimorar.
• Livre de erros (bugs).
A MySQL AB e sua equipe:
• Promovem a filosofia Open Source e suporte ` comunidade Open Source.
a
• Tem como objetivo serem bons cidad˜os.
a
• Tem preferˆncia por parceiros que compartilhem nossos valores e id´ias.
e e
• Respondem e-mails e d˜o suporte.
a
• S˜o uma empresa virtual, conectada com outras.
a
• Trabalha contra patentes de sistemas.
O site do MySQL (http://www.mysql.com/) fornece as ultimas informa¸˜es sobre o MySQL
´ co
e a MySQL AB.
A prop´sito, a parte “AB” do nome da companhia ´ o acrˆnimo para a palavra su´ca
o e o e
“aktiebolag”, ou “sociedade anˆnima.” Ela ´ traduzida para “MySQL, Inc.” De fato,
o e
MySQL Inc. e MySQL GmbH s˜o exemplos de subsidi´rias da MySQL AB. Elas est˜o
a a a
localizadas nos EUA e Alemanha, respectivamente.
1.3.1 O Modelo de Neg´cio e Servi¸os da MySQL AB
o c
Uma das d´vidas mais comuns que encontramos ´: “Como vocˆ pode viver de algo que vocˆ
u e e e
´
disponibiliza sem custo? ” E assim que fazemos.
A MySQL AB ganha dinheiro com suporte, servi¸os, licen¸as comerciais e royalties. Us-
c c
amos estes rendimentos para patrocinar o desenvolvimento de produtos e para expandir os
neg´cios da MySQL.
o
A compania tem sido luccrativa desde de sua cria¸˜o. Em Outubro de 2001, aceitamos um
ca
financiamento de risco de investidores Escandinavos e um pounhado de pessoas de neg´cio.
o
Este investimento ´ usado para solidificarmos nosso modelo de neg´cio e construir um base
e o
para o crescimento sustent´vel.
a
1.3.1.1 Suporte
A MySQL AB ´ gerenciada pelos fundadores e principais desenvolvedores do banco de dados
e
MySQL. Os desenvolvedores tem o compromisso de dar suporte aos clientes e outros usu´rios
a
com objetivo de manterem contato com as suas necessiades e problemas. Todo o nosso
suporte ´ dado por desenvolvedores qualificado. D´vidas mais complicadas s˜o respondidas
e u a
por Michael Monty Widenius, principal autor do MySQL Server. Veja Se¸˜o 1.4.1 [Suporte],
ca
P´gina 17.
a
Para maiores informa¸˜es e pedido de suporte de diversos n´
co iveis, veja
http://www.mysql.com/support/ ou contate nossos vendedores em sales@mysql.com.
48. 14 MySQL Technical Reference for Version 5.0.0-alpha
1.3.1.2 Treinamento e Certifica¸˜o
ca
A MySQL AB distribui o MySQL e treinamentos relacionados mundialmente. Oferecemos tanto
cursos abertos quanto fechados voltado para a necessidade espec´ifica da sua empresa. O
Treinamento do MySQL tamb´m est´ dispon´ por meio de seus parceiros, os Centros de
e a ivel
Treinamento Autorizados do MySQL.
Nosso material de treinamento usa os mesmos bancos de dados exemplos usados em nossa
documenta¸˜o e nossos exemplos de aplicativos. Ele est´ sempre atualizado de acordo com
ca a
a ultima vers˜o do MySQL. Nossos instrutores s˜o apoiados por nossa equipe de desenvolvi-
´ a a
mento para garantir a qualidade do treinamento e o desenvolvimento cont´inuo do material
de nossos cursos. Isto tamb´m assegura que nenhuma quest˜o surgida durante o curso fique
e a
sem resposta.
Fazendo nossos cursos de treinamento permitir´ que vocˆ alcance os objetivos de seu aplica-
a e
tivo MySQL. vocˆ tamb´m ir´:
e e a
• Economizar tempo.
• Melhorar o desempenho de seus aplicativos.
• Reduzir ou eliminar a necessidade de hardware adicional, baixando o custo.
• Melhorar a seguran¸a.
c
• Aumentar a satisfa¸˜o dos clientes e colabloradores.
ca
• Preparar-se para Certifica¸~o MySQL.
ca
Se vocˆ estiber interessado em nosso treinamento como um participante em por-
e
tencial ou como um parceiro de treinamento, viste a se¸˜o de treinamento em
ca
http://www.mysql.com/training/ ou contate nos em: training@mysql.com.
Para detalhes sobre o Programa de Certifica¸~o MySQL, veja http://www.mysql.com/certification/.
ca
1.3.1.3 Consultoria
A MySQL AB e seus Parceiros Autorizados oferecem servi¸os de consultoria para usu´rios
c a
do Servidor MySQL e `queles que utilizam o Servisdor MySQL embutido em seus programas,
a
em qualquer parte do mundo.
Nossos consultores podem ajud´-lo projetando e ajustando o seu banco de dados, criar
a
consultas eficientes, ajustar sua plataforma para uma melhor performance, resolver quest˜es
o
de migra¸˜o, configurar replica¸˜o, criar aplica¸˜es transacionais robustas, e mais. Tamb´m
ca ca co e
ajudamos os nossos clientes com o Servidor MySQL embutido em seus produtos e aplica¸˜esco
para desenvolvimento em larga-escala.
Nossos consultores trabalham em colabora¸˜o com a nossa equipe de desenvolvimento, o
ca
que assegura a qualidade t´cnica de nossos servi¸os profissionais. Os servi¸os de consultoria
e c c
varia de sess˜es de 2 dias a projetos que gastam semanas e meses. Nosso peritos n˜o apenas
o a
cobrem o Servidor MySQLeles tamb´m conhecem sobre linguagens de programa¸˜o e scripts
e ca
tais como PHP, Perl e mais.
Se estiver interessado em nossos servi¸os de consultoria ou quiser se tornar nosso parceiro,
c
visite a se¸˜o sobre consultaria em nosso web site em http://www.mysql.com/consulting/
ca
ou contate nossa equipe de consultoria em consulting@mysql.com.
49. Cap´
ıtulo 1: Informa¸˜es Gerais
co 15
1.3.1.4 Licen¸as Comerciais
c
O banco de dados MySQL ´ liberado sob a licen¸a GNU General Public License (GPL). Isto
e c
significa que o programa MySQL pode ser usado sem custos sob a GPL. Se vocˆ n˜o deseja estar
e a
limitado pelos termos da GPL (tais como a exigˆncia de que a sua aplica¸˜o tamb´m deva ser
e ca e
GPL), vocˆ pode comprar uma licen¸a comercial para o mesmo produto da MySQL AB; veja
e c
http://www.mysql.com/products/pricing.html. Desde de que a MySQL AB ´ dona dos e
direitos do c´digo fonte do MySQL, estamos aptos a empregar o Licenciamento Dual, que
o
significa que o mesmo produto est´ dispon´ sob a GPL e sob uma licen¸a comercial. Isto
a ivel c
n˜o afeta o nosso comprometimento com o Open Source de forma alguma. Para detalhes
a
sobre quando uma licen¸a comercial ´ exigida, veja Se¸˜o 1.4.3 [MySQL licenses], P´gina 18.
c e ca a
1.3.1.5 Parcerias
A MySQL AB tem um programa de parceria mundial que cobre cursos de treinamento,
consultaria e suporte, publica¸˜es, mais a revenda e distribiui¸˜o do MySQL e produtos
co ca
relacionados. Os Parceiros da MySQL AB ganham visibilidade no nosso web site
(http://www.mysql.com/) e o direito de usarem vers˜es especiais da marca MySQL para
o
identificar seus produtos e promoverem os seus neg´cios.
o
Se vocˆ est´ interessado em se tornar um Parceiro da MySQL AB, envie-nos um email para
e a
partner@mysql.com.
A palavra MySQL e o logomarca do golfinho da MySQL s˜o marcas registradas da MySQL AB.
a
Veja Se¸˜o 1.4.4 [MySQL AB Logos and Trademarks], P´gina 20. Estas marcas registradas
ca a
representam um valor significante que os fundadores do MySQL construiram ao longo dos
anos.
O web site do MySQL (http://www.mysql.com/) ´ popular entre desenvolvedores e usu´rios.
e a
Em Outubro de 2001, obtivemos mais de 10 milh˜es e views. Nossos visitantes representam
o
um grupo que tomam decis˜es de compra e fazem recomend¸˜es de software e hardware.
o co
Vinte por cento de nossos vistantes autorizam decis˜es de compra e apenas nove por cento
o
n˜o est˜o envolvidos com a ´rea de compras. Mais de 65% fizeram uma ou mais compras
a a a
online no ultimo semaster e 70% planejam fazer uma compra nos pr´ximos meses.
´ o
1.3.2 Informa¸oes para Contato
c˜
O web site do MySQL (http://www.mysql.com/) fornece as ultimas informa¸˜es sobre MySQL
´ co
e MySQL AB.
Para servi¸os de imprensa e quest˜es n˜o cobertas por nossas releases de nott´
c o a icias
(http://www.mysql.com/news/), envie-nos um email para press@mysql.com.
Se vocˆ tiver um contrato de suporte v´lido com a MySQL AB, vocˆ receber´ em tempo,
e a e a
respostas precisas para as suas quest˜es t´cnicas sobre o programa MySQL.
o e Para
mais informa¸˜es, veja Se¸˜o 1.4.1 [Support], P´gina 17. Em nosso site na web, veja
co ca a
http://www.mysql.com/support/, ou envie um e-mail para sales@mysql.com.
Para informa¸˜es sobre treinamento MySQL, visite a se¸˜o de treinamento em
co ca
http://www.mysql.com/training/. Se vocˆ tiver acesso restrito ` Internet, conte a
e a
50. 16 MySQL Technical Reference for Version 5.0.0-alpha
equipe de treinamento da MySQL AB via e-mail em training@mysql.com. Veja Se¸˜o 1.3.1.2
ca
[Business Services Training], P´gina 14.
a
Para informa¸˜es sobre o Progrma de Certifica¸o MySQL, veja http://www.mysql.com/certification/.
co c
Veja Se¸˜o 1.3.1.2 [Business Services Training], P´gina 14.
ca a
Se vocˆ estiver interessado em consultoria, visite a se¸˜o de consultorias de nosso web
e ca
site em http://www.mysql.com/consulting/. Se vocˆ tiver restri¸˜es acesso a internet,
e co
contate a equipe de consultores da MySQL AB via e-mail em consulting@mysql.com. Veja
Se¸˜o 1.3.1.3 [Business Services Consulting], P´gina 14.
ca a
Licen¸as comerciais podem ser compradas online em https://order.mysql.com/.
c
L´ vocˆ tamb´m encontrar´ informa¸˜es de como enviar um fax da sua ordem de
a e e a co
compra para a MySQL AB. Mais informa¸˜es sobre licen¸as podem ser encontradas em
co c
http://www.mysql.com/products/pricing.html. Se vocˆ tiver duvidas em rela¸˜o a
e ca
licenciamento ou quiser cota para negocia¸˜o de um alto volume de licen¸as, preencha o
ca c
formul´rio de contato em nosso site web (http://www.mysql.com/) ou envie um email
a
para licensing@mysql.com (para quest˜es sobre licenciamento) ou para sales@mysql.com
o
(para pedidos de compra). Veja Se¸˜o 1.4.3 [Licen¸as MySQL], P´gina 18.
ca c a
Se vocˆ est´ interessado em fazer parceira com a MySQL AB, envie um e-mail para
e a
partner@mysql.com. Veja Se¸˜o 1.3.1.5 [Business Services Partnering], P´gina 15.
ca a
´
Para mais detalhes sobre a politica da marca MySQL, visite http://www.mysql.com/company/trademark.ht
ou envie um e-mail para trademark@mysql.com. Veja Se¸˜o 1.4.4 [MySQL AB Logos and
ca
Trademarks], P´gina 20.
a
Se vocˆ est´ interessado em qualquer um dos trabalhos da MySQL AB lista na se¸˜o de tra-
e a ca
balhos (http://www.mysql.com/company/jobs/), envie um e-mail para jobs@mysql.com.
N˜o nos envie o seu CV em anexo, mas como texto no final de sua mensagem de email.
a
Para discuss˜es gerais entre nosso muitos usu´rios, direcione a sua aten¸˜o para a lista de
o a ca
discuss˜o apropriada. Veja Se¸˜o 1.7.1 [D´vidas], P´gina 33.
a ca u a
Relat´rios de erros (geralmente chamados bugs), assim como quest˜es e coment´rios, de-
o o a
vem ser enviados para a lista de email geral do MySQL. Veja Se¸˜o 1.7.1.1 [Mailing-list],
ca
P´gina 33. Caso vocˆ encontre um bug de seguran¸a importante no MySQL Server, envie-nos
a e c
um e-mail para security@mysql.com. Veja Se¸˜o 1.7.1.3 [Bug reports], P´gina 36.
ca a
Se vocˆ tiver resultados de benchmarks que podemos publicar, contate-nos via e-mail em
e
benchmarks@mysql.com.
Se vocˆ tiver sugest˜es a respeito de adi¸˜es ou conex˜es para este manual, envie-os para a
e o co o
equipe do manual via e-mail em docs@mysql.com.
Para quest˜es ou coment´rios sobre o funcionamento ou cote´do do web site da MySQL
o a u
(http://www.mysql.com/), envie um e-mail para webmaster@mysql.com.
A MySQL AB tem uma pol´ itica de privacidade que pode ser lida em http://www.mysql.com/company/privac
Para qualquer quest˜es a respeito desta pol´
o itica, envie um e-mail para privacy@mysql.com.
Para todos os outros assunto, envie um e-mail para info@mysql.com.
1.4 Suporte e Licenciamento do MySQL
Esta se¸˜o descreve os contratos de licenciamento e suporte do MySQL.
ca
51. Cap´
ıtulo 1: Informa¸˜es Gerais
co 17
1.4.1 Suporte Oferecido pela MySQL AB
O suporte t´cnico do MySQL AB significa respostas individualizadas as seus problemas par-
e
ticulares diretamente dos engenheiros de software que codificaram o MySQL.
Tentamos ter uma vis˜o ampla e inclusiva de suporte t´cnico. Qualquer problema envol-
a e
vendo o MySQL ´ importante par n´s se for importante para vocˆ. Normalmente os clientes
e o e
procuram ajuda em como comandos e utilit´rios diferentes funcionam, remover gargalos de
a
desempenhos, restaurar sistemas com falhas, entender impactos do sistema operacional e
rede no MySQL, configurar melhor pr´ticas de backup e restaura¸˜o, utiluizaar APIs, e assim
a ca
por diante. Nosso suporte cobre apenar o servidor MySQL e nossos pr´prios utilit´rios, e
o a
n˜o produtos de terceirosque acessam o servidor MySQL, embora tentamos ajudar com eles
a
quando podemos.
Informa¸˜es detalhadas sobre nossas v´rias op¸˜es de suporte ´ dado em
co a co e
Suporte t´cnico ´ como seguro de vida. Vocˆ pode viver felizsem ele durante anos, mas
e e e
quando sua hora chegar ele ´ de grande importˆncia, mas j´ ´ muito tarde para adquir´
e a ae i-
lo. Se vocˆ utiliza o MySQL Server para aplica¸˜es importantes e encontrar dificuldades
e co
repentinas, vocˆ pode gastar horas tentando resolver os problemas sozinho. Vocˆ pode
e e
precisar de acesso imediato aos respons´veis pela solu¸˜o de problemas do MySQL dsipon´
a ca iveis,
contratados pela MySQL AB.
1.4.2 Copyrights e Licen¸as Usadas pelo MySQL
c
MySQL AB possui os direitos sobre o c´digo fonte do MySQL, as logomarcas e marcas reg-
o
istradas do MySQL e este manual. Veja Se¸˜o 1.3 [What is MySQL AB], P´gina 12. Diversas
ca a
licen¸as s˜o relevantes a distribui¸˜o do MySQL:
c a ca
1. Todo o c´digo espec´
o ifico do MySQL no servidor, a biblioteca mysqlclient e o cliente,
assim como a biblioteca GNU readline ´ coberta pela GNU General Public License.
e
Veja Apˆndice G [GPL license], P´gina 1087. O texto desta licen¸a podee ser encon-
e a c
trado no arquivo ‘COPYING’ na distribui¸˜o.
ca
2. A biblioteca GNU getopt ´ coberta pela GNU Lesser General Public License. Veja
e
http://www.fsf.org/licenses/.
3. Algumas partes da fonte (a biblioteca regexp) ´ coberta por um copyright no estilo
e
Berkeley.
4. Vers˜es mais antiga do MySQL (3.22 e anteriror) est˜o sujeitos a uma licen¸a estrita
o a c
(http://www.mysql.com/products/mypl.html). Veja a documenta¸˜o da vers˜o es-
ca a
pec´ifica para mais informa¸˜o.
ca
5. O manual de referˆncia do MySQL atualmente n˜o ´ distribu´ sob uma licecn¸a no
e a e ido c
estilo da GPL. O uso deste manual est´ sujeito aos seguintes termos:
a
• A convers˜o para outros formatos ´ permitido, mas o conte´do atual n˜o pode ser
a e u a
alterado ou editado de modo algum.
• Vocˆ pode criar uma c´pia impressa para seu pr´prio uso pessoal.
e o o
• Para todos os outros usos, como venda de c´pias impressas ou uso (de partes) do
o
manual em outra publica¸˜o, ´ necess´rios um acordo com a MySQL AB previamente
ca e a
escrito.
52. 18 MySQL Technical Reference for Version 5.0.0-alpha
Envie-nos email para docs@mysql.com para maiores informa¸˜es ou se vocˆ estiver
co e
interessado em fazer a tradu¸˜o.
ca
Para informa¸˜es sobre como as licen¸as do MySQL funcionam na pr´tica, de uma olhada
co c a
em Se¸˜o 1.4.3 [MySQL licenses], P´gina 18. Veja tamb´m Se¸˜o 1.4.4 [MySQL AB Logos
ca a e ca
and Trademarks], P´gina 20.
a
1.4.3 Licen¸as do MySQL
c
O programa MySQL ´ distribu´
e ido sob a GNU General Public License (GPL), que
´ provavelmente a melhor licen¸a Open Source conhecida.
e c Os termos formais da
licen¸a GPL pode ser encontrado em http://www.fsf.org/licenses/. Veja tamb´m
c e
http://www.fsf.org/licenses/gpl-faq.html e http://www.gnu.org/philosophy/enforcing-gpl.htm
Como o programa MySQL ´ distribu´ sob a GPL, ele pode ser usa geralmente de gra¸a, mas
e ido c
para certos usos vocˆ pode querer ou precisar comprar lincen¸as comerciais da MySQL AB em
e c
https://order.mysql.com/. Veja http://www.mysql.com/products/licensing.html
para mais informa¸˜es.
co
Vers˜es mais antigas do MySQL (3.22 e anteriores) est˜o sujeitos a uma licen¸a mais estrita
o a c
(http://www.mysql.com/products/mypl.html). Veja a documenta¸˜o da vers˜o espec´
ca a ifica
para mais informa¸˜o.
ca
Note que o uso do programa MySQL sob uma licen¸a comercial, GPL ou a antiga licen¸a do
c c
MySQL n˜o d´ automaticamente o direito de usar as marcas registradas da MySQL AB. Veja
a a
Se¸˜o 1.4.4 [MySQL AB Logos and Trademarks], P´gina 20.
ca a
1.4.3.1 Usando o Programa MySQL Sob uma Licen¸a Comercial
c
A licen¸a GPL ´ contagiosa no sentido de que quando um programa ´ ligado a um programa
c e e
GPL, todo o c´digo fonte para todas as partes do produto resultante tamb´m devem ser
o e
distribu´idas sob a GPL. Se vocˆ n˜o seguir esta exigˆncia do GPL, vocˆ quebra os termos da
e a e e
licen¸a e perde o seu direito de usar o programa GPL inclu´
c ido. Vocˆ tamb´m corre riscos.
e e
Vocˆ precisar´ de uma licen¸a comercial:
e a c
• Quando vocˆ liga um programa com qualquer c´digo GPL do programa MySQL e n˜o que
e o a
que o produto resultante seja licenciado sob a GPL, talvez porque vocˆ queira criar um
e
produto comercial ou manter fechado o c´digo n˜o GPL adicionado por outras raz˜es.
o a o
Ao comprar a lincen¸a comercial, vocˆ n˜o est´ usando o programa MySQL sob GPL
c e a a
embora o c´digo seja o mesmo.
o
• Quando vocˆ distribui uma aplica¸˜o n˜o GPL que s´ funciona com o programa MySQL
e ca a o
e a entrega com o programa MySQL. Este tipo de solu¸˜o ´ considerada mesmo se feita
ca e
em uma rede.
• Quando vocˆ distribui c´pias do programa MySQL sem fornecer o c´digo fonte como
e o o
exigido sob a licen¸a GPL.
c
• Quando vocˆ quiser dar suporte adional ao desenvolvimento do banco de dados do
e
MySQL mesmo se vocˆ n˜o precisar formalmente de uma licen¸a comercial. Comprar
e a c
o suporte diretamente da MySQL AB ´ outro bom modo de contribuir com o desen-
e
volvimento do programa MySQL, com vantagens imediatas para vocˆ. Veja Se¸˜o 1.4.1
e ca
[Support], P´gina 17.
a
53. Cap´
ıtulo 1: Informa¸˜es Gerais
co 19
Se vocˆ requisita uma licecn¸a, vocˆ precisar´ de uma para cada instala¸˜o do programa
e c e a ca
MySQL. Ela cobre qualquer n´mero de CPUs na m´quina, e n˜p h´ nenhum limite artificial
u a a a
no n´mero de clientes que conectam aom servidor de qualquer modo.
u
Para licen¸as comercias, ,visite o nosso site web em http://www.mysql.com/products/licensing.html.
c
Para contrato de suporte, veja http://www.mysql.com/support/. Se vocˆ tiver necessi-
e
dades especiais ou tiver acesso restrito a Internet, contate a nossa quipe de vendas via
email em sales@mysql.com.
1.4.3.2 Usando o Programa MySQL Sem Custo Sob GPL
Vocˆ pode utilizar o programa MySQL sem custo sob a GPL se vocˆ concordar as condi¸˜es do
e e co
GPL. Para detalhes adicionais, incluindo respostas a duvidas comuns sobre a GPL, veja o FAQ
gencio da Free Software Foundation em http://www.fsf.org/licenses/gpl-faq.html.
Usos comuns da GPL incluem:
• Quando vocˆ distribui sua pr´pria aplica¸˜o e o c´digo fonte da MySQL com o seu
e o ca o
produto.
• Quando vocˆ distribui o c´digo fonte do MySQL junto com outros programas que n˜o
e o a
s˜o ligados ou dependentes do sistema do MySQL para suas funcionalidades mesmo se
a
vocˆ vender a distribui¸˜o comercialmente. Isto ´ chamado agrega¸˜o na licen¸a GPL.
e ca e ca c
• Quando vocˆ n˜o est´ distribuindo qualquer parte do sistema do MySQL, vocˆ pode
e a a e
us´-lo de gra¸a.
a c
• Quando vocˆ for um Provedos de Servi¸os de Internet (Internet Service Provider - ISP),
e c
oferecendo hospedagem web com serviodres MySQL para seus clientes. Encorajamos as
pessoas a usarem provedroes que possuem suporte ao MySQL, j´ que isto lhes dar´ a
a a
confian¸a qie seus provedores ter˜o, de fato, os recursos para resolver qualquer problema
c a
que eles possam experimentar com a instala¸ao do MySQL. Mesmo se um provedor n˜o
c˜ a
tiver uma licen¸a comercial ara o MySQL Server, seus clientes devem ter acesso de
c
leitura ao fonte da instala¸˜o do MySQL para que seus clientes verifiquem que ela est´
ca a
correta.
• Quando vocˆ usa o banco de dados MySQL em conjunto com um servidor web, vocˆ n˜o
e e a
precisa de uma licen¸a comercial (uma vez que este n˜o ´ um produto distribuido
c a e ´ por
vocˆ). Isto ´ verdade mesmo se vocˆ executar um servidor web comercial que utilize
e e e
MySQL Server, pois vocˆ n˜o est´ distribuindo qualquer parte do sistema MySQL. No
e a a
entanto, neste caso n´s gostariamos que vocˆ adquirisse o suporte ao MySQL pois o
o e
MySQL est´ ajudandoa sua empresa.
a
Se o seu uso do banco de dados MySQL n˜o exige uma licen¸a comercial, lhe encorajamos
a c
a adquirir um suporte da MySQL AB de qualquer forma. Deste modo vocˆ contribui com o
e
desenvolvimento do MySQL e tamb´m ganha vantegens imediatas. Veja Se¸˜o 1.4.1 [Support],
e ca
P´gina 17.
a
Se vocˆ utiliza o bancdo de dados MySQL em um contexto comercial e obtem lucro com
e
o seu uso, pedimos que vocˆ ajude no desenvolvimento do MySQL adquirindo algum n´
e ivel
de suporte. Sentimos que se banco de dados MySQL ajudou os seus neg´cios, ´ razo´vel
o e a
pedirmos que vocˆ ajude a MySQL AB. (De outra forma, se vocˆ nos pedir suporte, vocˆ n˜o
e e e a
s´ estar´ usando de gra¸a algo em que colocamos muito trabalhom mas tamb´m pedindo
o a c e
que lhe forne¸amos suporte de gra¸a tamb´m).
c c e
54. 20 MySQL Technical Reference for Version 5.0.0-alpha
1.4.4 Logomarcas e Marcas Registradas da MySQL AB
Muitos usu´rios do banco de dados MySQL deseja mostar o logo do golfinho da MySQL AB
a
em seus web sites,livros ou produtos fechados. Isto ´ bem vindo, mas deve haver anota¸˜es
e co
indicando que a palavra MySQL e o logo do golfinho da MySQL s˜o marcas registradas da
a
MySQL AB e s´ podem ser usadas como indicado na nossa pol´
o itica de marcas registradas em
http://www.mysql.com/company/trademark.html.
1.4.4.1 O Logo Original do MySQL
O logo do golfinho do MySQL foi desenhado pela Finnish advertising agency Priority em
2001. O golfinho foi escolhido como um s´ imbolo para o baco de dados MySQL j´ que ele
a
´ esperto, r´pido e um animal ´gil, se esfor´ndo em navegar pelos oceanos de dados. N´s
e a a a o
tamb´m gostamos de golfinos.
e
O logo original MySQL s´ podem ser usados pr representates da MySQL AB e aqueles que
o
possuem um acordo escrito permitndo-os de fazˆ-lo.
e
1.4.4.2 Logomarcas da MySQL que Podem Ser Usadas Sem
Permiss˜o de Altera¸˜o
a ca
Projetamos um conjunto de logos especiais de Uso Condicionale que podem se encontra-
dos em nosso site web em http://www.mysql.com/press/logos.html e usado em sites
web de terceiros sem permiss˜es de escrita da MySQL AB. O uso destas logomarcas n˜o
o a
´
s˜o totalmente irrestritas mas, como o nome indica, sujeitos a nossa politica de marcas
a
registradasque tamb´m est´ dispon´
e a ivel em nosso site. Vocˆ deve ler a pol´
e itica de marcas
registradas se plabeja us´-las. As exigˆncias s˜o basicamente as apresentadas aqui:
a e a
• Use a logomarca que vocˆ preciisa como mostrado no site http://www.mysql.com/.
e
Vocˆ pode mudar sua escala para servir as suas necessidades, mas n˜o pode alterar
e a
cores ou o desenho, ou alterar os graficos de forma alguma.
• Deixe evidente que vocˆ, e n˜o a MySQL AB, ´ o criado e propriet´rio do site que mostra
e a e a
a logomarca do MySQL.
• N˜o use a logomarca em detrimento ` MySQL AB ou ao valor das marcas registradas da
a a
MySQL AB. Nos reservamos o direito de revogar o diretiro de uso da marcas registradas
da MySQL AB.
• Se vocˆ utilizar as maracas em um site da web, fa¸a com que ele contenha um link para
e c
http://www.mysql.com/.
• Se vocˆ utilizar o banco de dados MySQL sob GPL em uma aplica¸˜o, sua aplica¸˜o deve
e ca ca
ser Open Source deve estar apta a conectar a um servidor MySQL.
Contate-nos via e-mail em trademark@mysql.com para saber sobre os nosso acordos espe-
ciais que sirvam as suas necessidades.
55. Cap´
ıtulo 1: Informa¸˜es Gerais
co 21
1.4.4.3 Quando Vocˆ Precisa de Permiss˜o de Altera¸˜o para Usar
e a ca
as Logomarcas do MySQL?
Vocˆ precisa de permiss˜o escrita da MySQL AB antes de usar as logomarcas do MySQL nos
e a
seguintes casos:
• Quando exibir qualquer logomarca da MySQL AB em qualquer lugar diferente so seu site.
• Quando exibir qualquer logomarca da MySQL AB exceta as de Uso Condicional men-
cionadas anteiormente em sites ou outro lugar.
Devido a raz˜es comerciais e legais monitoramos o so das marcas registradas do MySQL
o
em proutos, livros e outros itens. Normalmente exigimos um valor para a exibi¸˜o das
ca
logomarcas da MySQL AB em produtos comerciais, j´ que achamos razo´vel que parte dos
a a
rendimentos seja retornado para financiar o desenvolvimento do banco de dados MySQL.
1.4.4.4 Logomarcas dos Parceiros da MySQL AB
As logomarcas de parceria do MySQL podem ser usados apenas por companhias e pessoas que
possuem um acordo de parceria por escrito com a MySQL AB. Parceiras incluem certifica¸˜o
ca
com treinador ou consultor do MySQL. Para mais informa¸˜es, Se¸˜o 1.3.1.5 [Partnering],
co ca
P´gina 15.
a
1.4.4.5 Usando a Palavra MySQL em Texto Impresso ou
Apresenta¸˜o
ca
A MySQL AB considera bem vindas as referˆncias ao banco de dados MySQL mas deve ser
e
indicado que a palavra MySQL ´ uma marca registrada da MySQL AB. Por isto, vocˆ deve
e e
adicionar o simbolo de marca registrada (TM) ao primeiro ou mais proeminente uso da
palavra MySQL em um texto e, onde apropriadom indicar que MySQL ´ uma marca reg-
e
istrada da MySQL AB. Para mais informa¸˜es, veja nossa pol´
co itica de marcas registradas em
http://www.mysql.com/company/trademark.html.
1.4.4.6 Usando a Palavra MySQL em Nomes de Companhias e
Produtos
O uso da palavra MySQL em nomes de produtos ou companias ou em dominios de Internet
n˜o ´ permitida sem permiss˜o escrita da MySQL AB.
a e a
1.5 Mapa de Desenvolvimento do MySQL
Esta se¸˜o fornece uma amostra do mapa de desenvolvimento do MySQL, incluindo prin-
ca
cipais recursos imlementados ou planejados para o MySQL 4.0, 4.1, 5.0 e 5.1. A seguinte
se¸˜o fornece informa¸˜o para cada distribui¸˜o. O planejamento para alguns dos recursos
ca ca ca
mais requisitados est˜o listada na tabela a seguir.
a
Feature MySQL version
Unions 4.0
Subqueries 4.1
56. 22 MySQL Technical Reference for Version 5.0.0-alpha
R-trees 4.1 (para tabelas
MyISAM)
Stored procedures 5.0
Views 5.0 ou 5.1
Cursors 5.0
Foreign keys 5.1 (3.23 com InnoDB)
Triggers 5.1
Full outer join 5.1
Constraints 5.1
1.5.1 MySQL 4.0 in a Nutshell
Muito aguardado por nossos usu´rios, o MySQL Server 4.0 agora est´ dispon´
a a ivel em sua
vers˜o de produ¸˜o.
a ca
O MySQL 4.0 est´ dispon´
a ivel para download em http://www.mysql.com/ e nossos sites
mirrors. O MySQL tem sido testado por um grande n´mero de usu´rios e est´ em uso em
u a a
mutios sites.
Os principais novos recursos do MySQL Server 4.0 s˜o trabalhados em conjunto com os
a
usu´rios corporativos e da comunidade, melhorando o programa de banco de dados MySQL
a
como uma solu¸˜o para miss˜es cr´
ca o iticas e sistemas de bancos de dados de alta carga. Outros
novos recursos visam os usu´rios de bancos de dados embutidos.
a
O MySQL 4.0 foi declarado est´vel para uso em produ¸˜o a partir da vers˜o 4.0.12 em
a ca a
Mar¸o de 2003. Isto significa que, no futuro, apenas corre¸˜o de erros ser˜o feitas para a
c ca a
distribui¸˜o da s´rie 4.0 e apenas corre¸˜o de erros cr´
ca e ca iticos ser˜o feitas para a antiga s´rie
a e
3.23. Veja Se¸˜o 2.5.2 [Upgrading-from-3.23], P´gina 123.
ca a
Novos recursos para o MySQL est´ sendo adicionado ao MySQL 4.1 que tamb´m est´
a e a
´ (vers˜o alfa). Veja Se¸˜o 1.5.2 [MySQL 4.1 Nutshell], P´gina 24.
disponivel a ca a
1.5.1.1 Recursos Dispon´
iveis no MySQL 4.0
Aumento da velocidade
• O MySQL 4.0 tem uma cache de consultas que pode dar uma grande au-
mento na velocidade de aplica¸˜es com consutas repetitivas. Veja Se¸˜o 6.9
co ca
[Query Cache], P´gina 624.
a
• A vers˜o 4.0 aumenta a velocidade do MySQL Server em um n´mero e
a u
a ´
´reas tais como INSERTs em bloco, buscas em indices empacotados, cria¸˜o
ca
de ´
indices FULLTEXT, e COUNT(DISTINCT).
Introdu¸˜o ao Servidor MySQL Embutido
ca
• A nova biblioteca do Servidor Ebutido pode ser facilmente usada em
aplica¸˜es standalone e embarcadas. O servidor embutido fornce uma
co
alternativa para o uso do MySQL em um ambiente cliente/servidor. Veja
Se¸˜o 1.5.1.2 [Nutshell Embedded MySQL], P´gina 24.
ca a
Mecanismo de armazenamento InnoDB como padr˜o a
• O mecanismo de armazenamento InnoDB ´ oferecido como um recurso
e
padr˜o do servidor MySQL. Isto significa suporte a transa¸˜es ACID, chaves
a co
57. Cap´
ıtulo 1: Informa¸˜es Gerais
co 23
estrangeiras com UPDATE/DELETE em cacata e lock de registro agora
s˜o recursos padr˜es. Veja Se¸˜o 7.5 [InnoDB], P´gina 642.
a o ca a
Novas fncionalidades
• A melhora das propriedades de busca FULLTEXT do MySQL Server 4.0
habilita indexa¸˜o FULLTEXT de grandes partes de texto com linguagem
ca
natural e bin´ria de l´gica de busca. Vocˆ pode personalizar o tamanho
a o e
m´inimo de palavras e definir a sua pr´pria lista de palavras de parasa em
o
qualquer linguagem humana, habilitando um novo conjunto de aplica¸˜es co
´
a serem construidas no MySQL Server. Veja Se¸˜o 6.8 [Fulltext Search],
ca
P´gina 618.
a
Compatibilidade com os padr˜es, portabilidade e migra¸˜o
o ca
• Recursos para simplificar a migra¸˜o de outros sistemas de banco de dados
ca
para o MySQL Server incluem TRUNCATE TABLE (como no Oracle)
• Muitos usu´rios tamb´m ficar˜o satisfeitos ao perceber que o MySQL
a e a
Server agora suporta a instru¸˜o UNION, um recurso padr˜o SQL muito
ca a
esperado.
• O MySQL agora pode ser executado nativamente na plataforma Novell
NetWare 6.0. Veja Se¸˜o 2.6.8 [Novell NetWare], P´gina 164.
ca a
Internacionaliza¸˜o
ca
• Nossos usu´rios alem˜es, austr´
a a iacos e sui¸os notar˜o que o MySQL agora
c a
suporta um novo conjunto de caracteres, latin1_de, que assegura que a
Ordena¸~o em alem~o classificar´ palavras com umlauts na mesma ordem
ca a a
das agendas telefˆnicas alem˜s.
o a
Aprimoramento da Usabilidade
No porcesso de constru¸˜o de recursos para novos usu´rios, n˜o esquecemos os
ca a a
pedidos de nossa leal comunidade de usu´rios.
a
• A maioria dos parˆmetros mysqld (op¸˜es de inicializa¸˜o) agora podem
a co ca
ser definidas se finalizar o servidor. Isto ´ um recurso conveniente para
e
Administradores de Bancos de Dados (DBAs). Veja Se¸˜o 5.5.6 [SET OP-
ca
TION], P´gina 461.
a
• Instru¸˜es DELETE e UPDATE multi-tabelas foram adicionadas.
co
• Foi adicionado suporte ao mecanismo de armazenamento MyISAM para link
simb´lico no n´ de tabela (e n˜o apenas a n´ de banco de dados como
o ivel a ivel
antes) e para habilitar o tratamento de links simb´licos no Windows por
o
padr˜o.
a
• SQL_CALC_FOUND_ROWS e FOUND_ROWS() s˜o novas fun¸˜es que tornaram
a co
poss´ encontrar o n´meros de linhas que uma consulta SELECT que inclui
ivel u
uma cl´usula LIMIT teria retornado se a cl´usula n˜o fosse utilizada.
a a a
A se¸˜o de novidades deste manual inclui uma lista mais aprofundada dos recursos. Veja
ca
Se¸˜o C.3 [News-4.0.x], P´gina 957.
ca a
58. 24 MySQL Technical Reference for Version 5.0.0-alpha
1.5.1.2 Servidor Embutido MySQL
libmysqld faz o MySQL Server adequado para uma grande ´rea de aplica¸˜es. Usando a
a co
biblioteca do servidor MySQL embutido, pode embarcar o MySQL Server em v´rios aplica-
a
tivos e dispositivos eletrˆnicos, onde o usu´rio final n˜o tˆm conhecimento de possuir um
o a a e
banco de dados b´sico. O servidor MySQL embutido ´ ideal para uso nos bastidores em
a e
aplica¸˜es de Internet, quiosques p´blicos, respons´vel por unidades de combina¸˜o hard-
co u a ca
ware/software, servidores Internet de alta performance, banco de dados de auto-conten¸˜o
ca
distribu´
idos em CDROM, e assim por diante
Muitos usu´rios da libmysqld se benficiar˜o da iLicen¸a Dual do MySQL. Para aqueles
a a c
que n˜o desejam ser limitar pela GPL, o software ´ tambem est´ dispon´ sob uma licen¸a
a e a ivel c
comercial. A biblioteca embutida do MySQL tamb´m usa a mesma interface que a biblioteca
e
do cliente normal, sendo ent˜o conveniente e f´cil de usar. Veja Se¸˜o 12.1.15 [libmysqld],
a a ca
P´gina 860.
a
1.5.2 MySQL 4.1 in a Nutshell
MySQL Server 4.0 prepara a cria¸˜o de novos recursos como subqueries e Unicode (imple-
ca
mentado na vers˜o 4.1) e o funcionamento de stored procedures do SQL-99 est´ sendo feito
a a
para a vers˜o 5.0. Estes recursos est˜o no topo da lista de recursos desejados de muitos de
a a
nossos clientes.
Com estas adi¸˜es, os cr´
co iticos do MySQL Database Server devem ser mais imaginativos que
nunca para apontar as deficiˆncias do MySQL Database Management System. J´ conhecido
e a
por sua estabilidadem velocidade e facilidade de uso, o MySQL Server estar´ apto a atender
a
as necessidades de v´rios compradores exigentes.
a
1.5.2.1 Recursos Dispon´
iveis no MySQL 4.1
Os recursos listados nesta se¸˜o est˜o implementados no MySQL 4.1. Outros poucos recur-
ca a
sos est˜o planejados para o MySQL 4.1. Veja Se¸˜o 1.6.1 [TODO MySQL 4.1], P´gina 27.
a ca a
A maioria dos novos recursos em codifica¸˜o, como stored procedures, estar˜o dispon´
ca a iveis
no MySQL 5.0. Veja Se¸˜o 1.6.2 [TODO MySQL 5.0], P´gina 27.
ca a
Suporte a subqueries e tabelas derivadas
•
Uma subquery ´ uma instru¸˜o SELECT aninhada dentro de outras in-
e ca
stru¸˜es. Uma tabela dericada (unnamed view) ´ uma subquery na cl´usula
co e a
FROM de outras instru¸˜es. Veja Se¸˜o 6.4.2 [Subqueries], P´gina 569.
co ca a
Aumento na velocidade
• Protocols bin´rios mais r´pidos com instru¸˜es preparadas e parˆmetros
a a co a
de liga¸˜o. Veja Se¸˜o 12.1.4 [C API Prepared statements], P´gina 824.
ca ca a
• Indexa¸˜o BTREE agora ´ suportado por tabelas HEAP, aumentando de forma
ca e
significante o tempo de resposta para busca que n˜o s˜o exatas.
a a
59. Cap´
ıtulo 1: Informa¸˜es Gerais
co 25
Nova funcionalidade
• CREATE TABLE tabela1 LIKE tabela2 lhe permite criar uma nova tabela
com a estrutura exatamente igual a de uma tabela existente, usando um
unico comando.
´
• Suporte aos tipos espaciais OpenGIS (dados geogr´ficos). Veja Cap´
a “ptexi
tulo 10 [Spatial extensions in MySQL], P´gina 730.
a
• A replica¸˜o pode ser feita sobre conex˜o SSL.
ca a
Compatibilidade aos padr˜es, portabilidade e migra¸˜o
o ca
• O novo protocolo cliente/servidor adiciona a possibilidade de se passar
m´ltiplos avisos ao cliente, no lugar se um unico resultado. Isto faz com
u ´
que o trabalho como uma grande carga de dados seja muito mais f´cil a
de rastrear. SHOW WARNINGS exibe avisos para o ultimo comando. Veja
´
Se¸˜o 4.6.8.9 [SHOW WARNINGS], P´gina 323.
ca a
Internacionaliza¸˜o
ca
• Para suportar nossa base de usu´rio sempre em expans˜o usando linguagens
a a
locais nas aplica¸˜es, o programa MySQL agora oferece suporte Unicode
co
extensivo por meio dos conjunto de caracteres utf8 e ucs2.
• Os conjuntos de caracteres agora podem ser definidos por colunas, tabelas
e banco de dados. Isto permite um alto grau de flexibilidade no desenho
das aplica¸˜es, particularmente para sites-web multi-linguagens.
co
• Para documenta¸˜o sobre este suporte a conjunto de caracters aprimorados,
ca
veja Cap´
“ptexi tulo 9 [Charset], P´gina 707.
a
Aprimoramento da usabilidade
• Em resposta a demanda popular, adicionamos um comando HELP com
base no servidor que pode ser usado para conseguir ajuda para coman-
dos MySQL. A vantagem de se ter esta informa¸˜o no lado do servidor ´
ca e
que a informa¸˜o ´ sempre aplic´vel para aquela vers˜o do servidor em par-
ca e a a
ticular. Como esta informa¸˜o est´ dispon´ executando uma instru¸˜o
ca a ivel ca
SQL, outros clientes tamb´m poder˜o ser escritos para acess´-la. Por ex-
e a a
emplo, o cliente mysql de linha de comando foi modificado para ter esta
capacidade.
• No novo protocolo cliente/servidor, v´rias instru¸˜es podem ser feitas
a co
com uma unica chamada. Veja Se¸˜o 12.1.8 [C API multiple queries],
´ ca
P´gina 851.
a
• O novo protocolo cliente/servidor tamb´m suporta retorno de v´rios resul-
e a
tados. Isto pode ocorrer como resultado de enviar v´rias instru¸˜es, por
a co
exemplo (Veja o item anterior).
• Uma nova sintaxe INSERT ... ON DUPLICATE KEY UPDATE ... tem sido im-
plementada. Isto lhe permite executar um UPDATE em um registro existente
se o um INSERT criasse uma chave (´ indice) prim´ria (PRIMARY) ou unica
a ´
(UNIQUE) (index) duplicada. Veja Se¸˜o 6.4.3 [INSERT], P´gina 578.
ca a
• Projetamos uma nova fun¸˜o de agrupamento GROUP_CONCAT(), adicio-
ca
nando a capacidade de concatenar colunas de registros agrupados em uma
60. 26 MySQL Technical Reference for Version 5.0.0-alpha
unica string de resultado, o que ´ extremamente util. Veja Se¸˜o 6.3.7
´ e ´ ca
[Group by functions and modifiers], P´gina 555.
a
A se¸˜o de novidades neste manual incluem uma lista mais completa de recursos. Veja
ca
Se¸˜o C.2 [Novidades na vers˜o 4.1.x], P´gina 948.
ca a a
1.5.2.2 Stepwise Rollout
Novos recursos est˜o sendo adicionados ao MySQL 4.1. A vers˜o Alfa j´ st´ dispon´ para
a a a a ivel
download. Veja Se¸˜o 1.5.2.3 [Nutshell Ready for Immediate Use], P´gina 26.
ca a
O conjunto de recursos que est˜o sendo adicionados a vers˜o 4.1 est˜o, na maioria, cor-
a a a
rigidos. Desenvolvimento adicional j´ est´ em andamento na vers˜o 5.0. O MySQL 4.1
a a a
passam pelos passos de Alfa (tempo no qual os novos recursos ainda podem ser adiona-
dos/alterados), Beta (quando j´ implementamos todos os recursos e apenas corre¸˜es de
a co
erros s˜o realizados0) e Gamma (indicando que ima distribui¸˜o de produ¸˜o est´ quase
a ca ca a
pronta). No fim deste processo, o MySQL 4.1 se tornar´ o nova distribui¸˜o de produ¸˜o).
a ca ca
1.5.2.3 Pronto para Uso em Desenvolvimento Imediato
O MySQL 4.1 est´ atualmente no est´gio alfa e os bin´rios est˜o dispon´
a a a a iveis para download
em http://www.mysql.com/downloads/mysql-4.1.html. Todas as distribui¸˜es bin´rias
co a
passaram por nossos extensivos teste sem nenhum erro na plataforma em que testamos.
Veja Se¸˜o C.2 [Novidades na vers˜o 4.1], P´gina 948.
ca a a
Para aqueles que desejam usar o fonte mais recente do desenvolvimento do MySQL 4.1, deix-
amos nosso reposit´rio do BitKeeper publicamente dispon´
o ivel. Veja Se¸˜o 2.3.4 [Installing
ca
source tree], P´gina 100.
a
1.5.3 MySQL 5.0, A Pr´xima Distribui¸˜o de Desenvolvimento
o ca
O novo desenvolvimento para o MySQL est´ focado na distribui¸˜o 5.0, comrecursos como
a ca
Stored Procedures entre outros. Veja Se¸˜o 1.6.2 [TODO MySQL 5.0], P´gina 27.
ca a
Para aqueles que desejam dar uma olhada no desenvolvimento do MySQL, deixamos o
nosso reposit´rioo do BitKeeper para o MySQL vers˜o 5.0 dispon´ publicamente. Veja
o a ivel
Se¸˜o 2.3.4 [Instalando a ´rvore fonte], P´gina 100.
ca a a
1.6 MySQL e o Futuro (o TODO)
Esta se¸˜o lista os recursos que planejamos impementar no MySQL Server. As listas s˜o
ca a
apresentadas por vers˜o, e os itens est˜o aproximadamente na ordem em que ser˜o feitos.
a a a
Nota: Se vocˆ ´ um usu´rio corporativo com uma necessidade urgente de um recurso par-
ee a
ticular, por favor, contate sales@mysql.com para conversarmos sobre patroc´
inio. Financia-
mento feito por uma ou mais companhias nos permite alocar recursos adicionais para aquele
prop´sito espec´
o ifico. Um exemplo de um recurso patrocinado no passado ´ a replica¸˜o.
e ca
61. Cap´
ıtulo 1: Informa¸˜es Gerais
co 27
1.6.1 Novos Recursos Planejados Para a Vers˜o 4.1
a
Os recursos abaixo ainda n˜o est˜o implementados no MySQL 4.1, mass est˜o planejados
a a a
para implementa¸˜o antes que o MySQL 4.1 v´ para a fase beta. Para uma lista do que j´
ca a a
est´ feito no MySQL 4.1, veja Se¸˜o 1.5.2.1 [Nutshell 4.1 features], P´gina 24.
a ca a
• Suporte OpenSSL est´vel (o MySQL 4.0 tem suporte rudimentar ao OpenSSL, n˜o
a a
testado 100%).
• Mais teste de instru¸˜es preparadas
co
• Mais testes de m´ltiplos conjunto de caracteres para uma tabela.
u
1.6.2 Novos Recursos Planejados Para a Vers˜o 5.0
a
Os seguintes recursos est˜o planejados para inclus˜o no MySQL 5.0. Note que como pos-
a a
suimos diversos desenvolvedores que est˜o trabalhando em diferentes projetos, haver˜o
a a
tamb´m muitos recursos adicionais. H´ tamb´m um pequena chance qie alguns destes
e a e
recursos sejam adicionados ao MySQL 4.1. Para uma lista do que j´ est´ feito no MySQL
a a
4.1, veja Se¸˜o 1.5.2.1 [Nutshell 4.1 features], P´gina 24.
ca a
Para aqueles que desejam dar uma olhada nas novidades do desenvolvimento do MySQL,
deixamos nosso reposit´rio BitKeeper para o MySQL vers˜o 5.0 publicamente dispon´
o a ivel.
Veja Se¸˜o 2.3.4 [Instalando a ´rvore fonte], P´gina 100.
ca a a
Stored Procedures
• Stored procedures est˜o sendo implementadas atualmente. Este esfor¸o ´
a c e
baseado no SQL-99, o que tem m sintaxe b´sica similar (mas n˜o idˆntica) a
a a e
do Oracle PL/SQL. N´s tamb´m implementaremos o framework do SQL-99
o e
para enganchar em linguagens externas e (onde poss´ ivel) compatibilidade
com p.ex. PL/SQL e T-SQL.
Nova funcionalidade
• Suporte a cursores elementares.
• A habilidade de especificar explicitamente para tabelas MyISAM que um
´
indice deve ser criado como um ´
indice RTREE. Na vers˜o 4.1, ´
a indices RTREE
s˜o usados internamente para dados geom´tricos (tipos de dados GIS), mas
a e
n˜o podem ser criados no pedido.
a
• Registros de tamanhos dinˆmicas para tabelas HEAP.
a
Compatibilidade com o padr˜o, portabilidade e migra¸˜o
a ca
• Adiciona suporte real a VARCHAR (tamanho de colunas maiores que 255, e
sem corte de espa¸os em branco extras). (J´ existe suporte para isto nos
c a
mecanismos de armazenamento do MyISAM, mas ainda n˜o est´ dispon´
a a ivel
´ de usu´rio).
a nivel a
Aumento na velocidade
• SHOW COLUMNS FROM nome_tabela (usado pelo cliente mysql para permitir
expans˜es de nomes de colunas) n˜o deve abrir a tabela, apenas o arquivo
o a
de defini¸˜o. ISto exigir´ menos mem´ria e ser´ muito mais r´pido.
ca a o a a
62. 28 MySQL Technical Reference for Version 5.0.0-alpha
• Permite que o DELETE em tabelas MyISAM usem a cache de registros. Para
fazer isto, precisamos atualizar a thread da cache de registro quando atu-
alizarmos os arquivos ‘.MYD’.
• Melhores tabes em mem´ria (HEAP):
o
• Registro de tamanhos dinˆmoicos.
a
• Tratamento de registro mais r´pido (menos c´pia).
a o
Internacionaliza¸˜o
ca
• Ap usar SET CHARACTER SET devemos traduzir toda a consulta de uma vez
e n˜o apenas as strings. Isto permitir´ que os usu´rios usem caracteres
a a a
traduzidos nos nomes de banco de dados, tabelas e colunas.
Aprimoramento da usabilidade
• Resolver a quest˜o de RENAME TABLE em uma tabela usada em uma tabela
a
MERGE ativa, o que possivelmente corrompe a tabela.
1.6.3 Novos Recursos Planejados Para a Vers˜o 5.1
a
Novas funcionalidades
• Suporte FOREIGN KEY para todos os tipos de tabelas.
• Restri¸˜es a n´ de colunas.
co ivel
• Replica¸˜o seguro a falhas.
ca
• Backup online com baixa queda de desempenho. O backup online tornar´ a
mais f´cil adicionar um novo slave de replica¸˜o sem desligar o master.
a ca
Aumento de velocidade
• Novo formato dos arquivos de defini¸˜o e tabelas baseados em texto (ar-
ca
quivos ‘.frm’) e uma cache de tabelas para a defini¸˜o de tabelas. Isto nos
ca
permitir´ fazer consultas mais r´pidas da estruturas de tabela e dar um
a a
suporte a chaves estrangeiras mais eficiente.
• Otimizar o tipo BIT para gastar 1 bit (agora BIT gasta 1 byte; e ´ tratado
e
como um sinˆnimo para TINYINT.)
o
Aprimoramento da usabilidade
• Adicionar op¸˜es ao protocolo cliente/servidor para obter notas de pro-
co
gresso para longos comandos em execu¸˜o.
ca
• Implementar RENAME DATABASE. Para tornar isto seguro para todos os
mecanismos de armazenamento, ele deve funcionar como a seguir:
• Cria um novo banco de dados.
• Para cada tabelas, renomeie-a para outro banco de dados, o qual faze-
mos com o comando RENAME.
• Apagar o banco de dados antigo.
• Nova altera¸˜o da interface de arquivo interno. Isto far´ todos os manip-
ca a
uladores de arquivos mais gerais e tornar´ mais f´cil adicionar extens˜es
a a o
tipo RAID.
63. Cap´
ıtulo 1: Informa¸˜es Gerais
co 29
1.6.4 Novos Recursos Planejados Para a Vers˜o em um Futuro
a
Pr´ximo
o
Novas funcionalidade
• Comando como do Oracle CONNECT BY PRIOR ... para estruturas de busca
tipo ´rvore (hier´rquica)
a a
• Adicionar todos os tipos que faltam do SQL-92 e ODBC 3.0.
• Adicionar SUM(DISTINCT).
• INSERT SQL_CONCURRENT e mysqld --concurrent-insert para fazer uma
inser¸˜o concorrente no fim do arquivo se o arquivo tiver lock de leitura.
ca
• Permitir a atualiza¸˜o de vari´veis nas instru¸˜es UPDATE. Por exemplo:
ca a co
UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c.
• Alterar quando as vari´veis de usu´rios s˜o atualizadas e assim pode se us´-
a a a a
las com GROUP BY, como no exemplo a seguir: SELECT id, @a:=COUNT(*),
SUM(sum_col)/@a FROM nome_tabela GROUP BY id.
• Adicionar a op¸˜o IMAGE a LOAD DATA INFILE para n˜o atualizar campos
ca a
TIMESTAMP e AUTO_INCREMENT.
• Adicionar a sintaxe LOAD DATA INFILE ... UPDATE que funciona assim:
• Para tabelas com chaves prim´rias, se o registro de entrada cont´m um
a e
valor de chave prim´ria, linhas existentes correspondendo `s chaves
a a
prim´rias s˜o atualizadas para o restante das colunas de entrada. No
a a
entanto, colunas faltosas na inser¸˜o dos registros de entradas n˜o
ca a
s˜o alteradas.
a
• Para tabelas com chaves prim´rias, se um registro de entrada n˜o
a a
cont´m um valor de chave prim´ria ou estr´ faltando alguma parte da
e a a
chave, o registro ´ tratado como um LOAD DATA INFILE ... REPLACE
e
INTO.
• Fazer com que LOAD DATA INFILE entenda a sintaxe do tipo:
LOAD DATA INFILE ’file_name.txt’ INTO TABLE tbl_name
TEXT_FIELDS (text_field1, text_field2, text_field3)
SET table_field1=CONCAT(text_field1, text_field2),
table_field3=23
IGNORE text_field3
Isto pode ser usado para saltar colunas extras no arquivo texto, ou atualizar
colunas baseadas nas express˜es dos dados lidos.
o
• Novas fun¸˜es para tyrabalhar com tipos de colunas SET:
co
• ADD_TO_SET(valor,conjunto)
• REMOVE_FROM_SET(valor,conjunto)
• Se vocˆ abortar o mysql no meio de uma consulta, vocˆ deve abrir outra
e e
conex˜o e matar a consulta antiga em execu¸˜o. Alternativamente, deve
a ca
ser feita um tentativa de detec¸˜o deste problema no servidor.
ca
• Adicione um interface do mecanismo de armazenamento para informa¸˜es co
da tabela assim que vocˆ puder us´-la como uma tabela de sistema. Isto se-
e a
ria um pouco mais lento se vocˆ pedisse informa¸˜es sobre todas as tabelas,
e co
64. 30 MySQL Technical Reference for Version 5.0.0-alpha
mas muito flex´ ivel. SHOW INFO FROM tbl_name para informa¸˜es b´sicas
co a
das tabelas deve ser implementado.
• Permite SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a); neste
caso ´ considerado que a vem da tabela crash_me.
e
• Op¸˜es DELETE e REPLACE para a instru¸˜o UPDATE (isto deletar´ registros
co ca a
quando se tiver um erro de chave duplicada durante a atualiza¸˜o).
ca
• Altera o formato de DATETIME para armazenar fra¸˜es de segundo.
co
• Possibilitar o uso da nova biblioteca regexp GNU em vez da atual (a bib-
lioteca GNU deve ser muito mais r´pida que a antiga).
a
Compatibilidade com os padr˜es, portabilidade e migra¸˜o
o ca
• N˜o adicionar valores DEFAULT autom´ticos as colunas. Enviar um erro ao
a a
usar um INSERT que n˜o contenha uma coluna que n˜o tenha um DEFAULT.
a a
• Adicionar as fun¸˜es de agrupamento ANY(), EVERY() e SOME(). No padr˜o
co a
SQL isto s´ funciona em colunas booleanas, mas podemos extendˆ-las para
o e
funcionar em qualquer coluna/express˜o tratando valores 0 como FALSE
a
e valores diferentes de 0 como TRUE.
• Corrigir para que o tipo de MAX(coluna) seja o mesmo do tipo da coluna:
mysql> CREATE TABLE t1 (a DATE);
mysql> INSERT INTO t1 VALUES (NOW());
mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1;
mysql> SHOW COLUMNS FROM t2;
Aumento de velocidade
• N˜o permitir mais que um n´mero definido de threads fa¸am a recupera¸˜o
a u c ca
do MyISAM ao mesmo tempo.
• Alterar INSERT ... SELECT para usar inser¸˜es
co concorrentes
opcionalmente.
• Adicionar uma op¸˜o para descarregar paginas de chaves para tabelas com
ca
delayed keys se elas n˜o forem usados por um tempo.
a
• Permitir joins em partes de chaves (otimiza¸˜o).
ca
• Adicionar simula¸˜o de pread()/pwrite() no Windows para permitir
ca
inser¸˜es concorrentes.
co
• Um analizador de arquivos de log que possam analizar informa¸˜es sobre
co
quais tabelas s˜o usadas com mais frequˆncia, a frequˆncia com que joins
a e e
multi-tables s˜o executados, etc. Isto deve ajudar os usu´rios a identi-
a a
ficar ´reas ou projetos de tabelas que podiam ser otimizados para executar
a
consultas muito mais eficientes.
Internacionaliza¸˜o
ca
Aprimoramentos de usabilidade
• Retorna os tipos dos campos originais ao se fazer SELECT MIN(coluna) ...
GROUP BY.
• Possibilita especificar long_query_time com uma granularidade em mi-
crosegundos.
65. Cap´
ıtulo 1: Informa¸˜es Gerais
co 31
• Ligue o c´digo myisampack no servidor assim ele poder´ realizar opera¸˜es
o a co
PACK e COMPRESS.
• Adicionar uma cache de chaves tempor´ria durante INSERT/DELETE/UPDATE
a
para podermos fazer um recupera¸˜o se o ´
ca indice ficar cheio.
• Se vocˆ realizar um ALTER TABLE em uma tabela que ´ ligada simbolica-
e e
mente a outro disco, crie tabelas tenpor´rias neste disco.
a
• Implementar um tipo DATE/DATETIME que trate as informa¸˜es de fusos
co
hor´rios de forma apropriada e assim lidar com datas em diferentes fusos
a
hor´rios ser´ mais f´cil.
a a a
• Corrigir o configure para se poder compilar todas as bibliotecas (como no
MyISAM) sem threads.
• Permitir vari´veis SQL em LIMIT, como em LIMIT @a,@b.
a
´ autom´tica do mysql para um navegador web.
• Saida a
• LOCK DATABASES (com diversas op¸˜es).
co
• Muito mais vari´veis para SHOW STATUS. Leitura e atualiza¸˜o de reg-
a ca
istros. Selects em 1 tabela e select com joins. N´mero de tabelas na select.
u
N´mero de consultas ORDER BY e GROUP BY.
u
• mysqladmin copy database novo-banco_dados; exige que o comando
COPY seja adicionado ao mysqld.
• Lista de processos deve mostar o n´mero de consultas/threads.
u
• SHOW HOSTS para xibir informa¸˜es sobre a cache de nome de m´quina.
co a
• Alterar o nome de tabelas de string vazias para NULL para colunas calcu-
ladas.
• N˜o usar Item_copy_string em valores num´ricos para evitar a convers˜o
a e a
number->string->number no casos de: SELECT COUNT(*)*(id+0) FROM
nome_tabela GROUP BY id
• Alterar aqueles ALTER TABLE que n˜o abortam clientes que executam
a
INSERT DELAYED.
• Colunas referˆnciadas em uma cl´usula UPDATE ir˜o conter os valores anti-
e a a
gos antes da atualiza¸˜o iniciar.
ca
Novos sistemas operacioais.
• Portar os clientes MySQL para LynxOS.
1.6.5 Novos Recursos Planejados Para a Vers˜o em um Futuro a
a
M´dio Prazo
e
• Implementar fun¸˜o: get_changed_tables(timeout,table1,table2,...)
ca
• Alterar leitura atrav´s de tabelas para usar mapeamento de mem´ria quando poss´
e o ivel.
Atualmente somente tabelas compactadas usam mapeamento de mem´ria. o
• Tornar o c´digo de timestamp autom´tico melhor. Adicionar timestamps para o log
o a
de atualiza¸˜es com SET TIMESTAMP=#;
co
• Usar mutex de leitura/escrita em alguns lugares para obter maior velocidade.
66. 32 MySQL Technical Reference for Version 5.0.0-alpha
• Views simples (inicialmente em uma tabela, depois em qualquer express˜o). Veja
a
Se¸˜o 1.8.4.6 [ANSI diff Views], P´gina 51.
ca a
• Fechar algumas tabelas automaticamente se uma tabela, tabela tempor´ria ou arquivos
a
tempor´rios obtiverem o erro 23 (n˜o pode abrir arquivos suficientes).
a a
• Melhor propaga¸˜o de constantes. Quando uma ocorrˆncia de nome_col=n ´ encontrada
ca e e
em uma express˜o, para algumas constantes n, substitua outras ocorrˆncias de nome_
a e
col dentro da express˜o por n. Atualmente, isto ´ feito somente para alguns casos
a e
simples.
• Alterar todas express˜es const com express˜es calculadas se poss´
o o ivel.
• Chave otimizadora = express˜o. No momento somente a chave = campo ou a chave =
a
constante s˜o otimizadas.
a
• Melhorar o c´digo de algumas das fun¸˜es de c´pia
o co o
• Alterar ‘sql_yacc.yy’ para um analizador em linha para reduzir seu tamanho e obter
melhores mensagems de erro (5 dias).
• Alterar o analisador para usar somente uma regra para diferentes n´meros de argu-
u
mentos em uma fun¸˜o.
ca
• Utilizar nomes de c´lculo completos na parte de ordena¸˜o. (For ACCESS97)
a ca
• MINUS, INTERSECT e FULL OUTER JOIN. (Atualmente UNION [na 4.0] e LEFT OUTER JOIN
s˜o suportados).
a
• SQL_OPTION MAX_SELECT_TIME=# para colocar um limite de tempo em uma pesquisa.
• Fazer o log de atualiza¸˜es gravar em um banco de dados.
co
• LIMIT negativo para recuperar dados do fim.
• Alarmes em fun¸˜es clientes de conex˜o, leitura e escrita.
co a
• Por favor, perceba as altera¸˜es ao mysqld_safe: de acordo com o FSSTND (que o
co
Debian tenta seguir) arquivos PID dever ir em ‘/var/run/<progname>.pid’ e arquivos
de log em ‘/var/log’. Seria ´timo se vocˆ puder colocar o diret´rio de dados na
o e o
primeira declara¸˜o de "pidfile" e "log", para que a coloca¸˜o destes arquivos possa
ca ca
ser alterada com uma simples instru¸˜o.
ca
• Permitir um cliente requisitar log.
• Adicionar uso de zlib() a LOAD DATA INFILE, para permitir que as instru¸˜es leiam
co
arquivos compactados com gzip.
• Corrigir ordena¸˜o e agrupamento de colunas BLOB (parcialmente resolvida agora).
ca
• Alterar para o uso de sem´foros quando contar threads. Devemos primeiro implementar
a
uma biblioteca de sem´foros para a MIT-pthreads.
a
• Adicionar suporte pleno para JOIN com parˆnteses.
e
• Como uma alternativa para uma thread / conex˜o gerencie uma fila de threads para
a
manipular as pesquisas.
• Permitir obter mais de um bloqueio com GET_LOCK. Quando isto for feito, ser˜o,
a
tamb´m, tratados os poss´
e iveis deadlocks que essa altera¸˜o ir´ acarretar.
ca a
O tempo ´ fornecido de acordo com a quantidade de trabalho, e n˜o tempo real.
e a
67. Cap´
ıtulo 1: Informa¸˜es Gerais
co 33
1.6.6 Novos Recursos que N˜o Planejamos Fazer
a
• Nada; Planejamos ser totalmente compat´
iveis com o ANSI 92 / ANSI 99.
1.7 Fontes de Informa¸˜es do MySQL
co
1.7.1 Listas de Discuss˜o MySQL
a
Esta se¸˜o introduz a lista de deiscuss˜o do MySQL e d´ algumas explica¸˜es sobre como a
ca a a co
lista deve ser utilizada. Quando vocˆ se inscreve na lista de discuss˜o, vocˆ receber´, como
e a e a
mensagens de email, tudo o que ´ enviado para a lista. Vocˆ tamb´m poder´ enviar suas
e e e a
pr´prias d´vidas e respostas para a lista.
o u
1.7.1.1 As Listas de Discuss˜o do MySQL
a
Para se inscrever ou cancelar a inscri¸˜o de qualquer uma das listas de email descritas nesta
ca
se¸˜o, visite http://lists.mysql.com/. Por favor, n˜o envie mensagem sobre inscri¸˜o
ca a ca
´
ou cancelamento para qualquer das listas de emasil, porque tais mensagens s˜o distribuidas
a
automaticamente para milhares de outros usu´rios.
a
Seu site local pode ter muitas inscri¸˜es para uma lista de email do MySQL. Se sim, o site
co
pode ter uma lista de email local, assim as mensagens enviadas para lists.mysql.com do
seu site s˜o propagadas para a lista local. Nestes casos, por favor, contate seu administrador
a
de sistema para adicionado ou excluido da lista local do MySQL.
Se vocˆ quiser que as mensagens da lista de discuss˜o sejam enceminhadas para uma caixa
e a
de correio separada no seu programa de emails, configure um filtro com base nos cabe¸alhos
c
das mensagens. Vocˆ pode tamb´m usar os cabe¸alhos List-ID: ou Entregar-Para: para
e e c
identificar suas mensagens.
Existe tamb´m as seguintes listas de discuss˜o sobre MySQL atualmente:
e a
announce Esta ´ para anuncio de novas vers˜es do MySQL e programas relacionados.
e o
Esta ´ uma lista com baixo volume na qual todos usuarios do MySQL deveriam
e
se inscrever.
mysql A principal lista para discuss˜es MySQL em geral. Note que alguns t´picos s˜o
o o a
mais bem discutidos em listas mais especializadas. Se vocˆ enviar para a lista
e
errada vocˆ pode n˜o obter resposta.
e a
mysql-digest
A lista mysql na forma resumida. Isto significa que vocˆ ir´ receber todas
e a
mensagens individuais, enviadas na forma de uma grande mensagem uma unica
´
vez ao dia.
bugs Esta lista s´ ser´ do seu interesse se vocˆ quiser ficar informado sobre assuntos
o a e
relatados desde a ultima distribui¸˜o do MySQL ou se vocˆ quiser estar ativa-
´ ca e
mente envolvido no processo de busca e corre¸˜o de erros. Veja Se¸˜o 1.7.1.3
ca ca
[Relat´rio de erros], P´gina 36.
o a
68. 34 MySQL Technical Reference for Version 5.0.0-alpha
bugs-digest
Uma vers˜o resumida da lista bugs.
a
internals
Uma lista para pessoas que trabalham no c´digo do MySQL. Nesta lista pode-se
o
discutir desenvolvimento do MySQL e pos-patches.
internals
Uma vers˜o resumida da lista internals.
a
mysqldoc Esta lista ´ para pessoas que trabalham na documenta¸˜o do MySQL: pessoas
e ca
da MySQL AB, tradutores e outros membros da comunidade.
mysqldoc-digest
Esta ´ uma vers˜o resumida da lista mysqldoc.
e a
benchmarks
Esta lista ´ para qualquer um interessado em assuntos de desempenho. Dis-
e
cuss˜es concentradas em desempenho de banco de dados (n˜o limitado ao
o a
MySQL) mas tamb´m inclue categorias ,com desempenho do kernel, sistema
e
de arquivos, sistema de disco e outros.
benchmarks
Esta ´ uma vers˜o resumida da lista benchmarks.
e a
packagers
Esta lista ´ para discuss˜es sobre empacotamento e distribui¸˜o do MySQL.
e o ca
Este ´ o f´rum usado pela pessoas que mant´m a distribui¸˜o para troca de
e o e ca
id´ias de pacotes do MySQL e para assegurar que o MySQL esteja o mais
e
parecido poss´ em todas as plataformas e sistemas operacionais suportados.
ivel
packagers-digest
Esta ´ uma vers˜o resumida da lista packagers.
e a
java ´
Discuss˜o sobre o servidor MySQL e Java. E mais usada para discuss˜es sobre
a o
o driver JDBC, incluindo MySQL Connector/J.
java-digest
Uma vers˜o resumida da lista java.
a
win32 Esta ´ a lista para todos os t´picos relacionados ao MySQL em sistemas opera-
e o
cionais Microsoft, como o Win95, Win98, NT e Win2000.
win32-digest
Uma vers˜o resumida da lista win32.
a
myodbc Lista para todos os t´picos relacionados a conectividade do MySQL com ODBC.
o
myodbc-digest
Uma vers˜o resumida da lista myodbc.
a
mysqlcc Esta lista ´ sobre todos os t´picos relativos ao cliente gr´fico MySQL Control
e o a
Center.
mysqlcc-digest
Esta lista ´ uma vers˜o resumida da lista mysqlcc.
e a
69. Cap´
ıtulo 1: Informa¸˜es Gerais
co 35
plusplus Lista sobre todos os t´picos relacionados ` programa¸˜o da API C++ para o
o a ca
MySQL.
plusplus-digest
Uma vers˜o resumida da lista plusplus.
a
msql-mysql-modules
Lista sobre o Suporte MySQL no Perl com o msql-mysql-modules que ´
e
chamado DBD-mysql.
msql-mysql-modules-digest
Lista resumida sobre a vers˜o do msql-mysql-modules.
a
Se vocˆ n˜o obtiver uma resposta para suas quest˜es na lista de mensagens do MySQL, uma
e a o
op¸˜o ´ pagar pelo suporte da MySQL AB, que ir´ colocar vocˆ em contato direto com
ca e a e
desenvolvedores MySQL. Veja Se¸˜o 1.4.1 [Suporte], P´gina 17.
ca a
A seguinte tabela mostra algumas listas de mensagens sobre o MySQL que utilizam linguas
diferentes do Inglˆs. Perceba que elas n˜o s˜o operadas pela MySQL AB, portanto, n˜o
e a a a
podemos garantir a qualidade destas.
mysql-france-subscribe@yahoogroups.com Lista de mensagens na
l´
ingua francesa.
list@tinc.net Lista de mensagens coreana.
Envie subscribe mysql your@email.address para esta lista.
mysql-de-request@lists.4t2.com Lista de mensagens alem~.
a
Envie subscribe mysql-de your@email.address para esta lista.
Vocˆ pode encontrar informa¸˜es sobre esta lista de mensagens em
e co
http://www.4t2.com/mysql.
mysql-br-request@listas.linkway.com.br Lista de mensagens
em portuguˆs Envie subscribe mysql-br your@email.address para esta lista.
e
mysql-alta@elistas.net Lista de mensagens espanhola.
Envie subscribe mysql your@email.address para esta lista.
1.7.1.2 Fazendo perguntas ou relatando erros
Antes de enviar um relato de erro ou uma quest˜o, por favor fa¸a o seguinte:
a c
• Comece pesquisando o manual MySQL online em:
http://www.mysql.com/doc/
N´s tentaremos manter o manual atualizado, frequentemente atualizando-o com
o
solu¸˜es para novos problemas encontrados! O apˆndice de hist´rico de mudan¸as
co e o c
´ a e ´ que
(http://www.mysql.com/doc/en/News.html) pode ser util j´ que ´ bem possivel
uma vers˜o mais nova ja tenha a solu¸˜o para o seu problema.
a ca
• Procure no banco de dados de bugs em http://bugs.mysql.com/ para ver se o erro
j´ foi relatado/resolvido.
a
• Pesquise os arquivos das listas de mensagens MySQL:
http://lists.mysql.com/
70. 36 MySQL Technical Reference for Version 5.0.0-alpha
• Vocˆ pode tamb´m usar a p´gina http://www.mysql.com/search.html para
e e a
pesquisar todas as p´ginas Web (incluindo o manual) que est˜o localizados em
a a
http://www.mysql.com/.
Se vocˆ n˜o puder encontrar uma resposta no manual ou nos arquivos, confira com seu
e a
expert em MySQL local. Se vocˆ continua n˜o encontrando uma resposta para sua quest˜o,
e a a
v´ em frente e leia a pr´xima se¸˜o para saber como enviar email para lista de email do
a o ca
MySQL.
1.7.1.3 Como relatar erros ou problemas
Nosso banco de dados de bugs ´ publico e pode ser pesquisado por qualquer um em
e
http://bugs.mysql.com/. Se vocˆ logar no sistema, vocˆ poder´ entrar novos relat´rios.
e e a o
Escrever um bom relat´rio de erro exige paciˆncia, e fazˆ-lo de forma apropriada economiza
o e e
tempo para n´s e para vocˆ. Um bom relat´rio de erros contendo um teste de caso para o
o e o
bug ir´ torn´-lo muito mais f´cil para corrig´ no pr´ximo release. Esta se¸˜o ir´ ajud´-lo
a a a i-lo o ca a a
a escrever seu relat´rio corretamente para que vocˆ n˜o perca seu tempo fazendo coisas que
o e a
n˜o ir˜o ajudar-nos muito ou nada.
a a
N´s encorajamos todo mundo a usar o script mysqlbug para gerar um relato de erros (ou um
o
relato sobre qualquer problema), se poss´ivel. mysqlbug pode ser encontrado no diret´rio
o
‘scripts’ na distribui¸˜o fonte, ou, para uma distribui¸˜o bin´ria, no diret´rio ‘bin’ no
ca ca a o
diret´rio de instala¸˜o do MySQL. Se vocˆ n˜o puder utilizar o mysqlbug (por exemplo,
o ca e a
se vocˆ o estiver executando no Windows), ´ ainda de vital importˆncia que vocˆ incluia
e e a e
todas as informa¸˜es necess´rias listadas nesta se¸˜o (o mais importante ´ uma descri¸˜o
co a ca e ca
do sistema operacional e a vers˜o do MySQL).
a
O script mysqlbug lhe ajudar´ a gerar um relat´rio determinando muitas das seguintes
a o
informa¸˜es automaticamente, mas se alguma coisa importante estiver faltando, por favor
co
forne¸a-o junto de sua mensagem! Por favor leita esta se¸˜o com cuidado e tenha certeza
c ca
que todas as informa¸˜es descritas aquie est˜o inclu´
co a idas no seu relat´rio.
o
De preferˆncia, vocˆ deve testar o problema usando a ultima vers˜o de produ¸˜o ou desen-
e e ´ a ca
volvimento do Servidro MySQL antes do envio. Qualquer um deve estar apto a repetir o
erro apenas usando ’mysql test < script’ no caso de teste incluido ou executando o script
sheel ou Perl que ´ inclu´ no relat´rio de erros.
e ido o
Todos os erros enviados para o banco de dados dem bugs em http://bugs.mysql.com/
ser˜o corrigidos ou documentados na pr´xma distribui¸˜o do MySQL. Se apenas pequenas
a o ca
mudan¸as de c´digo forem necess´rias enviaremos um patch para corrigir o problema.
c o a
O lugar comum para relatar erros e problemas ´ http://bugs.mysql.com.
e
Se vocˆ encontrar um erro de seguran¸a no MySQL, envie um email para
e c
security@mysql.com.
Se vocˆ tiver um relat´rio de erro que possa ser repetido, relate-o no banco de dados de bugs
e o
em http://bugs.mysql.com. Note que mesmo neste caso ´ bom executar o script mysqlbug
e
primeiro para ter informa¸˜es sobre o sistema. Qualquer erro que pudermos repetir tem
co
uma grande chance de ser corrigido na pr´xima distribui¸˜o do MySQL.
o ca
Para relatar outros problemas, vocˆ pode usar a lista de email do MySQL.
e
71. Cap´
ıtulo 1: Informa¸˜es Gerais
co 37
Lembre-se que ´ poss´ responder a uma mensagem contendo muita informa¸˜o, mas n˜o
e ivel ca a
a uma contendo muito pouca. Frequentemente pessoas omitem fatos porque acreditam que
conhecem a causa do problema e assumem que alguns detalhes n˜o importam. Um bom
a
e a u ´
principio ´: Se vocˆ est´ em d´vida sobre declarar alguma coisa, declare-a ! E milhares de
e
vezes mais r´pido e menos problem´tico escrever um pouco de linhas a mais no seu relat´rio
a a o
do que ser for¸ado a perguntar de novo e esperar pela resposta porque vocˆ n˜o forneceu
c e a
informa¸˜o sufiente da primeira vez.
ca
Os erros mais comuns acontecem porque as pessoas n˜o indicam o n´mero da vers˜o da
a u a
distribui¸˜o do MySQL que est˜o usando, ou n˜o indicam em qual plataforma elas tem
ca a a
o MySQL instalado (Incluindo o n´mero da vers˜o da plataforma). Essa informa¸˜o ´
u a ca e
muito relevante, e em 99% dos casos o relato de erro ´ in´til sem ela! Frequentemente n´s
e u o
recebemos quest˜es como, “Por que isto n˜o funciona para mim?” ent˜o n´s vemos que
o a a o
aquele recurso requisitado n˜o estava implementado naquela vers˜o do MySQL, ou que o
a a
erro descrito num relat´rio foi resolvido em uma vers˜o do MySQL mais nova. Algumas
o a
vezes o erro ´ dependente da plataforma; nesses casos, ´ quase imposs´ corrigir alguma
e e ivel
coisa sem conhecimento do sistema operacional e o n´mero da vers˜o da plataforma.
u a
Lembre-se tamb´m de fornecer informa¸˜es sobre seu compilador, se isto for relacionado
e co
ao problema. Frequentemente pessoas encontram erros em compiladores e acreditam que o
problema ´ relacionado ao MySQL. A maioria dos compiladores est˜o sobre desenvolvimento
e a
todo o tempo e tornam-se melhores a cada vers˜o. Para determinar se o seu problema
a
depende ou n˜o do compilador, n´s precisamos saber qual compilador foi usado. Note que
a o
todo problema de compila¸˜o deve ser estimado como relato de erros e, consequentemente
ca
publicado.
´
E de grande ajuda quando uma boa descri¸˜o do problema ´ inclu´ no relato do erro. Isto
ca e ida
´, um bom exemplo de todas as coisas que o levou ao problema e a correta descri¸˜o do
e ca
problema. Os melhores relat´rios s˜o aqueles que incluem um exemplo completo mostrando
o a
como reproduzir o erro ou o problema Veja Se¸˜o D.1.6 [Casos de teste reproduz´
ca iveis],
P´gina 1075.
a
Se um programa produz uma mensagem de erro, ´ muito importante incluir essas mensagens
e
no seu relat´rio! Se n´s tentarmos procurar por algo dos arquivos usando programas, ´
o o e
melhor que as mensagens de erro relatadas sejam exatamente iguais a que o programa
produziu. (At´ o caso deve ser observado!) Vocˆ nunca deve tentar lembrar qual foi a
e e
mensagem de erro; e sim, copiar e colar a mensagem inteira no seu relat´rio!
o
Se vocˆ tem um problema com o MyODBC, vocˆ deve tentar gerar um arquivo para
e e
rastremento de erros (trace) do MyODBC. Veja Se¸˜o 12.2.7 [MyODBC bug report],
ca
P´gina 875.
a
Por favor lembre-se que muitas das pessoas que ler˜o seu relat´rio podem usar um v´
a o ideo de
80 colunas. Quando estiver gerando relat´rios ou exemplos usando a ferramenta de linha
o
de comando mysql, ent˜o dever´ usar a op¸˜o --vertical (ou a instru¸˜o terminadora G)
a a ca ca
para sa´ que ir´ exceder a largura dispon´ para este tipo de v´
ida a ivel ideo (por exemplo, com
a instru¸˜o EXPLAIN SELECT; veja exemplo abaixo).
ca
Por favor inclua a seguinte informa¸˜o no seu relat´rio:
ca o
• O n´mero da vers˜o da distribui¸˜o do MySQL que est´ em uso (por exemplo, MySQL
u a ca a
Version 3.22.22). Vocˆ poder´ saber qual vers˜o vocˆs est´ executando, usando o
e a a e a
72. 38 MySQL Technical Reference for Version 5.0.0-alpha
comando mysqladmin version. mysqladmin pode ser encontrado no diret´rio ‘bin’ o
sob sua instala¸˜o do MySQL.
ca
• O fabricante e o modelo da m´quina na qual vocˆ est´ trabalhando.
a e a
• O nome do sistema operacional e a vers˜o. Para a maioria dos sistemas operacionais,
a
vocˆ pode obter esta informa¸˜o executando o comando Unix uname -a. Se vocˆ tra-
e ca e
balho no Windows, vocˆ pode normalmente conseguir o nome e o n´mero da vers˜o com
e u a
um duplo clique sobre o ´ icone ”Meu Computador” e em seguida no menu ”Ajuda/Sobre
o Windows”.
• Algumas vezes a quantidade de mem´ria (real e virtual) ´ relevante. Se estiver em
o e
d´vida, inclua esses valores.
u
• Se vocˆ estiver usando uma distribui¸˜o fonte do MySQL, ´ necess´rio o nome e n´mero
e ca e a u
da vers˜o do compilador usado. Se vocˆ estiver usando uma distribui¸˜o bin´ria, ´
a e ca a e
necess´rio o nome da distribui¸˜o.
a ca
• Se o problema ocorre durante a compila¸˜o, inclua a(s) exata(s) mensagem(s) de erro(s)
ca
e tamb´m algumas linhas do contexto envolvendo o c´digo no arquivo onde o erro
e o
ocorreu.
• Se o mysqld finalizou, vocˆ dever´ relatar tamb´m a consulta que travou o mysqld.
e a e
Normalmente vocˆ pode encontrar isto executando mysqld com o log habilitado. Veja
e
Se¸˜o D.1.5 [Using log files], P´gina 1074.
ca a
• Se alguma tabela do banco de dados estiver relacionado ao problema, inclua a sa´ de ida
mysqldump --nodata nome_db nome_tbl1 nome_tbl2.... Isto ´ muito f´cil de fazer
e a
e ´ um modo poderoso de obter informa¸˜es sobre qualquer tabela em um banco de
e co
dados que ir´ ajudar-nos a criar uma situa¸˜o parecida da que vocˆ tem.
a ca e
• Para problemas relacionados ` velocidade ou problemas com instru¸˜es SELECT, vocˆ
a co e
sempre deve incluir a sa´ de EXPLAIN SELECT ... e ao menos o n´mero de linhas que
ida u
a instru¸˜o SELECT produz. Vocˆ tamb´m deve incluir a sa´ de SHOW CREATE TABLE
ca e e ida
nome_tabela para cada tabela envolvida. Quanto mais informa¸˜o vocˆ fornecer sobre
ca e
a sua situa¸˜o, mais f´cil ser´ para algu´m ajudar-lo! A seguir um exemplo de um
ca a a e
relat´rio de erros muito bom (ele deve ser postado com o script mysqlbug):
o
Exemplo de execu¸˜o usando a ferramenta de linha de comando mysql (perceba o uso
ca
do instru¸˜o terminadora G para instru¸˜es cuja largura de sa´ deva ultrapassar 80
ca co ida
colunas):
mysql> SHOW VARIABLES;
mysql> SHOW COLUMNS FROM ...G
<saida para SHOW COLUMNS>
mysql> EXPLAIN SELECT ...G
<saida para EXPLAIN>
mysql> FLUSH STATUS;
mysql> SELECT ...;
<Uma pequena vers~o da sa´da do SELECT,
a i
incluindo a hora em que a consulta foi executada>
mysql> SHOW STATUS;
<saida do SHOW STATUS>
• Se um erro ou problema ocorrer quando estiver executando o mysqld, tente fornecer um
script de entrada que ir´ reproduzir a anomalia. Este script deve incluir qualquer ar-
a
73. Cap´
ıtulo 1: Informa¸˜es Gerais
co 39
quivo de fonte necess´rio. Quanto mais pr´ximo o script puder reproduzir sua situa¸˜o,
a o ca
melhor. Se vocˆ puder fazer uma s´rie de testes repetidos, vocˆ poder´ post´-lo para o
e e e a a
bugs@lists.mysql.com para um tratamento de alta prioridade!
Se n˜o puder fornecer o script, vocˆ ao menos deve incluir a sa´ de mysqladmin
a e ida
variables extended-status processlist na sua mensagem para fornecer alguma
informa¸˜o da performance do seus sistema.
ca
•
Se vocˆ n˜o puder produzir um caso de teste em algumas linhas, ou se a tabela de
e a
testes for muito grande para ser enviada por email para a lista de mensagens (mais de
10 linhas), vocˆ dever´ dar um dump de suas tabelas usando o mysqldump e criar um
e a
arquivo ‘README’ que descreve seu problema.
Crie um arquivo comprimido de seus arquivos usando tar e gzip ou zip, e use o
ftp para transferir o arquivo para ftp://support.mysql.com/pub/mysql/secret/.
E envie uma pequena descri¸˜o do problema para bugs@lists.mysql.com.
ca
• Se vocˆ achar que o MySQL produziu um resultado estranho para uma consulta, n˜o
e a
inclua somente o resultado, mas tamb´m sua opini˜o de como o resultado deve ser, e
e a
uma conta descrevendo o base de sua opini˜o. a
• Quando fornecer um exemplo do problema, ´ melhor usar os nomes de vari´veis, nomes
e a
de tabelas, etc. utilizados na sua situa¸˜o atual do que enviar com novos nomes. O
ca
problema pode ser relacionado ao nome da vari´vel ou tabela! Esses casos s˜o raros,
a a
mas ´ melhor prevenir do que remediar. Al´m disso, ser´ mais f´cil para vocˆ fornecer
e e a a e
um exemplo que use sua situa¸˜o atual, que ´ o que mais importa para n´s. No caso
ca e o
de ter dados que n˜o deseja mostrar para outros, vocˆ pode usar o ftp para transferi-
a e
lo para ftp://support.mysql.com/pub/mysql/secret/. Se os dados s˜o realmente
a
confidenciais, e vocˆ n˜o deseja mostr´-los nem mesmo para n´s, ent˜o v´ em frente e
e a a o a a
providencie um exemplo usando outros nome, mas, por favor considere isso como uma
unica chance.
´
• Inclua, se poss´ivel, todas as op¸˜es fornecidas aos programas relevantes. Por exemplo,
co
indique as op¸˜es que vocˆ utiliza quando inicializa o daemon mysqld e aquelas que s˜o
co e a
utilizadas para executar qualquer programa cliente MySQL. As op¸˜es para programas
co
como o mysqld e mysql, e para o script configure, s˜o frequentemente chaves para
a
respostas e s˜o muito relevantes! Nunca ´ uma m´ id´ia inclu´
a e a e i-las de qualquer forma!
Se vocˆ usa algum m´dulo, como Perl ou PHP por favor forne¸a o n´mero da vers˜o
e o c u a
deles tamb´m.
e
• Se sua quest˜o ´ relacionada ao sistema de privil´gios, por favor forne¸a a sa´
a e e c ida
de mysqlaccess, a sa´ de mysqladmin reload, e todas as mensagens de erro que
ida
vocˆ obteve quando tentava conectar! Quando vocˆ testar seus privil´gios, vocˆ deve
e e e e
primeiramente executar mysqlaccess. Depois, execute mysqladmin reload version e
tente conectar com o programa que gerou o problema. mysqlaccess pode ser encon-
trado no diret´rio ‘bin’ sob seu diret´rio de instala¸˜o do MySQL.
o o ca
• Se vocˆ tiver um patch para um erro, isso ´ bom, mas n˜o assuma que o patch ´
e e a e
tudo que precisamos, ou que iremos us´-lo, se vocˆ n˜o fornecer algumas informa¸˜es
a e a co
necess´rias, como os casos de testes mostrando o erro que seu patch corrige. N´s
a o
podemos encontrar problemas com seu patch ou n´s podemos n˜o entendˆ-lo ao todo;
o a e
se for assim, n˜o podemos us´-lo.
a a
74. 40 MySQL Technical Reference for Version 5.0.0-alpha
Se n´s n˜o verificarmos exatamente o que o patch quer dizer, n´s n˜o poderemos us´-
o a o a a
lo. Casos de testes ir˜o ajudar-nos aqui. Mostre que o patch ir´ cuidar de todas as
a a
situa¸˜es que possam ocorrer. Se n´s encontrarmos um caso (mesmo que raro) onde o
co o
patch n˜o funcionaria, ele pode ser in´til.
a u
• Palpites sobre qual ´ o erro, porque ocorre, ou do que ele depende, geralmente est˜o
e a
errados. Mesmo o time MySQL n˜o pode adivinhar antecipadamente tais coisas sem
a
usar um debugger para determinar a causa real do erro.
• Indique na sua mensagem de e-mail que vocˆ conferiu o manual de referˆncia e o arquivo
e e
de mensagens para que outros saibam que vocˆ tentou solucionar o problema.
e
• Se vocˆ obter um parse error, por favor confira sua sintaxe com aten¸˜o! Se
e ca
vocˆ n˜o conseguiu encontrar nada errado com ela, ´ extremamente prov´vel
e a e a
que que sua vers˜o corrente do MySQL n˜o suporte a consulta que vocˆ
a a e
est´ utilizando.
a Se vocˆ estiver usando a vers˜o recente e o manual em
e a
http://www.mysql.com/documentation/manual.php n˜o cobrir a sintaxe que
a
vocˆ estiver usando, o MySQL n˜o suporta sua consulta. Neste caso, suas unicas
e a
op¸˜es s˜o implementar vocˆ mesmo a sintaxe ou enviar uma mensagem para
co a e
mysql-licensing@mysql.com e perguntar por uma oferta para implement´-lo! a
Se o manual cobrir a sintaxe que vocˆ estiver usando, mas vocˆ tiver uma vers˜o mais
e e a
antiga do MySQL, vocˆ dever´ conferir o hist´rico de altera¸˜es do MySQL para ver
e a o co
quando a sintaxe foi implementada. Neste caso, vocˆ tem a op¸˜o de atualizar para
e ca
uma nova vers˜o do MySQL. Veja Apˆndice C [News], P´gina 948.
a e a
• Se vocˆ tiver um problema do tipo que seus dados aparecem corrompidos ou vocˆ
e e
obtem erros quando vocˆ acessa alguma tabela em particular, vocˆ dever´ primeiro
e e a
checar depois tentar reparar suas tabelas com myisamchk ou CHECK TABLE e REPAIR
TABLE. Veja Cap´ “ptexi tulo 4 [MySQL Database Administration], P´gina 208.
a
• Se vocˆ frequentemente obt´m tabelas corrompidas,
e e vocˆ deve ten-
e
tar encontrar quando e porque isto acontece! Neste caso, o arquivo
‘mysql-data-directory/’hostname’.err’ deve conter algumas informa¸˜es co
sobre o que aconteceu. Veja Se¸˜o 4.10.1 [Error log], P´gina 373. Por favor forne¸a
ca a c
qualquer informa¸˜o relevante deste arquivo no seu relat´rio de erro! Normalmente
ca o
o mysqld NUNCA dever´ danificar uma tabela se nada o finalizou no meio de uma
a
atualiza¸˜o! Se vocˆ puder encontrar a causa do fim do mysqld, se torna muito mais
ca e
f´cil para n´s fornecemos a vocˆ uma solu¸˜o para o problema! Veja Se¸˜o A.1 [What
a o e ca ca
is crashing], P´gina 907.
a
• Se poss´ ivel, fa¸a o download e instale a vers˜o mais recente do MySQL para saber se
c a
ela resolve ou n˜o o seu problema. Todas vers˜es do MySQL s˜o muito bem testadas
a o a
e devem funcionar sem problemas! Acreditamos em deixar tudo, o mais comp´tivel a
´
possivel com as vers˜es anteriores, e vocˆ conseguir´ mudar de vers˜es MySQL em
o e a o
minutos! Veja Se¸˜o 2.2.4 [Which version], P´gina 80.
ca a
Se vocˆ ´ um cliente de nosso suporte, por favor envio o seu relat´rio de erros em
e e o
mysql-support@mysql.com para tratamento de alta priorit´rio, bem como para a lista de
a
mensagens apropriada para ver se mais algu´m teve experiˆncias com (e talvez resolveu) o
e e
problema.
Para informa¸˜es sobre relatar erros no MyODBC, veja Se¸˜o 12.2.4 [ODBC Problems],
co ca
P´gina 869.
a
75. Cap´
ıtulo 1: Informa¸˜es Gerais
co 41
Para solu¸˜es a alguns problemas comuns, veja Veja Apˆndice A [Problems], P´gina 907.
co e a
Quando respostas s˜o enviadas para vocˆ individualmente e n˜o para a lista de mensagens, ´
a e a e
considerado boa etiqueta resumir as respostas e enviar o resumo para a lista de mensagens
para que outras possam ter o benef´ icio das respostas que vocˆ recebeu que ajudaram a
e
resolver seu problema!
1.7.1.4 Guia para responder quest˜es na lista de discuss˜o
o a
Se vocˆ considerar que sua respota possa ter um amplo interesse, vocˆ pode querer post´-la
e e a
para a lista de mensagens em vez de responder diretamente para a pessoa que perquntou.
Tente deixar sua resposta da forma mais gen´rica poss´
e ivel para que outras pessoas al´me
da que postou a pergunda possam se beneficiar dela. Quando vocˆ postar para a lista, por
e
favor tenha certeza que sua resposta n˜o ´ uma r´plica de uma resposta anterior.
a e e
Tente resumir a parte essencial da quest˜o na sua resposta, n˜o se sinta obrigado a citar a
a a
mensagem original inteira.
Por favor n˜o poste mensagens a partir de seu browser com o modo HTML ligado! Muitos
a
usu´rios n˜o leem e-mail com browser!
a a
1.7.2 Suporte a Comunidade MySQL Atrv´s do IRC (Internet
e
Relay Chat)
Em adi¸˜o as diversas listas de email, vocˆ pode pessoas experientes da comunidade no IRC
ca e
(Internet Relay Chat). Estes s˜o os melhores canais atualmente conhecidos por n´s:
a o
• freenode (veja http://www.freenode.net/ para servidores)
• #mysql A princ´ s˜o quest˜es sobre o MySQL, mas d´vidas sobre outros bancos
ipio a o u
de dados e SQL s˜o bemvindas.
a
• #mysqlphp Quest˜es sobre MySQL+PHP, uma combina¸˜o popular.
o ca
• #mysqlperl Quest˜es sobre MySQL+Perl, outra combina¸˜o popular.
o ca
• EFnet (veja http://www.efnet.org/ para servidores)
• #mysql Quest˜es sobre MySQL.
o
Se vocˆ est´ procurando por programas clientes de IRC para conectar a uma rede IRC, dˆ
e a e
uma olhada no X-Chat (http://www.xchat.org/). X-Chat (licen¸a GPL) est´ dispon´
c a ivel
para as plataformas Unix e Windows.
1.8 Qual compatibilidade aos padr˜es o MySQL oferece ?
o
Esta se¸˜o descreve como o MySQL se relaciona aos padr˜es ANSI/ISO SQL. O Servidor
ca o
MySQL tem muitas extens˜es aos padr˜es SQL, e aqui vocˆ descobrir´ quais s˜o elas, e como
o o e a a
us´-las. Vocˆ ir´ tamb´m encontrar informa¸˜o sobre falta de funcionalidade do Servidor
a e a e ca
MySQL, e como trabalhar com algumas diferen¸as.
c
Nosso objetivo ´ n˜o restringir, sem um boa raz˜o, a usabilidade do MySQL Server para
e a a
qualquer uso. Mesmo se n˜o tivermos os recursos para fazer o desenvolvimento para todos
a
os usos poss´
iveis, estamos sempre querendo ajudar e oferecer sugest˜es para pessoas que
o
est˜o tentando usar o MySQL Server em novos territ´rios.
a o
76. 42 MySQL Technical Reference for Version 5.0.0-alpha
Um dos nossos principais objetivos com o produto ´ continuar a trabalhar em acordo com
e
o padr˜o SQL-99, mas sem sacrificar velocidade e confian¸a. N˜o estamos receosos em
a c a
adicionar extens˜es ao SQL ou suporte para recursos n˜o SQL se ele aumentar extremamente
o a
a usabilidade do MySQL Server para uma grande parte de nossos usu´rios. (A nova interface
a
HANDLER no MySQL Server 4.0 ´ um exeemplo desta estrat´gia. Veja Se¸˜o 6.4.9 [HANDLER],
e e ca
P´gina 595.)
a
Continuaremos a suportar bancos de dados transacionais e n˜o transacionais para satisfazer
a
´
tanto o uso pesado na web quanto o uso de miss˜o critica 24/7.
a
O MySQL Server foi projetado inicialmente para trabalhar com bancos de dados de tamanho
m´dio (10-100 milh˜es de registros ou cerca de 100 MB por tabela) em sistemas computa-
e o
cionais pequenos. Continuaremos a extender o MySQL Server para funcionar ainda melhor
com banco de dados na ordem de terabytes, assim como tornar poss´ compilar uma vers˜o
ivel a
reduzida do MySQL mais apropriadas para handhels e uso embutido. O design compacto
do servidor MySQL tornam ambas as dire¸˜es poss´
co iveis sem qualquer conflito na ´rvore
a
fonte.
Atualmente n˜o estamos buscando suporte em tempo real ou banco de dados em cluster
a
(mesmo se vocˆ j´ puder fazer muitas coisas com nossos servi¸os de replica¸˜o).
e a c ca
Estamos buscando melhoras no fornecimento de suporte a XML no servidor de banco de
dados.
1.8.1 Qual Padr˜o o MySQL Segue?
a
Entry-level SQL-92. ODBC levels 0-3.51.
We are aiming toward supporting the full SQL-99 standard, but without concessions to
speed and quality of the code.
1.8.2 Executando o MySQL no modo ANSI
Se vocˆ inicializa o mysqld com a op¸˜o --ansi ou --sql-mode=ANSI, o seguinte compor-
e ca
tamento ´ alterado no MySQL:
e
• || ´ um oprador de concatena¸˜o de strings em vez de um sinˆnimo para OR.
e ca o
• ‘"’ ´ tratado como um caracter identificados (com o caracter de aspasr ‘‘’ do MySQL
e
Server)e n˜o um caracter de string. Vocˆ ainda pode usar ‘‘’ para citar identificadores
a e
no modo ANSI. Uma implica¸˜o disto ´ que vocˆ n˜o pode usar aspas duplas para citar
ca e e a
um string literal, porque ela ser´ intepretada como um identificador.
a
• Vocˆ pode ter qualquer n´mero de espa¸os entre um nome de fun¸˜o e o ‘(’. Isto
e u c ca
faz com que todos nomes de fun¸˜es sejam tratadas como palavras reservadas. Como
co
resultado, se vocˆ quiser acessar qualquer banco de dados, tabelas ou coluna que ´ uma
e e
palavra reservada, vocˆ deve coloc´-lo entre aspas. Por exemplo, por haver a fun¸˜o
e a ca
USER(), o nome da tabela user no banco de dados mysql e a coluna User nesta tabela
se torna reservada, assim vocˆ deve coloc´-la entre aspas:
e a
SELECT "User" FROM mysql."user";
• REAL ´ um sinˆnimo para FLOAT no lugar de um sinˆnimo de DOUBLE.
e o o
77. Cap´
ıtulo 1: Informa¸˜es Gerais
co 43
• O n´ de isolamento padr˜o de um transa¸˜o ´ SERIALIZABLE. Veja Se¸˜o 6.7.6 [SET
ivel a ca e ca
TRANSACTION], P´gina 618.
a
• Vocˆ pode usar um campo/express˜o em GROUP BY que n˜o est´ na lista de campos.
e a a a
Executando o servidor em modo ANSI ´ o mesmo que inici´-lo com estas op¸˜es:
e a co
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,
IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=serializable
No MySQL 4.1, vocˆ pode conseguir o mesmo efeito com estas duas instru¸˜es:
e co
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode=
"REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY";
No MySQL 4.1.1 a ultima op¸˜o sql_mode tamb´m pode ser dada com:
´ ca e
SET GLOBAL sql_mode="ansi";
No caso acima o sql_mode estar´ configurado com todas as op¸˜es que s˜o relevantes para
a co a
o modo ANSI. Vocˆ pode verificar o resultado fazendo:
e
mysql> SET GLOBAL sql_mode="ansi";
mysql> SELECT @@GLOBAL.sql_mode;
-> "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_
1.8.3 Extens˜es do MySQL para o Padr˜o SQL-92
o a
O MySQL fornece algumas extens˜es que vocˆ provavelmente n˜o ir´ encontrar em alguns
o e a a
bancos de dados SQL. Fique avisado que se vocˆ us´-las, seu c´digo pode n˜o ser mais
e a o a
port´vel para outros servidores SQL. Em alguns casos, vocˆ pode escrever c´digo que inclui
a e o
extens˜es MySQL, mas continua port´vel, usando coment´rios da forma /*! ...*/. Neste
o a a
caso, o MySQL ir´ analisar e executar o c´digo com o coment´rio como ir´ fazer com
a o a a
qualquer outra instru¸˜o MySQL, mas outros servidores SQL ir˜o ignorar as extens˜es.
ca a o
Por exemplo:
SELECT /*! STRAIGHT_JOIN */ nome_campo FROM table1,table2 WHERE ...
Se vocˆ adicionar um n´mero de vers˜o depois do ’!’, a sintaxe s´ ser´ executada se a
e u a o a
vers˜o do MySQL ´ igual ou maior que o n´mero de vers˜o usado:
a e u a
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
O exemplo acima significa que se vocˆ tiver uma vers˜o do MySQL 3.23.02 ou mais nova,
e a
ent˜o o MySQL ir´ usar a palavra-chave TEMPORARY
a a
Extens˜es MySQL s˜o listadas abaixo:
o a
• Os tipos de campo MEDIUMINT, SET, ENUM e os diferentes tipos BLOB e TEXT.
• Os atributos de campos AUTO_INCREMENT, BINARY, NULL, UNSIGNED e ZEROFILL.
• Todas compara¸˜es de strings por padr˜o s˜o caso insensitivo, com classifica¸˜o orde-
co a a ca
nada determinada pelo conjunto de caracteres corrente (ISO-8859-1 Latin1 por padr˜o).
a
Se vocˆ n˜o gosta disso vocˆ dever´ declarar suas colunas com o atributo BINARY ou
e a e a
usar o operador BINARY, que fazendo com que as compara¸˜es sejam feitas de acordo
co
com a ordem ASCII usada na m´quina servidora do MySQL.
a
78. 44 MySQL Technical Reference for Version 5.0.0-alpha
• O MySQL mapeia cada banco de dados em um diret´rio sob o diret´rio de dados do
o o
MySQL, e tabelas internamente num banco de dados para arquivos no diret´rio do o
banco de dados.
Isto tem algumas implica¸˜es:co
− Nomes de bancos de dados e tabelas s˜o caso sensitivoo no MySQL em sistemas
a
operacionais que possuem o sistema de arquivos caso sensitivoo (como na maioria
dos sistemas Unix). Veja Se¸˜o 6.1.3 [Name case sensitivity], P´gina 473.
ca a
´
− Nomes de Bancos de dados, tabelas, indices, campos ou apelidos pode come¸ar c
com um d´ igito (por´m n˜o podem consistir somente de digitos).
e a
− Vocˆ pode usar comandos padr˜o do sistemas para fazer backups, renomear, apagar
e a
e copiar tabelas. Por exemplo, para renomear uma tabela, renomeie os arquivos
‘.MYD’, ‘.MYI’ e ‘.frm’. para o nome da tabela correspondente.
• Em algumas instru¸˜es SQL, vocˆ pode acessar tabelas de diferentes bancos de dados
co e
com a sintaxe nome_bd.nome_tbl. Alguns servidores SQL fornecem a mesma fun-
cionalidade mas chamam isto de User space. O MySQL n˜o suporta tablespaces como
a
em: create table ralph.my_table...IN minha_tablespace.
• LIKE ´ permitido em campos num´ricos.
e e
• O uso de INTO OUTFILE e STRAIGHT_JOIN em uma instru¸˜o SELECT. Veja Se¸˜o 6.4.1
ca ca
[SELECT], P´gina 562.
a
• A op¸˜o SQL_SMALL_RESULT em uma instru¸˜o SELECT.
ca ca
• EXPLAIN SELECT para obter uma descri¸˜o de como as tabelas s˜o ligadas.
ca a
• A utiliza¸˜o de nomes de ´
ca indices, ´indices em um prefixo de um campo, e uso de INDEX
ou KEY em uma instru¸˜o CREATE TABLE. Veja Se¸˜o 6.5.3 [CREATE TABLE], P´gina 597.
ca ca a
• O uso de TEMPORARY ou IF NOT EXISTS com CREATE TABLE.
• O uso de COUNT(DISTINCT lista) onde ’lista’ ´ maior que um elemento.
e
• O uso de CHANGE nome_campo, DROP nome_campo, ou DROP INDEX, IGNORE ou RENAME
em uma instru¸˜o ALTER TABLE. Veja Se¸˜o 6.5.4 [ALTER TABLE], P´gina 607.
ca ca a
• O uso de RENAME TABLE. Veja Se¸˜o 6.5.5 [RENAME TABLE], P´gina 611.
ca a
• Utiliza¸˜o de m´ltiplas cl´usulas ADD, ALTER, DROP, ou CHANGE em uma instru¸˜o ALTER
ca u a ca
TABLE.
• O uso de DROP TABLE com as palavras-chave IF EXISTS.
• Vocˆ pode remover m´ltiplas tabelas com uma instru¸˜o unica DROP TABLE.
e u ca ´
• As cl´usulas ORDER BY e LIMIT das instru¸˜es UPDATE e DELETE.
a co
• Sintaxe INSERT INTO ... SET col_name = ....
• A cl´usula DELAYED das instru¸˜es INSERT e REPLACE.
a co
• A cl´usula LOW_PRIORITY das instru¸˜es INSERT, REPLACE, DELETE e UPDATE.
a co
• O uso de LOAD DATA INFILE. Em alguns casos essa sintaxe ´ compat´ com o Oracle
e ivel
LOAD DATA INFILE. Veja Se¸˜o 6.4.8 [LOAD DATA], P´gina 587.
ca a
• As intru¸˜es ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE, e REPAIR TABLE.
co
• A instru¸˜o SHOW. Veja Se¸˜o 4.6.8 [SHOW], P´gina 303.
ca ca a
• Strings podem ser fechadas pelo ‘"’ ou ‘’’, n˜o apenas pelo ‘’’.
a
79. Cap´
ıtulo 1: Informa¸˜es Gerais
co 45
• O uso do meta-caractere de escape ‘’.
• A instru¸˜o SET OPTION. Veja Se¸˜o 5.5.6 [SET OPTION], P´gina 461.
ca ca a
• Vocˆ n˜o precisa nomear todos os campos selecionados na parte GROUP BY. Isto fornece
e a
melhor performance para algumas consultas espec´ ificas, mas muito comuns. Veja
Se¸˜o 6.3.7 [Group by functions and modifiers], P´gina 555.
ca a
• Pode ser especificado ASC e DESC com o GROUP BY.
• Para tornar mais f´cil para usu´rios que venham de outros ambientes SQL, o MySQL
a a
suporta apelidos (aliases) para v´rias fun¸˜es. Por exemplo, todas fun¸˜es de string
a co co
suportam as sintaxes ANSI SQL e ODBC.
• O MySQL entende os operadores || e && como ou(OR) e e(AND) logicos, como na
linguagem de programa¸˜o C. No MySQL, || e OR s˜o sinˆnimos, assim como && e
ca a o
AND. Devido a esta ´tima sintaxe, o MySQL n˜o suporta o operador ANSI SQL para
o a
concatena¸˜o de strings ||; em vez disso, use o CONCAT(). Como CONCAT() aceita
ca
v´rios argumentos, ´ f´cil converter o uso do operador || para MySQL.
a e a
• CREATE DATABASE or DROP DATABASE. Veja Se¸˜o 6.5.1 [CREATE DATABASE], P´gina 596.
ca a
• O operador % ´ um sinˆnimo para MOD(). Isto ´, N % M ´ equivalente a MOD(N,M). % ´
e o e e e
suportado para programadores C e para compatibilidade com o PostgreSQL.
• Os operadores =, <>, <= ,<, >=,>, <<, >>, <=>, AND, OR ou LIKE podem ser utilizados em
compara¸˜es de campos a esquerda do FROM nas instru¸˜es SELECT. Por exemplo:
co co
mysql> SELECT col1=1 AND col2=2 FROM nome_tabela;
• A fun¸˜o LAST_INSERT_ID(). Veja Se¸˜o 12.1.3.31 [mysql_insert_id()], P´gina 799.
ca ca a
• Os operadores extendidos REGEXP e NOT REGEXP utilizados em express˜es regulares.
o
• CONCAT() ou CHAR() com um ou mais de dois argumentos. (No MySQL, estas fun¸˜es co
receber qualquer n´mero de argumentos.)
u
• As fun¸˜es BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(),
co
ENCRYPT(), MD5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS()
ou WEEKDAY().
• Uso de TRIM() para cortar substrings. o SQL-99 s´ suporta remo¸˜o de caracteres
o ca
unicos.
´
• As fun¸˜es do GROUP BY: STD(), BIT_OR(), BIT_AND() e BIT_XOR() e GROUP_CONCAT().
co
Veja Se¸˜o 6.3.7 [Group by functions and modifiers], P´gina 555.
ca a
• Uso de REPLACE no lugar de DELETE + INSERT. Veja Se¸˜o 6.4.7 [REPLACE], P´gina 587.
ca a
• As instru¸˜es FLUSH, RESET e DO.
co
• A possibilidade de configurar vari´veis em uma instru¸˜o com :=:
a ca
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS media FROM tabela_teste;
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
1.8.4 Diferen¸as do MySQL em Compara¸˜o com o SQL-92
c ca
N´s tentamos fazer com que o MySQL siguisse os padr˜es ANSI SQL (SQL-92/SQL-99) e
o o
o ODBC SQL, mas em alguns casos, o MySQL realiza opera¸˜es de forma diferente:
co
• Para campos VARCHAR, expa¸os extras s˜o removidos quando o valor ´ armazenado.
c a e
Veja Se¸˜o 1.8.6 [Bugs], P´gina 53.
ca a
80. 46 MySQL Technical Reference for Version 5.0.0-alpha
• Em alguns casos, campos CHAR s˜o alterados sem perguntas para o tipo de campo
a
VARCHAR. Veja Se¸˜o 6.5.3.1 [Silent column changes], P´gina 606.
ca a
• Privil´gios para uma tabela n˜o s˜o negadas automaticamente quando vocˆ apaga uma
e a a e
tabela. Vocˆ deve usar explicitamente um REVOKE para negar privil´gios para uma
e e
tabela. Veja Se¸˜o 4.4.1 [GRANT], P´gina 255.
ca a
Para uma lista priorizada indicando quando novas extens˜es ser˜o adi-
o a
cionadas ao MySQL vocˆ deve consultar lista TODO online do MySQL em
e
http://www.mysql.com/doc/en/TODO.html. Esta ´ a ultima vers˜o da lista TODO neste
e ´ a
manual. Veja Se¸˜o 1.6 [TODO], P´gina 26.
ca a
1.8.4.1 Subqueries
MySQL Version 4.1 supports subqueries and derived tables (unnamed views). Veja
Se¸˜o 6.4.2 [Subqueries], P´gina 569.
ca a
For MySQL versions prior to 4.1, most subqueries can be successfully rewritten using joins
and and other methods. Veja Se¸˜o 6.4.2.11 [Rewriting subqueries], P´gina 577.
ca a
1.8.4.2 SELECT INTO TABLE
O MySQL ainda n˜o suporta a extens˜o SQL Oracle: SELECT ... INTO TABLE .... MySQL
a a
suporta a sintaxe ANSI SQL INSERT INTO ... SELECT ..., que ´ basicamente a mesma
e
coisa. Veja Se¸˜o 6.4.3.1 [INSERT SELECT], P´gina 581.
ca a
INSERT INTO tblTemp2 (fldID)
SELECT tblTemp1.fldOrder_ID
FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;
De maneira alternativa, vocˆ pode usar SELECT INTO OUTFILE... ou CREATE TABLE ...
e
SELECT para resolver seu problema.
1.8.4.3 Transa¸oes e Opera¸˜es Atˆmicas
c˜ co o
O MySQL Server (vers˜o 3.23-max e todas as vers˜es 4.0 e acima) suportam transa¸˜es com
a o co
os mecanismos de armazenamento transacionais InnoDB e BDB. InnoDB fornece compat-
ibilidade total com ACID. Veja Cap´ “ptexi tulo 7 [Tipos de tabelas], P´gina 629.
a
Os outros tipos de tabelas n˜o transacionais (tais como MyISAM) no MySQL Server seguem
a
um paradigma diferente para integridade de dados chamado “Oper¸~es At^micas.” Em
co o
termos de transa¸˜o, tabelas MyISAM efetivamente sempre operam em modo AUTOCOMMIT=1.
ca
Opera¸˜es atˆmicas geralmente oferecem integridade compar´vel com a mais alta perfor-
co o a
mance.
Com o MySQL Server suportando ambos os paradigmas, o usu´rio pode decidir se precisa
a
da velocidade das opera¸˜es atˆmicas ou se precisa usar recursos transacionais em seu
co o
aplicativo. Esta escolha pode ser feita em uma base por tabela.
Como notado, a compara¸˜o para tabelas transacionais vs. n˜o transacionais As noted,
ca a
the trade off for transactional vs. non-transactional table se encontra em grande parte
no desempenho. Tabelas transacionais tem uma exigˆncia de mem´ria e espa¸o em disco
e o c
81. Cap´
ıtulo 1: Informa¸˜es Gerais
co 47
significantemente maior e maior sobrecarga da CPU. Tipos de tabelas transacionais como
InnoDB oferecem muitos recursos unicos. O projeto modular do MySQL Server permite
´
o uso concorrente de todas estes mecanismos de armazenamento para servir a diferentes
exigˆncias e oferecer um ´timo desempenho em todas as situa¸˜es.
e o co
Mas como fazer uso dos recursos do MySQL Server para manter uma integridade rigorosa
mesmo com tabelas MyISAM n˜o transacionais e como este recurso se compara com os tipos
a
de tabelas transacionais?
1. No paradigma transacional, se as suas aplica¸˜es s˜o escritas de uma forma que ´
co a e
dependente na chamada de ROLLBACK em vez de COMMIT em situa¸˜es cr´
co iticas, ent˜o
a
transa¸˜es s˜o mais convenientes. Al´m disso, transa¸˜es asseguram que atualiza¸˜es
co a e co co
inacabadas ou atividades corrompidas n˜o sejam executadas no banco de dados; o
a
servidor oferece uma oportunidade para fazer um rollback autom´tico e seu banco de
a
dados ´ mantido.
e
O MySQL Server, na maioria dos casos, permite a vocˆ resolver potenciais problemas
e
incluindo simples conferˆncias antes das atualiza¸˜es e executando scripts simples que
e co
conferem inconsistˆncias no banco de dados e, automaticamente, repara ou avisa caso
e
isto ocorra. Perceba que apenas usando o log do MySQL ou mesmo adicionando um
log extra, pode-se corrigir tabelas perfeitamente sem nenhuma perda de integridade.
2. Mais do que nunco, atualiza¸˜es transacionais fatais podem ser reescritas para serem
co
atˆmicas. De fato podemos dizer que todos problemas de integridade que transa¸˜es
o co
resolvem podem ser feitas com LOCK TABLES ou atualiza¸˜es atˆmicas, assegurando que
co o
vocˆ nunca ir´ ter uma finaliza¸˜o autom´tica da tabela, o que ´ um problema comum
e a ca a e
em bancos de dados transacionais.
3. Nem mesmo transa¸˜es podem prevenir todas as falhas se o servidor cair. Nestes
co
casos mesmo um sistema transacional pode perder dados. A diferen¸a entre sistemas
c
diferentes ´ apenas em qu˜o pequeno ´ o lapso de tempo em que eles podem perder
e a e
dados. Nenhum sistema ´ 100% seguro, somente “seguro o suficiente.” Mesmo o
e
Oracle, com reputa¸˜o de ser o mais seguro bancos de dados transacionais, tem relatos
ca
de algumas vezes perder dados nestas situa¸˜es.
co
Para estar seguro com o MySQL Server, vocˆ apenas deve fazer backups e ter o log
e
de atualiza¸˜es ligado. Com isto vocˆ pode se recuperar de qualquer situa¸˜o poss´
co e ca ivel
´
com bancos de dados transacionais. E sempre bom ter backups, independente de qual
banco de dados vocˆ usa.
e
O paradigma transacional tem seus benef´ icios e suas desvantagens. Muitos usu´rios e
a
desenvolvedores de aplica¸˜es dependem da facilidade com a qual eles podem codificar
co
contornando problemas onde abortar parece ser, ou ´ necess´rio. No entanto, se vocˆ
e a e
´ novo no paradigma de opera¸˜es atˆmicas ou tem mais familiaridade ou conforto com
e co o
transa¸˜es, considere o benef´
co icio da velocidade que as tabelas n˜o transacionais podem
a
oferece, na ordem de 3 a 5 vezes da velocidade que as tabelas transacionais mais r´pidas e
a
otimizadas.
Em situa¸˜es onde integridade ´ de grande importˆncia, as atuais caracter´
co e a isticas do MySQL
permitem n´ iveis transacionais ou melhor confian¸a e integridade. Se vocˆ bloquear tabelas
c e
com LOCK TABLES todos as atualiza¸˜es ir˜o ser adiadas at´ qualquer verifica¸˜o de inte-
co a e ca
gridade ser feita. Se vocˆ s´ obter um bloqueio de leitura (oposto ao bloqueio de escrita),
e o
82. 48 MySQL Technical Reference for Version 5.0.0-alpha
ent˜o leituras e inser¸˜es poder˜o ocorrer. Os novos registros inseridos n˜o poder˜o ser vi-
a co a a a
sualizados por nenhum dos clientes que tiverem um bloqueio de LEITURA at´ eles liberarem
e
estes bloqueios. Com INSERT DELAYED vocˆ pode enfileirar inser¸˜es em uma fila local, at´
e co e
os bloqueios serem liberados, sem que o cliente precise esperar at´ a inser¸˜o completar.
a ca
Veja Se¸˜o 6.4.3.2 [INSERT DELAYED], P´gina 581.
ca a
“Atˆmico”, no sentido em que n´s mencionamos, n˜o ´ m´gico. Significa apenas que vocˆ
o o a e a e
pode estar certo que enquanto cada atualiza¸˜o espec´
ca ifica est´ sendo executada, nenhum
a
outro usu´rio pode interferir com ela, e nunca haver´ um rollback autom´tico (que pode
a a a
acontecer em sistemas baseados em transa¸˜es se vocˆ n˜o tiver muito cuidado). O MySQL
co e a
tamb´m assegura que nunca ocorrer´ uma leitura suja.
e a
A seguir est˜o algumas t´cnicas para trabalhar com tabelas n˜o transacionais:
a e a
• Loops que precisam de transa¸˜es normalmente pode ser codificados com a ajuda de
co
LOCK TABLES, e vocˆ n˜o precisa de cursores para atualizar regitros imeditamente.
e a
• Para evitar o uso do ROLLBACK, vocˆ pode usar as seguintes estrat´gias:
e e
1. Use LOCK TABLES ... para fazer um lock todas as tabelas que vocˆ quer acessar.
e
2. Condi¸˜es de teste.
co
3. Atualize se estiver tudo OK.
4. Use UNLOCK TABLES para liberar seus locks.
Isto ´ normalmente um m´todo muito mais r´pido que usar transa¸˜es com poss´
e e a co iveis
ROLLBACKs, mas nem sempre. A unica situa¸˜o que esta solu¸˜o n˜o pode tratar ´
´ ca ca a e
quando algu´m mata a threads no meio de uma atualiza¸˜o. Neste caso, todas os locks
e ca
ser˜o liberados mas algumas das atualiza¸˜o podem n˜o ter sido execuadas.
a ca a
• Vocˆ tamb´m pode usar fun¸˜es para atualizar registros em uma unica opera¸˜o. Vocˆ
e e co ´ ca e
pode conseguir uma aplica¸˜o muito eficiente usando as seguintes t´cnicas:
ca e
• Modifique campos em rela¸˜o ao seus valores atuais.
ca
• Atualize apenas aqueles campos que realmente tiveram altera¸˜es.
co
Por exemplo, quando fazemos atualiza¸˜es em alguma informa¸˜o de cliente, atual-
co ca
izamoa apenas os dados do clientes que alteraram e testamos apenas aqueles com dados
alterados ou dados que dependem dos dados alterados, mudaram em compara¸˜o com o
ca
registro original. O teste dos dados alterados ´ feito com a cl´usula WHERE na instru¸˜o
e a ca
UPDATE. Se o registro n˜o foi atualizado, mandamos ao cliente uma mensagem: ”Some
a
of the data you have changed has been changed by another user.” Ent˜o mostramos o
a
registro antigo versus o novo em uma janela, assim o usu´rio pode decidir qual vers˜o
a a
do registro de cliente de ser usado.
Isto nos d´ algo similar a lock de colunas mas que, na verdade, ´ melhor porque apenas
a e
atualizamos algumas das colunas, usando valores relativos ao seu valor atual. Isto
significa que instru¸˜es UPDATE comuns se parecem com estas:
co
UPDATE nometabela SET pay_back=pay_back+125;
UPDATE customer
SET
customer_date=’current_date’,
address=’new address’,
83. Cap´
ıtulo 1: Informa¸˜es Gerais
co 49
phone=’new phone’,
money_he_owes_us=money_he_owes_us-125
WHERE
customer_id=id AND address=’old address’ AND phone=’old phone’;
Como vocˆ pode ver, isto ´ muito eficiente e funciona mesmo se outro cliente alterar
e e
os valores nas colunas pay_back ou money_he_owes_us.
• Em muitos casos, usu´rios querem fazer ROLLBACK e/ou LOCK TABLES com o prop´sito
a o
de gerenciarem identificadores unicos para algumas tabelas. Isto pode ser tratado muito
´
mais eficientemente usando uma coluna AUTO_INCREMENT e tamb´m uma fun¸˜o SQL
e ca
LAST_INSERT_ID() ou a fun¸˜o da API C mysql_insert_id(). Veja Se¸˜o 12.1.3.31
ca ca
[mysql_insert_id()], P´gina 799.
a
Geralmente vocˆ pode codificar evitando lock de registro. Algumas situa¸˜es realmente
e co
precisam disto, e tabelas InnoDB suportam lock de regitstro. Comoo MyISAM, vocˆ e
pode usar uma coluna de flag na tabela e fazer algo como a seguir:
UPDATE nome_tbl SET row_flag=1 WHERE id=ID;
O MySQL retorna 1 para o n´mero de linhas afetadas se as linhas foram encontradas
u
e row_flag j´ n˜o era 1 na linha original.
a a
Vocˆ pode pensar nisto como se o MySQL Server tivesse alterado a consulta anterior
e
para:
UPDATE nome_tbl SET row_flag=1 WHERE id=ID AND row_flag <> 1;
1.8.4.4 Stored Procedures e Triggers
Steored procedures est˜o sendo implementadas em nossa vers˜o 5.0 na ´rvore de desenvolvi-
a a a
mento. Veja Se¸˜o 2.3.4 [Instalando da ´rvore de fontes], P´gina 100.
ca a a
Este esfor¸o ´ baseado no SQL-99, que tˆm uma sintaxe b´sica similar (mas n˜o idˆntica) ao
c e e a a e
Oracle PL/SQL. Em adi¸˜o a isto, estamoas implementando o framework SQL-99 enganchar
ca
em linguagens externas.
Uma Stored Procedure ´ um conjunto de comandos SQL que podem ser compilados e
e
armazenados no servidor. Uma fez feito isso, os clientes n˜o necessitam reescrever toda a
a
consulta mas podem fazer referˆncia ` stored procedure. Isto fornece melhor performance
e a
porque a query necessita ser analisada pelo servidor somente uma vez, e necessita menos
informa¸˜o para ser enviada entre o servidor e o cliente. Vocˆ tamb´m pode elevar o
ca e e
´
nivel conceitual tendo bibliotecas de fun¸˜es no servidor. No entanto, stored procedures
co
aumentam a carga no servidor de banco de dados, j´ que grande parte do trabalho ´ feito
a e
do lado do servidor e menos do lado do cliente (aplica¸˜o).
ca
Triggers est˜o programados para serem implementados no MySQL vers˜o 5.1. Um trigger
a a
´ um tipo de stored procedure que ´ chamado quando um evento em particular ocorre.
e e
Por exemplo, vocˆ poderia configurar uma stored procedure que ´ disparada toda vez que
e e
um registro for apagado de uma tabela transacional que automaticamente apaga o cliente
correspondente de uma tabela de clientes quando todas as transa¸˜es forem removidas.
co
84. 50 MySQL Technical Reference for Version 5.0.0-alpha
1.8.4.5 Chaves Estrangeiras
No MySQL Server 3.23.44 e posterior, tabelas InnoDB suportam verifica¸˜o de restri¸˜o
ca ca
de chaves estrangeiras, incluindo CASCADE, ON DELETE, e ON UPDATE. Veja Se¸˜o 7.5.5.2
ca
[Restri¸˜es de chaves estrangeiras do InnoDB], P´gina 652.
co a
Para outros tipos de tabela, o MySQL Server atualmente apenas analisa a sintaxe de
FOREIGN KEY no comando CREATE TABLE, mas n˜o usa/armazena esta informa¸˜o. Em
a ca
um futuro pr´ximo esta implementa¸˜o ser´ estendida para que assim a informa¸˜o seja
o ca a ca
armazenada num arquivo de especifica¸˜o de tabela e possa ser recuperado por mysqldump
ca
e ODBC. Em um est´gio posterior, restri¸˜es de chaves estrangeiras ser˜o implementadas
a co a
para tabelas MyISAM.
Note que as chaves estrangeiras no SQL n˜o s˜o usadas para ligar tabelas, mas s˜o usadas
a a a
para verificar a integridade referencial. Se vocˆ deseja obter resultados de m´ltiplas tabelas
e u
de uma instru¸˜o SELECT, vocˆ pode fazer isto ligando tabelas:
ca e
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
Veja Se¸˜o 6.4.1.1 [JOIN], P´gina 567. Veja Se¸˜o 3.6.6 [Exemplos de chaves estrangeiras],
ca a ca
P´gina 199.
a
Quando usada como uma restri¸˜o, FOREIGN KEYs n˜o precisa ser usado se a aplica¸˜o insere
ca a ca
duas linhas em tabelas MyISAM na ordem apropriada.
Para tabelas MyISAM, vocˆ pode contornar a falta de ON DELETE adicionando a instru¸˜o
e ca
DELETE apropriada a uma aplica¸˜o quando vocˆ deletar registros de uma tabela que tem
ca e
uma chave estrangeira. Na pr´tica isto ´ mais r´pido e muito mais port´vel que utilizar
a e a a
chaves estrangeiras.
No MySQL Server 4.0 vocˆ pode utilizar dele¸˜es multi-tabela para apagar linha de muitas
e co
tabelas com um comando. Veja Se¸˜o 6.4.5 [DELETE], P´gina 584.
ca a
A sintaxe FOREIGN KEY sem ON DELETE ... ´ usada geralmente por aplicac˜es ODBC para
e o
produzir cl´usulas WHERE autom´ticas.
a a
Note que chaves estrangeiras s˜o mal usadas com frequˆncia, o que pode causar graves
a e
problemas. Mesmo quando usado apropriadamente, o suporte a chaves estrangeiras n˜o ´ a e
uma solu¸˜o m´gica para o problema de integridade referˆncial, embora possa ajudar.
ca a e
Algumas vantagens das chaves estrangeiras:
• Assumindo o projeto apropriado das rela¸˜es, as restri¸˜es de chaves estrangeiras
co co
tornar˜o mais dif´ para um programador introduzir uma inconsistˆncia no banco
a icil e
de dados.
• Usar atualiza¸˜es e dele¸˜es em cascata pode simplificar o c´digo do cliente.
co co o
• Regras de chaves estrangeiras projetados apropriadamente ajudam ao documentar a
rela¸˜o entre as tabelas.
ca
Desvantagens:
• Erros, que s˜o fac´is de se ter ao projetar a rela¸˜o das chaves, podem causar graves
a e ca
problemaspor exemplo, regras circulares ou a combina¸˜o errada de uma dele¸˜o em
ca ca
cascata.
• Verifica¸˜o adicional no banco de dados afeta o desempenho, por esta raz˜o algumas
ca a
co o ´ da aplica¸˜o.
das principais aplica¸˜es comerciais codificam sua l´gica no nivel ca
85. Cap´
ıtulo 1: Informa¸˜es Gerais
co 51
• N˜o ´ incomum para um DBA fazer uma topologia complexa de rela¸˜es que torna
a e co
muito dif´ e em alguns casos imposs´
icl, ivel, fazer backup ou restaurar tabelas individuais.
1.8.4.6 Views
Views est˜o senda implementadas atualmente e aparecer˜o na vers˜o 5.0 e 5.1 do MySQL
a a a
Server.
Historicamente o MySQL Server tem sido mais usado em aplica¸˜es e sistemas web onde o
co
´
desenvolvedor da aplica¸˜o tem total controle sobre o uso do banco de dados. E claro que o
ca
uso aumentou em v´rias vezes e ent˜o descobrimos que um crescente n´meros de usu´rios
a a u a
consideram views como um importante aspecto.
Unnamed views (derived tables, uma seubquery na cl´usula FROM de uma SELECT) j´ est˜o
a a a
implementadas na vers˜o 4.1.
a
Views geralmente s˜o muito uteis para permitir aos usu´rios acessar uma s´rie de rela¸˜es
a ´ a e co
(tabelas) como uma tabela, e limitar o acesso a apenas estas rela¸˜es. Views tamb´m
co e
podem ser usadas para restringir o acesso aos registros (um subconjunto de uma tabela
em particular). Mas views n˜o s˜o necess´rias para restringir o acesso a registros j´ que
a a a a
o MySQL Server tem um sofisticado sistema de privil´gios. Veja Se¸˜o 4.3 [Sistema de
e ca
privil´gios], P´gina 227.
e a
Muitos SGBD n˜o permitem atualizar nenhum registro em uma view, mas vocˆ tem que
a e
fazer as atualiza¸˜es em tabelas separadas.
co
Em nosso projeto de implemta¸˜o de views, n´s buscamos (tanto quanto for poss´ dentro
ca o ivel
do SQL) compatibilidade com “Codd’s Rule #6” para sistemas de banco de dados rela-
cionais: todos os views que s˜o teoricamente atualiz´veis, devem se atualizados tamb´m na
a a e
pr´tica.
a
1.8.4.7 ‘--’ como In´
icio de Coment´rio
a
Outros bancos de dados SQL usam ‘--’ para iniciar coment´rios. O MySQL usa ‘#’ como
a
o caractere para in´ de coment´rio, mesmo se a ferramenta de linha de comando mysql
icio a
remover todas linhas que come¸am com ‘--’. Vocˆ tamb´m pode usar o coment´rio no
c e e a
estilo C /*isto ´ um coment´rio*/ com o MySQL Server. Veja Se¸˜o 6.1.6 [Coment´rios],
e a ca a
P´gina 479.
a
O MySQL Server vers˜o 3.23.3 e superior suporta o estilo de coment´rio ‘--’ somente se o
a a
coment´rio for seguido por um caractere de espa¸o (ou por um caracter de controle como
a c
uma nova linha). Isto ocorre porque este estilo de coment´rio causou muitos problemas
a
com queries SQL geradas automaticamente que usavam algo como o c´digo seguinte, onde
o
automaticamente er´ inserido o valor do pagamento para !pagamento!:
a
UPDATE nome_tabela SET credito=credito-!pagamento!
O que vocˆ acha que ir´ acontecer quando o valor de pagamento for negativo? Como 1--1
e a
´ legal no SQL, n´s achamos terr´ que ‘--’ signifique in´ de coment´rio.
e o ivel icio a
Usando a nossa implementa¸˜o deste m´todo de coment´rio no MySQL Server Version
ca e a
3.23.3 e posterior, 1-- Isto ´ um coment´rio ´ atualmente seguro.
e a e
Outro recurso seguro ´ que o cliente de linha de comando mysql remove todas as linhas que
e
iniciam com ‘--’.
86. 52 MySQL Technical Reference for Version 5.0.0-alpha
A seguinte discuss˜o somente interessa se vocˆ estiver executando uma vers˜o do MySQL
a e a
inferior a vers˜o 3.23:
a
Se vocˆ tem um programa SQL em um arquivo texto que contˆm coment´rios ‘--’ vocˆ
e e a e
dever´ usar:
a
shell> replace " --" " #" < arquivo-texto-com-coment´rio.sql
a
| mysql banco-de-dados
No lugar de:
shell> mysql banco-de-dados < arquivo-texto-com-comentario.sql
Vocˆ tamb´m pode editar o pr´prio arquivo de comandos alterando os coment´rios ‘--’
e e o a
para ‘#’:
shell> replace " --" " #" -- arquivo-texto-com-comentario.sql
Desfa¸a utilizando este comando:
c
shell> replace " #" " --" -- arquivo-texto-com-comentario.sql
1.8.5 Como o MySQL Lida com Restri¸˜es
co
Como o MySQL lhe permite trabalhar com tabelas transacionais e n˜o transacionais (que
a
n˜o permitem rollback), o tratamento de restri¸˜es ´ um pouco diferente no MySQL que
a co e
em outros bancos de dados.
Temos que tratar o caso quando vocˆ atualiza diversos registros com uma tabela n˜o transa-
e a
cional que n˜o pode fazer rollback em erros.
a
A filosofia b´sica ´ tentar obter um erro para qualquer coisa que possamos detectar em temp
a e
de compila¸˜o mas tentar recuperar de qualquer erro que abtemos em tempo de execu¸˜o.
ca ca
Fazemos isto na maiorioa dos casos, mas n˜o para todos ainda. Veja Se¸˜o 1.6.4 [TODO
a ca
future], P´gina 29.
a
A op¸˜o b´sica que o MySQL tem ´ parar a instru¸˜o no meio ou fazer o melhor para se
ca a e ca
recuperar do problema e continuar.
A seguir mostramos o que acontece com diferentes tipos de restri¸˜es.
co
1.8.5.1 Restri¸oes de PRIMARY KEY / UNIQUE
c˜
Normalmente vocˆ receber´ um erro quando tentar fazer um INSERT / UPDATE de um registro
e a
que cause uma viola¸˜o de uma chave prim´ria, chave unica ou chave estrangeira. Se vocˆ
ca a ´ e
estiver usando um mecanismo de armazenamento transacional, como InnoDB, o MySQL
automaticamente far´ um rollback da transa¸˜o. Se vocˆ estiver usando mecanismos de
a ca e
armazenemento n˜o transacionais o MySQL ir´ para no registro errado e deiar o resto dos
a a
registros se processamento.
Para tornar a vida mais f´cil o MySQL adicionou suporte a diretiva IGNORE para a maioria
a
dos comandos que podem causar uma viola¸˜o de chave (como INSERT IGNORE ...). Neste
ca
caso o MySQL ir´ ignorar qualquer viola¸˜o de chave e continuar´ com o processamento do
a ca a
pr´ximo registro. Vocˆ pode obter informa¸˜o sobre o que o MySQL fez com a fun¸˜o da
o e ca ca
API mysql_info() API function e em vers˜es posteriores do MySQL 4.1 com o comando
o
SHOW WARNINGS. Veja Se¸˜o 12.1.3.29 [mysql info], P´gina 798. Veja Se¸˜o 4.6.8.9 [SHOW
ca a ca
WARNINGS], P´gina 323.
a
87. Cap´
ıtulo 1: Informa¸˜es Gerais
co 53
Note que no momento apenas as tabelas InnoDB suportam chaves estrangeiras. Veja
Se¸˜o 7.5.5.2 [Restri¸˜es de chaves estrangeiras no InnoDB], P´gina 652.
ca co a
O suporte a chaves estrangeiras nas tabelas MyISAM est´ programado para ser inclu´ na
a ida
arvor´ de fonte do MySQL 5.0.
e
1.8.5.2 Restri¸oes de NOT NULL
c˜
Para poder suportar um f´cil tratamento de tabelas n˜o transacionais todos os campos no
a a
MySQL tˆm valores padr˜o.
e a
Se vocˆ inserir um valor ’errado’ em uma coluna como um NULL em uma coluna NOT NULL
e
ou um valor num´rico muito grande em um campo num´rico, o MySQL ir´ atribuir a coluna
e e a
´
o ’melhor valor possivel’ em vez de dar uma mensagem de erro. Para strings este valor ´
e
uma string vazia ou a maior string poss´ que possa estar na coluna.
ivel
Isto significa que se vocˆ tentar armazenar NULL em uma coluna que n˜o aceita valores NULL,
e a
o MySQL Server armazenar´ 0 ou ’’ (strig vazia) nela. Este ultimo comportamento pode,
a ´
para uma simples inser¸˜o de registro, ser alterado com a op¸˜o de compila¸˜o -DDONT_
ca ca ca
USE_DEFAULT_FIELDS.) Veja Se¸˜o 2.3.3 [Op¸˜es de configura¸˜o], P´gina 97. Isto faz com
ca co ca a
que as instru¸˜es INSERT gerem um erro a menos que vocˆ explicite valores espec´
co e ificos para
todas as colunas que exigem um valor diferente de NULL.
A raz˜o para as regras acima ´ que n˜o podemos verificar estas condi¸˜es antes da consulta
a e a co
come¸ar a executar. Se encontrarmos um problema depois de atualizar algumas linahs, n˜o
c a
podemos fazer um rollback j´ que o tipo de tabela n˜o suporta isto. A op¸˜o de parar n˜o
a a ca a
´ t˜o boa como no caso em que a atualiza¸˜o esteja feita pela metade que ´ provavelmente
e a ca e
o pior cen´rio poss´
a ivel. Neste caso ´ melhor ’fazer o poss´
e ivel’ e ent˜o continuar como se
a
nada tivesse acontecido. No MySQL 5.0 plenejamos melhorar into forncendo avisos para
convers˜es autom´ticas de campo, mais uma op¸˜o para deixar vocˆ fazer um rollback
o a ca e
das instru¸˜es que usam apenas tabelas transacionais no caso de tal instru¸˜o fizer uma
co ca
defini¸˜o de campo n˜o permitida.
ca a
O mostrado acima significa que n˜o se deve usar o MySQL para verificar o conte´do dos
a u
campos, mas deve se fazˆ-lo por meio da aplica¸˜o.
e ca
1.8.5.3 Restri¸˜es de ENUM e SET
co
No MySQL 4.x ENUM n˜o ´ uma restri¸˜o real, mas um modo mauis eficiente de armazenar
a e ca
campos que possam apenas conter um conjunto de valores dados. Isto ´ devido as mesmas
e
raz˜es pelas quais NOT NULL n˜o ´ respeitado. Veja Se¸˜o 1.8.5.2 [restri¸˜es NOT NULL],
o a e ca co
P´gina 53.
a
Se vocˆ inserir um valor errado em um campo ENUM, ele ser´ configurado com uma string
e a
vazia em um contexto string. Veja Se¸˜o 6.2.3.3 [ENUM], P´gina 499.
ca a
Se vocˆ inserir uma op¸˜o errada em um campo SET, o valor errado ser´ ignorado. Veja
e ca a
Se¸˜o 6.2.3.4 [SET], P´gina 500.
ca a
1.8.6 Erros Conhecidos e Deficiˆncias de Projetos no MySQL
e
88. 54 MySQL Technical Reference for Version 5.0.0-alpha
1.8.6.1 Erros da Vers˜o 3.23 Corrigidos em Vers˜es Posteriores do
a o
MySQL
Os seguintes erros/bugs conhecidos n˜o est˜o corrigidos no MySQL 3.23 porque corrig´
a a i-los
involveria a mudan¸a de muito c´digo, o que poderia introduzir outros erros, talvez piores.
c o
Os erros s˜o tamb´m classificados como ’n˜o fatal’ ou ’toler´vel’.
a e a a
• Pode se obter um deadlock ao fazer LOCK TABLE em multiplas tabelas e ent˜o na mesma
a
conex˜o fizer um DROP TABLE em uma delas enquanto outra thread est´ tentando blo-
a a
quear a tabela. Pode-se no entanto fazer um KILL em qualquer uma das threads
envolvidas para resolver isto. Corrigido na vers˜o 4.0.12
a
• SELECT MAX(campo_chave) FROM t1,t2,t3... onde uma das trˆs tabelas est´ vazia
e a
n˜o retorna NULL, mas sim o valor m´ximo da coluna. Corrigido na vers˜o 4.0.11.
a a a
• DELETE FROM heap_table sem um WHERE n˜o funcionam em tabelas HEAP com lock.
a
1.8.6.2 Open Bugs / Deficiˆncias de Projeto no MySQL
e
Os seguintes problemas s˜o conhecidos e tem prioridade muito alta para serem corrigidos:
a
• FLUSH TABLES WITH READ LOCK n˜o bloqueia CREATE TABLE ou COMMIT, que pode criar
a
um problema com a posi¸˜o do log bin´rio ao se fazer um backup completo de tabelas
ca a
e do log bin´rio.
a
• ANALYZE TABLE em uma tabela BDB pode, em alguns, casos inutilizar a tabela at´ que
e
se reinicie o servidor mysqld. Quando isto acontecer vocˆ ir´ ver o seguinte tipo de
e a
erro no arquivo de erros do MySQL.
001207 22:07:56 bdb: log_flush: LSN past current end-of-log
• O MySQL aceita parenteses na parte FROM, mas os ignora sem aviso. A raz˜o pela qual
a
n˜o s˜o retornados erros ´ que muitos clientes que geram consultas automaticamente
a a e
adicionam parentesis na parte FROM mesmo onde eles n˜o s˜o necess´rios.
a a a
• Concatenar muitos RIGHT JOINS ou combinar joins LEFT e RIGHT na mesma consulta
podem dar uma resposta incorreta ja que o MySQL s´ gera registros NULL para tabelas
o
que precedem um join LEFT ou antes de um join RIGHT. Isto ser´ corrigido na vers˜o
a a
5.0 junto com o suporte a parentesis na parte FROM.
• N˜o execute ALTER TABLE em uma tabela BDB em que vocˆ estiver executando
a e
transa¸˜es multi-instru¸˜es n˜o completadas.
co co a (A transa¸˜o provavelmente ser´
ca a
ignorada).
• ANALYZE TABLE, OPTIMIZE TABLE e REPAIR TABLE podem causar problemas em tabelas
para as quais vocˆ estiver usando INSERT DELAYED.
e
• Fazendo um LOCK TABLE .. e FLUSH TABLES .. n˜o garante que n˜o existem transa¸˜es
a a co
n˜o terminadas em progresso na tabela.
a
• Tabelas BDB s˜o um pouco lentas para abrir. Se vocˆ tiver v´rias tabelas BDB em um
a e a
banco de dados, gastar´ muito tempo para usar o cliente mysql no banco de dados se
a
vocˆ n˜o estiver usando a op¸˜o -A ou se vocˆ estiver usando rehash. Isto ´ percebido
e a ca e e
principalmente quando vocˆ tiver um cache de tabelas grandes.
e
• A replica¸˜o utiliza o log a nivel de consulta: o master grava a consulta no log bin´rio.
ca a
Isto ´ um r´pido, compacto e eficiente m´todo de registro o que funciona perfeitamente
e a e
89. Cap´
ıtulo 1: Informa¸˜es Gerais
co 55
na maioria dos casos. Embora nunca tenhamos ouvido sobre um caso ocorrido, h´ uma
a
chance te´rica que o dado no master e slave sejam diferente se uma consulta ´ feita
o e
de tal modo que a modifica¸˜o do dado ´ n˜o determin´
ca e a istica, isto ´, deixar ao desejo
e
do otimizador de consultas (o que geralmente n˜o ´ uma boa pr´tica, mesmo fora da
a e a
replica¸˜o!). Por exemplo:
ca
− CREATE ... SELECT ou INSERT ... SELECT que preenchem com zeros ou NULL uma
coluna auto_increment.
− DELETE se vocˆ estiver apagando registros de uma tabela que tem chaves es-
e
trangeiras com a propriedade ON DELETE CASCADE.
− REPLACE ... SELECT, INSERT IGNORE ... SELECT se vocˆ tiver valores de chaves
e
duplicados nos dados inseridos.
˜
Se e somente se todos estas consultas NAO tiverem cl´usulas ORDER BY garantindo uma
a
ordem determin´ istica.
Na verdade, por exemplo para INSERT ... SELECT sem ORDER BY, o SELECT pode re-
tornar registros em uma ordem diferente (no qual resultar´ em um registro tendo
a
diferentes posi¸˜es, obtendo um n´mero diferente na coluna auto_increment), depen-
co u
dendo da escolhe feita pelo otimizador no master e slave. Uma consulta ser´ otimizada
a
deiferentemente no master e slave apenas se:
− Os arquivos usados pelas duas consultas n˜o s˜o exatamente a mesma; por exemplo
a a
OPTIMIZE TABLE foi executado nas tabelas master e n˜o nas nas tabelas slave (para
a
corrigir isto, desde o MySQL 4.1.1, OPTIMIZE, ANALYZE e REPAIR s˜o escritos no
a
log bin´rio).
a
− A tabela est´ armazenada em um mecanismo de armazenamento diferente no mas-
a
ter e no slave (pode se executar diferentes mecanismos de armazenamento no metre
e no slave: por exemplo, InnoDB ne master e MyISAM no slave, se o slave possuir
menos espa¸o disppon´ em disco).
c ivel
− The MySQL buffers’ sizes (key_buffer_size etc) are different on the master and
slave.
− O master e slave executam vers˜es diferentes do MySQL, e o c´digo do toimizador
o o
´ diferente entre estas vers˜es.
e o
Este problema tamb´m pode afetar a restaura¸˜o de um banco de dados usando
e ca
mysqlbinlog|mysql.
O modo mais f´cil de evitar este problema em todos os casos ´ adicionar uma cl´usula
a e a
a ´
ORDER BY para tal consulta n˜o deterministica assegure que os registros s˜o sempre ar-
a
mazenados/modificados na mesma ordem. Nas vers˜es futuras do MySQL adicionare-
o
mos automaticamente uma cl´usula ORDER BY quando necess´rio.
a a
Os seguintes problemas s˜o conhecidos e ser˜o corrigidos na hora certa:
a a
• LIKE n˜o ´ seguro com caracteres multi-byte. A compara¸˜o ´ feita caracter por
a e ca e
caracter.
•
Ao usar fun¸˜es RPAD, ou qualquer outra fun¸˜o string que termina adicionando espa¸os
co ca c
em branco a direita, em uma consulta que preisa usar tabelas tempor´rias para ser
a
90. 56 MySQL Technical Reference for Version 5.0.0-alpha
rsolvida, todas as strings resultantes ser˜o cortadas a direita (como em RTRIM). Este
a
´ um exemplo de uma consulta:
e
SELECT RPAD(t1.field1, 50, ’ ’) AS f2, RPAD(t2.field2, 50, ’ ’) AS f1
FROM table1 as t1 LEFT JOIN table2 AS t2 ON t1.record=t2.joinID ORDER BY
t2.record;
O resultado final deste erro ´ que o usu´rio n˜o conseguira espa¸os em branco do lado
e a a c
direito do campo resultante.
O comportamento anterior existe em todas as vers˜es do MySQL.
o
A raz˜o disto ´ devido ao fato de tabelas HEAP, que s˜o usadas primeiro para tabelas
a e a
tempor´rias, n˜o s˜o capazes de tratar colunas VARCHAR.
a a a
Este comportamento ser´ corrigido em uma das distribui¸˜es da s´rie 4.1.
a co e
• Devido ao modo como os arquvos de defini¸˜es de tabelas s˜o armazenados n˜o se
co a a
pode usar 255 caracteres (CHAR(255)) em nomes de tabelas, nomes de colunas e enum.
Isto est´ programado para ser corrigido na vers˜o 5.1 quando temos novos arquivos de
a a
formatos de defini¸˜o de tabelas.
ca
• Quando estiver usando SET CHARACTER SET, n˜o ´ permitido usar caracteres especias
a e
no nome do banco de dados, tabelas ou campos.
• Pode-se usar _ ou % com ESCAPE em LIKE ... ESCAPE.
• se vocˆ tiver uma coluna DECIMAL com um n´mero armazenado em diferentes formatos
e u
(+01.00, 1.00, 01.00), GROUP BY pode considerar cada valor como um valor diferente.
• DELETE FROM merge_table usado sem WHERE ir´ apenas apagar o mapeamento para a
a
tabela, n˜o apagando tudo nas tabelas mapeadas.
a
• Vocˆ n˜o pode construir em outro diret´rio quando estiver utilizando MIT-pthreads.
e a o
Como isto necessitaria de altera¸˜es na MIT-pthreads, n´s n˜o estamos aptos a corrig´
co o a i-
la.
• BLOB valores n˜o podem ser usados com confian¸a em GROUP BY, ORDER BY ou
a c
DISTINCT. Somente os primeiros bytes (padr˜o 1024) max_sort_length s˜o usados
a a
quando estiver comparando BLOBs nestes casos. Isto pode ser alterado com a op¸˜o ca
-0 max_sort_lenght para mysqld. Uma forma de contornar este problema para
a maioria dos casos ´ usar a substring: SELECT DISTINCT LEFT(blob,2048) FROM
e
nome_tabela.
• C´lculos s˜o feitos com BIGINT ou DOUBLE (normalmente, ambos tem o tamanho de 64
a a
bits). Depende da precis˜o utilizada na fun¸˜o. A regra geral ´ que fun¸˜es bin´rias
a ca e co a
s˜o feitas com precis˜o BIGINT, IF e ELT() com precis˜o BIGINT ou DOUBLE e o resto
a a a
com precis˜o DOUBLE. Devemos evitar o uso de valores sem sinal maiores que 63 bits
a
(9223372036854775807) para qualquer outra coisa al´m de campos bin´rios!
e a
• Todas os campos string, exceto campos do tipo BLOB e TEXTO tem, automaticamente,
todos os espa¸os extras removidos quando recuperados. Para tipos CHAR, isto n˜o tem
c a
problema, e pode ser considerado como um recurso de acordo com o ANSI SQL92. O
problema ´ que no MySQL, campos VARCHAR s˜o tratados desta mesma forma.
e a
• Vocˆ s´ pode ter at´ 255 colunas ENUM e SET em uma tabela.
e o e
• Em MIN(), MAX() e outras fun¸˜es de agrupamente, o MySQL atualmente compara as
co
colunas ENUM e SET pelo valor de suas strings ao inv´s da posi¸˜o relativa da string no
e ca
conjunto.
91. Cap´
ıtulo 1: Informa¸˜es Gerais
co 57
• mysqld_safe redireciona todas as mensagens de mysqld para o log mysqld. Um prob-
lema com isto ´ que se vocˆ executar o mysqladmin refresh para fechar e reabrir o
e e
log, a stdout e a stderr continuam redirecionadas para o log antigo. Se vocˆ utiliza
e
--log extensivamente, dever´ editar o mysqld_safe para logar em ‘’hostname’.err’
a
em vez de ‘’hostname’.log’; assim vocˆ pode facilmente utilizar o espa¸o do log antigo
e c
apagando-o e executando mysqladmin refresh.
• Em instru¸˜es UPDATE, colunas s˜o atualizadas da esquerda para a direita. Se vocˆ
co a e
referenciar a uma coluna atualizada, vocˆ ir´ obter o valor atualizado em vez do valor
e a
original, por exemplo:
mysql> UPDATE nome_tabela SET KEY=KEY+1,KEY=KEY+1;
Isto atualiza KEY com 2 no lugar de 1.
• Vocˆ pode se referir a m´ltiplas tabelas em uma mesma consulta, mas vocˆ n˜o pode se
e u e a
referir a qualquer tabelas tempor´rias dada mais de uma vez. Por exemplo, a seguinte
a
instru¸˜o n˜o funciona.
ca a
mysql> SELECT * FROM temporary_table, temporary_table AS t2;
• RENAME n˜o funciona com tabelas tempor´rias (TEMPORARY) ou tabelas usadas em uma
a a
tabelas MERGE.
• O otimizador pode lidar com o DISTINCT de forma diferente se vocˆ estiver usando col-
e
unas ’escondidas’ em uma join ou n˜o. Em uma join, colunas escondidas s˜o contadas
a a
como parte do resultado (mesmo se elas n˜o s˜o mostradas) enquanto que em queries
a a
normais colunas escondidas n˜o participam na compara¸˜o DISTINCT. N´s provavel-
a ca o
mente iremos alterar isto no futuro para nunca comparar as colunas escondidas quando
executando DISTINCT.
um exemplo disto ´:
e
SELECT DISTINCT mp3id FROM band_downloads
WHERE userid = 9 ORDER BY id DESC;
and
SELECT DISTINCT band_downloads.mp3id
FROM band_downloads,band_mp3
WHERE band_downloads.userid = 9
AND band_mp3.id = band_downloads.mp3id
ORDER BY band_downloads.id DESC;
No segundo caso, vocˆ pode obter duas linhas idˆnticas no MySQL 3.23.x na s´rie do
e e e
resultado (porque o campo escondido ’id’ pode variar).
Perceba que isto somente acontece em consultas onde vocˆ n˜o tem colunas ORDER
e a
BY no resultado, algo n˜o permitido no SQL-92.
a
• Como o MySQL permite trabalhar com tipos de tabelas que n˜o suportam transa¸˜es
a co
(e assim n˜o pode fazer rollback em dados) algumas coisas funcionam um pouco
a
diferentes de outros servidores SQL em MySQL (Isto serve para garantir que o MySQL
nunca necessitar´ de um rollback para um comando SQL). Por´m isto pode ser um
a e
pouco estranho em casos que os valores dos campos devem ser verificados na aplica¸˜o,
ca
mas isto ira fornacer um ´timo ganho de velocidade assim como permite ao MySQL
o
fazer algumas otimiza¸˜es que de outro modo seriam muito dif´
co iceis para serem feitas.
92. 58 MySQL Technical Reference for Version 5.0.0-alpha
Se vocˆ informar um valor incorreto em uma coluna, o MySQL, em vez de fazer um
e
rollback, aramzenar´ o melhor valor poss´vel no campo.
a i
− Se tentar armazenar um valor fora da faixa em uma coluna num´rico, o MySQL
e
ir´ armazenar o menor ou maior valor poss´ no campo.
a ivel
− Se tentar armazenar uma string que n˜o comece com um n´mero em uma coluna
a u
num´rica, o MySQL ir´ armazenar 0 na coluna.
e a
− Se vocˆ tentar armazenar NULL em uma coluna que n˜o aceita valores
e a
nulos, MySQL ir´ armazenar 0 ou ’’ (string vazia) na coluna.
a (Este
comportamento pode, entretanto, ser alterado com a op¸˜o de compila¸˜o
ca ca
-DDONT USE DEFAULT FIELDS).
− O MySQL permite o armazenamento de alguns valores errados de data em campos
do tipo DATE e DATETIME. (Como 2000-02-31 ou 2000-02-00). A id´ia ´ que n˜o ´
e e a e
servi¸o do servidor SQL validar datas. Se o MySQL pode armazenar uma data e
c
recuperar extamente a mesma data, ent˜o o MySQL armazenar´ a data. Se a data
a a
estiver totalmente errada, o MySQL ir´ armazenar a data 0000-00-00 no campo.
a
− Se vocˆ especificar um valor n˜o suportado para um campo do tipo enum, ele ser´
e a a
alterado para o valor de erro ’empty string’, com valor num´rico 0.
e
− Se vocˆ definir uma coluna SET com um valor n˜o suportado, o valor ser´ ignorado.
e a a
• Se vocˆ executar uma PROCEDURE em uma pesquisa que retorna uma s´rie vazia, em
e e
alguns casos a instru¸˜o PROCEDURE n˜o ir´ transformar as colunas.
ca a a
• Cria¸˜o da tabela do tipo MERGE n˜o verifiva se as tabelas envolvidas s˜o de tipos
ca a a
compat´iveis.
• O MySQL ainda n˜o pode lidar com valores NaN, -Inf e Inf em tipos double. Us´-los
a a
causar´ problemas na exporta¸˜o e importa¸˜o de dados. Uma solu¸˜o intermedi´ria
a ca ca ca a
´ alterar NaN para NULL (se for poss´
e ivel) e -Inf e Inf para o valor double m´
inimo ou
m´ximo respectivo poss´
a ivel.
• LIMIT em n´meros negativos s˜o tratados como n´meros grandes positivos.
u a u
• Se vocˆ usar ALTER TABLE para primeiro adicionar um ´
e indice UNIQUE a uma tabela usada
em uma tabela MERGE e ent˜o usar ALTER TABLE para adicionar um ´
a indice normal na
tabela MERGE, a ordem das chaves ser´ diferente para as tabelas se existir uma chave
a
antiga n˜o unica na tabela. Isto ´ porque o ALTER TABLE coloca chaves UNIQUE antes
a ´ e
de chaves normais para ser poss´ detectar chaves duplicadas o mais cedo o poss´
ivel ivel.
Os seguintes erros s˜o conhecidos em vers˜es mais antigas do MySQL:
a o
• Vocˆ pode pendurar um processo se vocˆ fizer um DROP TABLE em uma tabela entre
e e
outras que esteja travada com LOCK TABLES.
• No caso seguinte vocˆ pode obter um descarrego de mem´ria para o arquivo core:
e o
− Tratamento de inser¸˜es com atraso tem deixado inser¸˜es pendentes na tabela.
co co
− LOCK table com WRITE
− FLUSH TABLES
• Antes da vers˜o 3.23.2 do MySQL um UPDATE que atualizava uma chave com um WHERE
a
na mesma chave podia falhar porque a chave era usada para procurar por registros e a
mesma linha poderia ter encontrado v´rios itens:
a
93. Cap´
ıtulo 1: Informa¸˜es Gerais
co 59
UPDATE nome_tabela SET KEY=KEY+1 WHERE KEY > 100;
Um modo de contornar este erro ´ utilizar:
e
mysql> UPDATE nome_tabela SET KEY=KEY+1 WHERE KEY+0 > 100;
Isto funcionar´ porque MySQL n˜o utilizar´ indices em express˜es com a cl´usula
a a a o a
WHERE.
• Antes da vers˜o 3.23 do MySQL, todos os tipos num´ricos tratados como campos
a e
de pontos fixos. Isto significa que vocˆ tem que especificar quantas casas decimais um
e
campo de ponto flutuante deve ter. Todos os resultados eram retornados com o n´mero
u
correto de casas decimais.
Para erros espec´ificos na plataforma, vejas as se¸˜es sobre compila¸˜o e portabilidade. Veja
co ca
Se¸˜o 2.3 [Installing source], P´gina 94. Veja Apˆndice D [Porting], P´gina 1069.
ca a e a
94. 60 MySQL Technical Reference for Version 5.0.0-alpha
2 Instala¸˜o do MySQL
ca
Este cap´
itulo descreve como obter e instalar o MySQL:
• Para uma lista de sites no quais vocˆ pode obter o MySQL, veja Se¸˜o 2.2.1 [Getting
e ca
MySQL], P´gina 75.
a
• Para saber quais s˜o as plataformas suportadas, veja em Se¸˜o 2.2.3 [Which OS],
a ca
P´gina 78. Por favor perceba que nem todas as plataformas suportadas s˜o igualmente
a a
boas para executar o MySQL. Algumas s˜o mais robustas e eficientes que outras - ver
a
Se¸˜o 2.2.3 [Which OS], P´gina 78 para detalhes.
ca a
• V´rias vers˜es do MySQL est˜o dispon´
a o a iveis em distribui¸˜es bin´rias e fonte. N´s
co a o
tamb´m fornecemos acesso p´blico ` nossa ´rvore fonte atual para aqueles que desejam
e u a a
ver nossos desenvolvimentos mais recentes e nos ajudar a testar novos c´digos. Para
o
determinar que vers˜o e tipo da distribui¸˜o vocˆ deve usar, veja Se¸˜o 2.2.4 [Which
a ca e ca
version], P´gina 80. Se ainda restar d´vidas, use uma a distribui¸˜o bin´ria.
a u ca a
• Instru¸˜es de instala¸˜o para distribui¸˜es bin´ria e fonte s˜o descritos em Se¸˜o 2.2.9
co ca co a a ca
[Installing binary], P´gina 91 e Se¸˜o 2.3 [Installing source], P´gina 94. Cada conjunto
a ca a
de instru¸˜es inclui uma se¸˜o sobre problemas espec´
co ca ificos de sistemas que vocˆ pode
e
precisar.
• Para procedimentos p´s-instala¸˜o, veja Se¸˜o 2.4 [Post-installation], P´gina 111. Estes
o ca ca a
procedimentos podem ser aplicados caso vocˆ use uma distribui¸˜o bin´ria ou fonte do
e ca a
MySQL.
2.1 Instala¸˜o r´pida padr˜o do MySQL
ca a a
Este cap´ itulo cobre a instala¸˜o do MySQL em plataformas onde oferecemos pacotes usando
ca
oformato de empacotamento nativo da respectiva plataforma. No entanto, as distribui¸˜es co
bin´rias do MySQL est˜o dispon´
a a iveis para muitas outras plataformas, veja Se¸˜o 2.2.9
ca
[Installing binary], P´gina 91 para instru¸˜es gerais de instala¸˜o para estes pacotes que se
a co ca
aplicam a todas as plataformas.
Veja Se¸˜o 2.2 [General Installation Issues], P´gina 75 para mais informa¸˜es sobre quais
ca a co
outras distribui¸˜es bin´rias est˜o dispon´
co a a iveis e como obtˆ-las.
e
2.1.1 Instalando o MySQL no Windows
O processo de instala¸˜o para o MySQL no Windows tem os seguintes passos:
ca
1. Instale a distribui¸˜o.
ca
2. Configure um arquivo de op¸˜o se necess´rio.
ca a
3. Selcione o servidor que vocˆ quer usar.
e
4. Inicie o servidor.
O MySQL para Windows est´ dispon´ em dois formatos de distribui¸˜o:
a ivel ca
• A distribui¸˜o bin´ria cont´m um programa de instala¸˜o que instala que vocˆ precisa
ca a e ca e
e assim possa iniciar o servidor imediatamente.
95. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 61
• A distribui¸˜o fonte cont´m todo o c´digo e os arquivos suportados para construir o
ca e o
execut´vel usando o compilador VC++ 6.0. Veja Se¸˜o 2.3.7 [Constru¸˜o do fonte para
a ca ca
Windows], P´gina 107.
a
ca a ´
Geralmente, a melhor op¸˜o ´ a distribui¸˜o bin´ria. E mais simples e vocˆ n˜o precisa de
ca e e a
nenhuma ferramenta adicional para ter o MySQL em execu¸˜o.ca
2.1.1.1 Exigˆncias do Sistema Windows
e
Para executar o MySQL no Windows, vocˆ precisar´ do seguinte:
e a
• Um sistema operacional Windows de 32 bits como 9x, ME, NT, 2000 ou XP. A fam´ ilia
NT (Windows NT, 2000 e XP) lhe permite executar o servidor MySQL como um
servi¸o. Veja Se¸˜o 2.1.1.7 [NT start], P´gina 66.
c ca a
• Suporte ao protocolo TCP/IP.
• Um c´pia da distribui¸˜o bin´ria do MySQL para Windows, o qual pode ser feito
o ca a
download em http://www.mysql.com/downloads/.
Nota: A distribui¸˜o de arquivos s˜o fornecidas no formato zip e recomendamos o
ca a
uso de um cliente FTP com op¸˜o de resumo para evitar corrompimento de arquivos
ca
durante o processo de download.
• Um programa ZIP para descompactar os arquivos da distribui¸˜o.
ca
• Espa¸o suficiente em disco para descompactar, instalar e criar o banco de dados de
c
acordo com suas exigˆncias.
e
• Se vocˆ planeja se conectar ao servidor MySQL via ODBC, vocˆ tamb´m precisar´ do
e e e a
dirver MyODBC. Veja Se¸˜o 12.2 [ODBC], P´gina 866.
ca a
• Se vocˆ precisa de tabelas com tamanho maior que 4GB, instale o MySQL em um
e
sistema de arquivos NTFS ou mais novo. N˜o se esque¸a de usar MAX_ROWS e AVG_ROW_
a c
LENGTH quando criar tabelas. Veja Se¸˜o 6.5.3 [CREATE TABLE], P´gina 597.
ca a
2.1.1.2 Instalando uma Distribui¸˜o Bin´ria do Windows
ca a
Para instalar o MySQL no Windows usando uma distribui¸˜o bin´ria, siga este procedi-
ca a
mento:
1. Se vocˆ estiver trabalhando em uma m´quina Windows NT, 2000, ou XP, esteja certo
e a
de que vocˆ est´ logado com um usu´rio com privileios de administrador.
e a a
2. Se vocˆ estiver fazendo uma atualiza¸˜o de uma instala¸˜o MySQL mais nova, ´
e ca ca e
necess´rio parar o servidor atual. Em m´quinas com Windows NT, 200 ou XP, se
a a
vocˆ estiver executando o servidor como um servi¸o, pare-o com o comando:
e c
C:> NET STOP MySQL
Se vocˆ planeja usar um servidor diferente depois da atualiza¸˜o (por exemplo, se vocˆ
e ca e
quiser executar o mysqld-max em vez do mysqld), remova o servi¸o existente:
c
C:mysqlbin> mysqld --remove
3.
Vocˆ pode reinstalar o servi¸o com o servidor pr´prio depois de atualizar.
e c o
Se vocˆ n˜o estiver executando o servidor MySQL como um servi¸o, pare desta forma:
e a c
96. 62 MySQL Technical Reference for Version 5.0.0-alpha
C:mysqlbin> mysqladmin -u root shutdown
4. Finalize o programa WinMySQLAdmin se ele estiver em execu¸˜o.
ca
5. Descompacte os arquivos de distribui¸˜o em um diret´rio tempor´rio.
ca o a
6. Execute o programa ‘setup.exe’ para iniciar o processo de instala¸˜o. Se vocˆ quiser
ca e
instalar em um diret´rio diferente do padr˜o (‘c:mysql’), use o bot˜o Browse para
o a a
especificar seu diret´rio preferido. Se vocˆ n˜o instalar o MySQL no local padr˜o, vocˆ
o e a a e
precisar´ epecificar o local onde vocˆ inicia o servidor. O modo mais f´cil de se fazer
a e a
isto ´ usar um arquivo de op¸˜o, como descrito em Se¸˜o 2.1.1.3 [Windows prepare
e ca ca
environment], P´gina 62.
a
7. Finalize o processo de instala¸˜o.
ca
2.1.1.3 Preparando o Ambiente MySQL do Windows
Se vocˆ precisar especificar op¸˜es de inicializa¸˜o quando executar o servidor, vocˆ pode
e co ca e
indentifica-los na linha de comando ou coloc´-los em um arquivo de op¸˜o. Par op¸˜es que
a ca co
s˜o usadas sempre que o servidor iniciar, vocˆ achar´ mais conveniente utilizar um arquivo
a e a
de opc˜o para especificar a configura¸˜o do seu MySQL. Isto ´ particularmente verdade sob
a ca e
as seguintes circunstˆncias:
a
• A localiza¸˜o do diret´rio de instala¸˜o ou dados s˜o diferentes dos locais padr˜o
ca o ca a a
(‘c:mysql’ e ‘c:mysqldata’).
• Vocˆ precisa ajustar as configura¸˜es do servidor. Por exemplo, para usar as tabelas
e co
transacionais InnoDB no MySQL vers˜o 3.23, vocˆ deve criar manualmente dois novos
a e
diret´rios para guardar os arquivos de dados e de log do InnoDB — por exemplo,
o
‘c:ibdata’ e ‘c:iblogs’. Vocˆ tamb´m poder´ adicionar algumas linhas extras ao
e e a
arquivo de op¸˜o, como descrito em Se¸˜o 7.5.3 [Iniciando o InnoDB], P´gina 643. (A
ca ca a
partir do MySQL 4.0, o InnoDB cria os seus arquivos de log e dados no diret´rio de da-
o
dos por padr˜o. Isto significa que vocˆ n˜o precisa configurar o InnoDB explicitamente.
a e a
Vocˆ ainda deve fazˆ-lo se desejar, e um arquivo de op¸˜o ser´ util neste caso.)
e e ca a´
No Windows, o instalador do MySQL coloca o diret´rio de dados diretamente sob o diret´rio
o o
onde vocˆ instalou o MySQL. Se vocˆ quisesse utilizar um diret´rio de dados em um local
e e o
diferente, vocˆ deve copiar todo o conte´do do diret´rios data para a nova localiza¸˜o. Por
e u o ca
exemplo, por padr˜o, o instalador coloca o MySQL em ‘C:mysql’ e o diret´rio de dados
a o
em ‘C:mysqldata’. Se vocˆ quiser usar um diret´rio de dados de ‘E:mydata’, vocˆ deve
e o e
fazer duas coisas:
• Mova o diret´rio de dados de ‘C:mysqldata’ para ‘E:mydata’.
o
• Use uma op¸˜o --datadir para especificar a nova localiza¸˜o do diret´rio de dados
ca ca o
cada vez que vocˆ iniciar o servidor.
e
Quando o servidor MySQL inicia no Windows, ele procura pelas op¸˜es em dois arquivos:
co
O arquivo ‘my.ini’ no diret´rio Windows e o arquivo chamado ‘C:my.cnf’. O diret´rio
o o
do Windows ´ normalmente chamado ‘C:WINDOWS’ ou ‘C:WinNT’. Vocˆ pode determinar
e e
a sua localiza¸˜o exata a partir do valor da vari´vel de ambiente WINDIR usando o seguinte
ca a
comando:
C:> echo %WINDIR%
97. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 63
O MySQL procura pelas op¸˜es primeiro no arquivo ‘my.ini’, e ent˜o pelo arquivo ‘my.cnf’.
co a
No entanto, para evitar confus˜o, ´ melhor se vocˆ usar apenas um destes arquivos. Se o
a e e
seu PC usa um boot loader onde o drive C: n˜o ´ o drive de boot, sua unica op¸˜o ´ usar
a e ´ ca e
o arquivo ‘my.ini’. Independente de qual arquivo usar, ele deve ser no formato texto.
Um arquivo de op¸˜o pode ser criado e modificado com qualquer editor de texto como o
ca
programa Notepad. Por exemplo, se o MySQL est´ instalado em ‘D:mysql’ e o diret´rio
a o
de dados est´ localizado em ‘D:mydatadata’, vocˆ pode criar o arquivo de op¸˜o e definir
a e ca
uma se¸˜o [mysqld] para especificar valores para os parˆmetros basedir e datadir:
ca a
[mysqld]
# defina basedir com o seu caminho de instala¸~o ca
basedir=D:/mysql
# defina datadir com o local do diret´rio de dados,
o
datadir=D:/mydata/data
Note que os nome de caminho do Windows s˜o espec´
a ificados em arquivos de op¸˜o usando
ca
barras normais em ves de barra invertida. Se vocˆ usar barras invertidas, vocˆ deve us´-las
e e a
em dobro.
Outro modo de se gerenciar um arquivo de op¸˜o ´ usar a ferramenta WinMySQLAdmin. Vocˆ
ca e e
pode encontrar o WinMySQLAdmin no diret´rio ‘bin’ de sua instala¸˜o MySQL, assim como
o ca
um arquivo de ajuda contendo instru¸˜es para us´-lo. O WinMySQLAdmin tem a capacidade
co a
de editar os seus arquivos de op¸˜o, mas note o seguinte:
ca
• WinMySQLAdmin usa apenas o arquivo ‘my.ini’.
• Se o WinMySQLAdmin encontra o arquivo ‘C:my.cnf’, ele o renomear´ para
a
‘C:my_cnf.bak’ para disabilit´-lo.
a
Agora vocˆ est´ pronto para testar o servidor.
e a
2.1.1.4 Selecionando um Servidor Windows
Iniciado com o MySQL 3.23.38, a distribui¸˜o Windows inclui ambos bin´rios, normal e o
ca a
MySQL-Max. Aqui est´ uma lista dos diferentes servidores MySQL dos quais vocˆ pode
a e
escolher:
Binario Descri¸˜o
ca
mysqld Compilado com debugger integral e conferˆncia autom´tica de aloca¸˜o
e a ca
de mem´ria, links simb´licos, BDB e tabelas InnoDB.
o o
mysqld-opt Bin´rio otimizado. A partir da vers˜o 4.0 o InnoDB est´ habili-
a a a
tado. Antes desta vers˜o, este servidor n˜o tem suporte a tabelas
a a
transacionais.
mysqld-nt Bin´rio otimizado para NT/2000/XP com suporte para named pipes.
a
mysqld-max Bin´rio otimizado com suporte para links simb´licos, tabelas BDB e
a o
InnoDB.
mysqld-max-nt Como o mysqld-max, por´m compilado com suporte para named pipes.
e
Todos os bin´rios acima s˜o otimizados para processadores Intel modernos mas deve fun-
a a
cionar em qualquer processador Intel i386 ou melhor.
Os servidores mysqld-nt e mysqld-max-nt suportam conex˜es named pipe. Se vocˆ usar
o e
um destes servidores, o uso de named pipes est´ sujeito a estas condi¸˜es:
a co
98. 64 MySQL Technical Reference for Version 5.0.0-alpha
• Os servidores devem ser executados em uma vers˜o do Windows que suporte named
a
pipes (NT, 2000, XP).
• A partir da vers˜o 3.23.50, named pipes s´ estar˜o habilitados se vocˆ iniciar estes
a o a e
servidores com a op¸˜o --enable-named-pipe.
ca
• Os servidores podem ser executados no Windows 98 ou Me, mas o TCP/IP deve estar
instalado, e as conex˜es named pipes n˜o podem ser usadas.
o a
• No Windows 95, estes servidores n˜o podem ser usados.
a
2.1.1.5 Iniciando o Servidor pela Primeira Vez
No Windows 95, 98, ou Me, cliente MySQL sempre se conecta ao servidor usando TCP/IP.
Nos sistemas baseados no NT, como o Windows NT, 2000, ou XP, os clientes possuem duas
op¸˜es. Eles podem usar TCP/IP, ou eles podem usar um named pipe se o servidor suportar
co
conex˜es named pipes.
o
Para informa¸˜es sobre qual servidor bin´rio executar, veja Se¸˜o 2.1.1.3 [Windows prepare
co a ca
environment], P´gina 62.
a
Esta se¸˜o lhe d´ um vis˜o geral da inicializa¸˜o de um servidor MySQL. A seguinte se¸˜o
ca a a ca ca
fornce informa¸˜o mais espec´
ca ifica para vers˜es particulares do Windows.
o
Os exemplos nesta se¸˜o assumem que o MySQL est´ instalado sob a localiza¸˜o padr˜o,
ca a ca a
‘C:mysql’. Ajuste o caminho mostrado nos exemplos se vocˆ tiver o MySQL instalado em
e
um local diferente.
Fazer um teste a partir do prompt de comando do em uma janela de console (uma janela
“DOS”) ´ a melhor coisa a fazer porque o servidor mostra a mensagem de status que aparece
e
na janela do DOS. Se alguma coisa estiver errado com sua configura¸˜o, estas mensagens
ca
tornar˜o mais f´cil para vocˆ de identificar e corrigir qualquer problema.
a a e
Tenha certeza que vocˆ est´ no diret´rio onde o servidor ´ localizado e ent˜o entre este
e a o e a
comando:
shell> mysqld --console
Para servidores que incluem suporte InnoDB, vocˆ deve ver as seguintes mensagens assim
e
que o servidor iniciar:
InnoDB: The first specified datafile c:ibdataibdata1 did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file c:ibdataibdata1 size to 209715200
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file c:iblogsib_logfile0 did not exist: new to be created
InnoDB: Setting log file c:iblogsib_logfile0 size to 31457280
InnoDB: Log file c:iblogsib_logfile1 did not exist: new to be created
InnoDB: Setting log file c:iblogsib_logfile1 size to 31457280
InnoDB: Log file c:iblogsib_logfile2 did not exist: new to be created
InnoDB: Setting log file c:iblogsib_logfile2 size to 31457280
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
99. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 65
011024 10:58:25 InnoDB: Started
Quando o servidor finaliza sua sequˆncia de inicializa¸˜o, vocˆ deve ver algo como abaixo,
e ca e
que indica que o servidor est´ pronto para o conex˜o com o cliente:
a a
mysqld: ready for connections
Version: ’4.0.14-log’ socket: ’’ port: 3306
O servidor continuar´ a gravar no console qualquer sa´ de diagn´stico adicional que ele
a ida o
produza. Vocˆ pode abrir uma nova janela de console na qual se executar´ os programas
e a
clientes.
Se vocˆ omitir a op¸˜o --console, o servidor grava a sa´ do diagn´stico no log de erro
e ca ida o
no diret´rio de dados. O log de erro ´ o arquivo com a extens˜o ‘.err’.
o e a
2.1.1.6 Iniciando o MySQL no Windows 95, 98, ou Me
No Windows 95, 98 ou Me, o MySQL usa TCP/IP para conectar um cliente a um servidor.
(Isto permitir´ que qualquer m´quina na sua rede se conecte a seu servidor MySQL.) Por
a a
isto, vocˆ deve ter certeza de que o suporte TCP/IP est´ instalado na sua m´quina antes
e a a
de iniciar o MySQL. Vocˆ pode encontrar o TCP/IP no seu CD-ROM do Windows.
e
Note que se vocˆ estiver usando uma vers˜o antiga do Win95 (por exemplo, OSR2). E
e a ´
prefer´ que vocˆ use um pacote antigo Winsock; para o MySQL ´ necess´rio o Winsock
ivel e e a
2! Vocˆ pode obter o Winsock mais novo em http://www.microsoft.com. O Windows 98
e
tem a nova biblioteca Winsock 2, portanto n˜o ´ necess´rio atualizar a biblioteca.
a e a
Para iniciar o servidor mysqld, vocˆ deve iniciar uma janela do Prompt (Janela “MS-DOS”)
e
e digitar:
shell> C:mysqlbinmysqld
Isto ir´ iniciar o mysqld em segundo plano. Isto ´, depois do servidor iniciar, vocˆ deve ver
a e e
outro prompt de comando. (Note que se vocˆ iniciar o servidor deste modo no Windows
e
NT, 2000 ou XP, o servidor ir´ executar em segundo plano e nenhum prompt de comando
a
aparecer´ at´ que o servidor finalize. Por isto, vocˆ deve abrir outro prompt de comando
a e e
para executar programas clientes enquanto o servidor estriver em execu¸˜o.)
ca
Vocˆ pode finalizar o servidor MySQL executando:
e
shell> C:mysqlbinmysqladmin -u root shutdown
Isto chama o utilit´rio administrativo do MySQL mysqladmin para conectar ao servidor e
a
manda-lo finalizar. O comando conecta como root que ´ a conta administrativa padr˜o no
e a
sistema de permiss˜es do MySQL. Por favor, note que o sistema de permiss˜es do MySQL
o o
´ totalmente independente de qualquer login de usu´rio sob o Windows.
e a
Se o mysqld n˜o iniciar, por favor, verifique o log de erro para ver se o servidor escreveu
a
alguma mensagem que possa indicar a causa do problema. Vocˆ pode tamb´m tentar iniciar
e e
o servidor com mysqld --console; neste caso, vocˆ pode obter alguma informa¸˜o util na
e ca ´
tela que pode ajudar a resolver o problema.
A ultima op¸˜o ´ iniciar o mysqld com --standalone --debug. Neste caso o mysqld ir´
´ ca e a
escrever em um arquivo log ‘C:mysqld.trace’ que deve conter a raz˜o pela qual o mysqld
a
n˜o inicia. Veja Se¸˜o D.1.2 [Making trace files], P´gina 1071.
a ca a
Use mysqld --help para mostrar todas as op¸˜es que o mysqld entende!
co
100. 66 MySQL Technical Reference for Version 5.0.0-alpha
2.1.1.7 Iniciando o MySQL no Windows NT, 2000, ou XP
Na fam´ NT (Windows NT, 2000 ou XP) o modo recomendado de executar o MySQL ´
ilia e
instal´-lo como um servi¸o do Windows. O Windows ent˜o inicia e para o servidor MySQL
a c a
automaticamente quando o Windows inicia e para. Um servidor instalado como um servi¸o
c
tamb´m pode ser controlado a partir da linha de comando usando os comandos NET, ou
e
com o utilit´rio gr´fico Servi¸os.
a a c
O utilit´rio Servi¸os (o Service Control Manager do Windows) pode ser encontrado no
a c
Painel de Controle do Windows (em Ferramentas Administrativas no Windows 2000).
´
E recomendado que se feche o utilit´rio Servi¸os enquanto realiza a opera¸˜es de instala¸˜o
a c co ca
ou remo¸˜o do servidor a partir desta linha de comando. Isto evita alguns erros estranhos.
ca
Para ter o MySQL funcionando com TCP/IP no Windows NT 4, vocˆ deve instalar o service
e
pack 3 (ou mais novo)!
Antes de instalar o MySQL como um servi¸o, vocˆ deve primeiro parar o servidor atual em
c e
execu¸˜o usando o seguinte commando:
ca
shell> C:mysqlbinmysqladmin -u root shutdown
Isto chama o utilit´rio administrativo do MySQL mysqladmin para conectar ao servidor
a
e mand´-lo parar. O comando conecta com root que ´ a conta administrativa padr˜o no
a e a
sistema de permiss˜es do MySQL. Por favor, note que o sistema de permiss˜es do MySQL
o o
´ totalmente independente de qualquer login de usu´rio sob o Windows.
e a
Agora instale o servidor como um servi¸o:
c
shell> mysqld --install
Se vocˆ n˜o definir um nome para o servi¸o, ele ´ instalado com o nome MySQL. Uma vez
e a c e
instalado, ele pode ser imediatamente iniciado a partir do utilit´rio Servi¸os, ou usando o
a c
comando NET START MySQL. (Este comando ´ caso insensitivo).
e
Uma vez em execu¸˜o, o mysqld pode ser parado usando o utilit´rio de Servi¸os ou usando
ca a c
o comando NET STOP MySQL, ou o comando mysqladmin shutdown.
Se vocˆ tiver problemas instalando o mysqld como um servico usando apenas o nome do
e
servidor, tente instal´-lo usando seu caminho compelto:
a
shell> C:mysqlbinmysqld --install
A partir do MySQL 4.0.2, vocˆ pode especificaro nome do servi¸o depois da op¸˜o --
e c ca
install. A partir do MySQL 4.0.3, vocˆ pode especificar uma op¸˜o --defaults-file
e ca
depois do nome do servi¸o para indicar onde o servidor deve obter op¸˜es ao iniciar. A
c co
regras que determinam o nome do servi¸o e os arquivos de op¸˜o que o servidor usa s˜o as
c ca a
seguintes:
• Se vocˆ n˜o especificar um nome de servi¸o, o servidor usa o nome padr˜o do MySQL e
e a c a
o servidor lˆ as op¸˜es do grupo [mysqld] no arquivo de op¸˜es padr˜o.
e co co a
• Se vocˆ especificar um nome de servi¸o depois da op¸˜o --install, o servidor ignora
e c ca
o grupo de op¸˜o [mysqld] em vez de ler op¸˜es do grupo que tem o mesmo nome que
ca co
o servi¸o. O servidor le op¸˜es do arquivo de op¸˜es padr˜o.
c co co a
• Se vocˆ especificar uma op¸˜o --defaults-file depois do nome de servi¸o, o servidor
e ca c
ignora o arquivo de op¸˜es padr˜o e lˆ op¸˜es apenas a partir do grupo [mysqld] do
co a e co
arquivo indicado.
101. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 67
No caso normal que vocˆ instala o servidor com --install mas nenhum nome de servi¸o,
e c
o servidor ´ instalado com um nome de servi¸o de MySQL.
e c
Como um exemplo mais complexo, considere o seguinte comando:
shell> C:mysqlbinmysqld --install mysql --defaults-file=C:my-opts.cnf
Aqui, um nome de servi¸o ´ dado depois de op¸˜o --install. Se nenhuma op¸˜o --
c e ca ca
defaults-file for dada, este comando teria o efeito de fazer o servidor ler o grupo [mysql]
a partir do arquivo de op¸˜es padr˜o. (Isto seria uma m´ id´ia, porque aquele grupoo
co a a e
de op¸˜o ´ para ser usado pelo programa cliente mysql.) No entanto, como a op¸˜o --
ca e ca
defaults-file est´ presente, o servidor lˆ as op¸˜es apenas a partir do arquivo indicado,
a e co
e apenas do grupo de op¸˜o [mysqld].
ca
Vocˆ tamb´m pode especificar as op¸˜es como “Par^metros de inicializa¸~o” no
e e co a ca
utilit´rio de Servi¸os do Windows antes de vocˆ iniciar o servi¸o MySQL.
a c e c
Uma vez que o servidor MySQL ´ instalado, o Windows ir´ iniciar o servi¸o automaticamente
e a c
sempre que o Windows inicia. O servi¸o tamb´m pode ser iniciado imediatamente a partir
c e
do utilit´rio Servi¸os ou usando o comando NET START MYSQL. O comando NET n˜o ´ caso
a c a e
sensitivo.
Note que quando executado como um servi¸o, o mysqld n˜o tˆm acesso a um console e
c a e
ent˜o nenhuma mensagem pode ser vista. Se o mysqld n˜o iniciar, verifique o log de erros
a a
par ver se o servidor gravou alguma mensagem l´ indicando a causa do problema. O log de
a
a o ´
erro est´ localizado no diret´rio ‘c:mysqldata’. E o arquivo com um sufixo ‘.err’.
Quando o mysqld est´ executando como um servi¸o, ele pode ser parado usando o utilit´rios
a c a
Servi¸os, o comando NET STOP MYSQL, ou o comando mysqladmin shutdown. Se o servi¸p
c c
estiver em execu¸˜o quando o Windows desliga, o Windows ir´ parar o servidor automati-
ca a
camente.
A partir do MySQL vers˜o 3.23.44, vocˆ pode escolher entre instalar o servidor como um
a e
servi¸o Manual se vocˆ n˜o deseja que os servi¸os sejam executados automaticamente du-
c e a c
rante o processo de inicializa¸˜o. Para fazer isto, use a op¸˜o --install-manual em vez
ca ca
da op¸˜o --install.
ca
shell> C:mysqlbinmysqld --install-manual
Para remover um servi¸o que est´ instalado como um servi¸o, primeiro pare-o se ele estiver
c a c
em execu¸˜o. Ent˜o use a op¸˜o --remove para removˆ-lo:
ca a ca e
shell> mysqld --remove
Um problema com a finaliza¸˜o autom´tica do servi¸o MySQL ´ que, para vers˜es do
ca a c e o
MySQL anteriores a 3.23.49, o Windows esparava apenas por alguns segundos para o desliga-
mento completo, e matava os processos do servidor de banco de dados se o tempo limite
fosse excedido. Isto potencialmente causava problemas. (Por exemplo, o mecanimo de ar-
mazenamento InnoDB dever´ fazer uma recupera¸˜o de falhas na pr´xima inicializa¸˜o). A
a ca o ca
partir do MySQL 3.23.49, o Windows ir´ esperar mais para que a finaliza¸˜o do MySQL
a ca
Server esteja completa. Se vocˆ notar que ainda n˜o ´ o suficiente para a sua instala¸˜o,
e a e ca
n˜o ´ seguro executar o MySQL Server como um servi¸o. Em vez disso, execute-o a partir
a e c
do prompt de comando, e finalize-o com mysqladmin shutdown.
A altera¸˜o para avisar para o Windows para esperar mais quando parar o servidor MySQL
ca
funciona apenas com o Windows 2000 e XP, mas n˜o para o Windows NT. No NT, o
a
Windows espera apenas 20 segundos para que o servi¸o seja finalizado, e depois desso ele
c
102. 68 MySQL Technical Reference for Version 5.0.0-alpha
mata o processo do servi¸o. Vocˆ pode aumentar este padr˜o abrindo o Editor de Registro
c e a
(‘winntsystem32regedt32.exe’) e editar o valor de WaitToKillServiceTimeout em
‘HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl’ na ´rvore do Registro. Es-
a
pecifique o novo valor mais largo em milisegundos (por exemplo 12000 para que o Windows
NT espere at´ 120 segundos).
e
Se vocˆ n˜o quiser iniciar o mysqld como um servi¸o, vocˆ pode inici´-lo a partir da linha
e a c e a
de comando do mesmo modo que em vers˜es do Windows que n˜o s˜o baseados no NT.
o a a
Para instru¸˜es use Se¸˜o 2.1.1.6 [Win95 start], P´gina 65.
co ca a
2.1.1.8 Executando o MySQL no Windows
O MySQL suporta TCP/IP em todas as plataformas Windows. Os servidores mysqld-nt
e mysql-max-nt suportam named pipes no NT, 2000 e XP. No entanto, o padr˜o ´ usar
a e
TCP/IP, independente da plataforma:
• Named pipes ´ atualmente mais lento que TCP/IP em muitas configura¸˜es do Win-
e co
dows.
• Alguns usu´rios encontraram problemas ao finalizar o servidor MySQL quando era
a
usado named pipes.
A partir da vers˜o 3.23.50, named pipes s´ est´ habilitado para o mysqld-nt e mysql-max-
a o a
nt se eles forem iniciados com a op¸˜o --enable-named-pipe.
ca
Vocˆ pode for¸ar que um cliente MySQL use named pipes especificando a op¸˜o --pipe ou
e c ca
especificando . como nome de m´quina. Use a op¸˜o --socket para especificar o nome do
a ca
pipe. No MySQL 4.1, vocˆ deve usar a op¸˜o --protocol=PIPE.
e ca
Vocˆ pode testar se o MySQL est´ funcionando executando qualquer dos seguintes coman-
e a
dos:
C:> C:mysqlbinmysqlshow
C:> C:mysqlbinmysqlshow -u root mysql
C:> C:mysqlbinmysqladmin version status proc
C:> C:mysqlbinmysql test
Se o mysqld est´ lento para responder a suas conex˜es no Win95/Win98, provavelmente
a o
existe um problema com seu DNS. Neste caso, inicie o mysqld com a op¸˜o --skip-name-
ca
resolve e use somente localhost e n´meros IP na coluna Host das tabelas de permiss˜es
u o
do MySQL.
Existem duas vers˜es da ferramenta de linha de comando MySQL:
o
Binario Descri¸˜o
ca
mysql Compilado em Windows nativo, oferecendo capacidades de edi¸˜o de
ca
texto muito limitadas.
mysqlc Compilado com o compilador Cygnus GNU, que oferece edi¸˜o ca
readline.
Se vocˆ desejar usar o mysqlc, deve ter uma c´pia da biblioteca ‘cygwinb19.dll’ em al-
e o
gum lugar que o mysqlc possa encontr´-la. Se sua distribui¸˜o do MySQL n˜o tiver esta
a ca a
biblioteca instalada no mesmo diret´rio que o mysqlc (o diret´rio bin sob o diret´rio base
o o o
sa dua instala¸˜o do MySQL). Se sua distribui¸˜o n˜o tem a biblioteca cygwinb19.dll no
ca ca a
diret´rio ‘bin’, olhe no diret´rio lib para encontr´-lo e copi´-lo para o seu diret´rio de
o o a a o
sistema no Windows. (‘Windowssystem’ ou um lugar parecido).
103. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 69
Os privil´gios padr˜es no Windows d˜o a todos usu´rios locais privil´gios totais para todos
e o a a e
os bancos de dados sem necessidade de especificar uma senha. Para deixar o MySQL mais
seguro, vocˆ deve configurar uma senha para todos os usu´rio e remover a linha na tabela
e a
mysql.user que tem Host=’localhost’ e User=’’.
Vocˆ tamb´m deve adicionar uma senha para o usu´rio root. O exemplo seguinte exemplo
e e a
inicia removendo o usu´rio anˆnimo que tem todos os privil´gios, e ent˜o configura uma
a o e a
senha para o usu´rio root:
a
C:> C:mysqlbinmysql mysql
mysql> DELETE FROM user WHERE Host=’localhost’ AND User=’’;
mysql> FLUSH PRIVILEGES;
mysql> QUIT
C:> C:mysqlbinmysqladmin -u root password your_password
Depois de configurar a senha, se vocˆ desejar desligar o servidor mysqld, vocˆ pode usar o
e e
seguinte comando:
C:> mysqladmin --user=root --password=sua_senha shutdown
Se vocˆ estiver usando o servidor de uma antiga vers˜o shareware do MySQL vers˜o 3.21m
e a a
o comando mysqladmin para configurar uma senha ir´ falhar com um erro: parse error
a
near ’SET password’. A corre¸˜o para este problema ´ atualizar para uma vers˜o mais
ca e a
nova do MySQL.
Com as vers˜es atuais do MySQL vocˆ pode facilmente adicionar novos usu´rios e alterar
o e a
privil´gios com os comandos GRANT e REVOKE. Veja Se¸˜o 4.4.1 [GRANT], P´gina 255.
e ca a
2.1.2 Instalando o MySQL no Linux
O modo recomendado para instalar o MySQL no Linux ´ usando um arquivo RPM. Os
e
RPMs do MySQL atualmente s˜o constru´
a idos na vers˜o 7.3 do sistema Suse Linux mas
a
deve funcionar em outras vers˜es de Linux que suportam rpm e usam glibc.
o
Se vocˆ tiver problemas com um arquivo RPM (por exemplo, se vocˆ receber o
e e
erro “Sorry, the host ’xxxx’ could not be looked up”), veja Se¸˜o 2.6.2.1 [Binary
ca
notes-Linux], P´gina 141.
a
Na maioria dos casos, vocˆ s´ precisa instalar os pacotes servidor MySQL e o cliente
e o
MySQL para ter uma instala¸˜o funcional do MySQL. Os outros pacotes n˜o s˜o exigidos
ca a a
para uma instala¸˜o padr˜o. Se vocˆ quiser executar um servidor MySQL Max que tenha
ca a e
capacidades adicionais, vocˆ deve instalar o RPM MySQL-Max depois de instalar o RPM
e
MySQL-server. Veja Se¸˜o 4.8.5 [mysqld-max], P´gina 344.
ca a
Se vocˆ tiver um dependˆncia de falha ao tentar instalar os pacotes do MySQL 4.0 (ex.:
e e
“error: removing these packages would break dependencies: libmysqlclient.so.10
is needed by ...”), vocˆ tamb´m deve instalar o pacote MySQL-shared-compat,
e e
o qual inclui ambas as bibliotecas para compatibilidade com vers˜es anteriores
o
(libmysqlclient.so.12 para MySQL 4.0 e libmysqlclient.so.10 para MySQL 3.23).
Muitas distribui¸˜es Linux ainda vˆm com o MySQL 3.23 a elas normalmente ligam as
co e
aplica¸˜es dinamicamente para economizar espa¸o em disco. Se estas bibliotecas compar-
co c
tilhadas est˜o em pacotes separados (ex.; MySQL-shared), ´ suficiente simplesmente deixar
a e
estes pacotes instalados e apenas atualizar os pacotes do servidor e cliente MySQL (que s˜o
a
104. 70 MySQL Technical Reference for Version 5.0.0-alpha
estaticamente ligados e n˜o dependem de bibliotecas compartilhadas). Para distribui¸˜es
a co
que incluem as bibliotecas compartilhadas no mesmo pacote que o servidor MySQL (ex.:
Red Hat Linux), vocˆ tamb´m pode instalar nosso RPM MySQL-shares 3.23 ou usar o
e e
pacote compat´ com MySQL-shared.
ivel
Os seguintes pacotes RPM est˜o dispon´
a iveis:
• MySQL-server-VERSION.i386.rpm
O servidor MySQL. Vocˆ ira precisar dele a n˜o ser que vocˆ apenas queira se conectar a
e a e
um servidor MySQL executando em outra m´quina. Note que este pacote era chamado
a
MySQL-VERSION.i386.rpm antes do MySQL 4.0.10.
• MySQL-Max-VERSION.i386.rpm
O servidor MySQL Max. Este seridor tem capacidades adicionais que o servidor no
ROM MySQL-server n˜o tem. Vocˆ deve instalar o RPM MySQL-server primeiro,
a e
porque o RPM MySQL-Max depende dele.
• MySQL-client-VERSION.i386.rpm
Os programas clientes padr˜es do MySQL. Provavelmente vocˆ sempre instalar´ este
o e a
pacote.
• MySQL-bench-VERSION.i386.rpm
Testes e comparativos de performances (benchmarks). Necessita do Perl e m´dulos do
o
BDB-mysql.
• MySQL-devel-VERSION.i386.rpm
As bibliotecas e arquivos include necess´rios se vocˆ precisa para compilar outros
a e
clientes MySQL, como nos m´dulos Perl.
o
• MySQL-shared-VERSION.i386.rpm
Este pacote cont´m as bibliotecas compartilhadas (libmysqlclient.so*) que certas
e
linguagens e aplica¸˜es nencess´rias para carregar dinˆmicamente e usar o MySQL.
co a a
• MySQL-shared-compat-VERSION.i386.rpm
Este pacote inclui o biblioteca compartilhada para MySQL 3.23 e MySQL 4.0. In-
stale este pacote em vez do MySQL-shared, se vocˆ tiver aplica¸˜es instaladas que s˜o
e co a
dinˆmicamente ligadas ao MySQL 3.23 mas vocˆ quer atualizar para o MySQL 4.0 sem
a e
quebrar as dependˆncias da biblioteca. Este pacote esta dispon´
e ivel desde o MySQL
4.0.13.
• MySQL-embedded-VERSION.i386.rpm
A biblioteca do servidor embutido MySQL (MySQL 4.0).
• MySQL-VERSION.src.rpm
Este cont´m o c´digo fonte para todos os pacotes acima. Ele tamb´m pode ser usado
e o e
para tentar construir RPMs para outras arquiteturas (por exemplo, Alpha ou SPARC).
Para ver todos os arquivo em um pacote RPM, (por exemplo, um RPM MySQL-server),
execute:
shell> rpm -qpl MySQL-server-VERSION.i386.rpm
Para realizar uma instala¸˜o m´
ca inima padr˜o, execute:
a
shell> rpm -i MySQL-server-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
Para instalar somente o pacote cliente, execute:
105. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 71
shell> rpm -i MySQL-client-VERSION.i386.rpm
O RPM fornece um recurso para verificar a integridade e autenticidade dos pacotes antes
de instal´-los. Se vocˆ quiser aprender mais sobre este recurso, veja Se¸˜o 2.2.2 [Verifying
a e ca
Package Integrity], P´gina 75.
a
O RPM coloca dados sob o ‘/var/lib/mysql’. O RPM tamb´m cria as entradas apropriadas
e
em ‘/etc/rc.d/’ para iniciar o servidor automaticamente na hora do boot. (Isto significa
que se vocˆ realizou uma instala¸˜o anterior e fez altera¸˜es em seu script de inicializa¸˜o,
e ca co ca
vocˆ pode desejar criar uma c´pia do script para que vocˆ n˜o perca ao instalar um RPM
e o e a
mais novo). Veja Se¸˜o 2.4.3 [Automatic start], P´gina 118 para mais informa¸˜es sobre
ca a co
como o MySQL pode ser iniciado automaticamente na inicializa¸˜o do sistema.
ca
Se vocˆ quiser instalar o RPM do MySQL em uma distribui¸˜o Linux mais antiga que n˜o
e ca a
suporte scripts de inicializa¸˜o no ‘/etc/init.d’ (diretamente ou via link simb´lico), vocˆ
ca o e
deve criar um link simb´lico que aponte para a localiza¸˜o onde o seu script de instala¸˜o
o ca ca
est´ atualmente instalado. Por exemplo, se esta localiza¸˜o for ‘/etc/rc.d/init.d’, use
a ca
estes comandos antes de intalar o RPM para criar ‘/etc/init.d’ como um link simb´lico o
que aponte l´:a
shell> cd /etc; ln -s rc.d/init.d .
No entanto, todas as distribui¸˜es de Linux atuais j´ devem suportar este novo layout
co a
de diret´rio que usa ‘/etc/init.d’ j´ que ele ´ exigido para compatibilidade LBS (Linux
o a e
Standard Base).
Se o arquivo RPM que vocˆ instalar inclui o MySQL-server, o daemon mysqld deve estar
e
pronto e em execu¸˜o ap´s a instala¸˜o. Agora vocˆ j´ deve poder iniciar o MySQL. Veja
ca o ca e a
Se¸˜o 2.4 [P´s Instala¸˜o], P´gina 111.
ca o ca a
Se alguma coisa der errado, vocˆ encontrar maiores informa¸˜es no cap´
e co itulo de instala¸˜o.
ca
Veja Se¸˜o 2.2.9 [Instalado o bin´rio], P´gina 91.
ca a a
2.1.3 Instalando o MySQL no Mac OS X
A partir do MySQL 4.0.11, vocˆ pode instalar o MySQL no Mac OS X 10.2 (“Jaguar”)
e
usando um pacote do bin´rio do Mac OS X PKG em vez da distribui¸˜o bin´rio em tarball.
a ca a
Note que vers˜es mais antigas do Mac OS X (ex.: 10.1.x) n˜o s˜o suportadas por este
o a a
pacote.
Este pacote est´ localizado dentro de um arquivo de imagem de disco (.dmg). que vocˆ
a e
primeiro precisa montar com um duplo clique em sua ´ icone no Finder. Ele deve ent˜o a
montar a imagem e exibir o seu conte´do.
u
NOTA: Antes de proceder com a instala¸˜o, tenha certeza que vocˆ finalizou todas as
ca e
instˆncias do MySQL em execu¸˜o usando o MySQL Manager Aplication (no Mac OS X
a ca
Server) ou via mysqladmin shutdown na linha de comando.
Para relamente instalar o MySQL PKG, de um duplo clique na ´ icone do pacote. Isto inicia
o Mac OS Package Installer, que ir´ guia-lo pela instala¸˜o do MySQL.
a ca
O Mac OS X PKG do MySQL ir´ se instalar em ‘/usr/local/mysql-<version>’
a
e tamb´m instalr´ um link simb´lico ‘/usr/local/mysql’, apontando para a nova
e a o
localiza¸˜o. Se um diret´rio chamado ‘/usr/local/mysql’ j´ existe, ele ser´ renomeado
ca o a a
para ‘/usr/local/mysql.bak’ em primeiro lugar. Adicionalmente, ele ir´ instalar a
a
106. 72 MySQL Technical Reference for Version 5.0.0-alpha
tabela de permiss˜es do banco de dados MySQL executando mysql_install_db depois da
o
instala¸˜o.
ca
O layout de instala¸˜o ´ similar a aquele da distribui¸˜o bin´ria, todos os bin´rios do MySQL
ca e ca a a
est˜o localizados no diret´rio ‘/usr/local/mysql/bin’. O socket MySQL ser´ colocado em
a o a
‘/tmp/mysql.sock’ por padr˜o. Veja Se¸˜o 2.2.5 [Installation layouts], P´gina 83.
a ca a
A instala¸˜o do MySQL exige uma conta de usu´rio do Mac OS X chamada mysql (uma
ca a
conta de usu´rio com este nome existe por padr˜o no Mac OS X 10.2 e acima).
a a
Se vocˆ estiver executando o MAC OS X Server, vocˆ j´ ter´ uma vers˜o do MySQL
e e a a a
instalado:
• Mac OS X Server 10.2-10.2.2 vem com o MySQL 3.23.51 instalado
• Mac OS X Server 10.2.3-10.2.6 vem com o MySQL 3.23.53
• Mac OS X Server 10.3 vem com o MySQL 4.0.14
Esta se¸˜o do manual cobre a instala¸˜o apenas do MySQL Mac OS X PKG oficial. Leia o
ca ca
ajuda da Apple sobre a instala¸˜o do MySQL (Execute o aplicativo “Help View”, selecione
ca
a ajuda do “Mac OS X Server” e fa¸a uma busca por “MySQL” e leia o item entitulado
c
“Installing MySQL”).
Note especialmente, que a vers˜o pr´-instalada do MySQL no Mac OS X Server ´ iniciado
a e e
com o comando safe_mysqld em vez de mysqld_safe.
Se anteriormente vocˆ usava pacotes do MySQL de Marc Liyanage para Mac OS X de
e
http://www.entropy.ch, vocˆ pode simplesmente seguir as intru¸˜es de atualiza¸˜o para
e co ca
pacotes usando o layout de instala¸˜o dos bin´rio como dados em suas p´ginas.
ca a a
Se vocˆ est´ atualizado da vers˜o 3.23.xx de Marc ou do vers˜o Mac OS X Server do
e a a a
MySQL para o MySQL PKG oficial, vocˆ tamb´m deve converter a tabela de privil´gios do
e e e
MySQL existente para o formato atual, porque alguns novos privil´gios de seguran¸a foram
e c
adicionados. Veja Se¸˜o 2.5.6 [Upgrading-grant-tables], P´gina 130.
ca a
Se vocˆ preferisse iniciar automaticamente o MySQL durante o boot do sistema, vocˆ
e e
tamb´n precisa instalar o MySQL Startup Item. A partir do MySQL 4.0.15, ele ´ parte do
e e
disco de instala¸˜o do Mac OS X como um pacote de instala¸˜o separado. Simplesmente
ca ca
de um duplo clique no ´icone MySQLStartupItem.pkg e siga as instru¸˜es para instal´-lo.
co a
Note que isto s´ precisa ser feito uma vez! N˜o h´ necessidade de se instalar o Startup Item
o a a
toda vez que se atualizar o pacote do MySQL.
Devido a um erro no instalador de pacotes do Mac OS X, algumas vezes vocˆ pode ver a
e
mensagem de erro You cannot install this software on this disk. (null) no di´logo a
de sele¸˜o do disco de destino. Se este erro ocorrer, simplesmente clique no bot˜o Go
ca a
Back uma vez para retornar a tela anterior. Agora clique em Continue para avan¸ar para a
c
sele¸˜o do disco de destino novamente - agora vocˆ deve estar apto a escolher o disco destino
ca e
corretamente. N´s informamos este erro a Apple e eles est˜o investigando este problema.
o a
O Startup Item ser´ instalado em ‘/Library/StartupItems/MySQL’. Ele adiciona uma
a
vari´vel MYSQLCOM=-YES- ao arquivo de configura¸˜o do sistema (‘/etc/hostconfig’). Se
a ca
vocˆ desejasse diasbilitar a inicializa¸˜o autom´tica do MySQL, simplesmente altere o valor
e ca a
desta vari´vel para MYSQLCOM=-NO-.
a
No Mac OS X Server, o script de instala¸˜o do Startup Item disabilitar´ automatica-
ca a
mente a inicializa¸˜o da instala¸˜o padr˜o do MySQL alterando a vari´vel MYSQL em
ca ca a a
107. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 73
‘/etc/hostconfig’ para MYSQL=-NO-. Isto ´ para evitar conflitos na inicializa¸˜o. No
e ca
entanto, ele n˜o desliga um servidor MySQL aj´ em execu¸˜o.
a a ca
Depois da instala¸˜o, vocˆ pode iniciar o MySQL executando os seguintes comandos em
ca e
um janela de terminal. Note qye vocˆ preceisa ter privil´gios de administrador para realizar
e e
esta tarefa.
Se vocˆ tiver instalado o Startup Item:
e
shell> sudo /Library/StartupItems/MySQL/MySQL start
(Enter your password, if necessary)
(Press Control-D or enter "exit" to exit the shell)
Se vocˆ n˜o tiver instalado o Startup Item, digite a seguinte sequˆncia de comandos:
e a e
shell> cd /usr/local/mysql
shell> sudo ./bin/mysqld_safe
(Enter your password, if necessary)
(Press Control-Z)
shell> bg
(Press Control-D or enter "exit" to exit the shell)
Agora vocˆ deve conseguir se conectar ao servidor MySQL, ex.:
e executando
‘/usr/local/mysql/bin/mysql’
Se vocˆ instalar o MySQL pela primeira vez, lembre-se de consigurar uma senha para o
e
usu´rio root do MySQL!
a
Isto ´ feito com os seguintes comandos:
e
/usr/local/mysql/bin/mysqladmin -u root password <password>
/usr/local/mysql/bin/mysqladmin -u root -h ‘hostname‘ password <password>
Por favor, tenha certeza que o comando hostname na segunda linha est´ entre crases (‘),
a
´ com a sa´ deste comando (o nome da m´quina deste
assim a shell pode substitui-la ida a
sistema)!
Vocˆ tamb´m pode querer adicionar aliases ao seu arquivo de resursos do sheel para acessar
e e
mysql e mysqladmin da linha de comando:
alias mysql ’/usr/local/mysql/bin/mysql’
alias mysqladmin ’/usr/local/mysql/bin/mysqladmin’
De forma alternativa, vocˆ pode simplesmente adicionar /usr/local/mysql/bin a sua
e
vari´vel de ambiente PATH, ex.: adicionando o seguinte ao arquivo ‘$HOME/.tcshrc’:
a
setenv PATH ${PATH}:/usr/local/mysql/bin
Note que instalar um novo MySQL PKG n˜o remove o diret´rio de uma instala¸˜o mais
a o ca
antiga. Infelizmente o Mac OS X Installer ainda n˜o oferece a funcionalidade exigida para
a
atualizar apropriadamente pacotes instalados anteriormente.
Depois de copiar os arquivos de banco de dados do MySQL sobre os da vers˜o a
anterior e inicializar o nova vers˜o com sucesso, vocˆ deve remover os arquivos da
a e
instala¸˜o antiga para economizar espa¸o em disco. Adicionalmente vocˆ tamb´m
ca c e e
deve remover vers˜es mais antigas do diret´rio do Package Receipt localizados em
o o
‘/Library/Receipts/mysql-<version>.pkg’.
108. 74 MySQL Technical Reference for Version 5.0.0-alpha
2.1.4 Instalando o MySQL no NetWare
A partir da vers˜o 4.0.11, o MySQL est´ dispon´
a a ivel para a Novell NetWare na forma de
pacote do bin´rio. Para servir o MySQL, o servidor NetWare deve suprir estas exigˆncias:
a e
• NetWare vers˜o 6.5, ou NetWare 6.0 com Support Pack 3 instalado (Vocˆ pode obtˆ-lo
a e e
em http://support.novell.com/filefinder/13659/index.html). O sistema deve
obedecer as exigˆncias m´
e inimas da Naveel para executar a respectiva vers˜o do Net-
a
Ware.
• Os dados do MySQL, assim com os seus bin´rios, devem ser instalados em um volume
a
NSS; volumes tradicionais n˜o s˜o suportados.
a a
O pacote bin´rio para o NetWare pode ser obtido em http://www.mysql.com/downloads/.
a
Se vocˆ estiver executando o MySL no NetWare 6.0, sugerimos que vocˆ utilize a op¸˜o
e e ca
--skip-external-locking na linha de comando. Tamb´m ser´ necess´rio utilizar CHECK
e a a
TABLE e REPAIR TABLE em vez de myisamchk, porque myisamchk faz uso de lock externo.
Lock externo possui problemas com NetWare 6.0; o problema foi eliminado no NetWare
6.5.
2.1.4.1 Instalando o MySQL para Bin´rios do NetWare
a
1. Se vocˆ estiver atualizando de um instaa¸˜o anterior, para o servidor MySQL. Isto ´
e ca e
feito a partir do console do servidor, usando:
SERVER: mysqladmin -u root shutdown
2. Conecte-se no servidor alvo a partir de uma m´quina cliente com acesso ao local onde
a
vocˆ instalar´ o MySQL.
e a
3. Extraia o pacote zip bin´rio em seu servidor. Tenha certeza de permitir que os caminhos
a
´
no arquivo zip sejam usados. E seguro simplesmente extrair os arquivos para ‘SYS:’.
Se vocˆ estiver atualizando de uma instalando anterior, vocˆ pode precisar copiar os
e e
diret´rios de dados (ex.: ‘SYS:MYSQLDATA’) agora, assim como ‘my.cnf’ se vocˆ o tiver
o e
costumizado. Vocˆ pode ent˜o deletar a c´pia antiga do MySQL.
e a o
4. Vocˆ pode desejar renomear o diret´rio para algo mais consistente e f´cil de usar.
e o a
Recomendamos usar o ‘SYS:MYSQL’; exemplos no manual o usar˜o para se referir ao
a
diret´rio de instala¸˜o em geral.
o ca
5. No console do servidor, adicione um caminho de busca no diret´rio contendo os NLMs
o
do MySQL. Por exemplo:
SERVER: SEARCH ADD SYS:MYSQLBIN
6. Instale o banco de dados inicial, se necess´rio, digitando mysql_install_db no console
a
do servidor.
7. Inicie o servidor MySQL usando mysqld_safe no console do servidor.
8. Para finalizar a instala¸˜o, vocˆ tamb´m deve adicionar os seguintes comandos ao
ca e e
autoexec.ncf. Por exemplo, se sua instala¸˜o do MySQL est´ em ‘SYS:MYSQL’ e vocˆ
ca a e
quiser que o MySQL inicie automaticamente, vocˆ pode adicionar estas linhas:
e
#Starts the MySQL 4.0.x database server
SEARCH ADD SYS:MYSQLBIN
109. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 75
MYSQLD_SAFE
Se vocˆ estiver usando NetWare 6.0, vocˆ deve adicionar o parˆmetro --skip-
e e a
external-locking:
#Starts the MySQL 4.0.x database server
SEARCH ADD SYS:MYSQLBIN
MYSQLD_SAFE --skip-external-locking
Se houver uma instala¸˜o existente do MySQL no servidor, verifique a existencia de coman-
ca
dos de inicializa¸˜o do MySQL em autoexec.ncf, e edite ou delete-os se necess´rio.
ca a
2.2 Detalhes Gerais de Instala¸˜o
ca
2.2.1 Como obter o MySQL
Confira a homepage da MySQL homepage (http://www.mysql.com/) para informa¸˜es co
sobre a vers˜o atual e para instru¸˜es de download.
a co
Nosso principal espelho de download est´ localizado em: http://mirrors.sunsite.dk/mysql/.
a
Para uma lista atualizada completa dos mirrors de download da MySQL, veja
http://www.mysql.com/downloads/mirrors.html. Vocˆ tamb´m encontrar´ informa¸˜o
e e a ca
sobre como se tornar um mirror do MySQL e como relatar um mirror ruim ou
desatualizado.
2.2.2 Verificando a Integridade do Pacote Usando MD5 Checksums
ou GnuPG
Depois de fazer o download do pacote MySQL que serve `s suas necessidades e antes de
a
tentar instal´-lo, vocˆ deve ter certeza de que ele esta intacto e n˜o foi manipulado.
a e a
A MySQL AB oferece dois tipos de verifica¸˜o de integridade: MD5 checksums e assinaturas
ca
criptografadas usando GnuPG, o GNU Privacy Guard.
Verificando o MD5 Checksum
Depois de fazer o download do pacote, vocˆ deve verificar se o MD5 checksum corresponde
e
a aquele fornecido na p´gina de download do MySQL. Cada pacote tem um checksum
a
individual, que vocˆ pode verificar com o seguinte comando:
e
shell> md5sum <pacote>
Note que nem todos os sistemas operacionais suportam o comando md5sum - em alguns
ele ´ simplesmente chamado md5, outros n˜o o possuem. No Linux, ele ´ parte do pacote
e a e
a ´
GNU Text Utilities, que est´ disponivel para uma grande faixa de plataformas. Vocˆ e
pode fazer o download do c´digo fonte em http://www.gnu.org/software/textutils/.
o
Se vocˆ tiver o OpenSSL instalado, vocˆ tamb´m pode usar o comando openssl md5
e e e
<pacote>. Uma implementa¸˜o do comando md5 para DOS/Windows est´ dispon´ em
ca a ivel
http://www.fourmilab.ch/md5/.
Exemplo:
110. 76 MySQL Technical Reference for Version 5.0.0-alpha
shell> md5sum mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
155836a7ed8c93aee6728a827a6aa153
mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
Vocˆ deve verificar se o resultado do checksum corresponde a aquele impresso no p´gina de
e a
download logo abaixo do respectivo pacote.
A maioria do sites mirrors tamb´m oferecem um arquivo chamado ‘MD5SUMS’, que tamb´m
e e
inclui o MD5 checksums para todos os arquivos inclu´idos no diret´rio ‘Downloads’. Note no
o
entanto que ´ muito f´cil de modificar este arquivo e ele n˜o ´ um m´todo muito confi´vel.
e a a e e a
Caso esteja em d´vida, vocˆ deve consultar diferentes sites mirroers e comparar os resulta-
u e
dos.
Verifica¸˜o de Assinatura Usando GnuPG
ca
Um m´todo de verifica¸˜o de integridade de um pacote mais confi´vel ´ o uso de assi-
e ca a e
naturas criptografadas. A MySQL AB usa o GNU Privacy Guard (GnuPG), uma alterna-
tiva Open Source para o bem conhecido Pretty Good Privacy (PGP) de Phil Zimmermann.
Veja http://www.gnupg.org/ and http://www.openpgp.org/ para mais informa¸˜es sobre
co
OpenPGP/GnuPG e como obter e instalar o GnuPG em seus sistema. A maioria das distribui¸˜es
co
de Linux j´ vˆm com o GnuPG instalado por padr˜o.
a e a
A partir do MySQL 4.0.10 (Fevereiro de 2003), a MySQL AB come¸ou a assinar o seus
c
pacotes de download com GnuPG. Assinaturas criptografadas s˜o um m´todo bem mais
a e
confi´vel de verifica¸˜o da integridade e autenticidade de um arquivo.
a ca
Para verificar a assinatura de um pacote espec´
ifico, vocˆ primeiro precisa obtter uma c´pia
e o
da chave p´blica GPG da MySQL AB (build@mysql.com). Vocˆ tamb´m pode cort´-la e
u e e a
col´-la diretamente daqui ou obtˆ-la em http://www.keyserver.net/.
a e
Key ID:
pub 1024D/5072E1F5 2003-02-03
MySQL Package signing key (www.mysql.com) <build@mysql.com>
Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
Public Key (ASCII-armored):
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
111. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 77
a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv
bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ
cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q
zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu
cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ
YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J
Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l
xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi
Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE
7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm
Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p
/1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq
a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf
anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW
I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu
QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92
6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ
Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A
n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ==
=YJkx
-----END PGP PUBLIC KEY BLOCK-----
Vocˆ pode importar esta chave em seu pasta de chaves publicas GPG usando gpg --import.
e
Veja a documenta¸˜o de GPG para mais informa¸˜es de como trabalhar com chaves p´blicas.
ca co u
Depois de fazer o download e importar a chave publica criada, fa¸a o download
c
do pacote MySQL desejado e da assinatura correspondente, que tamb´m est´ e a
dispon´
ivel na p´gina de download. A assinatura tem a extens˜o ‘.asc’. Por exemplo,
a a
a assinatura de ‘mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz’ seria
‘mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz.asc’. Tenha certeza que ambos
os arquivos est˜o armazenados no mesmo diret´rio e ent˜o execute o seguinte comando
a o a
para verificar a assinatura para este arquivo:
shell> gpg --verify <package>.asc
Exemplo:
shell> gpg --verify mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz.asc
gpg: Warning: using insecure memory!
gpg: Signature made Mon 03 Feb 2003 08:50:39 PM MET using DSA key ID 5072E1F5
gpg: Good signature from
"MySQL Package signing key (www.mysql.com) <build@mysql.com>"
A mensagem "Good signature" indica que est´ tudo certo.
a
Verificando Assinatura Usando RPM
Para pacotes RPM, n˜o h´ assinaturas separadas - pacotes RPM atualmente tˆm uma assi-
a a e
´ e MD5 checksum. Vocˆ pode verific´-los executando o seguinte comando:
natura GPG incluida e a
112. 78 MySQL Technical Reference for Version 5.0.0-alpha
shell> rpm --checksig <package>.rpm
Exemplo:
shell> rpm --checksig MySQL-server-4.0.10-0.i386.rpm
MySQL-server-4.0.10-0.i386.rpm: md5 gpg OK
Nota: Se vocˆ estiver usando RPM 4.1 e ele reclamar sobre (GPG) NOT OK (MISSING KEYS:
e
GPG#5072e1f5) (mesmo se vocˆ a importou para detro de sua pasta de chaves publicas
e
GPG), vocˆ precisa import´-las para dentro de sua pasta de chaves RPM primeiro. RPM
e a
4.1 n˜o utiliza mais ias suas pastas de chaves GPG (e o pr´prio GPG), mas mant´m sua
a o e
pr´pria pasta de chaves (porque ele ´ um aplicativo do sistema e a pasta de chaves p´blicas
o e u
do GPG ´ um arquivo espec´
e ifico do usu´rio). Para importar a chave p´blica do MySQL em
a u
uma pasta de chaves RPM, use os seguintes comandos:
shell> rpm --import <pubkey>
Exemplo:
shell> rpm --import mysql_pubkey.asc
Caso vocˆ note que as assinaturas MD5 checksum ou GPG n˜o coincidem, tente primeiro fazer
e a
o download do pacote respectivo mais uma vez, talvez de outro site mirror. Se vocˆ n˜o
e a
obter sucesso na verifica¸˜o da integridade do pacote repetidas vezes, notifique-nos sobre
ca
tais incidentes incluindo o nome completo do pacote e o site que vocˆ tem utilizado para
e
fazer o download pelos emails webmaster@mysql.com ou build@mysql.com.
2.2.3 Sistemas Operacionais suportados pelo MySQL
N´s ulitizamos o GNU Autoconf, para que seja poss´
o ivel portar o MySQL para todos sis-
temas operacionais modernos com threads Posix funcionando e um compilador C++. (Para
compilar somente o c´digo cliente, um compilador C++ ´ necess´rio mas threads n˜o.) N´s
o e a a o
mesmos usamos e desenvolvemos o software primeiramente no Linux (SuSE e red Hat),
FreeBSD e Sun Solaris (Vers˜es 8 e 9).
o
Perceba que para alguns sistemas operacionais, o suporte nativo a thread funciona somente
nas ultimas vers˜es. O MySQL compila com sucesso nas seguintes combina¸˜es de sistema
´ o co
operacional/pacote de thread:
• AIX 4.x com threads nativas. Veja Se¸˜o 2.6.6.4 [IBM-AIX], P´gina 155.
ca a
• Amiga.
• BSDI 2.x com o pacote inclu´ MIT-pthreads. Veja Se¸˜o 2.6.4.5 [BSDI], P´gina 151.
ido ca a
• BSDI 3.0, 3.1 e 4.x com threads nativas. Veja Se¸˜o 2.6.4.5 [BSDI], P´gina 151.
ca a
• SCO OpenServer with a recent port of the FSU Pthreads package. Veja Se¸˜o 2.6.6.9
ca
[SCO], P´gina 161.
a
• SCO UnixWare 7.0.1. Veja Se¸˜o 2.6.6.10 [SCO Unixware], P´gina 163.
ca a
• DEC Unix 4.x com threads nativas. Veja Se¸˜o 2.6.6.6 [Alpha-DEC-UNIX], P´gina 157.
ca a
• FreeBSD 2.x com o pacote inclu´ MIT-pthreads. Veja Se¸˜o 2.6.4.1 [FreeBSD],
ido ca
P´gina 149.
a
113. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 79
• FreeBSD 3.x e 4.x com threads nativas. Veja Se¸˜o 2.6.4.1 [FreeBSD], P´gina 149.
ca a
• FreeBSD 4.x com Linuxthreads. Veja Se¸˜o 2.6.4.1 [FreeBSD], P´gina 149.
ca a
• HP-UX 10.20 com o pacote incluido ´ MIT-pthreads ou DCE threads. Veja Se¸˜o 2.6.6.2
ca
[HP-UX 10.20], P´gina 154.
a
• HP-UX 11.x com as threads nativas. Veja Se¸˜o 2.6.6.3 [HP-UX 11.x], P´gina 154.
ca a
• Linux 2.0+ com LinuxThreads 0.7.1+ ou glibc 2.0.7+. Veja Se¸˜o 2.6.2 [Linux],
ca
P´gina 137.
a
• Mac OS X Server. Veja Se¸˜o 2.6.5 [Mac OS X], P´gina 152.
ca a
• NetBSD 1.3/1.4 Intel e NetBSD 1.3 Alpha (Necessita GNU make). Veja Se¸˜o 2.6.4.2
ca
[NetBSD], P´gina 150.
a
• Novell NetWare 6.0. Veja Se¸˜o 2.6.8 [Novell NetWare], P´gina 164.
ca a
• OpenBSD > 2.5 com threads nativas. OpenBSD < 2.5 com o pacote inclu´ MIT- ido
pthreads . Veja Se¸˜o 2.6.4.3 [OpenBSD], P´gina 151.
ca a
• OS/2 Warp 3, FixPack 29 e OS/2 Warp 4, FixPack 4. Veja Se¸˜o 2.6.7 [OS/2],
ca
P´gina 164.
a
• SGI Irix 6.x com threads nativas. Veja Se¸˜o 2.6.6.8 [SGI-Irix], P´gina 160.
ca a
• Solaris 2.5 e superior com threads nativas nas plataformas SPARC e x86. Veja
Se¸˜o 2.6.3 [Solaris], P´gina 145.
ca a
• SunOS 4.x com o pacote inclu´ MIT-pthreads. Veja Se¸˜o 2.6.3 [Solaris], P´gina 145.
ido ca a
• Tru64 Unix
• Windows 9x, Me, NT, 2000 e XP. Veja Se¸˜o 2.6.1 [Windows], P´gina 133.
ca a
Perceba que nem todas as plataformas s˜o apropriadas para executar o MySQL. Os seguintes
a
fatores determinam se uma certa plataforma ´ apropriada para uma miss˜o cr´
e a itica pesada:
• Estabilidade geral da biblioteca thread. Uma plataforma pode ter excelente reputa¸˜o, ca
entretanto, se a biblioteca thread ´ inst´vel no c´digo que ´ usado pelo MySQL, mesmo
e a o e
se todo o resto for perfeito, o MySQL ir´ ser t˜o est´vel quanto a biblioteca thread.
a a a
• A habilidade do kernel e/ou a biblioteca thread tirar vantagem do SMP em sistemas
multi-processados. Em outras palavras, quando um proceesso cria uma thread, deve
ser poss´ para aquela thread executar em uma CPU diferente que o processo original.
ivel
• A habilidade do kernel e/ou a biblioteca thread executar v´rias threads que
a
adiquire/libera um bloqueio mutex sobre uma pequena regi˜o cr´ a itica frequentemente
sem trocas de contexto excessivos. Em outras palavras, se a implementa¸˜o de ca
pthread_mutex_lock() requisitar a CPU muito rapidamente, isto ir´ afetar o MySQL
a
tremendamente. Se esse detalhe n˜o estiver sendo cuidado, adicionar CPUs extras
a
podem deixar o MySQL mais lento.
• Estabilidade e performance geral do sistema de arquivos.
• Habilidade do sistema de arquivos em lidar com arquivos grandes de forma eficiente,
se suas tabelas forem grandes.
• Nosso n´ de experiˆncia aqui na MySQL AB com a plataforma. Se n´s conhecemos
ivel e o
bem uma plataforma, introduzimos otimiza¸˜es/corre¸oes espec´
co c ificas para ela habili-
tadas na hora da compila¸˜o. N´s tamb´m podemos fornecer conselhos sobre como
ca o e
configurar seu sistema otimizadamente para o MySQL.
114. 80 MySQL Technical Reference for Version 5.0.0-alpha
• O volume de testes feitos internamente de configura¸˜es similares.
co
• O n´mero de usu´rios que tem executado o MySQL com sucesso naquela plataforma em
u a
configura¸˜es similares. Se esse n´mero for alto, as chances de se ter alguma surpresa
co u
espec´
ifica da plataforma fica muito menor.
Baseado nos crit´rios acima, as melhores plataformas para a execu¸˜o do MySQL at´ este
e ca e
ponto s˜o o x86 com SuSe Linux 8.2, kernel 2.4 e ReiserFS (ou qualquer distribui¸˜o Linux
a ca
similar) e Sparc com Solaris (2.7-9). FreeBSD vem em terceiro, mas realmente temos
esperan¸as que ele ir´ se unir ao clube dos tops uma vez que a biblioteca thread est´
c a a
melhorando. N´s tamb´m acreditamos que em certo ponto iremos estar aptos para incluir
o e
todas as outras plataformas em que o MySQL compila e executa, mas n˜o t˜o bem e com
a a
o mesmo n´ ivel de estabilidade e performance, na categoria superior. Isto necessitar´ de
a
algum esfor¸o da nossa parte em coopera¸˜o com os desenvolvedores dos componentes do
c ca
Sistema Operacional/Biblioteca que o MySQL depende. Se vocˆ tiver interesse em melhorar
e
algum de nossos componentes, est´ em uma posi¸˜o para influenciar seu desenvolvimento,
a ca
e precisa de instru¸˜es mais detalhadas sobre o que o MySQL necessita para uma melhor
co
execu¸˜o, envie um e-mail para lista de email “insternals” do MySQL. Veja Se¸˜o 1.7.1.1
ca ca
[Mailing-list], P´gina 33.
a
Por favor, perceba que a compara¸˜o acima n˜o ´ para dizer que um SO ´ melhor ou pior
ca a e e
que o outro em geral. N´s estamos falando sobre a escolha de um SO para um prop´sito
o o
dedicado: executar o MySQL, e comparamos as plataformas levando isto em considera¸˜o. ca
Desta forma, o resultado desta compara¸˜o seria diferente se n´s inclu´
ca o issemos mais detalhes.
E em alguns casos, a raz˜o de um SO ser melhor que o outro pode ser simplesmente
a
porque colocamos mais esfor¸o nos testes e otimiza¸˜o para aquela plataforma em particular.
c ca
Estamos apenas colocando nossas observa¸˜es para ajud´-lo na decis˜o de qual plataforma
co a a
usar o MySQL na sua configura¸˜o.ca
2.2.4 Qual vers˜o do MySQL deve ser usada
a
A primeira decis˜o a ser feita ´ se vocˆ deve usar a ultima vers˜o de desenvolvimento ou a
a e e ´ a
ultima vers˜o est´vel:
´ a a
• Normalmente, se vocˆ estiver usando o MySQL pela primeira vez ou tentando port´-
e a
lo para algum sistema em que n˜o exista distribui¸˜o bin´ria, recomendamos o uso
a ca a
da vers˜o est´vel (atualmente Vers˜o 5.0.0-alpha). Repare que todos os lan¸amentos
a a a c
do MySQL s˜o conferidos com os testes comparativos de performance e um conjunto
a
extenso de testes antes de cada lan¸amento.
c
• Sen˜o, caso vocˆ esteja trabalhando com um antigo sistema e quiser atualiz´-lo, mas n˜o
a e a a
que correr o risco com uma atualiza¸˜o sem corre¸˜es, vocˆ deve faze-lo do mesmo ramo
ca co e
que vocˆ est´ usando (onde aenas o ultimo n´mero da vers˜o ´ mais novo que o seu).
e a ´ u a e
N´s temos tentado corrigir somente erros fatais e torn´-los menores, com altera¸˜es
o a co
relativamente seguras para aquela vers˜o.
a
A segunda decis˜o a ser feita ´ se vocˆ deseja usar uma distribui¸˜o fonte ou bin´ria. Na
a e e ca a
maioria dos casos provavelmente vocˆ dever´ usar a distribui¸˜o bin´ria, se alguma existir
e a ca a
para sua plataforma, ser´ normalmente muito mais f´cil para instalar do que a distribui¸˜o
a a ca
em c´digo fonte.
o
115. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 81
Nos seguites casos vocˆ provavelmente ser´ mais bem servido com uma instala¸˜o baseada
e a ca
em c´digo fonte:
o
• Se vocˆ desejar instalar o MySQL em algum lugar expec´
e ifico. (O padr˜o das dis-
a
tribui¸˜es bin´rias ´ estar“pronto para rodar” em qualquer lugar, mas talvez vocˆ
co a e e
deseje ainda mais flexibilidade).
• Para estar apto e satisfazer diferentes requisi¸˜es dos usu´rios, estaremos fornecendo
co a
duas vers˜es bin´rias diferentes; Uma compilada com os manipuladores de tabelas n˜o
o a a
transacionais (um bin´rio r´pido e pequeno) e um configurado com as mais importantes
a a
op¸˜es extendidas como tabelas transacionais. Ambas vers˜es s˜o compiladas da mesma
co o a
distribui¸˜o fonte. Todos clientes MySQL nativos pode conectar com ambas vers˜es do
ca o
MySQL.
A distribui¸˜o bin´ria extendida ´ marcada com o sufixo -max e ´ configurada com as
ca a e e
mesmas op¸˜es de mysqld-max. Veja Se¸˜o 4.8.5 [mysqld-max], P´gina 344.
co ca a
Se vocˆ deseja usar o RPM MySQL-Max, primeiramente vocˆ deve instalar o RPM MySQL-
e e
server padr˜o. a
e ˜
• Se vocˆ deseja configurar mysqld com alguns recursos extras que NAO est˜o nas dis-
a
tribui¸˜es bin´rias. Segue abaixo a lista das op¸˜es extras mais comuns que vocˆ pode
co a co e
querer usar:
• --with-innodb
• --with-berkeley-db (padr˜o para o MySQL 4.0 e seguintes)
a
• --with-raid (n˜o disponivel
a ´ para todas as plataformas)
• --with-libwrap
• --with-named-z-lib (Isto ´ feito para alguns dos bin´rios)
e a
• --with-debug[=full]
• A distribui¸˜o bin´ria padr˜o ´ normalmente compilada com suporte para todos con-
ca a a e
juntos de caracteres e deve funcionar em uma variedade de processadores para a mesma
fam´ do processador.
ilia
Se vocˆ precisar de um servidor MySQL mais r´pido vocˆ pode querer recompil´-lo com
e a e a
suporte para somente o conjunto de caracteres que vocˆ precisa, usar um compilador
e
melhor (como pgcc) ou usar op¸˜es de compiladores para usar otimiza¸˜es para seu
co co
processador.
• Se vocˆ encontrar um erro e relat´-lo para o time de desenvolvimento do MySQL vocˆ
e a e
provavelmente receber´ um patch que ser´ necess´rio aplic´-lo para a distribui¸˜o fonte
a a a a ca
para ter o bug corrigido.
• Se vocˆ deseja ler (e/ou modificar) o c´digo C e C++ que ´ o MySQL, vocˆ pode obter
e o e e
uma distribui¸˜o fonte. O c´digo fonte ´ sempre o manual final. Distribui¸˜es fontes
ca o e co
tamb´m contem mais testes e exemplos que as distribui¸˜es bin´rias.
e co a
O esquema de nomes do MySQL usa n´meros de vers˜es que consistem de tres n´meros e
u o u
um sufixo. Por exemplo, um nome de lan¸amento como mysql-4.1.0-alpha ´ interpretado
c e
da seguinte maneira:
• O primeiro n´mero (4) ´ a vers˜o principal e tamb´m descreve o formato dos arquivos.
u e a e
Todas releases da Vers˜o 4 tem o mesmo formato de arquivo.
a
• O segundo n´mero (1) ´ o n´ da distribui¸ao.
u e ivel c˜
116. 82 MySQL Technical Reference for Version 5.0.0-alpha
• O terceiro n´mero (0 ´ o n´mero da vers˜o do n´ de distribui¸˜o. Este ´ incrementado
u e u a ivel ca e
para cada nova distribui¸˜o. Normalmente vocˆ desejar´ a ultima vers˜o para o n´
ca e a ´ a ivel
de publica¸˜o que tiver escolhido.
ca
• O sufixo (alpha) indica o n´ de estabilidade da vers˜o. Os poss´
ivel a iveis sufixo s˜o:
a
− alpha indica que a vers˜o cont´m grandes se¸˜es de novos c´digos que n˜o foram
a e co o a
100% testados. Bugs conhecidos (normalmente n˜o tem nenhum) devem estar doc-
a
umentados na se¸˜o News. Veja Apˆndice C [News], P´gina 948. Existem tamb´m
ca e a e
novos comandos e extens˜es na maioria das publica¸˜es alpha. Desenvolvimento
o co
ativo que podem envolver maiores altera¸˜es no c´digo pode ocorrer numa vers˜o
co o a
alpha, mas tudo ser´ testado antes de fazer a publica¸˜o. N˜o podem existir erros
a ca a
conhecidos em nenhuma publica¸˜o do MySQL.
ca
− beta significa que todo o novo c´digo foi testado. N˜o ser˜o adicionados novos
o a a
recursos que podem causar algum tipo de corrompimento. N˜o deve existir bugs
a
conhecidos. Uma altera¸˜o de vers˜o de alpha para beta ocorre quando n˜o existir
ca a a
nenhum relato de erro fatal com uma vers˜o alpha por pelo menos um mˆs e n˜o
a e a
planejarmos adicionar nenhum recurso que pode deixar algum antigo comando
menos confi´vel.
a
− gamma ´ o beta que j´ tem sido usado a algum tempo e parece funcionar bem.
e a
Apenas pequenas corre¸˜es s˜o adicionadas. Isto ´ o que muitas empresas chamam
co a e
de release.
− Se n˜o existir um sufixo, significa que esta vers˜o j´ est´ sendo executada h´
a a a a a
algum tempo em diferentes locais sem relatos de erros al´m dos espec´
e ificos de
certas plataformas. Somente corre¸˜es de erros cr´
co iticos s˜o adicionados ao release.
a
Isto ´ o que chamamos de uma distribui¸˜o est´vel.
e ca a
No processo de desenvolvimento do MySQL, v´rias vers˜es coexistem e est˜o em um est´gio
a o a a
diferente. Naturalmente, corre¸˜es de erros relevantes de uma s´rie anterior s˜o propagados.
co e a
• Para a antiga s´rie 3.23 est´vel/de produ¸˜o, novas vers˜es s´ s˜o liberadas para erros
e a ca o o a
cr´
iticos.
• A s´rie atual (4.0) ´ de qualidade est´vel/produ¸˜o. Nenhum novo recurso que possa
e e a ca
influenciar a estabilidade do c´digo ´ adicionado.
o e
• No ramo alpha 4.1 principal, novos recursos s˜o adicionados. Fontes e bin´rios est˜o
a a a
dispon´
iveis para uso e teste em sistemas de desenvolvimento.
• O ramo de desenvolvimento 5.0 s´ est´ dispon´ para a ´rvore do BitKeeper.
o a ivel a
Todas as vers˜es do MySQL funcionam sobre nossos testes padr˜es e comparativos para
o o
garantir que eles s˜o relativamente seguros para o uso. Como os testes padr˜es s˜o exten-
a o a
didos ao longo do tempo para conferir por todos os bugs antigos encontrados, o pacote de
testes continua melhorando.
Perceba que todas publica¸˜es de vers˜es foram testadas pelo menos com:
co o
Um pacote de testes interna
Faz parte de um sistema de produ¸˜o para um cliente. Ela tem diversas tabelas
ca
com centenas de megabytes de dados.
117. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 83
O pacote de comparativos da MySQL
e ´
Este executa uma s´rie de consultas comuns. E tamb´m um teste para ver se
e
o ultimo conjunto de otimiza¸˜es fez o c´digo mais r´pido. Veja Se¸˜o 5.1.4
´ co o a ca
[MySQL Benchmarks], P´gina 422.
a
O teste crash-me
Este tenta determinar quais recursos o banco de dados suporta e quais s˜o suas
a
capacidades e limita¸˜es. Veja Se¸˜o 5.1.4 [MySQL Benchmarks], P´gina 422.
co ca a
Outro teste ´ que n´s usamos a vers˜o do MySQL mais nova em nosso ambiente de produ¸˜o
e o a ca
interna, em pelo menos uma m´quina. N´s temos mais de 100 gigabytes de dados com que
a o
trabalhar.
2.2.5 Layouts de Instala¸˜o
ca
Esta se¸˜o descreve o layout padr˜o dos diret´rios criados pela instal¸˜o das distribui¸˜es
ca a o ca co
bin´ria e fonte.
a
Uma distribui¸˜o bin´ria ´ instalada descompactando-a no local de instala¸˜o de sua escolha
ca a e ca
(tipicamente ‘/usr/local/mysql’) e cria os seguintes diret´rios nesses locais:
o
Diret´rio
o Conte´do do diret´rio
u o
‘bin’ Programas clientes e o servidor mysqld
‘data’ Arquivos Log, bancos de dados
‘docs’ Documenta¸˜o, Log de altera¸˜es
ca co
‘include’ Arquivos de cabe¸alho (headers)
c
‘lib’ Bibliotecas
‘scripts’ mysql_install_db
‘share/mysql’ Arquivos de mensagem de erro
‘sql-bench’ Benchmarks - testes comparativos
Uma distribui¸˜o baseada em c´digo fonte ´ instalada depois de vocˆ configur´-la e compil´-
ca o e e a a
la. Por padr˜o, a instala¸˜o copia os arquivos em ‘/usr/local’, nos seguintes subdiret´rios:
a ca o
Diret´rio
o Conte´do do diret´rio
u o
‘bin’ Programas clientes e scripts
‘include/mysql’ rquivos de cabe¸alho (headers)
A c
‘info’ Documenta¸˜o no formato Info
ca
‘lib/mysql’ Bibliotecas
‘libexec’ O servidor mysqld
‘share/mysql’ Arquivos com mensagens de erros
‘sql-bench’ Benchmarks e o teste crash-me
‘var’ Bancos de dados e arquivos log
Dentro de um diret´rio de instala¸˜o, o layout de uma instala¸˜o baseada em fontes difer-
o ca ca
encia de uma instala¸˜o bin´ria nas seguintes formas:
ca a
• The mysqld server is installed in the ‘libexec’ directory rather than in the ‘bin’
directory.
• The data directory is ‘var’ rather than ‘data’.
• mysql_install_db is installed in the ‘/usr/local/bin’ directory rather than in
‘/usr/local/mysql/scripts’.
118. 84 MySQL Technical Reference for Version 5.0.0-alpha
• The header file and library directories are ‘include/mysql’ and ‘lib/mysql’ rather
than ‘include’ and ‘lib’.
You can create your own binary installation from a compiled source distribution by executing
the script ‘scripts/make_binary_distribution’.
2.2.6 Como e quando as atualiza¸˜es s˜o lan¸adas?
co a c
O MySQL est´ evoluindo muito rapidamente na MySQL AB e n´s queremos compartilhar
a o
isto com outros usu´rios MySQL. Sempre que temos alguns recursos uteis que outros acham
a ´
necess´io, tentamos fazer um release.
a
Tamb´m tentamos ajudar usu´rios que solicitam recursos que s˜o de f´cil implementa¸˜o.
e a a a ca
Tomamos notas do que nossos usu´rios licenciados gostariam de ter,especialmente do que
a
nossos clientes com suporte extendido desejam e tentamos ajud´-los.
a
N˜o existe uma real necessidade para baixar uma nova release. A se¸˜o News ir´ dizer se a
a ca a
nova vers˜o tem alguma coisa que vocˆ precisa. Veja Apˆndice C [News], P´gina 948.
a e e a
Usamos a seguinte pol´itica quando estamos atualizando o MySQL:
• Para cada pequena atualiza¸˜o, o ultimo n´mero na vers˜o ´ incrementado. Quando
ca ´ u a e
tiver um maior n´mero de novos recursos ou menor incompatibilidade com vers˜es
u o
antigas, o segundo n´mero na vers˜o ´ incrementado. Quando o formato de arquivo
u a e
altera, o primeiro n´mero ´ aumentado.
u e
• Vers˜es est´veis testadas aparecem na m´dia de uma a duas vezes por ano, mas se
o a e
pequenos bugs s˜o encontrados, uma vers˜o ser´ lan¸ada apenas com as corre¸˜es dos
a a a c co
erros.
• Releases funcionais aparecem na m´dia a cada 1-8 semanas.
e
• Distribui¸˜es bin´rias para algumas plataformas ser´ feita por n´s somente para re-
co a a o
leases mais importantes. Outras pessoas podem fazer distribui¸˜es bin´rias para outros
co a
sistemas mas provavelmente com menos frequencia.
• N´s normalmente disponibilizamos os patches logo que localizamos e corrigimos
o
pequenos bugs. Eles normalmente s˜o imediatamente disponibilizados em nosso
a
reposit´rio publico do BitKeeper. Eles ser˜o inclu´
o a idos na pr´xima distribui¸˜o.
o ca
a ´
• Para bugs n˜o criticos, mas irritantes, disponibilizamos patches se eles s˜o enviados
a
para n´s. De qualquer forma, iremos combinar v´rios deles em um patch maior.
o a
• Se existitr, por algum motivo, um bug fatal numa vers˜o criaremos uma nova release
a
´ ´
o mais cedo possivel. Gostariamos que outras empresas fizessem isto tamb´m. e
A vers˜o est´vel atual ´ a 3.23; n´s j´ mudamos o desenvolvimento em atividade para a
a a e o a
vers˜o 4.0. Bugs contiuar˜o a ser corrigidos na vers˜o est´vel. N˜o acreditamos em um
a a a a a
congelamento completo, pois isto abandona a corre¸˜es de bugs e coisas que “devem ser
co
feitas.” “Alguma coisa congelada” significa que talvez possamos adicionar pequenas coisas
que “com certeza n˜o afetar´ nada que j´ esteja funcionando.”
a a a
O MySQL usa um esquema de nomes um pouco diferente da maioria dos outros produtos.
Em geral ´ relativamente seguro utilizar qualquer vers˜o que tenha sido lan¸ado a algumas
e a c
semanas e que n˜o tenham sido sustitu´ por uma nova vers˜o. Veja Se¸˜o 2.2.4 [Qual
a ida a ca
vers˜o], P´gina 80.
a a
119. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 85
2.2.7 Filosofia das Distribui¸˜es - Nenhum Bug Conhecidos nas
co
Distribui¸oes
c˜
Colocamos muito tempo e esfor¸o em tornar nossas distribui¸˜es livres de erros. Pelo nosso
c co
conhecimento, n˜o liberamos uma unica vers˜o do MySSQL com qualquer erro conhecido
a ´ a
’fatal’.
Um erro fatal ´ algo que faz o MySQL falhar com o uso normal, traz respostas erradas para
e
consultas normais ou tem um problema de seguran¸a.
c
N´s temos documentados todos os problemas conhecidos, bugs e assuntos que s˜o depen-
o a
dentes das decis˜es de projeto. Veja Se¸˜o 1.8.6 [Bugs], P´gina 53.
o ca a
Nosso objeto ´ corrigir tudo que ´ poss´
e e ivel, mas sem correr o risco de tornarmos uma
vers˜o menos est´vel. Em certos casos, isto significa que podemos corrigir um problema
a a
na(s) vers˜o(˜es) de desenvolvimento, mas n˜o o corrigirmos na vers˜o est´vel (produ¸˜o).
a o a a a ca
Naturalmente, documentamos tais problemas para que o usu´rios esteja ciente.
a
Aqui est´ um descri¸˜o de como nosso processo de contru¸˜o funciona:
a ca ca
• Monitoramos erros de nossa lista de suporte ao cliente, a lista de email externa do
MySQL e o banco de dados de bugs em http://bugs.mysql.com/.
• Todos os erros relatados em vers˜es usadas s˜o inseridos nio banco de dados de bugs.
o a
• Quando corrigimos um erro, sempre tentamos fazer um caso de teste para ele e inclu´ i-lo
em nosso sistema de teste para assegurar que o erro nunca retornar´. (Cerca de 90%
a
de todos os erros corrigidos tˆm um caso de teste.)
e
• Tamb´m criamos casos de teste para todos os novos recursos adicionados ao MySQL.
e
• Antes de come¸armos a fazer uma nova distribui¸˜o do MySQL, asseguramos que todos
c ca
os erros repetit´
iveis relatados para a vers˜o do MySQL (3.23.x, 4.0.x, etc) est˜o cor-
a a
rigidos. Se algo for imposs´ de corrigir (devido a alguma decis˜o de projeto interno
ivel a
no MySQL), documentaremos isto no manual. Veja Se¸˜o 1.8.6 [Bugs], P´gina 53.
ca a
• N´s fazemos uma constru¸˜o para todas as plataformas para as quais suportamos
o ca
bin´rios (mais de 15 plataformas) e executamos nosso pacote de teste e benchmarks
a
para todas elas.
• N˜o publicaremos um bin´rio para uma plataforma na qual os testes do pacote de
a a
benchmarks falharam. Se for um erro geral na fonte, o corrigimos e fazemos as con-
tru¸˜es mais os teste em todos os sistemas novamente.
co
• Se n´s, durante a o porcesso de constru¸˜o e teste (que leva de 2 a 3 dias) recebermos um
o ca
relat´rio sobre um erro fatal (por exemplo, um que cause um core dump), o corrigiremos
o
e reiniciaremos o processo de constru¸˜o).
ca
• Depois de publicarmos os bin´rios em http://www.mysql.com/, enviamos um email
a
de an´ncio nas listas de email mysql e announce. Veja Se¸˜o 1.7.1.1 [Mailing-list],
u ca
P´gina 33. A mensagem de an´ncio cont´m uma lista de todas as altera¸˜es da dis-
a u e co
tribui¸˜o e qualquer problema conhecido com ela. (A se¸˜o ’problemas conhecidos’ na
ca ca
notas das distribui¸˜es s´ tem sido necess´ria em algumas da distribui¸˜es.)
co o a co
• Para darmos acesso rapidamente aos nossos usu´rios dos ultimos recursos do MySQL,
a ´
fazemos uma nova distribui¸˜o do MySQL a cada 4-5 semanas.
ca
• Se, depois da distribui¸˜o estar pronta, recebermos qualquer relat´rio que houve (de-
ca o
pois de tudo) qualquer coisa criticamente errada com a constru¸˜o em uma plataforma
ca
120. 86 MySQL Technical Reference for Version 5.0.0-alpha
espec´
ifica, corrigiremo-na imediatamente e liberaremos um nova distribui¸˜o ’a’ para
ca
aquela plataforma. Gra¸as aos nosso grande base de usu´rios, problemas s˜o encontra-
c a a
dos rapidamente.
• Nosso registro para boas distribui¸˜es feitas ´ muito boa. Nas ultimas 150 distribui¸˜es,
co e ´ co
tivemos que fazer uma nova contru¸˜o para menos de 10 distribui¸˜es (em 3 destes
ca co
casos, o erro era uma biblioteca glibc com problema em uma de nossas m´quinas que
a
levamos um longo tempo para encontrar.
2.2.8 Bin´rios MySQL compilados pela MySQL AB
a
Como um servi¸o, n´s na MySQL AB fornecemos um conjunto de distribui¸˜es bin´rias do
c o co a
MySQL que s˜o compiladas no nosso site ou em sites onde os clientes cordialmente nos d˜o
a a
acesso as suas m´quinas.
a
Em adi¸˜o aos bin´rios forncedios em formatos de pacotes espec´
ca a ificos da plataforma (veja
Se¸˜o 2.1 [Quick Standard Installation], P´gina 60), oferecemos distribui¸˜es bin´rios para
ca a co a
outras plataformas atrav´s de arquivos tar compactados (.tar.gz).
e
Estas distribui¸˜es s˜o geradas usando o script Build-tools/Do-compile que compila
co a
o c´digo fonte e cria o arquivo bin´rio em tar.gz usando scripts/make_binary_
o a
distribution. Estes bin´rios s˜o configurados e constru´
a a idos com os seguintes compiladores
e op¸˜es.
co
Bin´rios constru´
a idos no sistema de desenvolvimento da MySQL AB:
Linux 2.4.xx x86 com gcc 2.95.3
CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 -
mcpu=pentiumpro -felide-constructors" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --enable-assembler --disable-shared --with-
client-ldflags=-all-static --with-mysqld-ldflags=-all-static
Linux 2.4.xx Intel Itanium 2 com ecc (Intel C++ Itanium Compiler 7.0)
CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2
-tpp2 -ip -nolib_inline" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile
Linux 2.4.xx Intel Itanium com ecc (Intel C++ Itanium Compiler 7.0)
CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 ./configure --
prefix=/usr/local/mysql --with-extra-charsets=complex --enable-
thread-safe-client --enable-local-infile
Linux 2.4.xx alpha com ccc (Compaq C V6.2-505 / Compaq C++ V6.3-006)
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="-
fast -arch generic -noexceptions -nortti" ./configure -
-prefix=/usr/local/mysql --with-extra-charsets=complex
--enable-thread-safe-client --enable-local-infile --with-
mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
--disable-shared
121. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 87
Linux 2.4.xx s390 com gcc 2.95.3
CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors"
./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
--enable-thread-safe-client --enable-local-infile --disable-shared
--with-client-ldflags=-all-static --with-mysqld-ldflags=-all-
static
Linux 2.4.xx x86 64 (AMD64) com gcc 3.2.1
CXX=gcc ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--disable-shared
Sun Solaris 8 x86 com gcc 3.2.3
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-
O3 -fno-omit-frame-pointer -felide-constructors -fno-
exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --
localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --disable-shared --with-innodb
Sun Solaris 8 sparc com gcc 3.2
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--enable-assembler --with-named-z-libs=no --with-named-curses-
libs=-lcurses --disable-shared
Sun Solaris 8 sparc 64bit com gcc 3.2
CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc
CXXFLAGS="-O3 -m64 -fno-omit-frame-pointer -felide-constructors
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --enable-assembler --with-named-z-libs=no
--with-named-curses-libs=-lcurses --disable-shared
Sun Solaris 9 sparc com gcc 2.95.3
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--enable-assembler --with-named-curses-libs=-lcurses --disable-
shared
Sun Solaris 9 sparc com cc-5.0 (Sun Forte 5.0)
CC=cc-5.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst
-mt -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_
-xarch=v9" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--enable-assembler --with-named-z-libs=no --enable-thread-safe-
client --disable-shared
122. 88 MySQL Technical Reference for Version 5.0.0-alpha
IBM AIX 4.3.2 ppc com gcc 3.2.3
CFLAGS="-O2 -mcpu=powerpc -Wa,-many " CXX=gcc CXXFLAGS="-O2
-mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--with-named-z-libs=no --disable-shared
IBM AIX 4.3.3 ppc com xlC_r (IBM Visual Age C/C++ 6.0)
CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192"
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
--libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
--enable-thread-safe-client --enable-local-infile --with-named-z-
libs=no --disable-shared --with-innodb
IBM AIX 5.1.0 ppc com gcc 3.3
CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2
-mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --with-server-suffix="-pro" --enable-thread-
safe-client --enable-local-infile --with-named-z-libs=no
--disable-shared
HP-UX 10.20 pa-risc1.1 com gcc 3.1
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="-
DHPUX -I/opt/dce /include -felide-constructors -fno-exceptions
-fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client --
enable-local-infile --with-pthread --with-named-thread-libs=-ldce
--with-lib-ccflags=-fPIC --disable-shared
HP-UX 11.11 pa-risc2.0 64 bit com aCC (HP ANSI C++ B3910B A.03.33)
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --
prefix=/usr/local/mysql --with-extra-charsets=complex --enable-
thread-safe-client --enable-local-infile --disable-shared
HP-UX 11.11 pa-risc2.0 32bit com aCC (HP ANSI C++ B3910B A.03.33)
CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable"
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
--libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
--enable-thread-safe-client --enable-local-infile --disable-shared
--with-innodb
Apple Mac OS X 10.2 powerpc com gcc 3.1
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--disable-shared
123. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 89
FreeBSD 4.7 i386 com gcc 2.95.4
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --enable-assembler --with-named-z-libs=not-
used --disable-shared
QNX Neutrino 6.2.1 i386 with gcc 2.95.3qnx-nto 20010315
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--disable-shared
Os seguintes bin´rios s˜o contru´
a a idos em sistemas de terceiros gentilmente cedidos para a
MySQL AB pou outros usu´rios. Pou favor, note que eles s´ s˜o fornecidos como cortesia.
a o a
Uma vez que a MySQL AB n˜o tem total controle sobre estes sistemas, n´s podemos fornecer
a o
apenas suporte limitado para os bin´rios constru´
a idos nestes sistemas.
SCO Unix 3.2v5.0.6 i386 com gcc 2.95.3
CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -
mpentium -felide-constructors" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --with-named-z-libs=no --enable-thread-safe-
client --disable-shared
SCO OpenUnix 8.0.0 i386 com CC 3.2
CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --with-named-z-libs=no --enable-thread-safe-
client --disable-shared
Compaq Tru64 OSF/1 V5.1 732 alpha com cc/cxx (Compaq C V6.3-029i / DIGITAL C++
V6.1-027)
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -
inline speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4
-ansi_alias -fast -inline speed -speculate all -noexceptions
-nortti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--with-prefix=/usr/local/mysql --with-named-thread-libs="-
lpthread -lmach -lexc -lc" --disable-shared --with-mysqld-ldflags=-
all-static
SGI Irix 6.5 IP32 com gcc 3.0.1
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--disable-shared
124. 90 MySQL Technical Reference for Version 5.0.0-alpha
FreeBSD 5.0 sparc64 com gcc 3.2.1
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --disable-shared --with-innodb
As seguintes op¸˜es de compila¸˜o foram usadas nos pacotes bin´rios que a MySQL AB
co ca a
costumava fornecer no passado. Estes bin´rios n˜o s˜o mais atualizados, mas as op¸˜es de
a a a co
compila¸˜o s˜o mantidas aqui com o prop´sito de referˆncia.
ca a o e
Linux 2.2.xx sparc com egcs 1.1.2
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3
-fno-omit-frame-pointer -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-
charsets=complex --enable-thread-safe-client --enable-local-infile
--enable-assembler --disable-shared
Linux 2.2.x com x686 com gcc 2.95.2
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro
-felide-constructors -fno-exceptions -fno-rtti" ./configure
--prefix=/usr/local/mysql --enable-assembler --with-mysqld-
ldflags=-all-static --disable-shared --with-extra-charsets=complex
SunOS 4.1.4 2 sun4c com gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure
--prefix=/usr/local/mysql --disable-shared --with-extra-
charsets=complex --enable-assembler
SunOS 5.5.1 (e acima) sun4u com egcs 1.0.3a ou 2.90.27 ou gcc 2.95.2 e mais novo
CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
--with-low-memory --with-extra-charsets=complex --enable-assembler
SunOS 5.6 i86pc com gcc 2.8.1
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
--with-low-memory --with-extra-charsets=complex
BSDI BSD/OS 3.1 i386 com gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex
BSDI BSD/OS 2.1 i386 com gcc 2.7.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex
AIX 2 4 com gcc 2.7.2.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex
Qualquer que tenha mais op¸˜es otimizadas para qualquer das configura¸˜es listadas acima
co co
pode sempre envi´-los para a lista de email “internals” do MySQL. Veja Se¸˜o 1.7.1.1
a ca
[Mailing-list], P´gina 33.
a
125. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 91
Distribui¸˜es RPM que anteceda o MySQL vers˜o 3.22 s˜o contribui¸˜es dos usu´rios. Os
co a a co a
RPMs gerados por n´s da MySQL AB s´ come¸aram a ser fornecidos a partir da vers˜o
o o c a
3.22 do MySQL.
Se vocˆ deseja compilar uma vers˜o para depura¸˜o do MySQL, vocˆ deve adicionar --with-
e a ca e
debug ou --with-debug=full para as linhas de configura¸˜o acima e remover qualquer
ca
op¸˜o -fomit-frame-pointer.
ca
Para distribui¸˜es do Windows, por favor, veja Se¸˜o 2.1.1 [Windows installation],
co ca
P´gina 60.
a
2.2.9 Instalando uma Distribui¸˜o Bin´ria do MySQL
ca a
Este cap´itulo cobre a instala¸˜o da distribui¸˜o bin´ria do MySQL (.tar.gz Archives) para
ca ca a
v´rias plataformas (veja MySQL binaries para uma lista detalhada).
a
Em adi¸˜o a estes pacotes gen´ricos, tamb´m oferecemos bin´rios em formatos de pacote
ca e e a
espec´ificos da plataforma para plataformas selecionadas. Veja Se¸˜o 2.1 [Quick Standard
ca
Installation], P´gina 60 para mais informa¸˜es sobre como intal´-los.
a co a
As distribui¸˜es gen´ricas do MySQL est˜o empacotados com arquivos GNU tar com com-
co e a
pacta¸˜o gzip (.tar.gz). Vocˆ precisa das seguintes ferramentas para instalar um dis-
ca e
tribui¸˜o bin´ria do MySQL:
ca a
• GNU gunzip para descompactar a distribui¸˜o. ca
• Um tar razo´vel para descompactar a distribui¸˜o. Sabemos que o GNU tar funciona.
a ca
Algumas implementa¸˜es tar que vˆm pr´-instaladas como o sistema operacional (ex.
co e e
Sun tar) possuem problemas (com nome de arquivos grandes, por exemplo) Neste caso,
vocˆ deve instalar o GNU tar primeiro.
e
Se vocˆ tiver problemas, sempre use mysqlbug ao enviar d´vidas para a lista de email do
e u
MySQL. Mesmo se o problema n˜o for um bug, mysqlbug colhe informa¸˜es do sistema que
a co
ajudar˜o os outros a solucionar o seu problema. Se n˜o usar mysqlbug, vocˆ ter´ diminu´
a a e a ida
a probabilidade de conseguir a solu¸˜o do seu problema. Vocˆ encontrar´ o mysqlbug no
ca e a
diret´rio ‘bin’ depois de descompactar a distribui¸˜o. Veja Se¸˜o 1.7.1.3 [Relato de erros],
o ca ca
P´gina 36.
a
Os comando b´sicos que vocˆ deve executar para instalar e usar uma distribui¸˜o bin´ria
a e ca a
do MySQL s˜o:a
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> scripts/mysql_install_db
shell> chown -R root .
shell> chown -R mysql data
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
Se a sua vers˜o do MySQL ´ mais antiga que a 4.0, substitua bin/safe_mysqld por
a e
bin/mysqld_safe no comando final.
126. 92 MySQL Technical Reference for Version 5.0.0-alpha
Vocˆ pode adicionar novos usu´rios usando o script bin/mysql_setpermission se vocˆ
e a e
instalar os m´dulos Perl DBI e DBD-mysql.
o
Uma descri¸˜o mais detalhada ´ apresentada a seguir.
ca e
Para instalar uma distribui¸˜o bin´ria, siga estes passos, ent˜o proceda com a Se¸˜o 2.4
ca a a ca
[P´s Instala¸˜o], P´gina 111, para a configura¸˜o da p´s istala¸˜o e testes:
o ca a ca o ca
1. Escolha o diret´rio sob o qual vocˆ deseja descompactar a distribui¸˜o e a mova para
o e ca
dentro dele. No exemplo a seguir, descompactamos a distribui¸˜o sob ‘/usr/local’ e
ca
criamos um diret´rio ‘/usr/local/mysql’ dentro do qual o MySQL ´ instalado. (As
o e
seguintes instru¸˜es, consequentemente, assumem que vocˆ tem permiss˜o para criar
co e a
arquivos em ‘/usr/local’. Se este diret´rio ´ protegido, vocˆ precisar´ realizar a
o e e a
instala¸˜o como root.)
ca
2. Obtenha um arquivo de distribui¸˜o de um dos sites listados em Se¸˜o 2.2.1 [Getting
ca ca
MySQL], P´gina 75.
a
As distribui¸˜es bin´rias do MySQL s˜o fornecidas como arquivos tar compactados e
co a a
tem nomes como ‘mysql-VERS~O-SO.tar.gz’, onde VERS~O ´ um n´mero (por exem-
A A e u
plo, 3.21.15) e SO indica o tipo de sistema operacional para o qual a distribui¸˜o ´ ca e
pretendida (por exemplo, pc-linux-gnu-i586).
3. Se vocˆ ver uma distribui¸˜o bin´ria marcada com o sufixo -max, significa que o
e ca a
bin´rio tem suporte para tabelas transacionais e outros recursos. Veja Se¸˜o 4.8.5
a ca
[mysqld-max], P´gina 344. Note que todos os bin´rios s˜o contru´
a a a idos a partir da
mesma distribui¸˜o fonte do MySQL.
ca
4. Adicione um usu´rio e grupo para o mysqld ser executado:
a
shell> groupadd mysql
shell> useradd -g mysql mysql
Estes comandos adicionam o grupo mysql e o usu´rio mysql. A sintaxe para useradd
a
e groupadd podem diferir um pouco nas diversas vers˜es de Unix. Eles tamb´mpodem
o e
ser chamado adduser e addgroup. Vocˆ pode desejar criar o grupo e usu´rio com outro
e a
nome, diferente de mysql.
5. Chame o diret´rio no qual se pretende fazer a instala¸˜o:
o ca
shell> cd /usr/local
6. Descompacte a distribui¸˜o, que criar´ o diret´rio de instala¸˜o. Ent˜o crie um link
ca a o ca a
simb´lico para aquele diret´rio:
o o
shell> gunzip < /path/to/mysql-VERS~O-SO.tar.gz | tar xvf -
A
shell> ln -s full-path-to-mysql-VERS~O-SO mysql
A
O primeiro comando cria um diret´rio chamado ‘mysql-VERS~O-SO’. O segundo co-
o A
mando cria um link simb´lico para o diret´rio. Isto torna a referˆncia ao diret´rio de
o o e o
instala¸˜o mais f´cil, chamado como ‘/usr/local/mysql’.
ca a
7. Altere para p diret´rio de instala¸˜o:
o ca
shell> cd mysql
Vocˆ encontrar´ diversos arquivos e subdiret´rios no diret´rio mysql. O mais impor-
e a o o
tante para prop´sitos de instala¸˜o s˜o os subdiret´rios ‘bin’ e ‘scripts’.
o ca a o
‘bin’ Este diret´rio cont´m o programa cliente e o servidor. Vocˆ deve adicionar
o e e
o caminho completo deste diret´rio a sua vari´vel de ambiente PATH e
o a
127. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 93
assim a sua shell encontrar´ o programa MySQL de forma apropriada.
a
Veja Apˆndice E [Vari´veis de ambiente], P´gina 1083.
e a a
‘scripts’ Este diret´rio cont´m o script mysql_install_db usado para inicializar o
o e
banco de dados mysql contendo a tabela de permiss˜es que armazenam o
o
servidor de permiss˜es de acesso.
o
8. Caso vocˆ desejasse usar o mysqlaccess e a distribui¸˜o do MySQL est´ em um local
e ca a
diferente do padr˜o, vocˆ deve alterar a localiza¸˜o para onde o mysqlaccess espera
a e ca
encontrar o cliente mysql. Edite o script ‘bin/mysqlaccess’ aproximadamente na linha
18. Procure pela linha que se parece com a apresentada abaixo:
$MYSQL = ’/usr/local/bin/mysql’; # path to mysql executable
Altere o caminho para o local onde o mysql atualmente est´ armazaenado em seu
a
sistema. Se vocˆ n˜o fizer isto receber´ uma mensagem de erro Broken pipe quando
e a a
executar o mysqlaccess.
9. Crie as tabelas de permiss˜o do MySQL (necess´rio apenas se vocˆ n˜o tiver instalado
a a e a
o MySQL anteriormente):
shell> scripts/mysql_install_db
Note que as vers˜es mais antigas que a 3.22.10 iniciam o servidor MySQL quando vocˆ
o e
executa o mysql_install_db. Isto n˜o ocorre mais.
a
10. Altere o propriet´rio dos bin´rios para o root e o propriet´rio do diret´rio de dados
a a a o
para o usu´rio com o quel vocˆ executar´ o mysqld:
a e a
shell> chown -R root /usr/local/mysql/.
shell> chown -R mysql /usr/local/mysql/data
shell> chgrp -R mysql /usr/local/mysql/.
O primeiro comando altera o atributo owner dos arquivos para o usu´rio root, o
a
segundo altera o atributo owner do diret´rio de dados para o usu´rio mysql e o terceiro
o a
altera o atributo group para o grupo mysql.
11. Se vocˆ quiser instalar o suporte para a interface Perl DBI/DBD, veja Se¸˜o 2.7 [Perl
e ca
support], P´gina 165.
a
12. Se vocˆ desejasse que o MySQL seja iniciado automaticamente quando vocˆ iniciar a
e e
sua m´quina, vocˆ pode copiar support-files/mysql.server para o local onde o seu
a e
sistema tem os arquivos de inicializa¸˜o. Mais informa¸˜es podem ser encontradas no
ca co
script support-files/mysql.server e em Se¸˜o 2.4.3 [Automatic start], P´gina 118.
ca a
Depois de tudo estar descompactado e instalado, vocˆ deve inicializar e testar a sua dis-
e
tribui¸˜o.
ca
Vocˆ pode iniciar o servidor MySQL com o seguinte comando:
e
shell> bin/mysqld_safe --user=mysql &
Se a sua vers˜o do MySQl for mais antiga do que a 4.0, substitua bin/safe_mysqld por
a
bin/mysqld_safe no comando.
Agora prossiga com Se¸˜o 4.8.2 [mysqld_safe], P´gina 332 e Veja Se¸˜o 2.4 [P´s instala¸˜o],
ca a ca o ca
P´gina 111.
a
128. 94 MySQL Technical Reference for Version 5.0.0-alpha
2.3 Instalando uma distribui¸˜o com fontes do MySQL
ca
Antes de vocˆ continuar com as instala¸˜es dos fontes, confira antes se nosso bin´rio est´
e co a a
dispon´ para sua plataforma e se ela funcionar´ para vocˆ. N´s colocamos muito esfor¸o
ivel a e o c
para ter certeza que nossos bin´rios s˜o contru´
a a idos com as melhores op¸˜es poss´
co iveis.
Vocˆ precisa das seguintes ferramentas para contruir e instalar o MySQL a partir do c´digo
e o
fonte:
• GNU gunzip para descompactar a distribui¸˜o.
ca
• Um tar razo´vel para desempacotar a distribui¸˜o. Sabe-se que o GNU tar funciona.
a ca
Algumas implementa¸˜es tar que vˆm pr´-instaladas como o sistema operacional (ex.
co e e
Sun tar) possuem problemas (com nome de arquivos grandes, por exemplo) Neste caso,
vocˆ deve instalar o GNU tar primeiro.
e
• Um compilador ANSI C++ funcional. gcc >= 2.95.2, egcs >= 1.0.2 ou egcs 2.91.66,
SGI C++, e SunPro C++ s˜o alguns dos compiladores que sabemos que funcionam.
a
A libg++ n˜o ´ necess´ria quando o gcc for usado. gcc 2.7.x tem um bug que
a e a
torna imposs´ ivel compilar alguns arquivos C++ perfeitamente corretos, como o
‘sql/sql_base.cc’. Se vocˆ possui somente o gcc 2.7.x vocˆ deve atualiza-lo para
e e
conseguir compilar o MySQL. gcc 2.8.1 ´ tamb´m conhecido por ter problemas em
e e
algumas plataformas portanto ele deve ser evitado se existir um novo compilador para
a plataforma.
gcc >= 2.95.2 ´ recomendado quando compilar o MySQL Vers˜o 3.23.x.
e a
• Um bom programa make. GNU make ´ sempre recomendado e ´ algumas vezes
e e
necess´rio. Se vocˆ tiver problemas, recomendamos tentar o GNU make 3.75 ou mais
a e
novo.
Se vocˆ estiver usando uma vers˜o recente de gcc, recente o bastante para entender a op¸˜o
e a ca
-fno-exceptions, ´ MUITO IMPORTANTE que vocˆ a use. De outra forma, vocˆ pode
e e e
compilar um bin´rio que quebra randomicamente. N´s tamb´m recomendamos que vocˆ use
a o e e
-felide-constructors e -fno-rtti juntas com -fno-exception. Se estiver com d´vidas,u
fa¸a o seguinte:
c
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions
-fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler
--with-mysqld-ldflags=-all-static
Na maioria dos sistemas vocˆ ir´ obter um bin´rio r´pido e est´vel com essas op¸˜es.
e a a a a co
Se vocˆ tiver problemas, SEMPRE USE mysqlbug quando postar quest˜es para a lista de
e o
email do MySQL Mesmo se o problema n˜o for um bug, mysqlbug recolhe informa¸˜es
a co
do sistema que facilitar´ aos outros resolverem seu problema. Por n˜o suar mysqlbug,
a a
vocˆ perde a vantagem de ter seu problema resolvido! Vocˆ ir´ encontrar mysqlbug no
e e a
diret´rio ‘scripts’ depois de desempacotar a distribui¸˜o. Veja Se¸˜o 1.7.1.3 [Bug reports],
o ca ca
P´gina 36.
a
129. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 95
2.3.1 Vis˜o geral da instala¸˜o r´pida
a ca a
Os comandos b´sicos que vocˆ deve executar para instalar o MysQL a partir da distribui¸˜o
a e ca
fonte s˜o:
a
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> scripts/mysql_install_db
shell> chown -R root /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
Se a sua vers˜o do MySQL ´ mais antiga que a 4.0, substitua bin/safe_mysqld por
a e
bin/mysqld_safe no comando final.
Se vocˆ deseja ter suporte para tabelas InnoDB, vocˆ deve editar o arquivo /etc/my.cnf e
e e
remover o caractere # antes dos parˆmetros que iniciam com innodb_.... Veja Se¸˜o 4.1.2
a ca
[Option files], P´gina 217. Veja Se¸˜o 7.5.3 [InnoDB start], P´gina 643.
a ca a
Se vocˆ iniciar de um RPM fonte, ent˜o fa¸a o seguinte:
e a c
shell> rpm --rebuild --clean MySQL-VERSION.src.rpm
Isto ir´ criar um RPM bin´rio que vocˆ pode instalar.
a a e
Vocˆ pode adicionar novos usu´rios utilizando o script bin/mysql_setpermission se vocˆ
e a e
instalar os m´dulos Perl DBI e DBD-mysql.
o
Segue uma descri¸˜o mais detalhada.
ca
Para instalar uma distribui¸˜o fonte, siga os passos a seguir, ent˜o prossiga para Se¸˜o 2.4
ca a ca
[Post-installation], P´gina 111, para inicializa¸˜o do p´s-instala¸˜o e testes:
a ca o ca
1. Escolha o diret´rio sobre o qual vocˆ deseja descompactar a distribui¸˜o e v´ para ele.
o e ca a
2. Obtenha um arquivo de distribui¸˜o de algum dos sites listados em Se¸˜o 2.2.1 [Getting
ca ca
MySQL], P´gina 75.
a
3. Se vocˆ esta interessado em usar tabelas Berkeley DB com MySQL, vocˆ precisar´ obter
e e a
uma vers˜o com o patch do c´digo fonte do Berkeley DB. Por favor leia o cap´
a o itulo sobre
tabelas Berkeley DB antes de continuar. Veja Se¸˜o 7.6 [BDB], P´gina 695.
ca a
Distribui¸˜es fontes do MySQL s˜o fornecidas como arquivos tar compactados e tem
co a
nomes como ‘mysql-VERSION.tar.gz’, onde VERSION ´ um n´mero como 5.0.0-alpha.
e u
4. Adicione um usu´rio e grupo para o mysql executar assim:
a
shell> groupadd mysql
shell> useradd -g mysql mysql
Estes comandos adicionam o grupo mysql e o usu´rio mysql. A sintaxe para useradd e
a
groupadd podem mudar um pouco em diferentes vers˜es de Unix. Elas podem tamb´m
o e
130. 96 MySQL Technical Reference for Version 5.0.0-alpha
ser chamadas adduser e addgroup. Vocˆ pode escolher outros nomes para o usu´rio e
e a
grupo em vez de mysql.
5. Descompacte a distribui¸˜o para o diret´rio corrente:
ca o
shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
Este comando cria um diret´rio com o nome ‘mysql-VERSION’.
o
6. Mude para o diret´rio da distribui¸˜o descompactada:
o ca
shell> cd mysql-VERSION
Note que agora vocˆ deve configurar e construir o MySQL a partir deste diret´rio raiz
e o
da distribui¸˜o. Vocˆ n˜o pode constru´ em um diret´rio diferente.
ca e a i-lo o
7. Configure o release e compile tudo:
shell> ./configure --prefix=/usr/local/mysql
shell> make
Quando vocˆ executar configure, vocˆ pode desejar especificar algumas op¸˜es. Exe-
e e co
cute ./configure --help para uma lista das op¸˜es. Se¸˜o 2.3.3 [configure options],
co ca
P´gina 97, discute algumas das op¸˜es mais usadas.
a co
Se o configure falhar, e vocˆ for enviar uma mensagem para lista de email do MySQL
e
para pedir ajuda, por favor, inclua qualquer linhas de ‘config.log’ que vocˆ acha e
que pode ajudar a resolver o problema. Tamb´m inclua as ultimas linhas da sa´
e ´ ida
de configure se o configure abortar. Envie o relat´rio de erros usando o script
o
mysqlbug. Veja Se¸˜o 1.7.1.3 [Bug reports], P´gina 36.
ca a
Se a compila¸˜o falhar, veja Se¸˜o 2.3.5 [Compilation problems], P´gina 103, para uma
ca ca a
ajuda com um varios problemas comuns.
8. Instalar tudo:
shell> make install
Vocˆ deve executar este comando como root.
e
9. Crie as tabelas de permiss˜es do MySQL (necess´rias s´ se vocˆ n˜o tiver instalado o
o a o e a
MySQL anteriormente):
shell> scripts/mysql_install_db
Note que as vers˜es do MySQL anteriores ` vers˜o 3.22.10 iniciam o servidor MySQL
o a a
quando vocˆ executa mysql_install_db. Isto n˜o acontece mais!
e a
10. Altere o dono dos bin´rios para root e do diret´rio dados para o usu´rio que ir´
a o a a
executar o mysqld:
shell> chown -R root /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql
O primeiro comando altera o atributo de proriedade dos arquivos para o usu´rio root,
a
o segundo altera o atributo de propriedade do diret´rio de dados para o usu´rio mysql,
o a
e o terceiro altera o atributo de grupo para o grupo mysql.
11. Se vocˆ deseja instalar suporte para a interface Perl DBI/DBD, veja Se¸˜o 2.7 [Perl
e ca
support], P´gina 165.
a
12. Se vocˆ deseja que o MySQL inicie automaticamente quando vocˆ ligar sua m´quina,
e e a
vocˆ pode copiar support-files/mysql.server para o local onde seu sistema tem seus
e
131. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 97
arquivos de incializa¸˜o. Mais informa¸˜es podem ser encontradas no pr´prio script
ca co o
support-files/mysql.server e em Se¸˜o 2.4.3 [Automatic start], P´gina 118.
ca a
Depois de tudo ter sido instalado, vocˆ deve iniciar e testar sua distribui¸˜o usando este
e ca
comando:
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
Se a sua vers˜o do MySQL for mais antiga do que 4.0, substitua safe_mysqld por mysqld_
a
safe no comando:
Se o comando falhar imediatamente com mysqld daemon ended ent˜o vocˆ pode achar al-
a e
guma informa¸˜o no arquivo ‘diret´rio-dados-mysql/’nome_maquina’.err’. A raz˜o
ca o a
pode ser que vocˆ j´ possua outro servidor mysqld sendo executado. Veja Se¸˜o 4.2 [Mul-
e a ca
tiple servers], P´gina 220.
a
Veja Se¸˜o 2.4 [Post-installation], P´gina 111.
ca a
2.3.2 Aplicando patches
Algumas vezes patches aparecem na lista de mensagens ou s˜o colocados na ´rea de patches
a a
do MySQL. (http://www.mysql.com/downloads/patches.html).
Para aplicar um patch da lista de mensagens, salve a mensagem em que o patch aparece em
um arquivo, mude para o diret´rio raiz da sua distribui¸˜o fonte de seu MySQL e execute
o ca
estes comandos:
shell> patch -p1 < patch-file-name
shell> rm config.cache
shell> make clean
Patches do site FTP s˜o distribu´
a idos como arquivos texto ou como arquivos compactados
com gzip. Aplique um patch no formato texto como mostrado acima para patches da lista
de mensagens. Para aplicar um patch compactado, mude para o diret´rio raiz da ´rvore
o a
fonte do MySQL e execute estes comandos:
shell> gunzip < patch-file-name.gz | patch -p1
shell> rm config.cache
shell> make clean
Depois de aplicar um patch siga as instru¸˜es para uma instala¸˜o normal a partir dos
co ca
fontes come¸ando com o passo ./configure. Depois de executar o passo make install,
c
reinicie seu servidor MySQL.
Vocˆ pode precisar derrubar algum servidor atualmente em execu¸˜o antes de executar make
e ca
install. (Use mysqladmin shutdown para fazer isto.) Alguns sistemas n˜o lhe permitem
a
instalar uma nova vers˜o do programa se ele substitui agum que estiver em execu¸˜o.
a ca
2.3.3 Op¸oes t´
c˜ ipicas do configure
O script configure fornece uma grande gama de controle sobre como vocˆ configura sua
e
distribui¸˜o MySQL. Normalmente vocˆ faz isto usando op¸˜es na linha de comando do
ca e co
configure. Vocˆ tamb´m pode alterar configure usando algumas vari´veis de ambiente.
e e a
Veja Apˆndice E [Environment variables], P´gina 1083. Para uma lista de op¸˜es suportadas
e a co
pelo configure, execute este comando:
132. 98 MySQL Technical Reference for Version 5.0.0-alpha
shell> ./configure --help
Algumas das op¸˜es mais usadas normalmente com o configure est˜o descritas a seguir:
co a
• Para compilar apenas as bibliotecas clientes do MySQL e programas clientes e n˜o o a
servidor, use a op¸˜o --without-server:
ca
shell> ./configure --without-server
Se vocˆ n˜o possui um compilador C++, mysql n˜o ir´ compilar (ele ´ o programa
e a a a e
cliente que exige C++). Neste caso, vocˆ pode remover o c´digo no configure que
e o
testa pelo compilador C++ e executar ./configure com a op¸˜o --without-server.
ca
O passo da compia¸˜o continuar´ tentaindo construir mysql, mas vocˆ pode ignorar as
ca a e
advertˆncias sobre ‘mysql.cc’. (Se o make parar, tente make -k para continuar com o
e
resto da compila¸˜o mesmo se erros ocorrerem.)
ca
• Se vocˆ quiser uma biblioteca embutida do MySQL (libmysqld.a) vocˆ deve usar a
e e
op¸˜o --with-embedded-server.
ca
• Se vocˆ n˜o deseja que seus arquivos de logs e diret´rios de bancos de dados fiquem
e a o
localizados sobre ‘/usr/local/var’, use o comando configure; algo parecido com um
destes:
shell> ./configure --prefix=/usr/local/mysql
shell> ./configure --prefix=/usr/local
--localstatedir=/usr/local/mysql/data
O primeiro comando altera o diret´rio instala¸˜o para que tudo seja instalado sobre
o ca
‘/usr/local/mysql’ em vez do padr˜o ‘/usr/local’. O segundo comando preserva o
a
diret´rio da instala¸˜o padr˜o, mas altera a localiza¸˜o padr˜o para diret´rios de ban-
o ca a ca a o
cos de dados (normalmente ‘/usr/local/var’) e altera para /usr/local/mysql/data.
Depois de ter compilado o MySQL, vocˆ pode alterar estas op¸˜oes com arquivos de
e ca
op¸˜es. Veja Se¸˜o 4.1.2 [Option files], P´gina 217.
co ca a
• Se vocˆ estiver usando Unix e deseja que o arquivo socket do MySQL fique em um
e
diret´rio diferente do padr˜o (normalmente no diret´rio ‘/tmp’ ou ‘/var/run’) use o
o a o
comando configure da seguinte forma:
shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
Perceba que o arquivo fornecido deve ter um caminho absoluto ! Vocˆ tamb´m pode,
e e
mais tarde, alterar a localiza¸˜o de ‘mysql.sock’ usando os arquivos de op¸˜es do
ca co
MySQL. Veja Se¸˜o A.4.5 [Problems with mysql.sock], P´gina 925.
ca a
• Se vocˆ deseja compilar programas linkeditados estaticamente (por exemplo, para criar
e
uma distribui¸˜o bin´ria, obter mais velocidade, ou evitar problemas com algumas
ca a
distribui¸˜es Red Hat Linux), execute configure desta forma:
co
shell> ./configure --with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
• Se vocˆ estiver usando gcc e n˜o tem libg++ ou libstdc++ instalados vocˆ pode dizer
e a e
ao configure para usar o gcc como seu compilador C++:
shell> CC=gcc CXX=gcc ./configure
Quando vocˆ usar como seu compilador C++, ele n˜o tentar´ ligar com o libg++ ou
e a a
libstdc++. Isto pode ser uma boa id´ia para se fazer se vocˆ tiver as bibliotecas acimas
e e
instaladas, j´ que algumas vers˜es destas bibliotecas tem causado problemas estranhos
a o
para usu´rios do MySQL no passado.
a
133. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 99
Segue algumas configura¸˜es de vari´veis de ambiente comuns, dependendo do compi-
co a
lador que vocˆ estiver usando:
e
Compiler Recommended options
gcc 2.7.2.1 CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
egcs 1.0.3a CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-
exceptions -fno-rtti"
gcc 2.95.2 CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -
mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"
pgcc 2.90.29 or CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc
newer CXXFLAGS="-O3 -mpentiumpro -mstack-align-double
-felide-constructors -fno-exceptions -fno-rtti"
Na maioria dos casos vocˆ pode obter um bin´rio MySQL razoavelmente otimizado
e a
usando as op¸˜es acima e adicionar as seguintes op¸˜es para a linha de configura¸˜o:
co co ca
--prefix=/usr/local/mysql --enable-assembler
--with-mysqld-ldflags=-all-static
A linha completa de configura¸˜o dever´ ser, em outras palavras, algo como o seguinte
ca a
para todas as vers˜es recentes do gcc:
o
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro
-felide-constructors -fno-exceptions -fno-rtti" ./configure
--prefix=/usr/local/mysql --enable-assembler
--with-mysqld-ldflags=-all-static
Os bin´rios que fornecemos no site Web MySQL em http://www.mysql.com s˜o to-
a a
dos compilados com otimiza¸˜o plena e deve ser perfeito para a maioria dos usu´rios.
ca a
Veja Se¸˜o 2.2.8 [Bin´rios do MySQL], P´gina 86. Existem algumas defini¸˜es de
ca a a co
configura¸˜o que vocˆ pode alterar para criar um bin´rio ainda mais r´pido, mas
ca e a a
isto ´ somente para usu´rios avan¸ados. Veja Se¸˜o 5.5.3 [Compile and link options],
e a c ca
P´gina 457.
a
Se a constru¸˜o falhar e produzir erros sobre seu compilador ou linkeditor n˜o
ca a
estarem aptos para criarem a biblioteca compartilhada ‘libmysqlclient.so.r#’
(‘r#’ ´ um n´mero de vers˜o), vocˆ pode evitar este problema fornecendo a op¸˜o
e u a e ca
--disable-share para o configure. Neste caso, configure n˜o construir´ uma
a a
biblioteca libmysqlclient.so.* compartilhada.
• Vocˆ pode configurar o MySQL para n˜o usar valores de campos DEFAULT para campos
e a
n˜o-NULL (isto ´, campos que n˜o podem ser NULL). Veja Se¸˜o 1.8.5.2 [Restri¸˜es NOT
a e a ca co
NULL], P´gina 53.
a
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
• Por padr˜o, o MySQL usa o conjunto de caracteres ISO-8859-1 (Latin1). Para alterar
a
o conjunto padr˜o, use a op¸˜o --with-charset:
a ca
shell> ./configure --with-charset=CHARSET
CHARSET pode ser um de big5, cp1251, cp1257, czech, danish, dec8, dos, euc_kr,
gb2312, gbk, german1, hebrew, hp8, hungarian, koi8_ru, koi8_ukr, latin1, latin2,
sjis, swe7, tis620, ujis, usa7, ou win1251ukr. Veja Se¸˜o 4.7.1 [Conjunto de car-
ca
acteres], P´gina 326.
a
134. 100 MySQL Technical Reference for Version 5.0.0-alpha
Se vocˆ desja converter os caracteres entre o servidor e o cliente, vocˆ deve dar uma
e e
olhada no comando SET OPTION CHARACTER SET. Veja Se¸˜o 5.5.6 [SET OPTION],
ca
P´gina 461.
a
Cuidado: Se vocˆ alterar o conjunto de caracteres depois de ter criado qualquer
e
tabela, vocˆ deve executar myisamchk -r -q --set-character--set=charset em
e
cada tabela. Seus ´ indices podem ser ordenados incorretamente. (Isto pode acontecer
se vocˆ instalar o MySQL, criar algumas tabelas, depois reconfigurar o MySQL para
e
usar um conjunto diferente de caracteres e reinstal´-lo).
a
Com a op¸˜o --with-extra-charset=LISTA vocˆ pode definir qual conjunto de car-
ca e
acteres adicionais deve ser compilado no servidor.
Aqui LISTA ´ uma lista de conjuntos de caracteres separados por espa¸os, complex
e c
para incluir todos caracteres que n˜o podem ser carregados dinamicamente ou all
a
para incluir todos os conjuntos nos bin´rios.
a
• Para configurar o MySQL com c´digo para depura¸˜o, use a op¸˜o --with-debug:
o ca ca
shell> ./configure --with-debug
Isto inclui uma aloca¸˜o segura de mem´ria que pode encontrar alguns erros e
ca o
´ sobre o que est´ acontecendo. Veja Se¸˜o D.1 [Depurando o servidor],
fornecer saida a ca
P´gina 1070.
a
• Se seus programas clientes usam threads, vocˆ precisar´ tamb´m compilar uma vers˜o
e a e a
thread-safe da biblioteca cliente do MySQL com as op¸˜es do configure --enable-
co
thread-safe-client. Isto ir´ criar uma biblioteca libmysqlclient_r com o qual
a
vocˆ dever´ ligar suas aplica¸˜es que fazem uso de threads. Veja Se¸˜o 12.1.14 [Clientes
e a co ca
em threads], P´gina 859.
a
• Op¸˜es que perten¸am a sistemas particulares podem ser encontrados na se¸˜o com
co c ca
detalhes espec´ ificos de sistemas neste manual. Veja Se¸˜o 2.6 [Notas espec´
ca ificas do
Sistema Operacional], P´gina 132.
a
2.3.4 Instalando pela ´rvore de fontes do desenvolvimento
a
CUIDADO: Vocˆ deve ler esta se¸˜o somente se vocˆ estiver interessado em nos ajudar a
e ca e
testar nossos novos c´digos. Se vocˆ s´ deseja deixar o MySQL funcionando em seus sistema,
o e o
vocˆ deve usar uma distribui¸˜o padr˜o (pode ser uma distribui¸˜o bin´ria ou fonte).
e ca a ca a
Para obter noss mais nova ´rvore de desenvolvimento, use estas instru¸˜es:
a co
1. Fa¸a download do BitKeeper em http://www.bitmover.com/cgi-bin/download.cgi.
c
Vocˆ precisar´ do Bitkeeper 3.0 ou posterior para acessar nosso reposit´rio.
e a o
2. Siga as instru¸˜es para instal´-lo.
co a
3. Depois que o BitKeeper estiver instalado, primeiro v´ ao diret´rio no qual vocˆ deseja
a o e
trabalhar e ent˜o use um dos seguintes comandos para clonar o ramo da vers˜o MySQL
a a
de sua escolha:
Para clonar o ramo 3.23 (antigo), use este comando:
shell> bk clone bk://mysql.bkbits.net/mysql-3.23 mysql-3.23
Para clonar o ramo 4.0 (est´vel/produ¸˜o), use este comando:
a ca
shell> bk clone bk://mysql.bkbits.net/mysql-4.0 mysql-4.0
Para clonar o ramo 4.1 alfa, use este comando:
135. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 101
shell> bk clone bk://mysql.bkbits.net/mysql-4.1 mysql-4.1
Para clonar o ramo de desenvolvimento 5.0, use este comando:
shell> bk clone bk://mysql.bkbits.net/mysql-5.0 mysql-5.0
Nos exemplos anteriores a ´rvore bin´ria ser´ configurada no subdiret´rio
a a a o
‘mysql-3.23/’, ‘mysql-4.0/’, ‘mysql-4.1/’, ou ‘mysql-5.0/’ do diret´rio atual.
o
Se vocˆ est´ atr´s de um firewall e s´ pode iniciar conex˜es HTTP, vocˆ tamb´m pode
e a a o o e e
o BitKeeper via HTTP.
ˆ
Se vocE precisa usar um servidor proxy, simplesmente configure a vari´vel de ambiente
a
http_proxy para apontar para o seu proxy:
shell> export http_proxy="http://seu.servidor.proxy:8080/"
Agora, simplesmente substitua o bk:// com o http:// ao fazer um clone. Exemplo:
shell> bk clone http://mysql.bkbits.net/mysql-4.1 mysql-4.1
O download inicial da ´rvore fonte pode demorar um pouco, dependendo da velocidade
a
de sua conex˜o; seja paciente.
a
4. Vocˆ precisar´ do GNU make, autoconf 2.53 (ou posterior), automake 1.5,
e a
libtool 1.4 e m4 para executar o pr´ximo conjunto de comandos. Embora muitos
o
sistemas operacionais j´ venham com suas pr´prias implementa¸˜es do make, as
a o co
chances de que a sua compila¸˜o falhe com mensagens de erros estranhas s˜o altas.
ca a
Consequentemente ´ altamente recomendado usar o GNU make (algumas vezes
e
tamb´m chamado gmake).
e
Felizmente, um grande n´mero de sistemas operacionais j´ vem com a ferramente GNU
u a
pr´ instalada ou s˜o fornecidos pacotes de instala¸˜o da mesma. De qualquer forma,
e a ca
elas podem ser encontradas nos seguintes locais:
• http://www.gnu.org/software/autoconf/
• http://www.gnu.org/software/automake/
• http://www.gnu.org/software/libtool/
• http://www.gnu.org/software/make/
Se vocˆ estiver tentando configurar o MySQL 4.1 vocˆ tamb´m precisar´ do bison
e e e a
1.75. Vers˜es mais antigas do bison podem exiobir este erro: sql_yacc.yy:#####:
o
fatal error: maximum table size (32767) exceeded. Nota: o tamanho m´ximo da
a
tabela n˜o ´ realmente excedido, o erro ´ causado por um bug nas vers˜es mais novas
a e e o
do bison.
Vers˜es do MySQL anteriores a 4.1 podem tamb´m compilar com outras imple-
o e
menta¸˜es yacc (e.g. BSD yacc 91.7.30). Para vers˜es posteriores, GNU bison ´ uma
co o e
exigˆncia.
e
O comando comum para fazer em uma shell ´:
e
cd mysql-4.0
bk -r edit
aclocal; autoheader; autoconf; automake
(cd innobase; aclocal; autoheader; autoconf; automake) # for InnoDB
(cd bdb/dist; sh s_all ) # for Berkeley DB
./configure # Adicione suas op¸~es favoritas aqui
co
136. 102 MySQL Technical Reference for Version 5.0.0-alpha
make
Caso apare¸am alguns erros estranhos durantes este est´gio, confira se vocˆ realmente
c a e
tem a libtool instalada!
Uma cole¸˜o de nossos scripts de configura¸˜o padr˜es est´ localizada no subdiret´rio
ca ca o a o
‘BUILD/’. Se preferir, vocˆ pode usar ‘BUILD/compile-pentium-debug’. Para compilar
e
em uma arquitetura diferente, modifique o script removendo op¸˜es que s˜o espec´
co a ificas
da arquitetura Pentium.
5. Quando a constru¸˜o estiver pronta, execute make install. Seja cuidadoso com isto
ca
em uma m´quina de produ¸˜o; o comando pode sobrescrever sua vers˜o atual insta-
a ca a
lada. Se vocˆ tem outra instala¸˜o do MySQL, n´s recomendamos que vocˆ execute
e ca o e
./configure com valores diferentes para as op¸˜es prefix, tcp-port e unix-socket-
co
path que as usadas pelo seu servidor em produ¸˜o.
ca
6. Seja r´igido com sua nova instala¸˜o e tente fazer com que os novos recursos falhem.
ca
Inicie executando make test. Veja Se¸˜o 14.1.2 [MySQL test suite], P´gina 892.
ca a
7. Se vocˆ chegar ao est´gio make e a distribui¸˜o n˜o compilar, por favor relate-o para
e a ca a
bugs@lists.mysql.com. Se vocˆ instalou as ultimas vers˜es das ferramentas GNU
e ´ o
exigidas, e elas falharam tentando processar nossos arquivos de configura¸˜o, por fa-
ca
vor informe isto tamb´m. Entretanto, se vocˆ executar aclocal e obtˆm um erro de
e e e
command not found n˜o o reporte.Tenha certeza que todas as ferramentas necess´rias
a a
estejam instaladas e que sua vari´vel PATH esteja corretamente configurada para que
a
sua shell possa encontr´-la.
a
8. Depois da opera¸˜o inicial bk clone para obter a ´rvore fonte, vocˆ deve executar bk
ca a e
pull periodicamente para obter as atualiza¸˜es.
co
9. Vocˆ pode examinar o hist´rico de altera¸˜es para a ´rvore com todos os diffs usando bk
e o co a
sccstool. Se vocˆ ver alguns diffs estranhos ou c´digo sobre o qual vocˆ tenha alguma
e o e
d´vida, n˜o hesite em enviar um e-mail para lista de email “internals” do MySQL. Veja
u a
Se¸˜o 1.7.1.1 [Mailing-list], P´gina 33. Al´m disso, se vocˆ pensar que tem uma id´ia
ca a e e e
melhor em como fazer algo, envie um email para o mesmo endere¸o com um patch. bk
c
diffs ir´ produzir um patch para vocˆ ap´s fazer as altera¸˜es no c´digo fonte. Se
a e o co o
vocˆ n˜o tiver tempo para codificar sua id´ia, apenas envie uma descri¸˜o.
e a e ca
10. BitKeeper tem um ´timo utilit´rio de ajudar que vocˆ pode acessar via bk helptool.
o a e
11. Note que qualquer commit (bk ci ou bk citool) ir´ disparar o envio da mensagem com
a
as altera¸˜es paa nossa lista de email internos, bem como a submiss˜o openlogging.org
co a
usual apenas com os coment´rios da altera¸˜o. Geralmente vocˆ n˜o precisar usar
a ca e a
commit (j´ que o ´rvore p´blica n˜o permitir´ bk push), mas ´ prefer´ usar o m´todo
a a u a a e ivel e
bk diffs descrito arteriormente.
Vocˆ tamb´m pode procurar altera¸˜es, coment´rios e c´digo fonte online procurando por
e e co a o
ex. http://mysql.bkbits.net:8080/mysql-4.1 para MySQL 4.1.
O manual est´ em uma ´rvore separad que pode ser clonada com:
a a
shell> bk clone bk://mysql.bkbits.net/mysqldoc mysqldoc
Existe tamb´m um ´rvore p´blica do BitKeeper para o MySQL Control Center e Connec-
e a u
tor/ODBC. Eles podem ser clonados da seguintes forma, respectivamente:
Para clonar o MySQL Control center, use o seguinte comando:
137. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 103
shell> bk clone http://mysql.bkbits.net/mysqlcc mysqlcc
Para clonar o Connector/ODBC, use o seguinte comando:
shell> bk clone http://mysql.bkbits.net/myodbc3 myodbc3
2.3.5 Lidando com Problemas de Compila¸˜o
ca
Todos programas MySQL compilam de forma limpa sem alertas no solaris usando gcc.
Em outros sistemas, alertas podem ocorrer devido a diferen¸as em arquivos include dos
c
sistemas. Veja Se¸˜o 2.3.6 [MIT-pthreads], P´gina 106 para avisos que podem ocorrer
ca a
usando MIT-pthreads. Para outros problemas, confira a lista abaixo.
A solu¸˜o para v´rios problemas envolve reconfigura¸˜o. Se vocˆ precisa reconfigurar, fa¸a
ca a ca e c
notas do seguinte:
• Se configure ´ executado depois dele j´ ter sido chamado, ele pode usar informa¸˜o
e a ca
que foi colhida durante a chamada anterior. Esta informa¸˜o ´ armazenada no ar-
ca e
quivo ‘config.cache’. Quando configure inicia, ele procura por este arquivo, lˆ seu
e
conte´do, se ele existir, assumindo que aquela informa¸˜o continua correta. Essa con-
u ca
jetura ´ inv´lida quando vocˆ reconfigurar.
e a e
• Cada vez que vocˆ executa configure, vocˆ deve executar make de novo para re-
e e
compilar. Entretanto, vocˆ pode desejar remover primeiro antigos arquivos objeto de
e
constru¸˜es anteriores, porque eles foram compilados usando diferentes op¸˜es de con-
co co
figura¸˜o.
ca
Para prevenir antigas informa¸˜es de configura¸˜es ou arquivos objetos de serem usados,
co co
execute estes comandos antes de re-executar configure:
shell> rm config.cache
shell> make clean
Uma alternativa, seria executar make distclean
A lista abaixo descreve alguns dos problemas compilando o MySQL que tem sido encontra-
dos com mais frequencia:
• Se vocˆ obtˆm erros quando ‘sql_yacc.cc’ como os mostrados abaixo, vocˆ provavel-
e e e
mente tem de falta de mem´ria ou espa¸o de swap:
o c
Internal compiler error: program cc1plus got fatal signal 11
ou
Out of virtual memory
ou
Virtual memory exhausted
O problema ´ que gcc necessita de grande quantidade de mem´ria para compilar
e o
‘sql_yacc.cc’ com fun¸˜es inline. Tente executando configure com a op¸˜o --with-
co ca
low-memory:
shell> ./configure --with-low-memory
Esta op¸˜o adiciona -fno-inline na a linha de compila¸˜o se vocˆ estiver usando
ca ca e
gcc e -O0 se vocˆ estiver usando outro programa. Vocˆ deve tentar a op¸˜o --with-
e e ca
low-memory mesmo se vocˆ tiver muita mem´ria e espa¸o de swap que vocˆ ache ser
e o c e
suficieente para n˜o ocorrer erros. Este problema tem ocorrido mesmo em sistemas
a
138. 104 MySQL Technical Reference for Version 5.0.0-alpha
com boas configura¸˜es de hardware e a op¸˜o --with-low-memory geralmente corrige
co ca
isto.
• Por padr˜o, configure escolhe c++ como o nome do compilador e GNU c++ liga com -
a
lg++. Se vocˆ estiver usando gcc, este comportamento pode causar problemas durante
e
a compila¸˜o, como o seguinte:
ca
configure: error: installation or configuration problem:
C++ compiler cannot create executables.
Vocˆ podem tamb´m ter problemas durante a compila¸˜o relacionados ` g++, libg++
e e ca a
ou libstdc++.
Uma causa destes problemas ´ que vocˆ pode n˜o ter g++ ou vocˆ pode ter g++ mas n˜o
e e a e a
ter o libg++ ou o libstdc++. De uma olhada no arquivo ‘config.log’. Ele deve conter
a raz˜o exata do porque seu compilador C++ n˜o funciona! Para trabalhar evitando
a a
estes problemas, vocˆ pode usar gcc como seu compilador C++. Tente configurar a
e
vari´vel de ambiente CXX para "gcc -O3". Por exemplo:
a
shell> CXX="gcc -O3" ./configure
Isto funciona porque gcc compila c´digo fonte C++ t˜o bem quanto g++ faz, mas n˜o
o a a
ifaz a liga¸˜o em libg++ ou libstdc++ por padr˜o.
ca a
Outra forma de corrigir estes problemas, com certeza, ´ instalando g++, libg++
e
e libstdc++. No entanto gostariamos de lhe recomendar a n˜o usar libg++ ou
a
libstdc++ com o MySQL j´ que isto ir´ aumentar o tamanho do bin´rio do mysqld
a a a
sem lhe trazer nenhum benef´ icio. Algumas vers˜es destas bibliotecas tamb´m tem
o e
causado problemas estranhos para os usu´rios MySQL no passado.
a
Usar gcc como compilador C++ tamb´m ´ exigido, se vocˆ quiser compilar o MySQL
e e e
com a funcionalidade RAID (veja Se¸˜o 6.5.3 [CREATE TABLE], P´gina 597 para
ca a
mais informa¸˜es sobre tipos de tabela RAID) e vocˆ estiver usando o GNU gcc vers˜o
co e a
3 e acima. Se vocˆ obter erros como estes abaixo durante o est´gio de liga¸˜o quando
e a ca
vocˆ configurar o MySQL para compilar com a op¸˜o --with-raid, tente usar o gcc
e ca
como o seu compilador C++ definindo a vari´vel de ambiente CXX mencionada acima:
a
gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk.o sort.o libnisam.a
../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a -lpthread
-lz -lcrypt -lnsl -lm -lpthread
../mysys/libmysys.a(raid.o)(.text+0x79): In function ‘my_raid_create’:
: undefined reference to ‘operator new(unsigned)’
../mysys/libmysys.a(raid.o)(.text+0xdd): In function ‘my_raid_create’:
: undefined reference to ‘operator delete(void*)’
../mysys/libmysys.a(raid.o)(.text+0x129): In function ‘my_raid_open’:
: undefined reference to ‘operator new(unsigned)’
../mysys/libmysys.a(raid.o)(.text+0x189): In function ‘my_raid_open’:
: undefined reference to ‘operator delete(void*)’
../mysys/libmysys.a(raid.o)(.text+0x64b): In function ‘my_raid_close’:
: undefined reference to ‘operator delete(void*)’
collect2: ld returned 1 exit status
• Se sua compila¸˜o falhar com erros, como um dos seguintes, vocˆ deve atualizar sua
ca e
vers˜o de make para GNU make:
a
making all in mit-pthreads
139. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 105
make: Fatal error in reader: Makefile, line 18:
Badly formed macro assignment
or
make: file ‘Makefile’ line 18: Must be a separator (:
or
pthread.h: No such file or directory
O Solaris e o FreeBSD s˜o conhecidos por terem alguns problemas com o make.
a
O GNU make vers˜o 3.75 ir´ funcionar.
a a
• Se vocˆ deseja definir algumas op¸˜es que devem ser usadas pelo seu compilador C ou
e co
C++, adicione as op¸˜es para as vari´veis de ambiente CFLAGS e CXXFLAGS. Vocˆ pode
co a e
tamb´m especificar os nomes do compilador a ser usado da mesma forma utilizando CC
e
e CXX. Exemplo:
shell> CC=gcc
shell> CFLAGS=-O3
shell> CXX=gcc
shell> CXXFLAGS=-O3
shell> export CC CFLAGS CXX CXXFLAGS
Olhe em Se¸˜o 2.2.8 [MySQL binaries], P´gina 86 para uma lista de defini¸˜o de op¸˜es
ca a ca co
que tenham sido uteis em v´rios sistemas.
´ a
• Se vocˆ recebeu uma mensagem de erro como esta, ´ necess´rio atualizar o compilador
e e a
gcc:
O gcc 2.8.1 funciona, mas recomendamos o uso do gcc 2.95.2 ou egcs 1.0.3a em seu
lugar.
• Se vocˆ obtem erros como estes vistos abaixo enquanto estiver compilando o mysqld,
e
o configure n˜o detectou corretamente o tipo do ultimo argumento para accept(),
a ´
getsockname() ou getpeername():
cxx: Error: mysqld.cc, line 645: In this statement, the referenced
type of the pointer value "&length" is "unsigned long", which
is not compatible with "int".
new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
Para corrigir isto, edite o arquivo ‘config.h’ (que ´ gerado pelo configure). Procure
e
por estas linhas:
/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX
Altere XXX para size_t ou int, dependendo de seu sistema operacional. (Perceba
que vocˆ dever´ fazer isto cada vez que vocˆ executar configure, porque configure
e a e
regenera ‘config.h’.)
• O arquivo ‘sql_yacc.cc’ ´ gerado pelo ‘sql_yacc.yy’. Normalmente o processo de
e
constru¸˜o n˜o necessita criar ‘sql_yacc.cc’, porque o MySQL j´ vem com uma c´pia
ca a a o
pr´-gerada. Entretanto, se vocˆ necessita recri´-lo vocˆ pode encontrar este erro:
e e a e
"sql_yacc.yy", line xxx fatal: default action causes potential...
Isto ´ um ind´ de que sua vers˜o do yacc ´ deficiente. Provavelmente vocˆ precisar´
e icio a e e a
instalar o bison (a vers˜o GNU de yacc) e us´-lo no lugar do yacc.
a a
140. 106 MySQL Technical Reference for Version 5.0.0-alpha
• Se vocˆ necessita depurar mysqld ou um cliente MySQL, execute configure com a
e
op¸˜o --with-debug, ent˜o recompile e ligue seus clientes com a nova biblioteca cliente.
ca a
Veja Se¸˜o D.2 [Debugging client], P´gina 1076.
ca a
• Se vocˆ tem um erro de compila¸˜o no Linux (ex. SuSE Linux 8.1 ou Red Hat Linux
e ca
7.3) parecido com o seguinte:
libmysql.c:1329: warning: passing arg 5 of ‘gethostbyname_r’ from incompatible p
libmysql.c:1329: too few arguments to function ‘gethostbyname_r’
libmysql.c:1329: warning: assignment makes pointer from integer without a cast
make[2]: *** [libmysql.lo] Error 1
Por padr˜o, o script configure tenta determinar o n´mero correto de argumentos
a u
usando o compilador GNU C++ g++. Ele testa os resultados errados permitidos, se o
g++ n˜o est´ instalado. Existem dois modos de contornar este problema:
a a
• Certifique-se de que o GNU C++ g++ est´ instalado. Em algumas distribui¸˜es
a co
Linux, o pacote exigido ´ chamado gpp, em outro ele ´ chamado gcc-c++.
e e
• Use o gcc como o seu compilador C++ configurando a vari´avel de ambiente CXX
a
para gcc:
export CXX="gcc"
Note que vocˆ precisa executar o configure novamente ap´s isto.
e o
2.3.6 Notas MIT-pthreads
Esta se¸˜o descreve alguns dos detalhes envolvidos no uso de MIT-pthreads.
ca
Note que no Linux vocˆ N~O deve usar MIT-pthreads mas instalar LinuxThreads! Veja
e A
Se¸˜o 2.6.2 [Linux], P´gina 137.
ca a
Se seu sistema n˜o fornece suporte nativo a thread, vocˆ precisar´ construir o MySQL
a e a
usando o pacote MIT-pthreads. Isto inclui antigos sistemas FreeBSD, SunOS 4.X, Solaris
2.4 e anteriores entre outros. Veja Se¸˜o 2.2.3 [Qual SO], P´gina 78.
ca a
Note que a partir do MySQL 4.0.2, MIT-pthreads n˜o fazem mais parte da distribui¸˜o
a ca
fonte. Se vocˆ precisar deste pacote, vocˆ precisa fazer o download dele separadamente em
e e
http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
Depois do download, extraia este arquivo fonte no n´ mais alto do diret´rio de fontes do
ivel o
MySQL. Ele criar´ um novo subdiret´rio mit-pthreads.
a o
• Na maioria dos sitemas, vocˆ pode for¸ar o uso de MIT-pthreads executando o
e c
configure com a op¸˜o --with-mit-threads:
ca
shell> ./configure --with-mit-threads
Constru¸˜o em um diret´rio n˜o fonte n˜o ´ suportado com o uso de MIT-pthreads,
ca o a a e
porque n´s queremos minimizar nossas altera¸˜es para este c´digo.
o co o
• As verifica¸˜es que determinam se MIT-pthreads ser´ usado ou n˜o, ocorrer´ somente
co a a a
durante a parte do processo de configura¸˜o que trata com o c´digo do servidor. Se vocˆ
ca o e
configurou a distribui¸˜o usando --without-server para construir somente o c´digo
ca o
cliente, clientes n˜o ir˜o saber se o MIT-pthreads est´ sendo usado e ir´ usar conex˜es
a a a a o
socket Unix por padr˜o. Como os sockets Unix n˜o funcionam sob MIT-pthreads, isto
a a
significa que vocˆ precisar´ usar -h ou --host quando executar programas clientes.
e a
141. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 107
• Quando o MySQL ´ compilado usando MIT-pthreads, travas de sistema s˜o desabil-
e a
itadas por padr˜o por raz˜es de performance. Vocˆ pode dizer ao servidor para usar
a o e
travas de sistema com a op¸˜o --external-locking. Isto s´ ´ necess´rio se vocˆ
ca o e a e
quiser executar dois servidores MySQL no mesmo diret´rio de dados (no que n˜o ´
o a e
recomendado)
• Algumas vezes o comando pthread bind() falha ao ligar a um socket sem nenhuma
mensagem de erro (pelo menos no Solaris). O resultado ´ que todas conex˜es ao servidor
e o
falham. Por exemplo:
shell> mysqladmin version
mysqladmin: connect to server at ’’ failed;
error: ’Can’t connect to mysql server on localhost (146)’
A solu¸˜o para isto ´ matar o servidor mysqld e reinici´-lo. Isto s´ aconteceu conosco
ca e a o
quando for¸amos uma queda do servidor e fizemos uma reinicializa¸˜o imediata.
c ca
• Com MIT-pthreads, a chamada de sistema sleep() n˜o ´ interromp´ com SIGINT
a e ivel
(break). Isto s´ ´ percebido quando vocˆ executa mysqladmin --sleep. Vocˆ deve es-
oe e e
perar pela chamada sleep() para terminar, antes da interru¸˜o ser servida e o processo
ca
parar.
• Na liga¸˜o, vocˆ pode receber mensagens de alerta como estes (pelo menos no Solaris);
ca e
elas podem ser ignoradas:
ld: warning: symbol ‘_iob’ has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol ‘__iob’ has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
• Alguns outros alertas tamb´m podem ser ignorados:
e
implicit declaration of function ‘int strtoll(...)’
implicit declaration of function ‘int strtoul(...)’
• N˜o colocamos readline para funcionar com MIT-pthreads. (Isto n˜o ´ necess´rio,
a a e a
mas pode ser interessante para alguns.)
2.3.7 Instalando o MySQL a partir do Fonte no Windows
Estas instru¸˜es descrevem como construir o bin´rio do MySQL a partir do fonte paras
co a
vers˜es 4.1 e acima no Windows. As instru¸˜es s˜o fornecidas para construir bin´rios a
o co a a
partir de uma distribui¸˜o fonte padr˜o ou a partir da ´rvore do BitKeeper que cont´m o
ca a a e
fonte do desenvolvimento mais atuais.
Nota: As instru¸˜es neste documento est˜o restritas aos usu´rios que queiram testar o
co a a
MySQL no Windows a partir da ultima distribui¸˜o fonte ou da ´rvore do BitKeeper.
´ ca a
Para uso em produ¸˜o, a MySQL AB n˜o aconselha que vocˆ utilize um servidor MySQL
ca a e
constru´ por vocˆ mesmo a partir de um fonte. Normalmente ´ melhor usar uma dis-
ido e e
ca a e ´ especificamente para desem-
tribui¸˜o bin´ria precompilada do MySQL que ´ construida
142. 108 MySQL Technical Reference for Version 5.0.0-alpha
penho otimizado no Windows pela MySQL AB. Instru¸˜es para instalar uma distribui¸˜o
co ca
bin´ria est´ dispon´ em Se¸˜o 2.1.1 [Windows installation], P´gina 60.
a a ivel ca a
Para construir o MySQL no Windows a partir do fonte, vocˆ precisa dos seguintes compi-
e
ladores e recursos dison´
iveis em seu sistema Windows:
• Compilador VC++ 6.0 (atualizado com o SP 4 ou 5 e pacote Pre-processador) O
pacote Pre-processador ´ necess´rio para a macro assembler. Mais detalhes em:
e a
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/faq.aspx.
• Aproximadamente 45 MB de espa¸o em disco.
c
• 64 MB de RAM
Vocˆ tamb´m precisar´ de um distribui¸˜o fonte para o Windows. Existem dois modos de
e e a ca
conseguir uma distribui¸˜o fonte do MySQL vers˜o 4.1 e acima:
ca a
1. Obtenha um pacote de uma distribui¸˜o fonte pela MySQL AB para a vers˜o do
ca a
MySQL que vocˆ est´ particularmente interessado. Distribui¸˜es fontes empacotadas
e a co
est˜o dispon´
a iveis para vers˜es distribu´
o idas do MySQ e podem ser obtidas em
http://www.mysql.com/downloads/.
2. Vocˆ pode empacotar um distribui¸˜o fonte vocˆ mesmo a partir da ultima ´rvore fonte
e ca e a
de desenvolvimento do BitKeeper. Se vocˆ planeja fazer isto, vocˆ deve criar o pacote
e e
em um sistema Unix e ent˜o transfr´ para seu sistema Windows. (A raz˜o para isto ´
a i-lo a e
que alguns dos passos de configura¸˜o e constru¸˜o exigem ferramentas que funcionam
ca ca
apenas no Unix.) A abordagem do BitKeeper, exige:
• Um sistema executando Unix ou um sistema tipo Unix, como o Linux
• BitKeeper 3.0 instalado neste sistema. Vocˆ pode obter o BitKeeper em
e
http://www.bitkeeper.com/.
Se vocˆ estiver usando uma distribui¸˜o fonte do Windows, vocˆ pode ir diretamente para
e ca e
Se¸˜o 2.3.7.1 [Windows VC++ Build], P´gina 108. Para contruir a partir da ´rvore do
ca a a
BitKeeper, v´ para Se¸˜o 2.3.7.2 [Windows BitKeeper Build], P´gina 110.
a ca a
Se vocˆ encontrar alguma coisa que n˜o est´ funcionando como esperado, ou tiver sugest˜es
e a a o
sobre o mode de melhorar o processo de constru¸˜o atual no Windows, envie uma mensagem
ca
para a lista de email win32. Veja Se¸˜o 1.7.1.1 [Mailing-list], P´gina 33.
ca a
2.3.7.1 Construindo o MySQL Usando VC++
Nota: O MySQL 4.1 e arquivos do espe¸o de trabalho do VC++ s˜o compat´
c a iveis com o
Microsoft Visual Studio 6.0 e as edi¸˜es acima (7.0/.NET) e testados pela equipe da MySQL
co
AB antes de cada distribui¸˜o.
ca
Siga este procedimento para construir o MySQL:
1. Crie um diret´rio de trabalho (ex.: ‘workdir’).
o
2. Descompacte a distribui¸˜o fonte no diret´rio mencionado acima usando Winzip ou
ca o
outra ferramenta que possa ler arquivos ‘.zip’.
3. Inicie o compilador VC++ 6.0.
4. No menu File, selecione Open Workspace.
5. Abra o workspace ‘mysql.dsw’ que vocˆ encontrar no diret´rio de trabalho.
e o
143. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 109
6. No menu Build, selcione o menu Set Active Configuration.
7. Clique sobre a tela selecionada mysqld - Win32 Debug e clique OK.
8. Pressione F7 para iniciar a constru¸˜o da depura¸˜o do servidor, bibliotecas e alguns
ca ca
aplicativos clientes.
9. Compile as vers˜es distribu´
o idas que vocˆ desejar, do mesmo modo.
e
10. Vers˜es depuradas dos programas e bibliotecas s˜o colocados nos diret´rios
o a o
‘client_debug’ e ‘lib_debug’. Vers˜es liberadas dos programas e bibliotecas s˜o
o a
colocados nos diret´rios ‘client_release’ e ‘lib_release’. Note que se vocˆ quiser
o e
construir tanto vers˜es liberadas quanto depuradas vocˆ pode selecionar a op¸˜o
o e ca
“build all” do menu Build.
11. Teste o servidor. O servidor constru´ usando as instru¸˜es anteriores ir´ esperar que
ido co a
o diret´rio base e de dados do MySQL seja ‘C:mysql’ e ‘C:mysqldata’ por padr˜o.
o a
Se vocˆ quiser testar o seu servidor usando o diret´rio raiz de uma ´rvore fonte e seu
e o a
diret´rio de dados como o diret´rio base e o diret´rio de dados, vocˆ precisar´ dizer ao
o o o e a
servidor os seus caminhos. Vocˆ tamb´m pode fazer into na linha de comando com as
e e
op¸˜es --basedir e --datadir, ou colocar op¸˜es apropriadas no arquivo de op¸˜es (o
co co co
arquivo ‘C:my.cnf’ ou ‘my.ini’ no diret´rio do Windows). Se vocˆ tiver um diret´rio
o e o
de dados existente em qualquer lugar que vocˆ queira usar, vocˆ pode especific´-lo no
e e a
se caminho.
12. Inicie o ser servidor a partir do diret´rio ‘client_release’ ou ‘client_debug’, depen-
o
dendo de qual servidor vocˆ queira usar. O instru¸˜es gerais de inicializa˜o do servidor
e co a
est˜o em Se¸˜o 2.1.1 [Windows installation], P´gina 60. Vocˆ precisar´ adaptar as
a ca a e a
instru¸˜es de forma apropriada se vocˆ quiser usar um diret´rio base ou diret´rio de
co e o o
dados diferente.
13. Quando o servidor est´ em execu¸˜o de modo independente ou como um servi¸o daseado
a ca c
em sua configura¸˜o, tente se conectar a ele pelo utilit´rio interativo mysql de linha de
ca a
comando que existe em seu diret´rio ‘client_release’ ou ‘client_debug’.
o
Quando vocˆ estiver certo de que os programas que vocˆ construiu est˜o funcionando cor-
e e a
retamente, pare o servidor. Ent˜o instale o MySQL da seguinte forma:
a
1. Crie o diret´rio para instalar os arquivos do MySQL. Por exemplo, para instalar dentro
o
de ‘C:mysql’), use estes comandos:
C:
mkdir mysql
mkdir mysqlbin
mkdir mysqldata
mkdir mysqlshare
mkdir mysqlscripts
Se vocˆ quiser compilar outros clientes e lig´-los ao MySQL, vocˆ tamb´m deve criar
e a e e
diversos diret´rios adicionais:
o
mkdir mysqlinclude
mkdir mysqllib
mkdir mysqllibdebug
mkdir mysqllibopt
Se vocˆ quiser fazer um benchamrk do MySQL, crie este diret´rio:
e o
144. 110 MySQL Technical Reference for Version 5.0.0-alpha
mkdir mysqlsql-bench
Benchmark exigem suporte Perl.
2. Copie do diret´rio workdir para o diret´rio c:mysql os seguintes diret´rios:
o o o
copy client_release*.exe C:mysqlbin
copy client_debugmysqld.exe C:mysqlbinmysqld-debug.exe
xcopy scripts*.* C:mysqlscripts /E
xcopy share*.* C:mysqlshare /E
Se vocˆ quiser compilar outros clientes e lig´-los ao MySQL, vocˆ tamb´m deve fazer
e a e e
isto:
copy lib_debugmysqlclient.lib C:mysqllibdebug
copy lib_debuglibmysql.* C:mysqllibdebug
copy lib_debugzlib.* C:mysqllibdebug
copy lib_releasemysqlclient.lib C:mysqllibopt
copy lib_releaselibmysql.* C:mysqllibopt
copy lib_releasezlib.* C:mysqllibopt
copy include*.h C:mysqlinclude
copy libmysqllibmysql.def C:mysqlinclude
Se vocˆ quiser fazer um benchmark do MySQL, vocˆ tamb´m deve fazer isto:
e e e
xcopy sql-bench*.* C:mysqlbench /E
Configure e inicie o servidor da mesma forma que a distribui¸˜o bin´ria do Windows. Veja
ca a
Se¸˜o 2.1.1.3 [Windows prepare environment], P´gina 62.
ca a
´
2.3.7.2 Criando um Pacote Fonte do Windows a partir da Ultima
Fonte de Desenvolvimento
Para construir o ultimo pacote fonte do Windows a partir da arvor´ fonte atual do Bit-
´ e
Keeper, use as seguintes instru¸˜es. Por favor, note que este procedimento deve ser real-
co
izado em um sistema executando um sistema opercional Unix ou similar. (Sabe-se que este
procedimento funciona bem com o Linux, por exemplo.)
1. Clone a ´rvore fonte do BitKeeper para o MySQL (vers˜o 4.1 ou acima, como dese-
a a
jado). Para mais informa¸˜es sobre como clonar a ´rvore fonte veja as instru¸˜es em
co a co
Se¸˜o 2.3.4 [Installing source tree], P´gina 100.
ca a
2. Configure e construa as distribui¸˜es para que vocˆ tenha um bin´rio do servidor para
co e a
trabalhar. Um modo de se fazer isto ´ executar o seguinte comando no diret´rio de
e o
mais alto n´ de sua ´rvore fonte:
ivel a
shell> ./BUILD/compile-pentium-max
3. After making sure that the build process completed successfully, run the following
utility script from top-level directory of your source tree:
shell> ./scripts/make_win_src_distribution
This script creates a Windows source package, to be used on your Windows system.
You can supply different options to the script based on your needs. It accepts the
following options:
145. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 111
--debug Debug, without creating the package
--tmp Specify the temporary location
--suffix Suffix name for the package
--dirname Directory name to copy files (intermediate)
--silent Do not list verbosely files processed
--tar Create tar.gz package instead of .zip
--help Show this help message
By default, make_win_src_distribution creates a zipped archive with the name
‘mysql-VERSION-win-src.zip’, where VERSION represents the version of your MySQL
source tree.
4. Copy or upload to your Windows machine the Windows source package that you have
just created. To compile it, use the instructions in Se¸˜o 2.3.7.1 [Windows VC++ Build],
ca
P´gina 108.
a
2.4 Configura¸˜es e Testes P´s-instala¸˜o
co o ca
Uma vez instalado o MySQL (de uma distribui¸ao bin´ria ou fonte), vocˆ deve inicializar
c˜ a e
as tabelas de concess˜es, iniciar o servidor e ter certeza que o servidor est´ funcionando
o a
bem. Vocˆ pode tamb´m desejar que o servidor inicie e pare automaticamente quando seu
e e
sistema iniciar e desligar.
Normalmente vocˆ instala as tabelas de concess˜es e inicia o servidor assim para instala¸˜es
e o co
baseadas em uma distribui¸˜o fonte:
ca
shell> ./scripts/mysql_install_db
shell> cd diretorio_instala¸~o_mysql
ca
shell> ./bin/mysqld_safe --user=mysql &
Para uma distribui¸˜o bin´ria (sem ser pacotes RPM ou PKG), fa¸a isto:
ca a c
shell> cd diretorio_instala¸~o_mysql
ca
shell> ./bin/mysql_install_db
shell> ./bin/mysqld_safe --user=mysql &
O script mysql_install_db cria o banco de dados mysql que ir´ armazenar todos privil´gios
a e
do banco de dados, o banco de dados test que vocˆ poder´ usar para testar o MySQL e
e a
tamb´m entradas de privil´gio para o usu´rio que usa o mysql_install_db e o usu´rio
e e a a
root. As estrandas s˜o criadas sem senhas. O script mysqld_safe inicia o servidor mysqld.
a
(Se sua vers˜o for anterior a 4.0, use safe_mysqld em vez de mysqld_safe.)
a
mysql_install_db n˜o ir´ sobrescrever nenhuma tabela de privil´gios antiga, ent˜o deve
a a e a
ser seguro execut´-lo em quaisquer circunstˆncias. Se vocˆ n˜o deseja ter o banco de dados
a a e a
test vocˆ pode removˆ-lo com mysqladmin -u root drop test depois de iniciar o servidor.
e e
Testes s˜o geralmente facilmente feitos de um diret´rio raiz da distribui¸˜o MySQL.
a o ca
Para uma distribui¸˜o bin´ria, este ´ seu diret´rio de instala¸˜o (normalmente algo como
ca a e o ca
‘/usr/local/mysql’). Para uma distrubui¸˜o fonte, este ´ o diret´rio principal da sua
ca e o
´rvore fonte do MySQL.
a
Nos comandos mostrados abaixo nesta se¸˜o e nas seguintes subse¸˜es, BINDIR ´ o caminho
ca co e
para a localiza¸˜o na qual os programas como mysqladmin e mysqld_safe est˜o instalados.
ca a
Para uma distribui¸˜o bin´ria este ´ o diret´rio ‘bin’. Para uma distribui¸˜o fonte, BINDIR
ca a e o ca
146. 112 MySQL Technical Reference for Version 5.0.0-alpha
´ provavelmente ‘/usr/local/bin’, a menos que vocˆ especifique um diret´rio de instala¸˜o
e e o ca
diferente de ‘/usr/local’ quando vocˆ executa configure. EXECDIR ´ a localiza¸˜o na qual
e e ca
o servidor mysqld est´ instalado. Para uma distribui¸˜o bin´ria, isto ´ o mesmo que BINDIR.
a ca a e
Para uma distribui¸˜o fonte, EXECDIR ´ provavelmente ‘/usr/local/libexec’.
ca e
Os testes s˜o descritos em detalhes abaixo:
a
1. Se necess´rio, inicie o servidor mysqld e configure as tabelas de concess˜es iniciais
a o
contendo os privil´gios que determinam como os usu´rios est˜o permitidos a conectar
e a a
ao servidor. Isto ´ feito normalmente com o script mysql_install_db:
e
shell> scripts/mysql_install_db
Normalmente, mysql_install_db precisa ser executado somente na primeira vez que
vocˆ instala o MySQL. Portanto, se vocˆ estiver atualizando uma instala¸˜o existente,
e e ca
vocˆ pode pular este passo. (entretanto, mysql_install_db ´ realmente seguro de usar
e e
e n˜o ir´ atualizar nenhuma tabela que j´ exista, ent˜o se vocˆ n˜o tem certeza do que
a a a a e a
fazer, vocˆ pode sempre executar mysql_install_db.)
e
mysql_install_db cria seis tabelas (user, db, host, tables_priv, columns_priv e
func) no banco de dados mysql. Uma descri¸˜o dos privil´gios iniciais ´ fornecido
ca e e
em Se¸˜o 4.4.4 [Default privileges], P´gina 261. De forma resumidao, estes privil´gios
ca a e
permitem que o usu´rio root fa¸a qualquer coisa no MySQL, e permitem a qualquer
a c
um a criar ou usar bancos de dados com o nome de ’test’ ou iniciando com ’test_’
.
Se vocˆ n˜o configurar as tabelas de concess˜es, o seguinte erro ir´ aparecer no arquivo
e a o a
log quando vocˆ n˜o iniciar o servidor:
e a
mysqld: Can’t find file: ’host.frm’
O erro acima pode tamb´m ocorrer com uma distribui¸˜o bin´ria do MySQL se vocˆ
e ca a e
n˜o iniciar o MySQL executando o ./bin/mysqld_safe! Veja Se¸˜o 4.8.2 [mysqld_
a ca
safe], P´gina 332.
a
Vocˆ deve precisar executar mysql_install_db como root. Entretanto, se vocˆ
e e
preferir, pode executar o servidor MySQL como um usu´rio (n˜o-root) sem a a
privil´gios, desde que o usu´rio possa ler e escrever arquivos no diret´rio de banco
e a o
de dados. Instru¸˜es para executar o MySQL como um usu´rio sem privil´gios ´
co a e e
detalhado em Se¸˜o A.3.2 [Alterando usu´rios MySQL], P´gina 919
ca a a
Se vocˆ tiver problemas com o mysql_install_db, veja Se¸˜o 2.4.1 [mysql_install_
e ca
db], P´gina 115.
a
Existem algumas alternativas para executar o script mysql_install_db como ele ´ e
fornecido na distribui¸˜o MySQL:
ca
• Vocˆ pode querer editar o mysql_install_db antes de execut´-lo, para alterar os
e a
privil´gios iniciais que s˜o instalados nas tabelas de concess˜es. Isto ´ util se vocˆ
e a o e´ e
deseja instalar o MySQL em v´rias m´quinas com os mesmos privil´gios. Neste
a a e
caso, ´ prov´vel que vocˆ s´ precise adicionar algumas instru¸˜es INSERT extras
e a e o co
para as tabelas mysql.user e mysql.db.
• Se vocˆ deseja alterar o conte´do da tabelas de concess˜es depois de instal´-
e u o a
las, vocˆ pode executar mysql_install_db, ent˜o usar mysql -u root mysql para
e a
conectar `s tabelas de concess˜es como o usu´rio root e usar instru¸˜es SQL para
a o a co
modific´-las diretamente.
a
147. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 113
´
• E poss´ recriar as tabelas de permiss˜es completamente depois delas j´ terem
ivel o a
sido criadas. Vocˆ pode querer fazer isto se vocˆ j´ instalou as tabelas mas deseja
e e a
recri´-las depois das edi¸˜es mysql_install_db.
a co
Para maiores informa¸˜es sobre estas alternativas, veja Se¸˜o 4.4.4 [Default privileges],
co ca
P´gina 261.
a
2. Inicie o servidor MySQL assim:
shell> cd diretorio_instalacao_mysql
shell> bin/mysqld_safe &
Se a sua vers˜o do MySQL for mais antiga do que 4.0, substitua bin/safe_mysqld por
a
bin/mysqld_safe no comando:
Se vocˆ tiver problemas iniciando o servidor, veja Se¸˜o 2.4.2 [Starting server],
e ca
P´gina 116.
a
3. Use mysqladmin para verificar se o servidor est´ em execu¸˜o. Os seguintes coman-
a ca
dos fornecem um teste simples para conferir se o servidor est´ em funcionamento e
a
respondendo `s conex˜es:
a o
shell> BINDIR/mysqladmin version
shell> BINDIR/mysqladmin variables
A sa´ de mysqladmin version varia muito pouco dependendo de sua plataforma e
ida
vers˜o do MySQL, mas deve ser similar a esta mostrada abaixo:
a
shell> BINDIR/mysqladmin version
mysqladmin Ver 8.14 Distrib 3.23.32, for linux on i586
Copyright (C) 2000 MySQL 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 3.23.32-debug
Protocol version 10
Connection Localhost via Unix socket
TCP port 3306
UNIX socket /tmp/mysql.sock
Uptime: 16 sec
Threads: 1 Questions: 9 Slow queries: 0
Opens: 7 Flush tables: 2 Open tables: 0
Queries per second avg: 0.000
Memory in use: 132K Max memory used: 16773K
Para ter uma id´ia do que vocˆ pode fazer com BINDIR/mysqladmin, invoque-o com a
e e
op¸˜o --help.
ca
4. Verifique se vocˆ pode desligar o servidor:
e
shell> BINDIR/mysqladmin -u root shutdown
5. Verifique que vocˆ possa reiniciar o servidor.
e Fa¸a isto usando mysqld_safe ou
c
chamado o mysqld diretamente. Por exemplo:
shell> BINDIR/mysqld_safe --log &
148. 114 MySQL Technical Reference for Version 5.0.0-alpha
Se o mysqld_safe falhar, tente execut´-lo do diret´rio de instala¸˜o do MySQL (se
a o ca
vocˆ j´ n˜o estiver l´). Se n˜o funcionar, veja Se¸˜o 2.4.2 [Starting server], P´gina 116.
e a a a a ca a
6. Execute alguns testes b´sicos para verificar se o servidor est´ funcionando. A sa´
a a ida
deve ser similar ao mostrado abaixo:
shell> BINDIR/mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
+-----------+
shell> BINDIR/mysqlshow mysql
Database: mysql
+--------------+
| Tables |
+--------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+--------------+
shell> BINDIR/mysql -e "SELECT host,db,user FROM db" mysql
+------+--------+------+
| host | db | user |
+------+--------+------+
| % | test | |
| % | test_% | |
+------+--------+------+
Tamb´m existe uma suite de benchmark no diret´rio ‘sql-bench’ (sob o diret´rio de
e o o
instala¸˜o do MySQL) que vocˆ pode usar para comparar como o MySQL se comporta
ca e
em diferentes plataformas. O diret´rio ‘sql-bench/Results’ cont´m os resultados de
o e
v´rias execu¸˜es em diferentes bancos de dados e plataformas. Os seguintes m´dulos
a co o
Perl adicionais s˜o necess´rios para executar o pacote de benchamrk:
a a
DBI
DBD-mysql
Data-Dumper
Data-ShowTable
Estes m´dulos podem ser obtidos em CPAN http://www.cpan.org/. Veja Se¸˜o 2.7.1
o ca
[Instala¸˜o Perl], P´gina 165.
ca a
O diret´rio ‘sql-bench/Results’ cont´m os resultados de v´rias execu¸˜es em difer-
o e a co
entes bancos de dados e plataformas. Para executar todos testes, execute estes coman-
dos:
149. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 115
shell> cd sql-bench
shell> run-all-tests
Se vocˆ n˜o possui o diret´rio ‘sql-bench’, vocˆ provavelmente est´ usando uma dis-
e a o e a
tribui¸˜o bin´ria RPM. (Distribui¸˜es fontes RPMs incluem o diret´rio com os bench-
ca a co o
marks.) Neste caso, vocˆ deve primeiramente instalar a suite de benchmark antes
e
de poder us´-lo. A partir da vers˜o 3.22 do MySQL, come¸aram a existir arquivos
a a c
RPMs de benchmark chamados ‘mysql-bench-VERSION-i386.rpm’ que cont´m c´digo
e o
ie dados de benchmark.
Se vocˆ tem uma distribui¸˜o fonte, vocˆ tamb´m pode executar os testes no subdi-
e ca e e
ret´rio ‘tests’. Por exemplo, para executar ‘auto_increment.tst’, fa¸a isto:
o c
shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
Os resultados esperados s˜o mostrados no arquivo ‘./tests/auto_imcrement.res’.
a
2.4.1 Problemas Executando o mysql_install_db
O prop´sito do script mysql_install_db ´ gerar novas tabelas de privil´gios. Ele n˜o ir´
o e e a a
afeter nenhum outro dado! Ele tamb´m n˜o far´ nada se vocˆ j´ tem a tabela de privil´gio
e a a e a e
do MySQL instalada.
Se vocˆ deseja refazer suas tabelas de privil´gios, vocˆ deve desligar o servidor mysqld, se
e e e
ele j´ est´ executando, ent˜o fa¸a assim:
a a a c
mv diretorio-dados-mysql/mysql diretorio-dados-mysql/mysql-old
mysql_install_db
Esta se¸˜o relaciona alguns problemas que podem ser encontrados ao executar mysql_
ca
install_db:
mysql_install_db n˜o instala as tabelas de permiss˜es
a o
Vocˆ pode descobrir que o mysql_install_db falha ao instalar as tabelas de
e
permiss˜es e termina depois de mostrar as seguintes mensagens:
o
starting mysqld daemon with databases from XXXXXX
mysql daemon ended
Neste caso, vocˆ deve examinar o arquivo de log com muito cuidado! O log deve
e
se encontrar no diret´rio ‘XXXXXX’ nomeado pela mensagem de erro, e deve
o
indicar porque mysqld n˜o inicializa. Se vocˆ n˜o entende o que aconteceu,
a e a
inclua o log quando vocˆ postar um relato de erro usando mysqlbug! Veja
e
Se¸˜o 1.7.1.3 [Bug reports], P´gina 36.
ca a
J´ existe um daemon mysqld sendo executado
a
Neste caso, provavelmente n˜o ser´ necess´rio executar o mysql_install_db.
a a a
Vocˆ deve executar o mysql_install_db somente uma vez, quando vocˆ insta-
e e
lar o MySQL da primeira vez.
Instalair um segundo daemon mysqld n˜o funciona quando um daemon
a
estiver em execu¸˜o.
ca
Isto pode acontecer quando vocˆ j´ tiver uma instala¸˜o do MySQL existente,
e a ca
mas deseja colocar uma nova instala¸˜o em um diferente lugar (por exemplo,
ca
para testes, ou talvez vocˆ simplesmente deseja executar duas instala¸˜es ao
e co
150. 116 MySQL Technical Reference for Version 5.0.0-alpha
mesmo tempo). Geralmente o problema que ocorre quando vocˆ tenta executar
e
o segundo servidor ´ que ele tenta usar o mesmo socket e porta que o outro.
e
Neste caso vocˆ ir´ obter a mensagem de erro: Can’t start server: Bind
e a
on TCP/IP port: Address already in use ou Can’t start server: Bind on
unix socket.... Veja Se¸˜o 4.2 [M´ltiplos servidores], P´gina 220.
ca u a
Vocˆ n˜o tem direito de escrita no diret´rio ‘/tmp’
e a o
Se vocˆ n˜o tem direito de escrita para criar um arquivo socket no local padr˜o
e a a
(em ‘/tmp’) ou permiss˜o para criar arquivos tempor´ris em ‘/tmp,’ vocˆ ir´
a a e a
obter um erro quando executar mysql_install_db ou quando iniciar ou usar
mysqld.
Vocˆ pode especificar socket e diret´rio tempor´rio diferentes, como segue:
e o a
shell> TMPDIR=/algum_dir_tmp/
shell> MYSQL_UNIX_PORT=/algum_dir_tmp/mysqld.sock
shell> export TMPDIR MYSQL_UNIX_PORT
Veja Se¸˜o A.4.5 [Problems with mysql.sock], P´gina 925.
ca a
‘algum_dir_tmp’ deve ser o caminho para o mesmo diret´rio no qual vocˆ tem
o e
permiss˜o de escrita. Veja Apˆndice E [Environment variables], P´gina 1083.
a e a
Depois disto vocˆ deve estar apto para executar mysql_install_db e iniciar o
e
servidor com estes comandos:
shell> scripts/mysql_install_db
shell> BINDIR/mysqld_safe &
mysqld falha imediatamente
Se vocˆ estiver executando RedHat Vers˜o 5.0 com uma vers˜o de glibc an-
e a a
terior a 2.0.7-5 vocˆ deve ter certeza que vocˆ instalou todos os patches para
e e
a glibc! Existe muita informa¸˜o sobre isto nos arquivos das listas de men-
ca
sagens do MySQL. Links para os arquivos de correio est˜o dispon´
a iveis online
em http://lists.mysql.com/. Veja tamb´m Se¸˜o 2.6.2 [Linux], P´gina 137.
e ca a
Vocˆ pode tamb´m iniciar o mysqld manualmente usando a op¸˜o --skip-
e e ca
grant-tables e adicionar a informa¸ao de privil´gios usando o mysql:
c˜ e
shell> BINDIR/mysqld_safe --skip-grant-tables &
shell> BINDIR/mysql -u root mysql
Do mysql, execute manualmente os comandos SQL em mysql_install_db.
Tenha certeza de executar mysqladmin flush_privileges ou mysqladmin
reload ap´s dizer ao servidor para recarregar as tabelas de permiss˜es.
o o
2.4.2 Problemas Inicializando o Servidor MySQL
Se vocˆ for usar tabelas que suportem transa¸˜es (BDB, InnoDB), primeiro deve-se criar
e co
um arquivo my.cnf e configurar op¸˜es de inicializa¸˜o para os tipos de tabelas que vocˆ
co ca e
planeja usar. Veja Cap´ “ptexi tulo 7 [Table types], P´gina 629.
a
Geralmente, vocˆ inicia o servidor mysqld de uma das trˆs maneiras:
e e
• Invocando mysql.server. Este script ´ usado primariamente na inicializa¸˜o e final-
e ca
iza¸˜o do sistema, e ´ descrito de forma mais completa em Se¸˜o 2.4.3 [Automatic
ca e ca
start], P´gina 118.
a
151. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 117
• Invocando mysqld_safe, que tenta determinar as op¸˜es apropriadas para mysqld e
co
ent˜o execut´-lo com estas op¸˜es. Veja Se¸˜o 4.8.2 [mysqld_safe], P´gina 332.
a a co ca a
• Para o Windows NT/2000/XP, veja Se¸˜o 2.1.1.7 [NT start], P´gina 66.
ca a
• Invocando o mysqld diretamente.
o o ´
Quando o daemon mysqld inicia, ele altera o diret´rio para o diret´rio de dados. E neste
diret´rio que ele espera gravar arquivos de log e o arquivo pid (com o ID do processo) e
o
onde ele espera encontrar os bancos de dados.
A localiza¸˜o do diret´rio de dados ´ especificada quando a distribui¸˜o ´ compilada. En-
ca o e ca e
tretanto, se o mysqld espera encontrar o diret´rio de dados em lugar diferente de onde ele
o
realmente est´ no seu sistema, ele n˜o funcionar´ corretamente. Se vocˆ tiver problemas
a a a e
com caminhos incorretos vocˆ pode encontrar quais op¸˜es o mysqld permite e quais s˜o
e co a
as configura¸˜es do caminho padr˜o chamando o mysqld com a op¸˜o --help. Vocˆ pode
co a ca e
sobrescrever os padr˜es especificando os caminhos corretos como argumentos de linha de
o
comando ao mysqld. (Estas op¸˜es tamb´m podem ser usadas com o mysqld_safe).
co e
Normalmente vocˆ precisaria indicar ao mysqld somente o diret´rio base sob o qual o
e o
MySQL ´ instalado. Vocˆ pode fazer isso usando a op¸˜o --basedir. Vocˆ pode tamb´m
e e ca e e
usar --help para conferir o efeito das ope¸˜es para se alterar o caminho (perceba que
co
--help deve ser a op¸˜o final do comando mysqld. Por exemplo:
ca
shell> EXECDIR/mysqld --basedir=/usr/local --help
Uma vez que vocˆ determina as configura¸˜es de caminho que vocˆ deseja, inicie o servidor
e co e
sem a op¸˜o --help.
ca
Qualquer que tenha sido o m´todo utilizado para iniciar o servidor, se houver falha
e
na inicializa¸˜o, confira o arquivo de log para ver se vocˆ pode entender o porquˆ.
ca e e
Arquivos log est˜o localizados no diret´rio dados (normalmente ‘/usr/local/mysql/data’
a o
para uma distribui¸˜o bin´ria, ‘/usr/local/var’ para uma distribui¸˜o fonte,
ca a ca
‘mysqldatamysql.err’ no Windows.) Procure no diret´rio de dados por arquivos com
o
nomes no formato ‘nome_maquina.err’ e ‘nome_maquina.log’ onde nome_maquina ´ o e
nome do servidor. Ent˜o confira as ultimas linhas destes arquivos:
a ´
shell> tail nome_maquina.err
shell> tail nome_maquina.log
Se vocˆ encontrar algo como o seguinte no arquivo log:
e
000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed
000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory
000729 14:50:10 Can’t init databases
Significa que vocˆ n˜o inicializou o mysqld com --bdb-no-recover e o Berkeley DB encon-
e a
trou algo errado com seus arquivos log quando ele tentou recuperar seus bancos de dados.
Para poder continuar, vocˆ deve mover o antigo arquivo log Berkeley DB do diret´rio do
e o
banco de dados para outro lugar, onde poder´ examin´-los posteriormente. Os arquivos log
a a
s˜o nomeados ‘log.0000000001’, onde o n´mero ir´ incrementar com o tempo.
a u a
Se vocˆ estiver executando o mysqld com suporte a tabelas BDB e o mysqld falhar no
e
in´
icio, pode ser devido a alguns problemas com o arquivo de recupera¸˜o BDB. Neste caso
ca
vocˆ pode tentar iniciar o mysqld com --bdb-no-recover. Se isto ajudar, ent˜o vocˆ pode
e a e
remover todos os arquivos ‘log.*’ do diret´rio de dados e tentar iniciar o mysqld novamente.
o
152. 118 MySQL Technical Reference for Version 5.0.0-alpha
Se vocˆ obter o seguinte erro, significa que algum outro programa (ou outro servidor mysqld)
e
j´ est´ usando a porta TCP/IP ou socket mysqld est´ tentando usar:
a a a
Can’t start server: Bind on TCP/IP port: Address already in use
ou
Can’t start server: Bind on unix socket...
Use ps para ter certeza que vocˆ n˜o tem outro servidor mysqld em execu¸˜o. Se vocˆ
e a ca e
n˜o consegue encontrar outro servidor, vocˆ pode tentar executar o comando telnet sua_
a e
maquina numero_porta_tcp-ip e apertar ENTER v´rias vezes. Se vocˆ n˜o obter uma
a e a
mensagem como telnet: Unable to connect to remote host: Connection refused, algo
est´ usando a mesma porta TCP/IP que o mysqld est´ tentando usar. Veja Se¸˜o 2.4.1
a a ca
[mysql install db], P´gina 115 e Se¸˜o 4.2 [Multiple servers], P´gina 220.
a ca a
Se o mysqld est´ atualmente em execu¸˜o, vocˆ pode verificar as configura¸˜es que ele est´
a ca e co a
usando executando este comando:
shell> mysqladmin variables
ou
shell> mysqladmin -h ’your-host-name’ variables
Se vocˆ obter o Errcode 13, que significa Permission denied, ao iniciar o mysqld isto
e
significa que vocˆ n˜o pode ter o direito de leitura/cria¸˜o de arquivos no diret´rio do
e a ca o
banco de dados ou log. Neste caso vocˆ tamb´m deve iniciar o mysqld como usu´rio root
e e a
ou alterar a permiss˜o para os arquivos e diret´rios envolvidos para uqe vocˆ tenha o direito
a o e
de us´-los.
a
Se o mysqld_safe inicia o servidor mas vocˆ n˜o consegue se conectar a ele, tenha certeza
e a
que vocˆ tem uma entrada no arquivo ‘/etc/hosts’ que parece com isto:
e
127.0.0.1 localhost
Este problema s´ ocorre em sistemas que n˜o possuem uma biblioteca thread funcional e
o a
para o qual o MySQL deve estar configurado para usar MIT-pthreads.
Se vocˆ n˜o consegue iniciar o mysqld vocˆ pode tentar criar um arquivo para rastrea-
e a e
mento de erros (trace) para encontrar o problema. Veja Se¸˜o D.1.2 [Making trace files],
ca
P´gina 1071.
a
Se vocˆ estiver utilizando tabelas InnoDB, procure pelas op¸˜es especificas de inicializa¸˜o
e co ca
do InnoDB. Veja Se¸˜o 7.5.3 [InnoDB start], P´gina 643.
ca a
Se vocˆ estiver usando tabelas BDB (Berkeley DB), vocˆ deve se familiarizar com as difer-
e e
entes op¸˜es especificas de inicializa¸˜o do BDB. Se¸˜o 7.6.3 [BDB start], P´gina 696.
co ca ca a
2.4.3 Inicializando e parando o MySQL automaticamente.
Os scripts mysql.server e mysqld_safe podem ser usados para iniciar o servidor automati-
camente na inicializa¸˜o do sistema. mysql.server tamb´m pode ser usado para parar o
ca e
servidor.
O script mysql.server pode ser usado para inicializar ou parar o servidor utilizando-o com
os argumentos start ou stop:
shell> mysql.server start
shell> mysql.server stop
153. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 119
mysql.server pode ser encontrado no diret´rio ‘share/mysql’ sob o diret´rio de instala¸˜o
o o ca
do MySQL ou no diret´rio ‘support-files’ da ´rvore fonte do MySQL.
o a
Note que se vocˆ usa o pacote RPM do Linux (MySQL-server-VERS~O.rpm), o script
e A
mysql.server j´ estar´ instalada como ‘/etc/init.d/mysql’ - vocˆ n˜o precisa instal´-
a a e a a
lo manualmente. Veja Se¸˜o 2.1.2 [Linux-RPM], P´gina 69 para mais informa¸˜es sobre
ca a co
pacotes RPM Linux.
No Mac OS X, vocˆ pode instalar um pacote do MySQL Startup Item separado para
e
habilitar a inicializa¸˜o autom´tica do MySQL no boot so sistema. Veja Se¸˜o 2.1.3 [Mac
ca a ca
OS X installation], P´gina 71 para maiores detalhes.
a
Antes do mysql.server iniciar o servidor, ele vai para o diret´rio de instala¸˜o do MySQL,
o ca
e ent˜o chama o mysqld_safe. Vocˆ pode precisar editar o mysql.server se tiver uma dis-
a e
tribui¸˜o bin´ria instalada em um local n˜o-padr˜o. Modifique-o para chamar o diret´rio
ca a a a o
(cd) apropriado antes de executar o safe_mysql. Se vocˆ deseja que o servidor seja ex-
e
ecutado com um usu´rio espec´
a ifico, adicione uma linha user apropriada para o arquivo
‘/etc/my.cnf’, como ser´ visto posteriormente nesta se¸˜o.
a ca
mysql.server stop desliga o servidor MySQL enviando um sinal para ele. Vocˆ pode
e
desligar o servidor manualmente executando mysqladmin shutdown.
Vocˆ precisa adicionar estes comandos start e stop nos lugares apropriados de seus arquivos
e
‘/etc/rc.*’ quando vocˆ quiser iniciar o MySQL automaticamente no seu servidor.
e
On most current Linux distributions, it is sufficient to copy the file mysql.server into the
‘/etc/init.d’ directory (or ‘/etc/rc.d/init.d’ on older Red Hat systems). Afterwards,
run the following command to enable the startup of MySQL on system bootup:
shell> chkconfig --add mysql.server
No FreeBSD o script de inicializa¸˜o normalmente deve ir no diret´rio
ca o
‘/usr/local/etc/rc.d/’. A p´gina do manual rc(8) tamb´m diz que os scripts
a e
neste diret´rio s´ s˜o executados, se o seu nome de base corresponder padr˜o global
o o a a
da sheel *.sh. Qualquer outro arquivo ou diret´rio presente dentro do diret´rio s˜o
o o a
silenciosamente ignorados. Em outra palavras, no FreeBSD vocˆ deve instalar o arquivo
e
‘mysql.server’ como ‘/usr/local/etc/rc.d/mysql.server.sh’ para habilitar a
inicializa¸˜o autom´tica.
ca a
Como uma alternativa para o exposto acima, alguns sistemas operacionais tamb´m usam
e
‘/etc/rc.local’ ou ‘/etc/init.d/boot.local’ para inicializar servi¸os adicionais durante
c
o boot. Para iniciar o MySQL usando este m´todo, vocˆ poderia poderia adicionar algo
e e
como o seguinte a ele:
/bin/sh -c ’cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &’
Vocˆ tamb´m pode adicionar op¸˜es para mysql.server em um arquivo global
e e co
‘/etc/my.cnf’. Um t´
ipico arquivo ‘/etc/my.cnf’ pode parecer com isto:
[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
154. 120 MySQL Technical Reference for Version 5.0.0-alpha
basedir=/usr/local/mysql
O script mysql.server entende as seguintes op¸˜es: datadir, basedir e pid-file.
co
A seguinte tabela mostra quais grupos de op¸˜es cada script de inicializa¸˜o lˆ dos arquivos
co ca e
de op¸˜es:
co
Script Grupos de op¸˜es
co
mysqld [mysqld], [server] e [mysqld-major-version]
mysql.server [mysql.server], [mysqld], e [server]
mysqld_safe [mysql.server], [mysqld], e [server]
Para compatibilidade com vers˜es anteriores, o mysql.server tamb´m lˆ o grupo [mysql_
o e e
server] e mysqld_safe tamb´m lˆ o grupo [safe_mysqld]. No entanto, vocˆ deve atu-
e e e
alizar os seus arquivos de op¸˜es para usar os grupos [mysql.server] e [mysqld_safe].
co
Veja Se¸˜o 4.1.2 [Arquivos de Op¸˜es], P´gina 217.
ca co a
2.5 Atualizando/Desatualizando o MySQL
Antes de fazer uma atualiza¸˜o, vocˆ deve fazer o backup de seus bancos de dados antigos.
ca e
Vocˆ sempre pode mover os arquivos de formato e de dados do MySQL entre diferentes
e
vers˜es na mesma arquitetura enquanto vocˆ tiver vers˜o base do MySQL. A vers˜o base
o e a a
atual ´ 4. Se vocˆ alterar o conjunto de caracteres quando executar o MySQL, vocˆ deve
e e e
executar myisamchk -r -q --set-character--set=charset em todas tabelas. De outra
forma seus ´ indices podem n˜o ser corretamente ordenados, porque alterar o conjunto de
a
caracteres tamb´m pode alterar a ordena¸˜o.
e ca
Se vocˆ tem receio de novas vers˜es, vocˆ sempre pode renomear seu antigo mysqld para
e o e
algo como mysqld-’n´mero-da-vers˜o-antiga’. Se o seu novo mysqld comportar de maneira
u a
inesperada, vocˆ simplesmente pode desliga-lo e reiniciar com seu antigo mysqld!
e
Se depois de uma atualiza¸˜o, vocˆ tiver problemas com programas clientes recompilados
ca e
como Commands out of sync ou “core dumps” inexperados, vocˆ provavelmente usou um
e
arquivo de cabe¸alho ou de biblioteca antigo na compila¸˜o de seus programas. Neste caso
c ca
vocˆ deve conferir a data de seu arquivo ‘mysql.h’ e da biblioteca ‘libmysqlclient.a’
e
para verificar que eles s˜o da nova distribui¸˜o MySQL. Se n˜o, por favor, recompile seus
a ca a
programas!
Se vocˆ tiver problemas, como na inicializa¸˜o do novo servidor mysqld ou caso vocˆ n˜o
e ca e a
consiga conectar sem uma senha, confira se o seu arquvo ‘my.cnf’ ´ o mesmo da antiga
e
instala¸˜o! Vocˆ pode conferir com isto: nome-programa --print-defaults. Se isto n˜o
ca e a
produzir outra sa´ al´m do nome do programa, vocˆ tem um arquivo my.cnf ativo que
ida e e
est´ afetando a operacionalidade do servidor!
a
´
E uma boa id´ia reconstruir e reinstalar o m´dulo Perl DBD-mysql sempre que instalar uma
e o
nova vers˜o do MySQL. O mesmo se aplica para outras interfaces MySQL, como Python
a
MySQLdb.
2.5.1 Atualizando da Vers˜o 4.0 para 4.1
a
Varias comportamentos vis´ iveis foram alteradas entre o MySQL 4.0 e o MySQL 4.1 para
corrigir erros cr´
iticos e tornar o MySQL mais compat´ com o padr˜o ANSI SQL. Estas
ivel a
altera¸˜es podem afetar ` sua aplica¸˜o.
co a ca
155. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 121
Alguns dos comportamentos do MySQL 4.1 no 4.0 podem ser testados antes de realizar uma
atualiza¸˜o completa para a vers˜o 4.1, adicionamos `s ultimas distribui¸˜es do MySQL 4.0
ca a a ´ co
(a paritr da 4.0.12) a op¸˜o de inicializa¸˜o --new para o mysqld.
ca ca
Esta op¸˜o lhe d´ o comportamento da vers˜o 4.1 para as altera¸˜es mais cr´
ca a a co iticas. Vocˆ
e
tamb´m pode habilitar estes comportamentos para a conex˜o de uma determinado cliente
e a
com o comando SET @@new=1, ou desabilit´-lo se ele for iniciado com SET @@new=0.
a
Se vocˆ acredita que algumas das altera¸˜es da vers˜o 4.1 o afetar˜o, recomendamos que
e co a a
antes de atualizar para a vers˜o 4.1, vocˆ fa¸a o download da ultima distribui¸˜o do MySQL
a e c ´ ca
4.0 e o execute com a op¸˜o --new adicionando o seguinte ao seu arquivo de configura¸˜o:
ca ca
[mysqld-4.0]
new
Deste modo vocˆ pode testar o novo comportamento com seus aplicativos na vers˜o 4.0 para
e a
certificar-se que eles funcionam. Isto o ajudar´ a ter uma transi¸˜o suave quando realizar
a ca
uma atualiza¸˜o completa do MySQL 4.1. Fazendo isto do modo acima ir´ assegurar que
ca a
vocˆ n˜o execute acidentalemte a vers˜o 4.1 com a op¸˜o --new mais tarde.
e a a ca
A seguinte lista descreve altera¸˜es que podem afetar aplica¸˜es e que vocˆ deve observar
co co e
ao atualizar para a vers˜o 4.1:
a
• TIMESTAMP agora ´ retornado como uma string com o formato ’YYYY-MM-DD HH:MM:SS’.
e
(A op¸˜o --new pode ser usada a partir da vers˜o 4.0.12 para fazer um servidor 4.0
ca a
se comportar como 4.1 a este respeito.) Se vocˆ quiser tˆ-lo com um n´mero (como a
e e u
Vers˜o 4.0 faz) deve-se adicionar +0 a coluna TIMESTAMP a eles:
a
mysql> SELECT ts_col + 0 FROM tbl_name;
Tamanhos de display para TIMESTAMP n˜o s˜o mais suportados. Por exemplo, se vocˆ
a a e
declarar um coluna como TIMESTAMP(10), o (10) ´ ignorado.
e
Esta mudan¸a era necess´ria para compatibilidade com os padr˜es SQL. Em uma vers˜o
c a o a
futura. Em uma vers˜o futura, uma altera¸˜o adicional ser´ feita (compat´
a ca a ivel com
vers˜es anteriores com esta muda¸a), permitindo que o tamanho do timestamp indique
o c
o n´mero desejado de d´
u igitos de fra¸˜es de um segundo.
co
• Valores bin´rios (0xFFDF) agora s˜o assumidos como strings em vez de n´meros. Isto
a a u
corrige o problema com conjunto de caracteres onde ´ conveniente colocar a string como
e
um valor bin´rio. Com esta altera¸˜o vocˆ deve usar CAST() se vocˆ quiser comparar
a ca e e
valores bin´rios numericamente como inteiros:
a
SELECT CAST(0XFEFF AS UNSIGNED INTEGER) < CAST(0XFF AS UNSIGNED INTEGER)
Se vocˆ n˜o usa CAST(), uma compara¸˜o lexicogr´fica da string ser´ feita:
e a ca a a
mysql> SELECT 0xFEFF < 0xFF;
-> 1
Usando itens bin´rios em um contexto num´rico ou comparando-os usando o operador
a e
= deve funcionar como antes. (A op¸˜o --new pode ser usado para fazer o servidor 4.0
ca
se comportar como 4.1 a partir da vers˜o 4.0.13.)
a
• Para fun¸˜es que produzem um valor DATE, DATETIME, ou TIME, o resultado retornado
co
para o cliente agora est´ corrigido para ter um tipo temporal. Por exemplo, no MySQL
a
4.1, vocˆ tem este resultado:
e
mysql> SELECT CAST("2001-1-1" as DATETIME);
156. 122 MySQL Technical Reference for Version 5.0.0-alpha
-> ’2001-01-01 00:00:00’
No MySQL 4.0, o resultado ´ diferente:
e
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> ’2001-01-01’
• Valores DEFAULT n˜o podem mais ser especificado para colunas AUTO_INCREMENT (Na
a
vers˜o 4.0, um valor DEFAULT ´ ignorado sem aviso, na 4.1 ocorre um erro).
a e
• SERIALIZE n˜o ´ mais uma op¸˜o v´lida para sql_mode.
a e ca a Deve-se usar SET
TRANSACTION ISOLATION LEVEL SERIALIZABLE. SERIALIZE tamb´m n˜o ´ mais v´lido
e a e a
para a op¸˜o --sql-mode do mysqld. Use --transaction-isolation=SERIALIZABLE
ca
• Todas tabelas e colunas strings agora tˆm um conjunto de caracter. Veja Cap´
e “ptexi
tulo 9 [Charset], P´gina 707. A informa¸˜o do conjunto de caracteres ´ mostrada por
a ca e
SHOW CREATE TABLE e mysqldump. (O MySQL vers˜o 4.0.6 e acima pode ler o novo
a
arquivo dump; vers˜es mais antigas n˜o podem.)
o a
• O formato de defini¸˜o de tabela usado nos arquivos ‘.frm’ mudaram um pouco na
ca
vers˜o 4.1. O MySQL 4.0.11 e adiante leˆm o novo formato ‘.frm’ diretamente, mas
a e
vers˜es mais antigas n˜o podem. Se vocˆ precisa mover tabelas da vers˜o 4.1. para
o a e a
uma mais nova que a 4.0.11, vocˆ de usar mysqldump. Veja Se¸˜o 4.9.7 [mysqldump],
e ca
P´gina 362.
a
• Se vocˆ estiver executando v´rios servidores na mesma m´quina Windows, vocˆ deve
e a a e
usar uma op¸˜o --shared_memory_base_name diferentes para cada m´quina
ca a
• A interface para agrupar fun¸˜es UDF alterou um pouco. Vocˆ deve agora declarar
co e
uma fun¸˜o xxx_clear() para cada fun¸˜o de agrupamento.
ca ca
Em geral, atualizar para o MySQL 4.1 a partir de uma vers˜o mais nova do MySQL envolve
a
os serguintes passos:
• Verifique na se¸˜o de altera¸˜es se houve alguma mudan¸a que pode afetar a sua
ca co c
aplica¸˜o.
ca
• Leia os novos itens da vers˜o 4.1 para ver quais itens interessantes que vocˆ pode usar
a e
na vers˜o 4.1. Veja Se¸˜o C.2 [Novidades na vers˜o 4.1.x], P´gina 948.
a ca a a
• Se vocˆ estiver executando o MySQL Server no Windows, veja tamb´m Se¸˜o 2.5.8
e e ca
[Windows upgrading], P´gina 132.
a
• Ap´s o upgrade, atualize a tabela de permiss˜es para gerar uma nova coluna Password
o o
maior que ´ necess´ria para tratamento seguro de senhas. O procedimento usa mysql_
e a
fix_privilege_tables e est´ descrito em Se¸˜o 2.5.6 [Upgrading-grant-tables],
a ca
P´gina 130. Estrat´gias alternativas para tratamento de senhas depois de uma
a e
atualiza¸˜o est˜o descritos posteriormente nesta se¸˜o.
ca a ca
O mecanismo de hashing da senha foi alterado na vers˜o 4.1 para fornecer maior seguran¸a,
a c
mas ele pode causar problemas de compatibilidade se vocˆ ainda tiver clientes que usam a
e
´
biblioteca cliente 4.0 ou anterior. (E bastante indesej´vel que vocˆ tenha clientes 4.0 em
a e
situa¸˜es onde o cliente conecta de uma m´quina remota que ainda n˜o tenha sido atualizada
co a a
para a vers˜o 4.1). A seguinte lista indica algumas estrat´gias poss´
a e iveis de atualiza¸˜o. Elas
ca
representam o que se deve fazer para escolher se ter compatibilidade com clientes antigos e
ter maior seguran¸a.
c
• N˜o atualizar para a vers˜o 4.1. Nenhum comportamento ser´ alterado, mas ´ claro
a a a e
que vocˆ n˜o poder´ usar qualquer um dos novos recursos fornecido pelo protocolo
e a a
157. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 123
cliente/servidor da vers˜o 4.1. (O MySQL 4.1 tem um protocolo cliente/servidor ex-
a
tendido que oferece tais recursos como instru¸˜es preparadas e conjuntos de m´ltiplos
co u
resultados.) Veja Se¸˜o 12.1.4 [C API Prepared statements], P´gina 824.
ca a
• Atualizar para a vers˜o 4.1 e executar o script mysql_fix_privilege_tables para
a
aumentar a coluna Password na tabela user e assim poder guardar hashes de senhas
longos. Mas execute o servidor com a op¸˜o --old-passwords para fornecer compati-
ca
bilidade com vers˜es anteriores que premitem que clientes pre-4.1 continuem a conectar
o
em suas contas de hash curto. Eventualmente, quando todos os seus clientes estiverem
atualizados para a vers˜o 4.1, vocˆ pode parar de usar a op¸˜o do servidor --old-
a e ca
passwords. Vocˆ tamb´m pode alterar as senhas em sua conta MySQL para usar o
e e
novo formato que ´ mais seguro.
e
• Atualizar para vers˜o 4.1 e executar o script mysql_fix_privilege_tables para au-
a
mentar a coluna Password na tabela user. Se vocˆ sabe que todos os clientes tamb´m
e e
foram atualizados para a vers˜o 4.1, n˜o execute o servidor com a op¸˜o --old-
a a ca
passwords. Em vez disso, altere a senha em todas as contas existentes para que elas
tenham o novo formato. Uma instala¸˜o pura da vers˜o 4.1 ´ o mais seguro.
ca a e
Informa¸˜es adicionais sobre hashing de senha em rela¸˜o a autentica¸˜o no cliente e
co ca ca
opera¸˜es de altera¸˜o de senha podem ser encontrados em Se¸˜o 4.3.11 [Password hashing],
co ca ca
P´gina 246.
a
2.5.2 Atualizando da Vers˜o 3.23 para 4.0
a
Em geral, o que vocˆ deve fazer ´ atualizar para a vers˜o 4.0 um vers˜o mais nova do
e e a a
MySQL:
• Ap´s o upgrade, atualize a tabela de permiss˜es para adicionar novos privil´gios e
o o e
recursos. O procedimento usa o script mysql_fix_privilege_tables e est´ descrito
a
em Se¸˜o 2.5.6 [Upgrading-grant-tables], P´gina 130.
ca a
• Edite qualquer script de inicializa¸˜o ou arquivo de configura¸˜o para n˜o utilizar
ca ca a
nenhuma das op¸˜es obsoletas listadas posteriormente nesta se¸˜o.
co ca
• Converta seua arquivos ISAM antigos para arquivos MyISAM com o comando: mysql_
convert_table_format database. (Este ´ um script Perl; ele exige que o DBI esteja
e
instalado). Paa converter a tabela em um dado banco de dados, use este comando:
shell> mysql_convert_table_format database db_name
Note que ele deve ser usado apenas se vocˆ usar se todas as tabelas em um dado banco
e
de dados s˜o ISAM ou MyISAM. Para evitar a convers˜o de tabelas de outros tipos para
a a
MyISAM, vocˆ pode listar explicitamente o nome de suas tabelas ISAM depois do nome
e
do banco de dados na linha de comando. Vocˆ tamb´m pode executar uma instru¸˜o
e e ca
ALTER TABLE table_name TYPE=MyISAM para cada tabela ISAM para convertˆ-la para
e
MyISAM.
Para descobir o tipo de uma determinada tabela, use esta instru¸˜o:
ca
mysql> SHOW TABLE STATUS LIKE ’tbl_name’;
• Certifique-se de que vocˆ n˜o tem nenhum cliente MySQL que utiliza bibliotecas com-
e a
partilhadas (com o Perl DBD-mysql). Se vocˆ tiver, vocˆ deve recompil´-las j´ que
e e a a
as estruturas usadas em ‘libmysqlclient.so’ foram alteradas. O mesmo se aplica a
outras interfaces MySQL, como Python MySQLdb.
158. 124 MySQL Technical Reference for Version 5.0.0-alpha
O MySQL 4.0 funcionar´ mesmo se vocˆ n˜o fizer o acima, mas vocˆ n˜o poder´ usar os
a e a e a a
novos privil´gios de seguran¸a pois o MySQL 4.0 e vocˆ podem encontrar problemas ao
e c e
atualizar o MySQL para a vers˜o 4.1 ou mais nova. O formato do arquivo ISAM ainda
a
funciona no MySQL 4.0 mas est´ obsoleto e ser´ disabilitado (n˜o compilado por padr˜o)
a a a a
no MySQL 4.1. Em vez disso deve se usar tabelas MyISAM.
Clientes antigos devem funcionar com um servidor vers˜o 4.0 sem nenhum problema.
a
Mesmo se vocˆ fizer o indicado acima, vocˆ ainda pode voltar para o MySQL 3.23.52 ou
e e
mais novo se vocˆ encontrar problemas com o MySQL da s´rie 4.0. Neste caso vocˆ deve
e e e
´
usar o mysqldump para fazer um dump de qualquer tabela que use um indice full-text e
recarregar o arquivo de dump no servidor 3.23 (pois o 4.0 usa um novo formato para ´
indices
full-text).
A seguir est´ uma lista mais completa com o que deve ser observado para atualizar para a
a
vers˜o 4.0;
a
• O MySQL 4.0 tem v´rios novos privil´gios na tabela mysql.user. Veja Se¸˜o 4.4.1
a e ca
[GRANT], P´gina 255.
a
Para fazer estes novos privil´gios funcionarem, deve se atualizar a tabela de permiss˜es.
e o
O procedimento est´ descrito em Se¸˜o 2.5.6 [Upgrading-grant-tables], P´gina 130. At´
a ca a e
que este script esteja executando todos os usu´rios tˆm os privil´gios SHOW DATABASES,
a e e
CREATE TEMPORARY TABLES e LOCK TABLES. Os privil´gios SUPER e EXECUTE tiram o seu
e
valor de PROCESS. REPLICATION SLAVE e REPLICATION CLIENT tiram o seu valor de
FILE.
Se vocˆ tiver qualquer script que crie novos usu´rios, vocˆ pode querer alter´-los para
e a e a
usar os novos privil´gios. Se vocˆ n˜o est´ usando o comando GRANT nos scripts, este
e e a a
´ um bom momento para alterar os seus scripts e usar GRANT em vez de modificar a
e
tabela de permiss˜es diretamente.
o
A partir da vers˜o 4.0.2 a op¸˜o --safe-show-database est´ obsoleta (e n˜o faz mais
a ca a a
nada). Veja Se¸˜o 4.3.3 [Op¸˜es de privil´gio], P´gina 231.
ca co e a
Se vocˆ receber um erro Access denied para novos usu´rios na vers˜o 4.0.2, vocˆ deve
e a a e
verificar se vocˆ precisa de alguma das novas concess˜es que vocˆ n˜o precisava antes.
e o e a
Em particular, vocˆ precisar´ REPLICATION SLAVE (em vez de FILE) para novos slaves.
e a
• ‘safe_mysqld’ ´ renomeado para ‘mysqld_safe’. Para compatibilidade com vers˜es
e o
anteriores, as distribui¸˜es bin´rias, ir˜o, por algum tempo, incluir safe_mysqld como
co a a
um link simb´lico para mysqld_safe.
o
• Suporte para InnoDB agora est´ inclu´ na distribui¸˜o bin´ria. Se vocˆ contruir o
a ido ca a e
MySQL a partir de um fonte, o InnoDB est´ configurado por padr˜o, Se vocˆ n˜o usar
a a e a
o InnoDB e quiser economizar mem´ria ao executar o servidor que possui suorte a
o
InnoDB habilitado, use a op¸˜o de inicializa¸˜o do servidor. Para compilar o MySQL
ca ca
sem suporte ao InnoDB, execute configure com a op¸˜o --without-innodb.
ca
• O parˆmetro de inicializa¸˜o myisam_max_extra_sort_file_size e myisam_max_
a ca
extra_sort_file_size s˜o dados agora em bytes. (eram dados em megabytes antes
a
da vers˜o 4.0.3).
a
O lock de sistema externo dos arquivos MyISAM/ISAM agora est´ desligado por a
padr˜o. Pode se lig´-los fazendo --external-locking. (Para a maioria dos usu´rios
a a a
isto nunca ´ necess´rio).
e a
159. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 125
• A seguintes vari´veis/op¸˜es de inicializa¸ao foram renomeadas:
a co c
Nome Antigo Novo Nome.
myisam_bulk_insert_tree_size bulk_insert_buffer_size
query_cache_startup_type query_cache_type
record_buffer read_buffer_size
record_rnd_buffer read_rnd_buffer_size
sort_buffer sort_buffer_size
warnings log-warnings
--err-log --log-error (para mysqld_safe)
As op¸˜es de inicializa¸˜o record_buffer, sort_buffer e warnings ainda funcionar˜o
co ca a
no MySQL 4.0 mas est˜p obsoletas.
a
• As seguintes veri´veis SQL mudaram o nome.
a
Nome Antigo Novo Nome.
SQL_BIG_TABLES BIG_TABLES
SQL_LOW_PRIORITY_UPDATES LOW_PRIORITY_UPDATES
SQL_MAX_JOIN_SIZE MAX_JOIN_SIZE
SQL_QUERY_CACHE_TYPE QUERY_CACHE_TYPE
Os nomes antigos ainda funcionam no MySQL 4.0 mas est˜o obsoletos.
a
• Vocˆ deve usar SET GLOBAL SQL_SLAVE_SKIP_COUNTER=# em vez de SET SQL_SLAVE_
e
SKIP_COUNTER=#.
• As op¸˜es de inicializa¸˜o --skip-locking e --enable-locking foram renomeadas
co ca
para --skip-external-locking e --external-locking.
• SHOW MASTER STATUS agora retorna um conjunto vazio se o log bin´rio n˜o estiver ha-
a a
bilitado.
• SHOW SLAVE STATUS agora retorna um conjunto vazio se o slave n˜o est´ inicializado.
a a
• O mysqld agora tem a op¸˜o --temp-pool habilitada por padr˜o j´ que isto da melhor
ca a a
rendimento com alguns SO (Principalmente no Linux).
• Colunas DOUBLE e FLOAT agora respeitam o parˆmetro UNSIGNED no armazenamento
a
(antes, UNSIGNED era ignortado por estas colunas).
• ORDER BY coluna DESC ordena valores NULL por ultimo, como no MySQL 4.0.11. Na
´
vers˜o 3.23 e anteriores da vers˜o 4.0, isto nem sempre era consistente.
a a
• SHOW INDEX tem duas colunas a mais (Null e Index_type) que ele tinha nas vers˜es o
3.23.
• CHECK, SIGNED, LOCALTIME e LOCALTIMESTAMP s˜o agora palavras reservadas.
a
• O resultado de todos os operadores bitwise (|, &, <<, >> e ~) agora s˜o unsigned. Isto
a
pode causar problemas se vocˆ estiver usando-as em um contexto onde vocˆ quer um
e e
resultado com sinal. Veja Se¸˜o 6.3.5 [Fun¸˜es de Convers˜o], P´gina 543.
ca co a a
• Nota: quando vocˆ usa subtra¸˜o entre valores inteiros onde um deles ´ do tipo
e ca e
UNSIGNED, o resultado ser´ sem sinal. Em oyras palavras, antes de atualizar para o
a
MySQL 4.0, vocˆ deve verificar sua aplica¸˜o para os casos onde vocˆ est´ subtraindo
e ca e a
um valor de uma entidade sem sinal e quer um n´mero negativo como resposta ou sub-
u
traindo um valor sem sinal de uma coluna do tipo inteiro. Vocˆ pode disabilitar este
e
comportamento usando a op¸˜o --sql-mode=NO_UNSIGNED_SUBTRACTION ao iniciar o
ca
mysqld. Veja Se¸˜o 6.3.5 [Fun¸˜es de convers˜o], P´gina 543.
ca co a a
160. 126 MySQL Technical Reference for Version 5.0.0-alpha
• Para usar MATCH ... AGAINST (... IN BOOLEAN MODE) com suas tabelas, vocˆ precisa
e
recontru´ i-las com REPAIR TABLE nome_tabela USE_FRM.
• LOCATE() e INSTR() s˜o caso sensitivo se um dos argumentos ´ uma string bin´ria. De
a e a
outra forma elas s˜o caso-insensitivo.
a
• STRCMP() agora usa o conjunto de caracteres atual ao fazer compara¸˜es, o que significa
co
que o comportamento padr˜o das compara¸˜es agora ´ caso-insensitivo.
a co e
• HEX(string) agora retorna os caracteres na string convertidos para hexadecimal. Se
vocˆ quiser converter um n´mero para hexadecimal, vocˆ deve se assugurar que vocˆ
e u e e
chama HEX() com um argumento num´rico. e
• Na vers˜o 3.23, INSERT INTO ... SELECT sempre tem o IGNORE habilitado. Na vers˜o
a a
a ´
4.0.1, o MySQL ir´ parar (e possivelmente fazer um roll back) por padr˜o no caso de
a
‘mysqld_safe’ ser renomeado para ‘mysqld_safe’. Por algum tempo incluiremos em
nossa distribui¸˜o bin´ria o mysqld_safe como um link simb´lico para mysqld_safe.
ca a o
• um erro se vocˆ n˜o especificar IGNORE.
e a
• As fun¸˜es antigas da API C mysql_drop_db(), mysql_create_db() e mysql_
co
connect() n˜o s˜ mais suportadas a menos que vocˆ compile o MySQL com
a a e
CFLAGS=-DUSE_OLD_FUNCTIONS. No entanto, ´ preferivel
e ´ alterar o cliente para utilizar
a nova API 4.0.
• Na estrutura MYSQL_FIELD, length e max_length foram alterados de unsigned int
para unsigned long. Isto n˜o deve causar problemas, exceto que eles podem gerar
a
mensagens de avisos quando quando usado como argumento em uma classe printf()
de fun¸˜es.
co
• Vocˆ deve usar TRUNCATE TABLE quando quiser deletar todos os registros de uma tabela
e
e vocˆ n˜o precisa obter uma contagen de quantas colunas forma deletadas. (DELETE
e a
FROM table_name retorna a contagem de linhas na vers˜o 4.0, e TRUNCATE TABLE ´ mais
a e
r´pido.)
a
• Vocˆ receber´ um erro se tiver um LOCK TABLES ativo ou transa¸˜es ao tentar executar
e a co
TRUNCATE TABLE ou DROP DATABASE.
• Vocˆ deve usar inteiros para armazenar valores em colunas BIGINT (em vez de usar
e
strings, como vocˆ fez no MySQL 3.23). Usar strings ainda funicona, mas usar inteiros
e
´ mais eficiente.
e
• O formato de SHOW OPEN TABLE alterou.
• Clientes multi-thread devem usar mysql_thread_init() e mysql_thread_end(). Veja
Se¸˜o 12.1.14 [Clientes em threads], P´gina 859.
ca a
• Se vocˆ quiser recompilar o m´dulo Perl DBD::mysql, vocˆ deve conseguir o DBD-mysql
e o e
vers˜o 1.2218 ou mais novo porque os m´dulos DBD mais antigos usam a chamada
a o
obsoleta mysql_drop_db(). A vers˜o 2.1022 ou mais nova ´ recomendada.
a e
• Na vers˜o RAND(seed) retorna uma s´rie de n´mero randˆmicas diferente que na 3.23;
a e u o
isto foi feito para uma diferencia¸˜o maior de RAND(seed) e RAND(seed+1).
ca
• O tipo padr˜o retornado por IFNULL(A,B) agora est´ configurado para ser o mais ’geral’
a a
´ ´ string, REAL ou INTEGER).
dos tipos de A e B. (A ordem geral-para-especifco e
Se vocˆ estiver executando o MySQL Server no Windows, veja Se¸˜o 2.5.8 [Atualizando o
e ca
Windows], P´gina 132. Se vocˆ estiver usando replica¸˜o, veja Se¸˜o 4.11.2 [Replication
a e ca ca
Implementation], P´gina 380.
a
161. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 127
2.5.3 Atualizando da vers˜o 3.22 para 3.23
a
A Vers˜o 3.23 do MySQL suporta tabelas do novo tipo MyISAM e do antigo tipo ISAM. Vocˆ
a e
n˜o necessita converter suas antigas tabelas para us´-las com a vers˜o 3.23. Por padr˜o,
a a a a
todas novas tabelas ser˜o criadas usando o tipo MyISAM (a menos que vocˆ inicie o mysqld
a e
com a op¸˜o --default-table-type=isam). Vocˆ pode converterr uma tabela ISAM para
ca e
uma formato MyISAM com ALTER TABLE nome_tabela TYPE=MyISAM ou com o script Perl
mysql_convert_table_format.
Os clientes vers˜es 3.22 e 3.21 ir˜o trabalhar sem quaisquer problemas com um servidor
o a
vers˜o 3.23.
a
As seguintes listas dizem o que vocˆ deve conferir quando atualizar para a vers˜o 3.23:
e a
• Todas tabelas que usam o conjunto de caracteres tis620 devem ser corrigidos com
myisamchk -r ou REPAIR TABLE.
• Se vocˆ fizer um DROP DATABASE em um banco de dados ligado simbolicamente, a
e
liga¸˜o e o banco de dados original ser˜o apagados. (Isto n˜o acontece na 3.22 porque
ca a a
o configure n˜o detecta a disponibilidade da chamada de sistema readlink).
a
• OPTIMIZE TABLE agora funciona somente para tabelas MyISAM. Para outros tipos de
tabelas, vocˆ pode usar ALTER TABLE para otimizar a tabela. Durante o OPTIMIZE
e
TABLE a tabela ´, agora, bloqueada para prevenir que seja usada por outras threads.
e
• O cliente MySQL mysql ´, agora, inicializado por padr˜o com a op¸˜o --no-named-
e a ca
commands (-g). Esta op¸˜o pode ser desabilitada com --enable-named-commands
ca
(-G). Isto pode causar problemas de imcompatibilidade em alguns casos, por exemplo,
em scripts SQL que usam comandos sem ponto e v´ irgula! Comandos longos continuam
funcionando.
• Fun¸˜es de data que funcionam em partes de datas (como MONTH()) n˜o retornar´ 0
co a a
para datas 0000-00-00. (No MySQL 3.22 estas fun¸˜es retornam NULL.)
co
• Se vocˆ estiver usando a ordem de classifica¸ao de caracteres alem~ para tabelas ISAM,
e c˜ a
vocˆ deve reparar todas suas tabelas com isamchk -r, porque foram feitas altera¸˜es
e co
na sua ordem de classifica¸˜o!
ca
• O tipo padr˜o de retorno de IF() ir´ agora depender de ambos argumentos e n˜o
a a a
apenas do primeiro argumento.
• Colunas AUTO_INCREMENT n˜o devem ser usadas para armazenar n´meros negativos. A
a u
raz˜o para isto ´ que n´meros negativos causam problemas quando o -1 passa para 0.
a e u
Vocˆ n˜o deve armazenar 0 em uma coluna AUTO_INCREMENT tamb´m; CHECK TABLE ir´
e a e a
reclamar sobre valores 0 porque eles podem alterar se vocˆ fizer um dump e restaurar a
e
tabela. AUTO_INCREMENT ´, agora, tratado em um n´ mais baixo para tabelas MyISAM
e ivel
e ´ muito mais r´pido que antes. Para tabelas MyISAM n´meros antigos tamb´m n˜o
e a u e a
s˜o mais reusados, mesmo se vocˆ apagar algumas linhas da tabela.
a e
• CASE, DELAYED, ELSE, END, FULLTEXT, INNER, RIGHT, THEN e WHEN agora s˜o palavras
a
reservadas.
• FLOAT(X) agora ´ um tipo de ponto flutuante verdadeiro e n˜o um valor com um
e a
n´mero fixo de decimais.
u
• Quando estiver declarando colunas usando o tipo DECIMAL(tamanho,dec, o argumento
tamanho n˜o inclui mais um lugar para o s´
a imbolo do ponto decimal.
162. 128 MySQL Technical Reference for Version 5.0.0-alpha
• Uma string TIME agora deve estar em um dos seguintes formatos: [[[DAYS]
[H]H:]MM:]SS[.fraction] ou [[[[[H]H]H]H]MM]SS[.fraction]
• LIKE agora compara strings usando as mesmas regras de compara¸˜o de caracteres
ca
que o operador ’=’. Se vocˆ precisa do antigo compartamento, vocˆ pdoe compilar o
e e
MySQL com a op¸˜o CXXFLGAS=-DLIKE_CMP_TOUPPER.
ca
• REGEXP agora ´ caso insensitivo se nenhuma das strings forem bin´rias.
e a
• Quando for necess´rio dar manuten¸˜o ou reparar tabelas MyISAM ‘.MYI’ deve ser usado
a ca
a instru¸˜o CHECK TABLE ou o comando myisamchk. Para tabelas ISAM (.ISM), use o
ca
comando isamchk
• Se desejar que os arquivos mysqldump sejam compat´ iveis entre as vers˜es 3.22 e 3.23
o
do MySQL, n˜o deve ser usados as op¸˜es --opt ou --full com o mysqldump.
a co
• Confira todas suas chamadas ` DATE_FORMAT() para ter certeza que exista um ‘%’ antes
a
de cada caractere formatador. (Vers˜es mais antigas que o MySQL 3.22 aceitaivam esta
o
sintaxe.)
• mysql_fetch_fields_direct() agora ´ uma fun¸˜o (era uma macro) e ela retorna um
e ca
ponteiro para um MYSQL_FIELD no lugar de um MYSQL_FIELD.
• mysql_num_fields() n˜o pode mais ser usada em um objeto MYSQL* (agora ´ uma
a e
fun¸˜o que obtem valores MYSQL_RES* como um argumento). Com um objeto MYSQL*
ca
agora voce deve usar mysql_field_count().
• No MySQL Vers˜o 3.22, a sa´ de SELECT DISTINCT ... era na maioria das vezes
a ida
ordenada. Na Vers˜o 3.23, vocˆ deve usar GROUP BY ou ORDER BY para obter a sa´
a e ida
ordenada.
• SUM() agora retorna NULL, em vez de 0 se n˜o existir registros coincidentes. Isto ´ de
a e
acordo com o ANSI SQL.
• Um AND ou OR com valores NULL agora retornam NULL no lugar de 0. Isto afetar´, em a
grande parte, pesquisas que usam NOT em uma express˜o AND/OR como NOT NULL =
a
NULL.
• LPAD() e RPAD() reduzir˜o a string resultante se ela for maior que o tamanho do
a
argumento.
2.5.4 Atualizando da vers˜o 3.21 para 3.22
a
Nada que afetaria a compatibilidade foi alterada entre a vers˜o 3.21 e 3.22. A unica difi-
a ´
culdade ´ que novas tabelas que s˜o criadas com colunas do tipo DATE usar˜o a nova forma
e a a
de armazenar a data. Vocˆ n˜o pode acessar esses novos campos com uma vers˜o antiga de
e a a
mysqld.
Depois de instalar o MySQL vers˜o 3.22, vocˆ deve iniciar o novo servidor e depois executar
a e
o script mysql_fix_privilege_tables. Isto adicionar´ os novos privil´gios que vocˆ pre-
a e e
cisar´ para usar o comando GRANT. Se vocˆ se esquecer disto, sera retornado o erro Access
a e
denied quando vocˆ tentar usar ALTER TABLE, CREATE INDEX ou DROP INDEX. O procedi-
e
mento para atualizar a tabela de permiss˜es est´ descrito em Se¸˜o 2.5.6 [Upgrading-grant-
o a ca
tables], P´gina 130.
a
A interface API C para mysql_real_connect() foi alterada. Se vocˆ tem um programa
e
cliente antigo que chama essa fun¸˜o, vocˆ deve colocar um 0 para o novo argumento db (ou
ca e
163. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 129
recodificar o cliente para enviar o elemento db para conex˜es mais r´pidas). Vocˆ tamb´m
o a e e
deve chamar mysql_init() antes de chamar mysql_real_connect()! Esta altera¸˜o foi ca
feita para permitir ` nova fun¸˜o mysql_options() salvar op¸˜es na estrutura do manipu-
a ca co
lador do MYSQL.
A vari´vel key_buffer do mysqld foi renomeada para key_buffer_size, mas vocˆ ainda
a e
pode usar o antigo nome nos seus arquivos de inicializa¸˜o.
ca
2.5.5 Atualizando da vers˜o 3.20 para 3.21
a
Se vocˆ estiver executando uma vers˜o mais antiga que a Vers˜o 3.20.28 e deseja mudar
e a a
para a vers˜o 3.21 vocˆ deve fazer o seguinte:
a e
Inicie o servidor mysqld vers˜o 3.21 com a op¸˜o --old-protocol para us´-lo com clientes
a ca a
de uma distribui¸˜o da vers˜o 3.20 Neste caso, a nova fun¸˜o cliente mysql_errno() n˜o
ca a ca a
ir´ retornar erro do servidor, somente CR_UNKNOWN_ERROR (mas isto funciona para erros de
a
clientes) e o servidor usa a forma fun¸˜o password() anterior a 3.21 para verifica¸˜o, ao
ca ca
inv´s do novo m´todo.
e e
Se vocˆ NAO
e ˜ estiver usando a op¸˜o --old-protocol para mysqld, vocˆ precisar´ fazer as
ca e a
seguir altera¸˜es:
co
• Todo o c´digo cliente deve ser recompilado. Se vocˆ usa o ODBC, deve obter o novo
o e
driver MyODBC 2.x.
• O script scripts/add_long_password deve ser executado para converter o campo
Password na tabela mysql.user para CHAR(16).
• Todas as senhas devem ser reatribuidas na tabela mysql.user (para obter 62-bits no
lugar de senhas 31-bits).
• O formato das tabelas n˜o foi alterado, ent˜o n˜o ´ preciso converter nenhuma tabela.
a a a e
A vers˜o do MySQL 3.20.28 e superiores podem manipular o novo formato da tabela de
a
usu´rios sem afetar os clientes. Se vocˆ tem uma vers˜o do MySQL mais nova que 3.20.28,
a e a
senhas n˜o ir˜o mais funcionar se vocˆ converter a tabela de usuaios. Por seguran¸a, vocˆ
a a e c e
primeiro deve fazer uma atualiza¸˜o para a vers˜o 3.20.28, pelo menos, e ent˜o atualizar
ca a a
para a vers˜o 3.21.
a
O novo c´digo cliente trabalha com um servidor mysqld 3.20.x, portanto se houver proble-
o
mas com 3.21.x vocˆ deve usar o antigo servidor 3.20.x sem a necessidade de recompilar os
e
clientes novamente.
Se vocˆ n˜o est´ usando a op¸˜o --old-protocol para o mysqld, antigos clientes n˜o
e a a ca a
poder˜o se conectar e exibir˜o a seguinte mensagem de erro:
a a
ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
A nova interface PERL DBI/DBD tamb´m suporta a antiga interface mysqlperl. A unica
e ´
altera¸˜o que deve ser feita se vocˆ usa o mysqlperl ´ alterar os argumentos para a fun¸˜o
ca e e ca
connect(). Os novos argumentos s˜o: host, database, user, password (note que os
a
argumentos user e password foram alterados de lugar). Veja Se¸˜o 12.5.2 [Perl DBI Class],
ca
P´gina 877.
a
As seguintes altera¸˜es podem afetar consultas em antigas aplica¸˜es:
co co
• HAVING deve ser especificada antes de qualquer cl´usula ORDER BY.
a
164. 130 MySQL Technical Reference for Version 5.0.0-alpha
• Os parˆmetros para LOCATE() foram trocados.
a
• Agora existem algumas palavras reservadasi novas. As mais not´veis s˜o DATE TIME e
a a
TIMESTAMP.
2.5.6 Atualizando a Tabela de Permiss˜es
o
Algumas distribui¸˜es introduzem altera¸˜es a estrutura da tabelas de permiss˜es (a tabela
co co o
no banco de dados mysql) para adicionar novos privil´gios ou recursos. Para ter certeza
e
de que as suas tabelas de permiss˜es est˜o corretas quando vocˆ atualizar para uma nova
o a e
vers˜o do MySQL, vocˆ deve atualizar a sua tabela de permiss˜o tamb´m.
a e a e
Em sistemas Unix ou semelhantes, atualize a tabela de permiss˜es executando o script
o
mysql_fix_privilege_tables:
shell> mysql_fix_privilege_tables
Vocˆ deve executar este script enquanto o servidor est´ em execu¸˜o. Ele tenta se conectar
e a ca
ao servidor na m´quina local como root. Se sua conta root exige uma senha, indique a
a
senha na linha de comando. Para o MySQL 4.1 e acima, especifique a senha assim:
shell> mysql_fix_privilege_tables --password=senha_root
Antes do MySQL 4.1, especifique a senha desta forma:
shell> mysql_fix_privilege_tables senha_root
O script realiza mysql_fix_privilege_tables qualquer a¸˜o necess´ria para converter sua
ca a
tabela de permiss˜es para o formato atual. Vocˆ pode ver alguns avisos Duplicate column
o e
name, durante a execu¸˜o, eles podem ser ignorados.
ca
Depois de executar o script, pare o servidor e o reinicie.
No Windows, n˜o existe uma modo f´cil de se atualizar a tabela de permiss˜es at´ o MySQL
a a o e
4.0.15. A partir desta vers˜o, as distribui¸˜es do MySQL incluem um script SQL mysql_
a co
fix_privilege_tables.sql que vocˆ pode executar usando o cliente mysql. Se sua in-
e
stala¸˜o do MySQL est´ localizada em ‘C:mysql’, o comando se parecer´ com este:
ca a a
C:mysqlbin> mysql -u root -p mysql
mysql> SOURCE C:mysqlscriptsmysql_fix_privilege_tables.sql
Se sua instala¸˜o est´ localizada em algum outro diret´rio, ajuste o caminha apropriada-
ca a o
mente.
O comando ir´ lhe pedir a senha do root; digite-a quando pedido.
a
Como no procedimento com o Unix, vocˆ pode ver alguns avisos Duplicate column name
e
enquanto o mysql processa as instru¸˜es no script mysql_fix_privilege_tables.sql; eles
co
podem ser ignorados.
Depois de executar o script, para o servidor e reinicie-o.
2.5.7 Atualizando para outra arquitetura
Se vocˆ estiver usando o MySQL Vers˜o 3.23, vocˆ pode copiar os arquivos .frm, .MYI
e a e
e .MYD para tabelas MyISAM entre diferentes arquiteturas que suportem o mesmo formato
165. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 131
de ponto flutuante. (O MySQL cuida de cada detalhe de troca de bytes.) Veja Se¸˜o 7.1
ca
[MyISAM Tables], P´gina 630.
a
Os arquivos ISAM de dados e ´indices (‘*.ISD’ e ‘*.ISM’ respectivamente) s˜o dependentes
a
da arquitetura e em alguns casos dependentees do Sistema Operacional. Se vocˆ deseja
e
mover suas aplica¸˜es para outra m´quina que tem uma arquitetura ou SO diferentes da
co a
sua m´quina atual, vocˆ n˜o deve tentar mover um banco de dados simplesmente copiando
a e a
os arquivos para a outra m´quina. Use o mysqldump.
a
Por padr˜o, o mysqldump ir´ criar um arquivo contendo declara¸˜es SQL. Vocˆ pode ent˜o
a a co e a
transferir o arquivo para a outra m´quina e aliment´-la como uma entrada para o cliente
a a
mysql.
Utilize mysqldump --help para ver quais op¸˜es est˜o dispon´
co a iveis. Se vocˆ est´ movendo
e a
os dados para uma vers˜o mais nova do MySQL, vocˆ deve usar mysqldump --opt com a
a e
nova vers˜o para obter uma descarga r´pida e compacta.
a a
A mais f´cil (mas n˜o a mais r´pida) forma para mover um banco de dados entre duas
a a a
m´quinas ´ executar os seguintes comandos na m´quina em que o banco de dados se en-
a e a
contra:
shell> mysqladmin -h ’nome da outra maquina’ create nome_bd
shell> mysqldump --opt nome_bd
| mysql -h ’nome da outra maquina’ nome_bd
Se vocˆ deseja copiar um banco de dados de um m´quina remota sobre uma rede lenta,
e a
pode ser usado:
shell> mysqladmin create nome_bd
shell> mysqldump -h ’nome de outra maquina’ --opt --compress nome_bd
| mysql nome_bd
O resultado pode tamb´m ser armazenado em um arquivo, depois transfira o arquivo para a
e
m´quina destino e carregue o arquivo no banco de dados. Por exemplo vocˆ pode descarregar
a e
um banco de dados para um arquivo na m´quina origem desta forma:
a
shell> mysqldump --quick nome_bd | gzip > nome_bd.contents.gz
(O arquivo criado neste exemplo est´ compactado.) Transfria o arquivo contendo o conte´do
a u
do banco de dados para a m´quina destino e execute estes comandos:
a
shell> mysqladmin create nome_bd
shell> gunzip < nome_bd.contents.gz | mysql nome_bd
Tamb´m pode ser usado mysqldump e mysqlimport para ajudar na transferˆncia do banco de
e e
dados. Para grandes tabelas, isto ´ muito mais r´pido do que usar simplesmente mysqldump.
e a
Nos comandos abaixo, DUMPDIR representa o caminho completo do diret´rio que vocˆ utiliza
o e
para armazenar a sa´ de mysqldump.
ida
Primeiro, crie o diret´rio para os arquivos de sa´ e descarregue o banco de dados:
o ida
shell> mkdir DUMPDIR
shell> mysqldump --tab=DUMPDIR nome_bd
Depois transfira os arquivo no diret´rio DUMPDIR para algum diret´rio correspondente na
o o
m´quina destino e carregue os arquivos no MySQL assim:
a
shell> mysqladmin create nome_bd # cria o banco de dados
shell> cat DUMPDIR/*.sql | mysql nome_bd # cria tabelas no banco de dados
166. 132 MySQL Technical Reference for Version 5.0.0-alpha
shell> mysqlimport nome_bd DUMPDIR/*.txt # carrega dados nas tabelas
N˜o se esque¸a de copiar o banco de dados mysql tamb´m, porque ´ nele que as tabelas
a c e e
de permiss˜es (user, db e host) s˜o armazenadas. Vocˆ pode ter que executar comandos
o a e
como o usu´rio root do MySQL na nova m´quina at´ que vocˆ tenha o banco de dados
a a e e
mysql no lugar.
Depois de importar o banco de dados mysql para a nova m´quina, execute mysqladmin
a
flush-privileges para que o servidor recarregue as informa¸˜es das tabelas de permiss˜es.
co o
2.5.8 Atualizando o MySQL no Windows
Qaundo atualizar o MySQL no Windows, siga os passo abaixo:
1. Fa¸a o download do ultima distribui¸˜o MySQL do Windows.
c ´ ca
2. Escolha uma hora do dia com pouco uso, onde a parada para manuten¸˜o ´ aceit´vel.
ca e a
3. Alerte os usu´rios que ainda est˜o ativos para sua parada de manuten¸˜o.
a a ca
4. Pare o Servidor MySQL em execu¸˜o (por exemplo, com NET STOP mysql ou com o
ca
utilit´rio de Servi¸os se vocˆ estiver exeutando MySQL como um servi¸o, ou com
a c e c
mysqladmin shutdown).
5. Finalize o programa WinMySQLAdmin se ele estiver em execu¸˜o.
ca
6. Execute o script de instala¸˜o do arquivo de distribui¸˜o do Windows, clicando no
ca ca
bot˜o "Install" no WinZip e seguindo os passos da instala¸˜o do script.
a ca
7. Vocˆ pode sobrescrever a sua instala¸˜o antiga do MySQL (normalmente em
e ca
‘C:mysql’), ou instal´-la em um diret´rio diferente, como C:mysql4. Sobrescrever a
a o
instala¸˜o antiga ´ o recomendado.
ca e
8. Reinicie o servi¸o MySQL Server (por exemplo, com NET START mysql se vocˆ executar
c e
o MySQL como um servi¸o, ou chamado o mysqld diretamente).
c
9. Atualize a tabela de permiss˜es. O procedimento est´ descrito em Se¸˜o 2.5.6
o a ca
[Upgrading-grant-tables], P´gina 130.
a
Situa¸˜es de erros poss´
co iveis:
A system error has occurred.
System error 1067 has occurred.
The process terminated unexpectedly.
Este erro significa que seu arquivo ‘my.cnf’ (por padr˜o ‘C:my.cnf’) cont´m uma op¸˜o
a e ca
que n˜o pode ser reconhecido pela MySQL. Vocˆ pode verificar que este ´ o caso tentando
a e e
reiniciar o MySQL com o arquivo ‘my.cnf’ renomeado, por exemplo, para ‘my_cnf.old’
para prevenirt o servidor de us´-lo. Uma vez verificado isto, vocˆ precisa identificar qual
a e
parˆmetro ´ o culpado. Crie um novo arquivo ‘my.cnf’ e mova as partes do arquivo antigo
a e
para ele (reiniciando o servidor depois de mover cada parte) at´ que vocˆ determine qual
e e
op¸˜o est´ fazendo a inicializa¸˜o do servidor falhar.
ca a ca
2.6 Notas espec´
ificas para os Sistemas Operacionais
167. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 133
2.6.1 Notas Windows
Esta se¸˜o descreve assuntos espec´
ca ificos para usar MySQL no Windows.
2.6.1.1 Conectando em um MySQL Rematamente a Windows
Utilizando SSH
Aqui temos notas sobre como conectar a um servidor MySQL atrav´s de uma conex˜o
e a
remota e segura usando o SSH (por David Carlson dcarlson@mplcomm.com:
1. Instale um cliente SSH na sua m´quina Windows. Como um usu´rio, o melhor op¸˜o
a a ca
paga que encontrei ´ o SecureCRT da http://www.vandyke.com/. Outra op¸˜o ´ o f-
e ca e
secure da http://www.f-secure.com/. Vocˆ tamb´m pode encontrar algumas vers˜es
e e o
livres no Google em http://directory.google.com/Top/Computers/Security/Products_
and_Tools/Cryptography/SSH/Clients/Windows/.
2. Inicie seu cliente SSH Windows. Configure Host_Name = IP_ou_Nome_servidormysql.
Configure userid=seu_userid para logar no seu servidor. Este valor userid n˜o pode
a
ser o mesmo do nome do usu´rio se sua conta MySQL.
a
3. Configure a porta de acesso. E tamb´m fa¸a um acesso remoto (Configure local_
e c
port: 3306, remote_host: ip_ou_nomeservidormysql, remote_port: 3306 ) ou um
acesso local (configure port: 3306, host: localhost, remote port: 3306).
4. Salve tudo, sen˜o vocˆ ter´ que refazer tudo da pr´xima vez.
a e a o
5. Logue ao seu servidor com a sess˜o SSH que acabou de ser criada.
a
6. Na sua m´quina Windows, inicie algumas aplica¸˜es ODBC (como o Access).
a co
7. Crie um novo arquivo no Windows e ligue ao MySQL usando o driver ODBC da mesma
forma que vocˆ normalmente faz, EXCETO pelo fato de digitar localhost para a
e
m´quina servidora MySQL — n˜o nomeservidormysql.
a a
Vocˆ agora deve ter uma conex˜o ODBC ao MySQL, criptografada com SSH.
e a
2.6.1.2 Distribuindo Dados Entre Diferentes Discos no Win32
A partir do MySQL vers˜o 3.23.16, o mysqld-max e servidores mysql-max-nt na distribui¸˜o
a ca
MySQL s˜o compilados com a op¸˜o -DUSE_SYMDIR. Isto permite que vocˆ coloque um di-
a ca e
ret´rio de banco de dados em discos diferentes adicionando um link simb´lico para ele. (Isto
o o
´ parecido com o a com que links simb´licos funcionam no Unix, embora o procedimento
e o
para configurar o link seja diferente).
No Windows, vocˆ cria um link simb´lico para um banco de dados MySQL criando um
e o
arquivo que contem o caminho para o diret´rio de destino. Salve o arquivo no diret´rio
o o
de dados usando o nome de arquivo ‘nome_bd.sym’, onde nome_bd ´ o nome do banco de
e
dados.
Por exemplo, se o diret´rio de dados do MySQL ´ ‘C:mysqldata’ e vocˆ precisa
o e e
ter o banco de dados foo localizado em ‘D:datafoo’, vocˆ deve criar o arquivo
e
‘C:mysqldatafoo.sym’ que contˆm o caminho D:datafoo. Depois disto, todas
e
tabelas criadas no banco de dados foo ser˜o criadas no ‘D:datafoo’. O diret´rio
a o
‘D:datafoo’ deve existir para ele funcionar. Note tamb´m que o link simb´lico n˜o ser´
e o a a
168. 134 MySQL Technical Reference for Version 5.0.0-alpha
usado se um diret´rio com o nome do banco de dados existe no diret´rio de dados MySQL.
o o
Isto significa que se vocˆ j´ tem um diret´rio de banco de dados chamado ‘foo’ no direorio
e a o
de dados, vocˆ deve movˆ-lo para ‘D:data’ antes do link simb´lico ser efetivado. (Para
e e o
evitar problemas, o servidor n˜o deve estar executando quando vocˆ mover o diret´rio do
a e o
banco de dados.)
Note que devido a penalidade que vocˆ tem na velocidade quando abre todas as tabelas,
e
n´s n˜o habilitamos esta op¸˜o por padr˜o, mesmo se vocˆ compilar o MySQL com suporte
o a ca a e
a isto. Para habilitar links simb´licos vocˆ deve colocar no seu arquivo my.cnf ou my.ini
o e
a seguinte entrada:
[mysqld]
symbolic-links
No MySQL 4.0 --simbolic-links est´ habilitado por padr˜o. Se vocˆ n˜o precisa us´-lo
a a e a a
vocˆ pode usar a op¸˜o skip-symbolic-linkd.
e ca
2.6.1.3 Compilando clientes MySQL no Windows
Em seus arquivos fontes, vocˆ deve incluir ‘my_global.h’ antes de ‘mysql.h’:
e
#include <my_global.h>
#include <mysql.h>
‘my_global.h’ inclui qualquer outro arquivo necess´rio para compatibilidade de Windows
a
(como o ‘windows.h’) se o arquivo ´ compilado no Windows.
e
Vocˆ tamb´m pode ligar seu c´digo coma biblioteca dinˆmica ‘libmysq.lib’, que ´ apenas
e e o a e
um wrapper para carregar em ‘libmysql.dll’ sobre demanda, ou ligar com a biblioteca
est´tica ‘mysqlclient.lib’.
a
Perceba que como as bibliotecas clientes do MySQL s˜o compiladas como bibliotecas
a
threaded, vocˆ tamb´m deve compilar seu c´digo para ser multi-threaded!
e e o
2.6.1.4 MySQL para Windows Comparado com o MySQL para
Unix
O MySQL para Windows tem provado ser muito est´vel. Esta vers˜o do MySQL tem os
a a
mesmos recursos que sua vers˜o correspondente Unix com as seguintes exce¸˜es:
a co
Win95 e threads
O Win95 perde aproximadamente 200 bytes de mem´ria principal para cada
o
thread criada. Cada conex˜o no MySQL cria uma nova thread, portanto vocˆ
a e
n˜o deve executar o mysqld por um longo tempo no Win95 se seu servidor lida
a
com v´rias conex˜es! WinNT e Win98 n˜o sofrem deste bug.
a o a
Leituras simultˆneas
a
O MySQL depende das chamadas pread() e pwrite() para estar apto a
misturar INSERT e SELECT. Atualmente n´s usamos mutexes para emular
o
pread()/pwrite(). N´s iremos, a longo prazo, trocar o n´ da interface de
o ivel
arquivos com uma interface virtual para que n´s possamos usar a interface
o
readfile()/writefile() no NT/2000/XP para obter mais velocidade. A
implementa¸˜o atual limita o n´mero de arquivos abertos que o MySQL
ca u
169. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 135
pode usar para 1024, o que significa que vocˆ n˜o conseguir´ executar tantas
e a a
threads simultˆneas no NT/2000/XP como no Unix.
a
Leitura de blocos
O MySQL usa uma leitura de blocos para cada conex˜o, que tem as seguintes
a
implica¸˜es:
co
• Uma conex˜o n˜o ir´ ser disconectada automaticamente depois de 8 horas,
a a a
como acontece com a vers˜o Unix do MySQL.
a
• Se uma conex˜o trava, ´ imposs´ a finaliza-la sem matar o MySQL.
a e ivel
• mysqladmin kill n˜o ir´ funcionar em uma conex˜o adormecida.
a a a
• mysqladmin shutdown n˜o pode abortar enquanto existirem conex˜es
a o
adormecidas.
Planejamos corrigir este problema quando nossos desenvolvedores Windows
tiverem conseguido um boa solu¸˜o.
ca
DROP DATABASE
Vocˆ n˜o pode remover um banco de dados que est´ em uso por alguma thread.
e a a
Matando o MySQL do gerenciador de tarefas
Vocˆ n˜o pode matar o MySQL do gerenciador de tarefas ou com o utilit´rio
e a a
shutdown no Win95. Vocˆ deve deslig´-lo com mysqladmin shutdown.
e a
Nomes case-insensitivo
Nomes de arquivos n˜o s˜o caso sensitivo no Windows, portanto, nomes de
a a
bancos de dados e tabelas do MySQL tamb´m n˜o s˜o caso sensitivo no Win-
e a a
dows. A unica restri¸˜o ´ que os nomes de bancos de dados e tabelas devem
´ ca e
usar o mesmo caso em uma senten¸a fornecida. Veja Se¸˜o 6.1.3 [Name case
c ca
sensitivity], P´gina 473.
a
O caracter de diret´rio ‘’
o
Componentes de nomes de caminho no Win95 s˜o separados pelo caracter ‘’ o
a
qual tamb´m ´ o caractere de escape no MySQL. Se vocˆ estiver usando LOAD
e e e
DATA INFILE ou SELECT ... INTO OUTFILE, use nomes de arquivo no estilo Unix
com caracteres ‘/’:
mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE ’C:/tmp/skr.txt’ FROM skr;
Uma alternativa ´ dobrar o caracter ‘/’:
e
mysql> LOAD DATA INFILE "C:tmpskr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE ’C:tmpskr.txt’ FROM skr;
Problems with pipes.
Pipes n˜o funcionam com confian¸a na linha de comando do Windows. Se o
a c
pipe incluir o caracter ^Z / CHAR(24), o Windows achar´ que ele encontrou o
a
fim de um arquivo e abortar´ o programa.
a
Isto ´ um problma principalmente quando se tenta aplicar um log bin´rio como
e a
a seguir:
mysqlbinlog binary-log-name | mysql --user=root
Se vocˆ obter um problema aplicando o log e suspeitar que seja devido a um
e
caracter ^Z/CHAR(24) vocˆ pode usar a seguinte alternativa:
e
170. 136 MySQL Technical Reference for Version 5.0.0-alpha
mysqlbinlog binary-log-file --result-file=/tmp/bin.sql
mysql --user=root --eexecute "source /tmp/bin.sql"
O ultimo comando pode tamb´m ser usado para leitura em qualquer arquivo
´ e
sql que contenha dados bin´rios.
a
erro: Can’t open named pipe
Se vocˆ utiliza um servidor MySQL vers˜o 3.22 no NT com o os programas
e a
clientes MySQL mais novos, ser´ apresentado o seguinte erro:
a
error 2017: can’t open named pipe to host: . pipe...
Isto ocorre porque a vers˜o do MySQL usa named pipes no NT por padr˜o.
a a
Vocˆ pode evitar este erro usando a op¸˜o --host=localhost para os novos
e ca
clientes MySQL ou criar um arquivo de op¸˜es ‘c:my.cnf’ que contenha a
co
seguinte informa¸˜o:
ca
[client]
host = localhost
A partir da vers˜o 3.23.50, named pipes s˜o habilitados somente se o mysqld-nt
a a
ou mysqld-nt-max for iniciado com a op¸˜o --enable-name-pipe.
ca
Erro Access denied for user
Se vocˆ tenta executar um programa cliente MySQL para conectar a um servi-
e
dor em execu¸˜o na mesma m´quina, nas obtem o erro Access denied for
ca a
user: ’some-user@unknown’ to database ’mysql’ quando acessar um servi-
dor MySQL na mesma m´quina, signifca que o MySQL n˜o pode resolver seu
a a
nome de m´quina corretamente.
a
Para corrigir isto, vocˆ deve criar um arquivo ‘Windowshosts’ com a seguinte
e
informa¸˜o:
ca
127.0.0.1 localhost
ALTER TABLE
Enquanto vocˆ est´ executando uma instru¸˜o ALTER TABLE, a tabela est´ blo-
e a ca a
queada para ser usado por outras threads. Isto ocorre devido ao fato de que no
Windows, vocˆ n˜o pode deletar um aruivo que est´ em uso por outra threads.
e a a
No futuro, podemos encontrar algum modo de contornarmos este problema.
DROP TABLE
DROP TABLE em uma tabela que est´ em uso por uma tabela MERGE n˜o fun-
a a
cionar´ no Windows porque o manipulador do MERGE faz o mapeamento da
a
tabela escondido da camada superior do MySQL. Como o Windows n˜o per- a
mite que vocˆ delete arquivos que est˜o abertos, vocˆ primeiro deve descarregar
e a e
todas as tabelas MERGE (com FLUSH TABLES) ou apagar a tabela MERGE antes de
deletar a tabela. Corrigiremos isto assim que introduzirmos views.
DATA DIRECTORY e INDEX DIRECTORY
As op¸˜es DATA DIRECTORY e INDEX DIRECTORY para CREATE TABLE s˜o igno-
co a
radas no Windows, porque ele n˜o suporta links simb´licos.
a o
Aqui est˜o alguns assuntos em aberto para qualquer um que queira melhorar o MySQL no
a
Windows:
• Adicionar alguns ´ icones agrad´veis para o start e shutdown na instala¸˜o do MySQL.
a ca
171. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 137
• Seria muito interessante conseguir matar o mysqld do gerenciador de tarefas. Para o
momento, deve ser usado o mysqladmin shutdown.
• Portar o readline para Windows para uso na ferramenta de linha de comando mysql.
• Vers˜es GUI dos clientes MySQL padr˜es (mysql, mysqlshow, mysqladmin e
o o
mysqldump) seria ´timo.
o
• Seria muito bom se as fun¸˜es de leitura e escrita no socket em ‘net.c’ fosse inter-
co
rompiveis. Isto tornaria poss´
´ ivel matar threads abertas com mysqladmin kill no
Windows.
• Adicionar macros para usar os m´todos mais r´pidos de incremento/decremento de
e a
threads seguras fornecidos pelo Windows.
2.6.2 Notas Linux (Todas as vers˜es)
o
As notas abaixo a respeito da glibc aplicam-se somente na situa¸˜o quando o MySQL ´
ca e
construido por vocˆ mesmo. Se vocˆ est´ executando Linux em uma m´quina x86, na
e e a a
maioria dos casos ´ muito melhor para vocˆ usar nosso bin´rio. N´s ligamos nossos bin´rios
e e a o a
com a melhor vers˜o alterada da glibc, podemos escolher as melhores op¸˜es do compilador,
a co
em uma tentativa de torn´-la funcional para um servidor muito exigido. Para um usu´rio
a a
comum, mesmo para configura¸˜es com v´rias conex˜es concorrentes e/ou tabelas excedendo
co a o
o limite de 2 GB, nosso bin´rio ´, na maioria das vezes, a melhor escolha. Portanto se vocˆ
a e e
ler o texto abaixo, e est´ em d´vida sobre o que deve fazer, tente usar o nosso bin´rio
a u a
primeiro para ver se ele preenche suas necessidades, e preocupe-se com uma constru¸˜o ca
pr´pria apenas se vocˆ descobrir que nosso bin´rio n˜o ´ bom o suficiente para vocˆ. Neste
o e a a e e
caso, ir´
iamos apreciar se fosse feito uma observa¸˜o sobre isto, para que possamos fazer
ca
uma melhor vers˜o bin´ris da pr´xima vez.
a a o
O MySQL usa LinuxThreads no Linux. Se vocˆ usa uma vers˜o do Linux que n˜o tenha
e a a
a glibc2, vocˆ deve instalar LinuxThreads antes de tentar compilar o MySQL. Vocˆ pode
e e
obter o LinuxThreads em http://www.mysql.com/downloads/os-linux.html.
NOTA: Temos visto alguns problemas estranhos com o Linux 2.2.14 e MySQL em sistemas
SMP; Se vocˆ tem um sistema SMP, recomendamos a atualiza¸˜o para o Linux 2.4! Seu
e ca
sistema ficar´ mais r´pido e mais est´vel.
a a a
Perceba que as vers˜es da glibc iguais ou anteriores ` Vers˜o 2.1.1 tem um bug fatal no
o a a
tratamento do pthread_mutex_timedwait, que ´ usado quando vocˆ executar instru¸˜es
e e co
INSERT DELAYED. Recomendamos n˜o usar INSERT DELAYED antes de atualizar a glibc.
a
Se vocˆ planeja ter mais de 1000 conex˜es simultˆneas, ser´ necess´rio fazer algumas
e o a a a
altera¸˜es na LinuxThreads, recompile-a e religue o MySQL ao novo ‘libpthread.a’.
co
Aumente PTHREAD_THREADS_MAX em ‘sysdeps/unix/sysv/linux/bits/local_lim.h’
para 4096 e abaixe o STACK_SIZE no ‘linuxthreads/internals.h’ para 256KB. Os
caminhos s˜o relativos ` raiz da glibc. Note que o MySQL n˜o ser´ est´vel com cerca de
a a a a a
600-1000 conex˜es se o valor de STACK_SIZE for o padr˜o de 2MB.
o a
Se vocˆ tiver um problema com o MySQL, no qual ele n˜o consiga abrir v´rios arquivos ou
e a a
conex˜es, pode ser que vocˆ n˜o tenha configurado o Linux para lidar com o n´mero de
o e a u
arquivos suficiente.
No Linux 2.2 e posteriores, vocˆ pode conferir o valor para a aloca¸˜o dos arquivos fazendo:
e ca
172. 138 MySQL Technical Reference for Version 5.0.0-alpha
cat /proc/sys/fs/file-max
cat /proc/sys/fs/dquot-max
cat /proc/sys/fs/super-max
Se vocˆ possui mais de 16M de mem´ria, deve ser adicionado o seguinte no seu script de
e o
boot (ex. ‘/etc/rc/boot.local’ no SuSE Linux):
echo 65536 > /proc/sys/fs/file-max
echo 8192 > /proc/sys/fs/dquot-max
echo 1024 > /proc/sys/fs/super-max
Vocˆ tamb´m pode executar os comandos acima da linha de comando como root, mas
e e
neste caso, os antigos limites voltar˜o a ser usados na pr´xima vez que o computador for
a o
reiniciado.
De forma alternativa, vocˆ pode configurar estes parˆmteros durante a inicializa¸˜o usando a
e a ca
ferramenta sysctl, que ´ usada por muitas distribui¸˜es Linux (No SuSE a partir da vers˜o
e co a
8.0). Apenas grave os seguintes valores em um arquivo chamado ‘/etc/sysctl.conf’:
# Aumente alguns valores para o MySQL
fs.file-max = 65536
fs.dquot-max = 8192
fs.super-max = 1024
You should also add the following to ‘/etc/my.cnf’:
[mysqld_safe]
open-files-limit=8192
Os parˆmetros acima permitem o MySQL criar at´ 8192 conex˜es + arquivos.
a e o
A constante STACK_SIZE na LinuxThreads controla o espa¸amento das pilhas threads no
c
espa¸o de endere¸amento. Ela necessita ser grande o bastante para que tenha espa¸o o
c c c
suficiente para a pilha de cada thread, mas pequena o bastante para manter a pilha de al-
guma thread executando dos dados globais mysqld. Infelizmente, a implementa¸˜o Linux de
ca
mmap(), como descobrimos em experiˆncias, ir´ desmapear uma regi˜o j´ mapeada se vocˆ
e a a a e
solicitar o mapeamento de um endere¸o j´ em uso, zerando os dados de toda a p´gina ao
c a a
inv´s de retoernar. um erro. Portanto a seguran¸a do mysqld ou qualquer outra aplica¸˜o
e c ca
baseada em threads depende do comportamento gentil do c´digo que cria as threads. O
o
usu´rio deve tomar medidas para certirficar-se que o n´mero de threads em funcionamento
a u
em qualquer hora seja suficientemente baixo para que as pilhas das threads permane¸am c
longe do monte global. Com mysqld vocˆ deve refor¸ar este comportamento "gentil" con-
e c
figurando um valor razo´vel para a vari´vel max_connections.
a a
Se vocˆ mesmo construiu o MySQL e n˜o deseja confus˜es corrigindo LinuxThreads, vocˆ
e a o e
deve configurar max_connections para um valor m´ximo de 500. Ele ainda deve ser menor
a
se vocˆ tiver uma chave grande para o buffer, grandes tabelas heap, ou outras coisas que
e
fazem o mysqld alocar muita mem´ria ou se vocˆ estiver executando um kernel 2.2 com o
o e
patch de 2GB. Se vocˆ estiver usando nosso bin´rio ou RPM vers˜o 3.23.25 ou posterior,
e a a
vocˆ pode seguramente configurar max_connections para 1500, assumindo que n˜o h´
e a a
uma grande chave de buffer ou tabelas heap com grande quantidade de dados. Quanto
mais vocˆ reduz STACK_SIZE em LinuxThreads mais threads vocˆ pode criar seguramente.
e e
Recomendamos os valores entre 128K e 256K.
Se vocˆ usa v´rias conex˜es simultˆneas, vocˆ pode sofrer com um "recurso" do kernel
e a o a e
2.2 que penaliza um processo por bifurcar-se ou clonar um filho na tentativa de prevenir
173. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 139
um ataque de separa¸˜o. Isto faz com que o MySQL n˜o consiga fazer uma bom
ca a
escalonamento, quando o n´mero de clientes simultˆneos cresce. Em sistemas com CPU
u a
unica, temos visto isto se manifestar em uma cria¸˜o muito lenta das threads, tornando
´ ca
a conex˜o ao MySQL muito lenta. Em sistemas de m´ltiplas CPUs, temos observado
a u
uma queda gradual na velocidade das consultas quando o n´mero de clientes aumenta.
u
No processo de tentar encontrar uma solu¸˜o, recebemos um patch do kernel de um de
ca
nossos usu´rios, que alega fazer muita diferen¸a para seu site. O patch est´ dispon´
a c a ivel
aqui (http://www.mysql.com/Downloads/Patches/linux-fork.patch). Atualmente
temos feito testes extensivos deste patch nos sistemas de desenvolvimento e produ¸˜o.ca
A performance do MySQL obtem uma melhora significativa, sem causar problemas e
atualmente o recomendamos para nossos usu´rios que continuando trabalhando com
a
servidores muito carregados em kernels 2.2. Este detalhe foi corrigido no kernel 2.4,
portanto, se vocˆ n˜o est´ satisfeito com a performance atual do seu sistema, melhor do
e a a
que aplicar um patch ao seu kernel 2.2, pode ser mais f´cil simplesmente atualizar para o
a
2.4, que lhe dar´ tamb´m uma melhora em seu sistemas SMP em adi¸˜o ` corre¸˜o do bug
a e ca a ca
discutido aqui.
Estamos testando o MySQL no kernel 2.4 em uma m´quina com 2 processadores e desco-
a
brimos que o MySQL escalona muito melhor - virtualmente, n˜o h´ nenhuma perda de
a a
desempenho no throughput das consultas at´ cerca de 1000 clientes, e o fator da escala do
e
MySQL (computado com a raz˜o do throughput m´ximo para o thoughput de cada cliente.)
a a
foi de 180%. Temos observado resultados similares em sistemas com 4 processadores - vir-
tualmente n˜o h´ perda de desempenho quando o n´mero de clientes ´ incrementado at´
a a u e e
1000 e o fator da escala foi de 300%. Portanto para um servidor SMP muito carregado n´so
definitivamente recomendamos o kernel 2.4. N´s descobrimos que ´ essencial executar o
o e
processo mysqld com a mais alta prioridade poss´ no kernel 2.4 para obter performance
ivel
m´xima. Isto pode ser feito adicionando o comando renice -20 $$ ao mysqld_safe. Nos
a
nossos testes em uma m´quina com 4 processadores, o aumento da prioridade nos deu 60%
a
de aumento no throughput com 400 clientes.
Atualmente estamos tentando coletar mais informa¸˜es sobre como o MySQL atua no kernel
co
2.4 em sistemas com 4 e 8 processadores. Se vocˆ tem acesso a um sistema deste porte e tem
e
feito alguns benchmarks, por favor envie um email para docs@mysql.com com os resultados
- iremos inclu´
i-los neste manual.
Existe outro detalhe que afeta muito a performance do MySQL, especialmente
em sistemas multi processados. A implementa¸˜o de mutex em LinuxThreads na
ca
glibc-2.1 ´ muito ruim para programas com v´rias threads que travam o mutex
e a
por um tempo curto. Em um sistema SMP, ironicamente, se vocˆ liga o MySQL
e
com LinuxThreads sem modifica¸˜es, removendo processadores da m´quina, a
co a
performance do MySQL ´ melhorada em alguns casos. Para corrigir este compor-
e
tamento, disponibilizamos um patch para glibc 2.1.3, em linuxthreads-2.1-patch (
http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch)
Com a glibc-2.2.2, o MySQL vers˜o 3.23.36 ir´ usar o mutex adaptativo, que ´ muito
a a e
melhor,mesmo que o patch na glibc-2.1.3. Avisamos, entretando, que sobre algumas
condi¸˜es, o c´digo mutex no glibc-2.2.2 overspins, que prejudica a performance do MySQL.
co o
A chance desta condi¸˜o pode ser reduzida mudando a prioridade do processo mysqld para
ca
a prioridade mais alta. N´s tamb´m corrigimos o comportamento overspin com um patch,
o e
´
disponivel em http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch.
174. 140 MySQL Technical Reference for Version 5.0.0-alpha
Ele combina a corre¸˜o do overspin, n´mero m´ximo de threads e espa¸amento das pilhas
ca u a c
em um unico patch. Vocˆ precisar´ aplic´-lo no diret´rio linuxthreads com patch -p0
´ e a a o
</tmp/linuxthreads-2.2.2.patch. Esperamos que seja inclu´ de alguma forma nos
ido
futuros lan¸amentos da glibc-2.2. De qualquer forma, se vocˆ ligar com glibc-2.2.2,
c e
ainda ser´ necess´rio corrigir STACK_SIZE e PTHREAD_THREADS_MAX. Temos esperan¸as que
a a c
os padr˜es ser˜o corrigidos para valores mais aceit´veis para configura¸˜es pesadasa do
o a a co
MySQL no futuro, ent˜o sua constru¸˜o poder´ ser reduzida a ./configure; make; make
a ca a
install.
Recomendamos que vocˆ use os patches acima para construir uma vers˜o est´tica especial
e a a
de libpthread.a e use-a somente para liga¸˜es est´ticas com o MySQL. Sabemos que os
co a
patches s˜o seguros para o MySQL e pode melhorar significamente sua performance, mas n˜o
a a
podemos dizer nada sobre outras aplica¸˜es. Se vocˆ ligar outras aplica¸˜es coma a vers˜o
co e co a
modificada da biblioteca ou construir uma vers˜o alterada compartilhada e instal´-la no seu
a a
sistema, vocˆ estar´ fazendo por sua conta e risco e tenha aten¸˜o com outras aplica¸˜es
e a ca co
que dependem de LinuxThreads.
Se vocˆ passar por problemas estranhos durante a instala¸˜o do MySQL ou com travamentos
e ca
de alguns utilit´rios comuns, ´ muito prov´vel que eles s˜o relacionados a problemas de
a e a a
bibliotecas ou compilador. Se for este o caso, o uso de nosso bin´rio ser´ a solu¸˜o.
a a ca
Um problema conhecido com a distribui¸˜o bin´ria ´ que com antigos sistemas Linux que
ca a e
usam libc (como o RedHat 4.x ou Slackware), vocˆ obter´ alguns problemas n˜o fatais
e a a
com resolu¸˜o de nomes. Veja Se¸˜o 2.6.2.1 [Binary notes-Linux], P´gina 141.
ca ca a
a ´
Quando estiver usando LinuxThreads vocˆ ver´ um minimo de trˆs processos em execu¸˜o.
e e ca
Estes s˜o de fato, threads. Existir´ uma thread para o gerenciador LinuxThreads, uma
a a
thread para lidar com conex˜es e uma thread para tartar de alarmes e sinais.
o
Perceba que o kernel Linux e a biblioteca LinuxThread pode por padr˜o ter apenas 1024
a
threads. Isto significa que vocˆ pode ter at´ 1021 conex˜es ao MySQL em um sistema sem
e e o
corre¸˜o. A p´gina http://www.volano.com/linuxnotes.html cont´m informa¸˜es sobre
ca a e co
como contornar este limite.
Se vocˆ ver um processo mysqld daemon finalizado com ps, isto normalmente significa que
e
vocˆ encontrou um bug no MySQL ou que tenha uma tabela corrompida. Veja Se¸˜o A.4.1
e ca
[Crashing], P´gina 921.
a
Para obter um descarga do core no Linux se o mysqld finalizar com um sinal SIGSEGV, vocˆ
e
pode iniciar o mysqld com a op¸˜o --core-file. Perceba que provavelmente vocˆ tamb´m
ca e e
precisar´ aumentar o core file size adicionando ulimit -c 1000000 para mysqld_safe
a
ou iniciar mysqld_safe com --core-file-sizes=1000000, Veja Se¸˜o 4.8.2 [safe_mysqld],
ca
P´gina 332.
a
Se vocˆ estiver ligando seu pr´prio cliente MySQL e obter o erro:
e o
ld.so.1: ./my: fatal: libmysqlclient.so.4:
open failed: No such file or directory
Quando execut´-los, o problema pode ser evitado com um dos seguintes m´todos:
a e
• Ligue o cliente com a seguinte op¸˜o (no lugar de -Lpath):
ca -Wl,r/path-
libmysqlclient.so.
• Copie libmysqclient.so para ‘/usr/lib’.
175. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 141
• Adicione o caminho do diret´rio onde libmysqlclient.so est´ localizado para a
o a
vari´vel de ambiente LD_RUN_PATH antes de executar seu cliente.
a
Se vocˆ estiver usando o compilador Fujitsu (fcc / FCC) vocˆ ter´ alguns problemas com-
e e a
pilando o MySQL porque os arquivos de cabe¸alho Linux s˜o muito orientados ao gcc.
c a
A seguinte linha configure deve funcionar com fcc/FCC:
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE
-DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib
-K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const
-Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO
’-D_EXTERN_INLINE=static __inline’" ./configure --prefix=/usr/local/mysql
--enable-assembler --with-mysqld-ldflags=-all-static --disable-shared
--with-low-memory
2.6.2.1 Notas Linux para distribui¸˜es bin´rias
co a
O MySQL necessita pelo menos do Linux vers˜o 2.0
a
Aviso: Percebemos que alguns usu´rios do MySQL tiveram serios problemas de estabilidade
a
com o MySQL e o kernel 2.2.14 do Linux. Se vocˆ estiver usando este kernel vocˆ deve
e e
atualiz´-lo para o 2.2.19 (ou posterior) ou para o kernel 2.4. Se vocˆ tiver um gabinete
a e
multi-cpu, ent˜o vocˆ deve considerar seriamente o uso do kernel 2.4 uma vez que ele lhe
a e
trar´ uma melhora significante na velocidade.
a
A vers˜o bin´ria ´ ligada com -static, que significa que vocˆ normalmente n˜o precisa se
a a e e a
preocupar com qual vers˜o das bibliotecas do sistema vocˆ tem. Vocˆ n˜o precisa insta-
a e e a
lar LinuxThreads. Um programa ligado com a op¸˜o -static ´ um pouco maior que um
ca e
programa ligado dinamicamente e tamb´m um pouco mais r´pido (3-5%). Um problema,
e a
entretanto, ´ que vocˆ n˜o pode usar fun¸˜es definidas pelo usu´rio (UDF) com um pro-
e e a co a
grama ligado estaticamente. Se vocˆ for escrever ou usar fun¸˜es UDF (isto ´ algo para
e co e
programadores C ou C++), vocˆ deve compilar o MySQL, usando liga¸˜es dinamicas.
e co
Se vocˆ estiver usando um sistema baseado em libc (em vez de um sistema glibc2), vocˆ,
e e
provavelmente, ter´ alguns problemas com resolu¸˜o de nomes de m´quinas e getpwnam()
a ca a
com a vers˜o bin´ria. (Isto ´ porque o glibc infelizmente depende de algumas bibliotecas
a a e
externas para resolver nomes de m´quinas e getpwent(), mesmo quando compilado com
a
-static). Neste caso, vocˆ provavelmente obter´ a seguinte mensagem de erro quando
e a
executar mysql_install_db:
Sorry, the host ’xxxx’ could not be looked up
ou o seguinte erro quando vocˆ tentar executar mysqld com a op¸˜o --user:
e ca
getpwnam: No such file or directory
Vocˆ pode resolver este problema usando de um dos modos seguintes:
e
• Obtenha uma distribui¸˜o fonte do MySQL (uma distribui¸˜o RPM ou tar.gz) e a
ca ca
instale.
• Execute mysql_install_db --force; Isto n˜o executar´ o teste resolveip no mysql_
a a
install_db. O lado ruim ´ que vocˆ n˜o poder´ usar nomes de m´quinas nas tabelas
e e a a a
de permiss˜es; vocˆ deve usar n´meros IP no lugar (exceto para localhost). Se vocˆ
o e u e
176. 142 MySQL Technical Reference for Version 5.0.0-alpha
estiver usando uma release antiga do MySQL que n˜o suporte --force, vocˆ deve
a e
remover o teste resolveip no mysql_install com um editor.
• Inicie mysqld com su no lugar de usar --user.
As distribui¸˜es bin´rias Linux-Intel e RPM do MySQL s˜o configuradas para o m´ximo
co a a a
´
de desempenho possivel. N´s sempre tentamos usar o compilador mais r´pido e est´vel
o a a
dispon´
ivel.
Suporte MySQL ao Perl exige Perl Vers˜o 5.004 03 ou mais novo.
a
Em algumas vers˜es 2.2 do kernel Linux,vocˆ pode obter o erro Resource temporarily
o e
unavailable quando vocˆ faz v´rias novas conex˜es para um servidor mysqld sobre
e a o
TCP/IP.
O problema ´ que o Linux tem um atraso entre o momento em que vocˆ fecha um socket
e e
TCP/IP at´ que ele seja realmente liberado pelo sistema. Como s´ existe espa¸o para um
e o c
n´mero finito de slots TCP/IP, vocˆ ir´ obter o erro acima se vocˆ tentar fazer muitas novas
u e a e
conex˜es TCP/IP durante um pequeno tempo, como quando vocˆ executa o benchmark do
o e
MySQL ‘test-connect’ sobre TCP/IP.
N´s enviamos emails sobre este problema v´rias vezes para diferentes listas de discuss˜o
o a a
Linux mas nunca conseguimos resolver este problema apropriadamente.
A unica ’corre¸˜o’ conhecida , para este problema ´ usar conex˜es persistentes nos seus
´ ca e o
clientes ou usar sockets, se vocˆ estiver executando o servidor de banco de dados e clientes
e
na mesma m´quina. N´s experamos que o kernel Linux 2.4 corrija este problema no futuro.
a o
2.6.2.2 Notas Linux x86
O MySQL exige a vers˜o 5.4.12 ou mais nova da libc. Sabe-se que funciona com a libc
a
5.4.46. A vers˜o 2.0.6 e posterior da glibc tamb´m deve funcionar. Existem alguns prob-
a e
lemas com os RPMs glibc da RedHat, portanto se vocˆ tiver problemas, confira se existe
e
alguma atualiza¸˜o! Sabemos que os RPMs glibc 2.0.7-19 e 2.0.7-29 funcionam.
ca
Se vocˆ estiver usando o Red Hat 8.0 ou uma nova biblioteca glibc 2.2.x, vocˆ deve iniciar o
e e
mysqld com a op¸˜o --thread-stack=192K (Use -O thread_stack=192K antes do MySQL
ca
4). Se vocˆ n˜o fizer isto o mysqld finlizar´ em gethostbyaddr() porque a nova biblioteca
e a a
glibc exige mais de 128K de mem´ria na pilha para esta chamada. Este tamanho de pilha
o
´ o padr˜o agora no MySQL 4.0.10 e acima.
e a
Se vocˆ est´ usando o gcc 3.0 e acima para compilar o MySQL, vocˆ deve instalar a
e a e
biblioteca libstdc++v3 antes de compilar o MySQL; se vocˆ n˜o fizer isto, vocˆ obter´ um
e a e a
erro sobre um s´
imbolo __cxa_pure_virtual perdido durante a liga¸˜o.
ca
Em algumas distribui¸˜es Linux mais antigas, configure pode produzir um erro como este:
co
Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.
See the Installation chapter in the Reference Manual.
Fa¸a apenas o que a mensagem de erro diz e adicione um caractere sublinhado para a macro
c
_P que tem somente um caractere sublinhado e ent˜o tente novamente.
a
Vocˆ pode obter alguns aviso quando estiver compilando; os mostrados abaixo podem ser
e
ignorados:
177. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 143
mysqld.cc -o objs-thread/mysqld.o
mysqld.cc: In function ‘void init_signals()’:
mysqld.cc:315: warning: assignment of negative value ‘-1’ to
‘long unsigned int’
mysqld.cc: In function ‘void * signal_hand(void *)’:
mysqld.cc:346: warning: assignment of negative value ‘-1’ to
‘long unsigned int’
O mysql.server pode ser encontrado no diret´rio ‘share/mysql’ sob o diret´rio de in-
o o
stala¸˜o MySQL ou no diret´rio ‘support-files’ da ´rvore fonte MySQL.
ca o a
Se o mysqld sempre descarregar um core na inicializa¸˜o, o problema pode ser que vocˆ
ca e
tenha um antigo ‘/lib/libc.a’. Tente renome´-lo depois remova ‘sql/mysqld’ e fa¸a um
a c
novo make install e tente novamente. Este problema foi relatado em algumas instala¸˜es
co
Slackware.
Se vocˆ obter o seguinte erro quando ligar o mysqld, significa que seu ‘libg++.a’ n˜o est´
e a a
instalado corretamente:
/usr/lib/libc.a(putc.o): In function ‘_IO_putc’:
putc.o(.text+0x0): multiple definition of ‘_IO_putc’
Vocˆ pode evitar o uso de ‘libg++.a’ executando configure desta forma:
e
shell> CXX=gcc ./configure
2.6.2.3 Notas Linux SPARC
Em algumas implementa¸˜es, readdir_r() est´ quebrada. O sintoma ´ que SHOW
co a e
DATABASES sempre retorna um conjunto vazio. Isto pode ser corrigido removendo
HAVE_READDIR_R do ‘config.h’ depois de configurar e antes de compilar.
2.6.2.4 Notas Linux Alpha
O MySQL Vers˜o 3.23.12 ´ a primeira vers˜o do MySQL que ´ testada no Linux-Alpha. Se
a e a e
vocˆ planeja usar o MySQL no Linux-Alpha, vocˆ deve ter certeza que possui esta vers˜o
e e a
ou mais nova.
Temos testado o MySQL no Alpha com nossos pacotes de benchmarks e testes, e ele parece
funcinar muito bem.
Quando n´s compilamos o bin´rios MySQL padr˜es, n´s est´vamos usando SuSE 6.4, kernel
o a o o a
2.2.13-SMP, Compilador C Compaq (V6.2-504) e compilador C++ Compaq (V6.3-005) em
uma m´quina Compaq DS20 com um processador Alpha EV6.
a
Vocˆ pode encontrar os compiladores acima em http://www.support.compaq.com/alpha-tools.
e
Usando estes compiladores, em vez do gcc, obtemos 9-14 % de melhora na performance
com MySQL.
Note que a linha de configura¸˜o otimiza o bin´rio para a CPU atual; isto significa que
ca a
vocˆ s´ pode utilizar nosso bin´rio se vocˆ tiver um processador Alpha EV6. N´s tamb´m
e o a e o e
compilamos estaticamente para evitar problemas de bibliotecas.
A partir das pr´ximas distribui¸˜es adicionamos o parˆmetro -arch generic em nossas
o co a
op¸˜es de compila¸˜o, o qual assegura que o bin´rio execute em todos os processadores
co ca a
Alpha. N´s tamb´m compilamos estaticamente para evitar problemas de bibliotecas.
o e
178. 144 MySQL Technical Reference for Version 5.0.0-alpha
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx
CXXFLAGS="-fast -arch generic -noexceptions -nortti"
./configure --prefix=/usr/local/mysql --disable-shared
--with-extra-charsets=complex --enable-thread-safe-client
--with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
Se vocˆ deseja usar egcs a seguinte linha de configura¸˜o funcionou para n´s:
e ca o
CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
--disable-shared
Alguns problemas conhecidos quando executamos o MySQL no Linux-Alpha:
• Debugar aplica¸˜es baseadas em threads como o MysQL n˜o ir´ funcionar com gdb
co a a
4.18. Vocˆ deve fazer download e usar o gdb 5.0!
e
• Se vocˆ tentar ligar o mysqld estaticamente quando usar o gcc, a imagem resultante ir´
e a
descarregar um arquivo core no in´ ˜
icio. Em outras palavras, NAO use --with-mysqld-
ldflags=-all-static com gcc.
2.6.2.5 Notas Linux PowerPC
O MySQL deve funcionar no MkLinux com o mais novo pacote glibc (testado com glibc
2.0.7).
2.6.2.6 Notas Linux MIPS
Para ter o MySQL funcionando no Qube2. (Linux Mips), vocˆ precisar´ das bibliotecas
e a
glibc mais novas (Sabemos que glibc-2.0.7.29C2 funciona). Vocˆ tamb´m deve usar o
e e
compilador egcs C++ (egcs-1.0.2-9, gcc 2.95.2 ou mais nova).
2.6.2.7 Notas Linux IA-64
Para conseguir compilar o MySQL no Linux Ia64, usamos a seguinte linha de compila¸˜o:
ca
Usando gcc-2.96:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
"--with-comment=Official MySQL binary" --with-extra-charsets=complex
No Ia64 os bin´rios do cliente MySQL est˜o usando bibliotecas compartilhadas. Isto
a a
significa se vocˆ instalar nossa distribui¸˜o bin´rias em algum outro lugar diferente de
e ca a
‘/usr/local/mysql’ vocˆ precisa modificar o ‘/etc/ld.so.conf’ ou adicionar o caminho
e
da o diret´rio onde est´ localizado o ‘libmysqlclient.so’ na vari´vel de ambiente LD_
o a a
LIBRARY_PATH.
Veja Se¸˜o A.3.1 [Erros de liga¸˜o], P´gina 918.
ca ca a
179. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 145
2.6.3 Notas Solaris
No Solaris, vocˆ deve ter problemas mesmo antes de descompactar a distribui¸˜o MySQL!
e ca
O tar do Solaris n˜o pode tratar grandes nomes de arquivos, portanto vocˆ pode ver um
a e
erro deste tipo quando descompactar o MySQL:
x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,my
tar: directory checksum error
Neste caso, vocˆ deve usar o GNU tar (gtar) para desempacotar a dis-
e
tribui¸˜o.
ca Vocˆ pode encontrar uma c´pia pr´-compilada para Solaris em
e o e
http://www.mysql.com/downloads/os-solaris.html.
As threads nativas da Sun funcionam somente no Solaris 2.5 e superior. Para a vers˜o 2.4
a
e anteriores, o MySQL ir´ automaticamente usar MIT-pthreads. Veja Se¸˜o 2.3.6 [MIT-
a ca
pthreads], P´gina 106.
a
Se vocˆ obter o seguinte erro de configure:
e
checking for restartable system calls... configure: error can not run test
programs while cross compiling
Isto significa que alguma coisa est´ errada com a instala¸˜o de seu compilador! Neste caso
a ca
vocˆ deve atualizar seu compilador para uma vers˜o mais nova. Vocˆ tamb´m pode resolver
e a e e
este problema inserindo a seguinte linha no arquivo ‘config.cache’:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls=’no’}
Se vocˆ est´ usando Solaris em um SPARC, o compilador recomendado ´ o gcc 2.95.2. Vocˆ
e a e e
pode encontr´-lo em http://gcc.gnu.org/. Perceba que egcs 1.1.1 e gcc 2.8.1 n˜o s˜o
a a a
est´veis no SPARC!
a
A linha do configure recomendado quando usando gcc 2.95.2 ´:
e
CC=gcc CFLAGS="-O3"
CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler
Se vocˆ possui um ultra sparc, vocˆ pode obter 4% a mais de performance adicionando
e e
"-mcpu=v8 -Wa,-xarch=v8plusa" para a CFLAGS e CXXFLAGS.
Se vocˆ possui o compilador Sun Workshop (Fortre) 5.3 (ou mais novo), vocˆ pode executar
e e
configure da seguinte forma:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt"
CXX=CC CXXFLAGS="-noex -mt"
./configure --prefix=/usr/local/mysql --enable-assembler
Vocˆ pode criar um bin´rio de 64 bits usando o compilador Forte da Sun com os seguintes
e a
parˆmetros de compila¸˜o:
a ca
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9"
CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9"
./configure --prefix=/usr/local/mysql --enable-assembler
Para criar um bin´rio de 64 bits do Solaris usando gcc, e -m64 para CFLAGS e CXXFLAGS.
a
Note que isto s´ funciona com o MySQL 4.0 e acima - o MySQL 3.23 n˜o inclui as modi-
o a
fica¸˜es exigidas para suportar isto.
co
180. 146 MySQL Technical Reference for Version 5.0.0-alpha
No benchmark do MySQL, conseguimos um aumento de velocidade de 4% em um Ultra-
SPARC usando o Forte 5.0 no modo 32 bit em compara¸˜o com o uso do gcc 3.2 com o
ca
parametro -mcpu.
Se vocˆ criar um bin´rio de 64 bits, ele ser´ 4$ mais lento que o bin´rio de 32 bits, mas o
e a a a
mysqld poder´ tratar mais threads e mem´ria.
a o
Se vocˆ tiver um problema com fdatasync ou sched_yield, vocˆ pode corrigir isto adicio-
e e
nando LIBS=-lrt para a linha de configura¸˜o ca
O seguinte paragr´fo ´ relevante somente para compiladores mais antigos que o WorkShop
a e
5.3:
Vocˆ tamb´m pode ter que editar o script configure para alterar esta linha:
e e
#if !defined(__STDC__) || __STDC__ != 1
para isto:
#if !defined(__STDC__)
Se vocˆ ligar __STDC__ com a op¸˜o -Xc, o compilador Sun n˜o pode compilar com o arquivo
e ca a
de cabe¸alho ‘pthread.h’ do Solaris. Isto ´ um bug da Sun (compilador corrompido ou
c e
arquivo include corrompido).
Se o mysqld emitir a mensagem de erro mostrada abaixo quando vocˆ execut´-lo, vocˆ deve
e a e
tentar compilar o MySQL com o compilador Sun sem habilitar a op¸˜o multi-thread (-mt):
ca
libc internal error: _rmutex_unlock: rmutex not held
Adicione -mt a CFLAGS e CXXFLAGS e tente novamente.
Se vocˆ estiver usando a vers˜o SFW do gcc (que vem com o Solaris 8), vocˆ deve adicionar
e a e
‘/opt/sfw/lib’ a vari´vel de ambiente LD_LIBRARY_PATH antes de executar a configura¸˜o.
a ca
Se vocˆ estiver usando o gcc dispon´ em sunfreeware.com, vocˆ pode ter muitos prob-
e ivel e
lemas. Vocˆ deve recompilar o gcc e GNU binutils na m´quina que vocˆ o executar´ para
e a e a
evitar qualquer problema.
Se vocˆ obter o seguinte erro quando estiver compilando o MySQL com gcc, significa que
e
seu gcc n˜o est´ configurado para sua vers˜o de Solaris:
a a a
shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ...
./thr_alarm.c: In function ‘signal_hand’:
./thr_alarm.c:556: too many arguments to function ‘sigwait’
A coisa apropriada para fazer neste caso ´ obter a vers˜o mais nova do gcc e compil´-lo
e a a
com seu compilador gcc atual! Ao menos para o Solaris 2.5, a maioria das vers˜es bin´rias
o a
de gcc tem arquivos in´teis e antigos que ir˜o quebrar todos programas que usam threads
u a
(e possivelmente outros programas)!
O Solaris n˜o fornece vers˜es est´ticas de todas bibliotecas de sistema (libpthreads) e
a o a
libdl), portanto vocˆ n˜o pode compilar o MySQL com --static. Se vocˆ tentar fazer
e a e
isto, receber´ o erro:
a
ld: fatal: library -ldl: not found
ou
undefined reference to ‘dlopen’
181. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 147
ou
cannot find -lrt
Se v´rios processos tentar conectar muito rapidamente ao mysqld, vocˆ ver´ este erro no
a e a
log do MySQL:
Error in accept: Protocol error
Vocˆ deve tentar iniciar o servidor com a op¸˜o --set-variable back_log=50 como uma
e ca
solu¸˜o para esta situa¸˜o. Note que --set-variable=nome=valor e -O nome=valor est´
ca ca a
obsoleto desde o MySQL 4.0. Use apenas --back_log=50. Veja Se¸˜o 4.1.1 [Op¸˜es da
ca co
linha de comando], P´gina 208.
a
Se vocˆ est´ ligando seu pr´prio cliente MySQL, vocˆ deve obter o seguinte erro quando
e a o e
tentar execut´-lo:
a
ld.so.1: ./my: fatal: libmysqlclient.so.#:
open failed: No such file or directory
O problema pode ser evitado por um dos seguintes m´todos:
e
• Ligue o cliente com a seguinte op¸˜o (em vez de -Lpath): -Wl,r/full-path-to-
ca
libmysqlclient.so.
• Copie o arquivo ‘libmysqclient.so’ para ‘/usr/lib’.
• Adicione o caminho do diret´rio onde ‘libmysqlclient.so’ est´ localizado ` vari´vel
o a a a
de ambiente LD_RUN_PATH antes de executar seu cliente.
Se vocˆ tiver problemas com o configure tentando ligar com -lz e vocˆ n˜o tem a zlib
e e a
instalada, vocˆ ter´ duas op¸˜es:
e a co
• Se vocˆ deseja usar o protocol de comuni¸˜o de compactado vocˆ precisar´ obter e
e ca e a
instalar a zlib from ftp.gnu.org.
• Configure com --with-named-z-libs=no.
Se vocˆ estiver usando o gcc e tiver problemas carregando fun¸˜es UDF no MySQL, tente
e co
adicionar -lgcc para a linha de liga¸˜o para a fun¸˜o UDF.
ca ca
Se vocˆ deseja que o MySQL inicie automaticamente,
e vocˆ pode copiar
e
‘support-files/mysql.server’ para ‘/etc/init.d’ e criar um link simb´lico
o
para ele, chamado ‘/etc/rc.3.d/S99mysql.server’.
Como o Solaris n˜o suporta core files para aplica¸˜es setuid(), vocˆ n˜o pode obter um
a co e a
core file do mysqld se vocˆ estiver usando a op¸˜o --user.
e ca
2.6.3.1 Notas Solaris 2.7/2.8
Vocˆ pode utilizar normalmente um bin´rio Solaris 2.6 no Solaris 2.7 e 2.8. A maioria dos
e a
detalhes do Solaris 2.6 tamb´m se aplicam ao Solaris 2.7 e 2.8.
e
Note que o MySQL vers˜o 3.23.4 e superiores devem estar aptos para autodetectar novas
a
vers˜es do Solaris e habilitar solu¸˜es para os problemas seguintes!
o co
Solaris 2.7 / 2.8 tem alguns bugs nos arquivos include. Vocˆ pode ver o seguinte erro quando
e
vocˆ usa o gcc:
e
182. 148 MySQL Technical Reference for Version 5.0.0-alpha
/usr/include/widec.h:42: warning: ‘getwc’ redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition
Se isto ocorrer, vocˆ pode fazer o seguinte para corrigir o problema:
e
Copie /usr/include/widec.h para .../lib/gcc-lib/os/gcc-version/include e mude
a linha 41 :
#if !defined(lint) && !defined(__lint)
para
#if !defined(lint) && !defined(__lint) && !defined(getwc)
Uma alternativa ´ editar o ‘/usr/include/widec.h’ diretamente. Desta forma, depois de
e
fazer a corre¸˜o, vocˆ deve remover o ‘config.cache’ e executar o configure novamente !
ca e
Se vocˆ obter erros como estes quando vocˆ executar o make, ´ porque o configure
e e e
n˜o encontrou o arquivo ‘curses.h’ (provavelmente devido ao erro no arquivo
a
‘/usr/include/widec.h’):
In file included from mysql.cc:50:
/usr/include/term.h:1060: syntax error before ‘,’
/usr/include/term.h:1081: syntax error before ‘;’
A solu¸˜o para isto ´ fazer uma das seguintes op¸˜es:
ca e co
• Configure com CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure.
• Edite o ‘/usr/include/widec.h’ como indicado acima e re-execute o configure.
• Remova a linha #define HAVE_TERM do arquivo ‘config.h’ e execute make novamente.
Se o seu ligador tiver problemas para encontrar o -lz quando ligar ao seu programa cliente,
provavelmente o problema ´ que seu arquivo ‘libz.so’ est´ instalado em ‘/usr/local/lib’.
e a
Vocˆ pode corrigir isto usando um dos seguintes m´todos:
e e
• Adicione ‘/usr/local/lib’ ao LD_LIBRARY_PATH.
• Adicione um link para ‘libz.so’ a partir de ‘/lib’.
• Se vocˆ estiver usando o Solaris 8, vocˆ pode instalar a zlib opcional do CD de dis-
e e
tribui¸˜o do Solaris 8.
ca
• Configure o MySQL com a op¸˜o --with-named-z-libs=no.
ca
2.6.3.2 Notas Solaris x86
No Solaris 8 no x86, mysqld ir´ descarregar um core se vocˆ executar um ’strip’ no mesmo.
a e
Se vocˆ estiver usando gcc ou egcs no Solaris X86 e vocˆ tiver problemas com descarregos
e e
de core, vocˆ deve utilizar o seguinte comando configure:
e
CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H"
CXX=gcc
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -D
./configure --prefix=/usr/local/mysql
Isto ir´ evitar problemas com a biblioteca libstdc++ e com exce¸˜es C++.
a co
183. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 149
Se isto n˜o ajudar, vocˆ pode compilar uma vers˜o com debug e execut´-lo com um arquivo
a e a a
de ratreamento (trace) ou sob gdb. Veja Se¸˜o D.1.3 [Using gdb on mysqld], P´gina 1072.
ca a
2.6.4 Notas BSD
Esta se¸˜o fornece informa¸˜o para os v´rios tipos de BSD, assim como a vers˜o espec´
ca ca a a ifica
para eles.
2.6.4.1 Notas FreeBSD
FreeBSD 4.x ou mais novo ´ recomendado para executa¸˜o do MySQL uma vez que o pacote
e ca
thread ´ muito mais integrado.
e
A mais f´cil e portanto a forma preferida para instal´-lo ´ usar as portas mysql-server e
a a e
mysql-client dispon´
iveis em http://www.freebsd.org.
Usando-as vocˆ obtem:
e
• Um MySQL funcional, com todas as otimiza¸˜es conhecidas para trabalhar na sua
co
vers˜o habilitada do FreeBSD.
a
• Configura¸˜o e constru¸˜o autom´tica.
ca ca a
• Scripts de inicializa¸˜o instalados em /usr/local/etc/rc.d.
ca
• Habilidade para ver quais arquivos est˜o instalados com pkg info -L. E para remover
a
todos com pkg delete se vocˆ n˜o quiser mais o MySQL na m´quina.
e a a
´
E recomendado que vocˆ utilize MIT-pthreads no FreeBSD 2.x e threads nativas nas Vers˜es
e o
´
3 e superiores. E poss´ executar com threads nativas em algumas vers˜es antigas (2.2.x)
ivel o
mas vocˆ pode encontrar problemas ao finalizar o mysqld.
e
Infelizmente algumas chamadas de fun¸˜es no FreeBSD ainda n˜o s˜o totalmente seguras
co a a
com threads, principalmente a fun¸˜o gethostbyname(), que ´ usada pelo MySQL para
ca e
converter nomes de m´quinas em endere¸os IPs. Sob certas circunstˆncias, o processo
a c a
mysqld ir´ criar repentinamente um carga de CPU de 100% e ficar´ sem resposta. Se vocˆ
a a e
se deparar com isto, tente iniciar o MySQL usando a op¸˜o --skip-name-resolve.
ca
Alternativamente, vocˆ pode ligar o MySQL no FreeBSD 4.x com a biblioteca Linux-
e
Threads, que evita uns poucos problemas que a implementa¸˜o da thread nativa do FreeBSD
ca
tem. Para uma compara¸˜o muito boa do LinuxThreads vs. threads nativas dˆ uma ol-
ca e
hada no artigo "FreeBSD or Linux for your MySQL Server?" de Jeremy Zawodny em
http://jeremy.zawodny.com/blog/archives/000697.html
Os problemas conhecidos usando LinuxThreads na FreeBSD s˜o:
a
• wait_timeout n˜o est´ funcionando (provavemente problema de manipula¸˜o do signal
a a ca
em FreeBSD/LinuxThreads). Isto deveria ter sido corrigido no FreeBSD 5.0. O sintome
a
´ que conex˜es persistentes podem se manter por um longo tempo sem serem fechadas.
o
O ‘Makefile’ do MySQL necessita o GNU make (gmake) para funcionar. Se vocˆ deseja
e
compilar o MySQL, antes vocˆ precisar´ instalar o GNU make.
e a
Tenha certeza que sua configura¸˜o de resolu¸˜o de nomes esteja correta. De outra forma
ca ca
vocˆ vai ter atrasos na resolu¸˜o ou falhas quando conectar ao mysqld.
e ca
184. 150 MySQL Technical Reference for Version 5.0.0-alpha
Tenha certeza que a entrada localhost no arquivo ‘/etc/hosts’ esteja correta (de outra
forma vocˆ ir´ ter problemas conectando ao banco de dados). O arquivo ‘/etc/hosts’ deve
e a
iniciar com a linha:
127.0.0.1 localhost localhost.seu.dominio
O modo recomendado de compilar e instalar o MySQL no FreeBSD com gcc (2.95.2 e acima)
´:
e
CC=gcc CFLAGS="-O2 -fno-strength-reduce"
CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions -felide-constructors
-fno-strength-reduce"
./configure --prefix=/usr/local/mysql --enable-assembler
gmake
gmake install
./scripts/mysql_install_db
cd /usr/local/mysql
./bin/mysqld_safe &
Se vocˆ percber que o configure usar´ MIT-pthreads, vocˆ de ler as notas sobre MIT-
e a e
pthreads. Veja Se¸˜o 2.3.6 [MIT-pthreads], P´gina 106.
ca a
Se o make install n˜o puder encontrar ‘/usr/include/pthreads’, ´ porque o configure
a e
n˜o detectou que vocˆ precisava de MIT-pthreads. Isto ´ corrigido executando estes coman-
a e e
dos:
shell> rm config.cache
shell> ./configure --with-mit-threads
O FreeBSD ´ tamb´m conhecido por ter um limite muito baixo para o manipulador de
e e
arquivos. Veja Se¸˜o A.2.17 [Not enough file handles], P´gina 917. Descomente a se¸˜o
ca a ca
ulimit -n no mysqld safe ou aumente os limites para o usu´rio mysqld no /etc/login.conf (e
a
reconstrua-o com cap mkdb /etc/login.conf). Tamb´m tenha certeza que vocˆ configurou
e e
a classe apropriada para este usu´rio no arquivo de senhas (password) se vocˆ n˜o estiver
a e a
usando o padr˜o (use: chpass nome usuario mysqld). Veja Se¸˜o 4.8.2 [mysqld_safe],
a ca
P´gina 332.
a
Se vocˆ tiver muita mem´ria vocˆ deve considerar em reconstruir o Kernel para permitir o
e o e
MySQL de usar mais de 512M de RAM. Dˆ uma olhada na op¸~o MAXDSIZ na arquivo de
e ca
configura¸˜o LINT para maiores informa¸˜es.
ca co
Se vocˆ tiver problemas com a data atual no MySQL, configurar a vari´vel TZ provavelmente
e a
ajudar´. Veja Apˆndice E [Environment variables], P´gina 1083.
a e a
Para obter um sistema seguro e est´vel vocˆ deve usar somente kernels FreeBSD que estejam
a e
marcados com -STABLE.
2.6.4.2 Notas NetBSD
Para compilar no NetBSD vocˆ precisa do GNU make. De outra forma o compilador que-
e
braria quando o make tentasse executar lint em arquivos C++.
185. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 151
2.6.4.3 Notas OpenBSD
No OpenBSD Vers˜o 2.5, vocˆ pode compilar o MySQL com threads nativas com as
a e
seguintes op¸˜es:
co
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no
2.6.4.4 Notas OpenBSD 2.8
Nossos usu´rios relataram que o OpenBSD 2.8 tem um bug nas threads que causa problemas
a
com o MySQL. Os desenvolvedores do OpenBSD j´ corrigiram o problema, mas em 25 de
a
Janeiro de 2001 a corre¸˜o foi dispon´
ca ivel apenas no ramo “-current”. Os sintomas deste
bug nas threads s˜o: resposta lenta, alta carga, alto uso de CPU e quedas do servidor.
a
Se vocˆ obter um erro como Error in accept:: Bad file descriptor ou erro 9 ao ten-
e
tar abrir tabelas ou diret´rios, o problema ´ provavelmente que vocˆ n˜o alocou mem´ria
o e e a o
suficiente para os descritores de arquivo do MySQL.
Neste caso tente iniciar o mysqld_safe como root com as seguintes op¸˜es:
co
shell> mysqld_safe --user=mysql --open-files-limit=2048 &
2.6.4.5 Notas BSDI Vers˜o 2.x
a
Se vocˆ obter o seguinte erro quando estiver compilando o MySQL, seu valor ulimit para
e
mem´ria virtual ´ muito baixo:
o e
item_func.h: In method ‘Item_func_ge::Item_func_ge(const Item_func_ge &)’:
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1
Tente usar ulimit -v 80000 e executar o make novamente. Se isto n˜o funcionar e vocˆ es-
a e
tiver usando o bash, tente trocar para csh ou sh; alguns usu´rios BSDI relataram problemas
a
com bash e ulimit.
Se vocˆ utiliza gcc, vocˆ pode tamb´m ter de usar a op¸˜o --with-low-memory para o
e e e ca
configure estar apto a compilar o ‘sql_yacc.cc’.
Se vocˆ tiver problemas com a data atual no MySQL, configurar a vari´vel TZ provavelmente
e a
ajudar´. Veja Apˆndice E [Environment variables], P´gina 1083.
a e a
2.6.4.6 Notas BSD/OS Vers˜o 3.x
a
Atualize para BSD/OS Vers˜o 3.1. Se isto n˜o for poss´
a a ivel, instale BSDIpatch M300-038.
Use o seguinte comando quando configurar o MySQL:
shell> env CXX=shlicc++ CC=shlicc2
./configure
--prefix=/usr/local/mysql
--localstatedir=/var/mysql
--without-perl
--with-unix-socket-path=/var/mysql/mysql.sock
O comeando seguinte tamb´m funciona:
e
186. 152 MySQL Technical Reference for Version 5.0.0-alpha
shell> env CC=gcc CXX=gcc CXXFLAGS=-O3
./configure
--prefix=/usr/local/mysql
--with-unix-socket-path=/var/mysql/mysql.sock
Vocˆ pode alterar as localiza¸˜es dos diret´rios se vocˆ desejar, ou apenas usar os padr˜es
e co o e o
n˜o especificando nenhuma localiza¸˜o.
a ca
Se vocˆ tiver problemas com performance sob alta carga, tente usar a op¸˜o --skip-thread-
e ca
priority para mysqld! Isto ir´ executar todas as threads com a mesma prioridade; no BSDI
a
vers˜o 3.1, isto fornece melhor performance (pelo menos at´ o BSDI corrigir seu organizador
a e
de threads).
Se vocˆ obter o erro virtual memory exhausted enquanto estiver compilando, deve tentar
e
usar ulimit -v 80000 e executar make novamente. Se isto n˜o funcionar e vocˆ estiver
a e
usando bash, tente trocar para csh ou sh; alguns usu´rios BSDI relataram problemas com
a
bash e ulimit.
2.6.4.7 Notas BSD/OS Vers˜o 4.x
a
O BSDI Vers˜o 4.x tem alguns bugs relacionados `s threads. Se vocˆ deseja usar o MySQL
a a e
nesta vers˜o, vocˆ deve instalar todas as corre¸˜es relacionadas `s threads. Pelo menos a
a e co a
M400-23 deve estar instalada.
Em alguns sistemas BSDI vers˜o 4.x, vocˆ pode ter problemas com bibliotecas compartil-
a e
hadas. O sintoma ´ que vocˆ n˜o pode executar nenhum programa cliente, por exemplo,
e e a
mysqladmin. Neste caso vocˆ precisa reconfigurar o MySQL, para ele n˜o usar bibliotecas
e a
compartilhadas, com a op¸˜o --disable-shared.
ca
Alguns clientes tiveram problemas no BSDI 4.0.1 que o bin´rio do mysqld n˜o conseguia
a a
abrir tabelas depois de um tempo em funcionamento. Isto ´ porque alguns bugs relaciona-
e
dos a biblioteca/sistema fazem com que o mysqld altere o diret´rio atual sem nenhuma
o
informa¸˜o!
ca
A corre¸˜o ´ atualizar para a 3.23.34 ou depois de executar configure remova a linha
ca e
$define HAVE_REALPATH de config.h antes de executar o make.
Perceba que com isso vocˆ n˜o pode fazer um link simb´lico de um diret´rio de banco de
e a o o
dados para outro diret´rio ou fazer um link simb´lico a uma tabela para outro banco de
o o
dados no BSDI! (Criar um link simb´lico para outro disco funciona).
o
2.6.5 Notas Mac OS X
2.6.5.1 Mac OS X 10.x
O MySQL deve funcionar sem problemas no Mac OS X 10.x (Darwin). Vocˆ n˜o precisa
e a
dos patches pthread para este SO.
Isto tamb´m se aplica ao Mac OS X 10.x Server. A compila¸˜o para a plataforma Server ´ a
e ca e
mesma para a vers˜o cliente do Mac OS X. No entanto note que o MySQL vem preinstalado
a
no Servidor !
187. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 153
Nosso bin´rio para Mac OS X ´ compilado no Darwin 6.3 com a seguinte linha de con-
a e
figura¸˜o:
ca
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --disable-shared
Veja Se¸˜o 2.1.3 [Instala¸˜o do Mac OS X], P´gina 71.
ca ca a
2.6.5.2 Mac OS X Server 1.2 (Rhapsody)
Antes de tentar configurar o MySQL no MAC OS X server 1.2 (aka
Rhapsody), primeiro vocˆ deve instalar o pacote pthread encontrado em:
e
http://www.prnet.de/RegEx/mysql.html.
Veja Se¸˜o 2.1.3 [Instala¸˜o do Mac OS X], P´gina 71.
ca ca a
2.6.6 Notas de Outros Unix
2.6.6.1 Notas HP-UX para distribui¸˜es bin´rias
co a
Alguma das distribui¸˜es bin´rias do MySQL para HP-UX ´ distribuida como um arquivo
co a e
depot da HP e como um arquivo tar. Para usar o arquivo depot vocˆ deve estar executando
e
pelo menos o HP-UX 10.x para ter acesso `s ferramentas de arquivos depot da HP.
a
A vers˜o HP do MySQL foi compilada em um servidor HP 9000/8xx sob HP-UX 10.20,
a
usando MIT-pthreads. Sob esta configura¸˜o o MySQL funciona bem. O MySQL Vers˜o
ca a
3.22.26 e mais novas tamb´m podem ser construidas com o pacote thread nativo da HP.
e
Outras configura¸˜es que podem funcionar:
co
• HP 9000/7xx executando HP-UX 10.20+
• HP 9000/8xx executando HP-UX 10.30
As seguintes configura¸˜es definitivamente n˜o funcionar˜o:
co a a
• HP 9000/7xx ou 8xx executando HP-UX 10.x where x < 2
• HP 9000/7xx ou 8xx executando HP-UX 9.x
Para instalar a distribui¸˜o, utilze um dos comandos abaixo, onde /path/to/depot ´ o
ca e
caminho completo do arquivo depot:
• Para instalar tudo, incluindo o servidor, cliente e ferramentas de desenvolvimento:
shell> /usr/sbin/swinstall -s /path/to/depot mysql.full
• Para instalar somente o servidor:
shell> /usr/sbin/swinstall -s /path/to/depot mysql.server
• Para instalar somente o pacote cliente:
shell> /usr/sbin/swinstall -s /path/to/depot mysql.client
• Para instalar somente as ferramentas de desenvolvimento:
188. 154 MySQL Technical Reference for Version 5.0.0-alpha
shell> /usr/sbin/swinstall -s /path/to/depot mysql.developer
O depot copia os bin´rios e bibliotecas em ‘/opt/mysql’ e dados em ‘/var/opt/mysql’. O
a
depot tamb´m cria as entradas apropriadas em ‘/etc/init.d’ e ‘/etc/rc2.d’ para iniciar
e
o servidor automaticamente na hora do boot. Obviamente, para instalar o usu´rio deve ser
a
o root.
Para instalar a distribui¸˜o HP-UX tar.gz, vocˆ deve ter uma c´pia do GNU tar.
ca e o
2.6.6.2 Notas HP-UX Vers˜o 10.20
a
Existem alguns pequenos problemas quando compilamos o MySQL no HP-UX. N´s re-o
comendamos que vocˆ use o gcc no lugar do compilador nativo do HP-UX, porque o gcc
e
produz um c´digo melhor!
o
N´s recomendamos o uso do gcc 2.95 no HP-UX. N˜o utilize op¸˜es de alta otimiza¸˜o
o a co ca
(como -O6) ja que isto pode n˜o ser seguro no HP-UX.
a
A seguine linha do configure deve funcionar com o gcc 2.95:
CFLAGS="-I/opt/dce/include -fpic"
CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions
-fno-rtti" CXX=gcc ./configure --with-pthread
--with-named-thread-libs=’-ldce’ --prefix=/usr/local/mysql --disable-shared
A seguinte linha do configure deve funcionar com o gcc 3.1:
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc
CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions
-fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --with-pthread
--with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC
--disable-shared
2.6.6.3 Notas HP-UX Vers˜o 11.x
a
Para HP-UX Vers˜o 11.x n´s recomendamos o MySQL Vers˜o 3.23.15 ou posterior.
a o a
Por causa de alguns bugs cr´ iticos nas bibliotecas padr˜o do HP-UX, vocˆ deve instalar as
a e
seguintes corre¸˜es antes de tentar executar o MySQL no HP-UX 11.0:
co
PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative
Isto ir´ resolver um problema que tem como retorno EWOLDBLOCK de recv() e EBADF de
a
accept() em aplica¸˜es threads.
co
Se vocˆ estiver usando gcc 2.95.1 em um sistema HP-UX 11.x sem corre¸˜es, vocˆ obter´
e co e a
o erro:
In file included from /usr/include/unistd.h:11,
from ../include/global.h:125,
from mysql_priv.h:15,
from item.cc:19:
189. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 155
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
from mysql_priv.h:158,
from item.cc:19:
O problema ´ que o HP-UX n˜o define consistentemente a pthreads_
e a
atfork(). Ela tem prot´tipos coflitantes em ‘/usr/include/sys/unistd.h’:184
o
e ‘/usr/include/sys/pthread.h’:440 (detalhes abaixo).
Uma solu¸˜o ´ copiar ‘/usr/include/sys/unistd.h’ em ‘mysql/include’ e editar
ca e
‘unistd.h’ alterando-o para coincidir com a defini¸˜o em ‘pthread.h’. Aqui est´ o diff:
ca a
183,184c183,184
< extern int pthread_atfork(void (*prepare)(), void (*parent)(),
< void (*child)());
---
> extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
> void (*child)(void));
Depois disto, a seguinte linha configure deve funcionar:
CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3"
./configure --prefix=/usr/local/mysql --disable-shared
Segue algumas inforama¸˜es que um usu´rio do HP-UX Vers˜o 11.x nos enviou sobre com-
co a a
pila¸˜o do MySQL com o compilador HP-UX:
ca
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --with-extra-character-set=com
Vocˆ pode ignorar qualquer erro do tipo:
e
aCC: warning 901: unknown option: ‘-3’: use +help for online documentation
Se vocˆ obter o seguinte erro do configure
e
checking for cc option to accept ANSI C... no
configure: error: MySQL requires a ANSI C compiler (and a C++ compiler).
Try gcc. See the Installation chapter in the Reference Manual.
Confira se vocˆ n˜o tem o caminho para o compilador K&R antes do caminho para o
e a
compilador C e C++ do HP-UX.
Outra raz˜o para n˜o estar compilando ´ vocˆ n˜o definir o parˆmetro +DD64 acima.
a a e e a a
Outra possibilidade para o HP-UX 11 ´ usar o bin´rio MySQL para HP-UX 10.20. Recebe-
e a
mos relatos de alguns usu´rios de que esses bin´rios funcionam bem no HP-UX 11.00. Se
a a
vocˆ encontrar problemas, verifique o n´ do pacth de seu HP-UX.
e ivel
2.6.6.4 Notas IBM-AIX
Detec¸˜o autom´tica de xlC est´ faltando no Autoconf, portando um comando configure
ca a a
deste tipo ´ necess´rio quando estiver compilando o MySQL (Este exemplo usa o compilador
e a
IBM):
export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
190. 156 MySQL Technical Reference for Version 5.0.0-alpha
export CFLAGS="-I /usr/local/include"
export LDFLAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
./configure --prefix=/usr/local
--localstatedir=/var/mysql
--sysconfdir=/etc/mysql
--sbindir=’/usr/local/bin’
--libexecdir=’/usr/local/bin’
--enable-thread-safe-client
--enable-large-files
Acima est˜o as op¸˜es usadas para compilar a distribui¸˜o MySQL que pode ser encontrada
a co ca
em http://www-frec.bull.com/.
Se vocˆ alterar o -O3 para -O2 na linha de configura¸˜o acima, vocˆ tamb´m deve remover
e ca e e
a op¸˜o -qstrict (isto ´ uma limita¸˜o no compilador C da IBM).
ca e ca
Se vocˆ estiver usando gcc ou egcs para compilar o MySQL, vocˆ DEVE usar a op¸˜o -fno-
e e ca
exceptions, j´ que o manipulador de exce¸˜es no gcc/egcs n˜o ´ seguro para threads! (Isto
a co a e
foi testado com egcs 1.1). Existem tamb´m alguns problemas conhecidos com o assembler
e
da IBM que pode gerar c´digo errado quando usado com gcc.
o
N´s recomendamos a seguinte linha do configure com egcs e gcc 2.95 no AIX:
o
CC="gcc -pipe -mcpu=power -Wa,-many"
CXX="gcc -pipe -mcpu=power -Wa,-many"
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local/mysql --with-low-memory
O -Wa,-many ´ necess´rio para o compilador ser bem sucedido. IBM est´ ciente deste
e a a
a a ´ devido ao fato do problema poder ser
problema mas n˜o est´ com pressa de corrigi-lo
contornado. N´s n˜o sabemos se o -fno-exceptions ´ necess´rio com gcc 2.9.5, mas
o a e a
como o MySQL n˜o utiliza exce¸˜es e a op¸˜o acima gera c´digo mais r´pido, recomendamos
a co ca o a
que vocˆ sempre use esta op¸˜o com o egcs/gcc.
e ca
Se vocˆ tiver algum problema com c´digo assembler tente alterar o -mcpu=xxx para o seu
e o
processador. Normalmente power2, power ou powerpc podem ser usados, de uma maneira
alternativa vocˆ pode precisar usar 604 ou 604e. N˜o tenho certeza mas acredito que usar
e a
"power" deve satisfazer a maioria dos casos, mesmo em uma m´quina power2.
a
Se vocˆ n˜o sabe qual ´ o seu processador, utilize o comando "uname -m", isto ir´ fornecer a
e a e a
vocˆ uma string que parece com "000514676700", com um formato de xxyyyyyymmss onde
e
xx e ss s˜o sempre 0s, yyyyyy ´ o ID unico do sistema e mm ´ o ID da CPU Planar. Uma
a e ´ e
tabela destes valores podem ser encontrados em http://publib.boulder.ibm.com/doc_
link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. Isto ir´ lhe fornecer um tipo de
a
m´quina e um modelo de m´quina que vocˆ pode usar para determinar que tipo de cpu
a a e
vocˆ tem.
e
Se vocˆ tiver problemas com sinais (MySQL finaliza sem notifica¸˜o sob alta carga) vocˆ
e ca e
pode ter encontrado um bug de SO com threads e sinais. Neste caso vocˆ pode dizer ao
e
MySQL para n˜o usar sinais configurando-o com:
a
191. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 157
shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti
-DDONT_USE_THR_ALARM"
./configure --prefix=/usr/local/mysql --with-debug --with-low-memory
Isto n˜o afeta a performance do MySQL, mas tem o efeito colateral que vocˆ n˜o pode
a e a
matar clientes que est˜o “dormindo” em uma conex˜o com mysqladmin kill ou mysqladmin
a a
shutdown. Neste caso, o cliente morrer´ quando ele chegar no pr´ximo comando.
a o
Em algumas vers˜es do AIX, ligando com libbind.a faz o getservbyname descarregar core.
o
Isto ´ erro no AIX e deve ser relatado para a IBM.
e
Para o AIX 4.2.1 e gcc vocˆ tem que fazer as seguintes altera¸˜es.
e co
Depois de configurar, edite o ‘config.h’ e ‘include/my_config.h’ e altere a linha que diz
#define HAVE_SNPRINTF 1
para
#undef HAVE_SNPRINTF
E finalmente, no ‘mysqld.cc’ vocˆ precisa adicionar um prot´tipo para initgroups.
e o
#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif
Se vocˆ precisar se alocar muita mem´ria para o processo mysqld, n˜o ´ suficiente apenas
e o a e
definir ’ulimit -d unlimited’. Vocˆ tamb´m deve configurar no mysqld_safe algo do tipo:
e e
export LDR_CNTRL=’MAXDATA=0x80000000’
Vocˆ pode encontrar mais sobre o uso de muita mem´ria em: http://publib16.boulder.ibm.com/pseries
e o
US/aixprggd/genprogc/lrg_prg_support.htm.
2.6.6.5 Notas SunOS 4
No SunOS 4, ´ necess´rio a MIT-pthreads para compilar o MySQL, o que significa que vocˆ
e a e
precisa do GNU make.
Alguns sistemas SunOS 4 tem problemas com bibliotecas dinˆmicas e libtool. Vocˆ pode
a e
usar a seguinte linha do configure para evitar este problema:
shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static
Quando compilando readline, vocˆ pode obter alguns avisos sobre defini¸˜es duplicadas
e co
que podem ser ignoradas.
Ao compilar o mysqld, v˜o existir alguns alertas sobre implicit declaration of function
a
que tamb´m podem ser ignoradas.
e
2.6.6.6 Notas Alpha-DEC-UNIX (Tru64)
Se vocˆ est´ usando o egcs 1.1.2 no Digital Unix, vocˆ atualizar par o gcc 2.95.2, j´ que o
e a e a
egcs no DEC tem v´rios erros graves !
a
Quando compilando programas com threads no Digital Unix, a documenta¸˜o recomenda
ca
usar a op¸˜o -pthread para cc e cxx e as bibliotecas -lmach -lexc (em adi¸˜o para -
ca ca
lpthread). Vocˆ deve executar o configure parecido com isto:
e
192. 158 MySQL Technical Reference for Version 5.0.0-alpha
CC="cc -pthread" CXX="cxx -pthread -O"
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"
Quando compilando o mysqld, vocˆ deve ver alguns avisos como estes:
e
mysqld.cc: In function void handle_connections()’:
mysqld.cc:626: passing long unsigned int *’ as argument 3 of
accept(int,sockadddr *, int *)’
Vocˆ pode ignorar estes altertas com seguran¸a. Eles ocorrem porque o configure s´ pode
e c o
detectar erros e n˜o alertas.
a
Se vocˆ inicia o servidor diretamente da linha de comando, vocˆ pode ter problemas com
e e
a finaliza¸˜o do servidor ao sair (log out). (Quando vocˆ sai, seu processo superior recebe
ca e
um sinal SIGHUP.) Se isto acontecer, tente iniciar o servidor desta forma:
shell> nohup mysqld [options] &
nohup faz com que o comando que o segue ignore qualquer sinal SIGHUP enviado pelo
terminal. De forma alternativa, inicie o servidor executando mysqld_safe, o qual invoca o
mysqld usando nohup por vocˆ. Veja Se¸˜o 4.8.2 [mysqld_safe], P´gina 332.
e ca a
Se vocˆ tiver problemas quando compilar mysys/get opt.c, apenas remova a linha #define
e
NO PROTO do inicio do arquivo!
Se vocˆ estiver utilizando o compilador CC da Compac, a seguinte linha de configura¸˜o
e ca
dever´ funcionar:
a
CC="cc -pthread"
CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
CXX="cxx -pthread"
CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host
-noexceptions -nortti"
export CC CFLAGS CXX CXXFLAGS
./configure
--prefix=/usr/local/mysql
--with-low-memory
--enable-large-files
--enable-shared=yes
--with-named-thread-libs="-lpthread -lmach -lexc -lc"
gnumake
Se vocˆ tiver problemas com a libtool, ao compilar com bibliotecas compartilhadas como
e
no exemplo acima, quando estiver ligando ao mysqld, vocˆ deve conseguir contornar este
e
problema usando:
cd mysql
/bin/sh ../libtool --mode=link cxx -pthread -O3 -DDBUG_OFF
-O4 -ansi_alias -ansi_args -fast -inline speed
-speculate all -arch host -DUNDEF_HAVE_GETHOSTBYNAME_R
-o mysql mysql.o readline.o sql_string.o completion_hash.o
../readline/libreadline.a -lcurses
../libmysql/.libs/libmysqlclient.so -lm
cd ..
gnumake
193. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 159
gnumake install
scripts/mysql_install_db
2.6.6.7 Notas Alpha-DEC-OSF1
Se vocˆ tiver problemas com compila¸˜o e tem o DEC CC e o gcc instalados, tente executar
e ca
o configure desta forma:
CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3
./configure --prefix=/usr/local/mysql
Se vocˆ tiver problemas com o arquivo ‘c_asm.h’, vocˆ pode criar e usar um arquivo
e e
‘c_asm.h’ ’burro’ com:
touch include/c_asm.h
CC=gcc CFLAGS=-I./include
CXX=gcc CXXFLAGS=-O3
./configure --prefix=/usr/local/mysql
Perceba que os seguintes problemas com o programa ld pode ser corrigido
fazendo o download do ultimo kit de atualiza¸˜o da DEC (Compaq) de
´ ca
http://ftp.support.compaq.com/public/unix/.
Com o OSF1 V4.0D e o compilador "DEC C V5.6-071 no Digital Unix V4.0 (Rev. 878)"
o compilador tem alguns comportamentos estranhos (simbolos asm indefinidos). /bin/ld
tamb´m aparece estar quebrado (problemas com erros _exit undefined ocorrendo ao ligar
e
no mysqld). Neste sistema, temos compilado o MySQL com a seguinte linha configure,
depois de substituir /bin/ld com a vers˜o do OSF 4.0C:
a
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
Com o compilador da Digital "C++ V6.1-029", o seguinte deve funcionar:
CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all
-arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all
-arch host -noexceptions -nortti
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static
--disable-shared --with-named-thread-libs="-lmach -lexc -lc"
Em algumas vers˜es do OSF1, a fun¸˜o alloca() est´ quebrada. Corrija isto removendo a
o ca a
linha no ‘config.h’ que define ’HAVE_ALLOCA’.
A fun¸˜o alloca() pode tamb´m ter um prot´tipo incorreto em /usr/include/alloca.h.
ca e o
O alerta resultante deste erro pode ser ignorado.
configure ir´ usar a seguinte biblioteca thread automaticamente: --with-named-thread-
a
libs="-lpthread -lmach -lexc -lc".
Quando usar o gcc, vocˆ tamb´m pode tentar executar configure desta forma:
e e
shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....
194. 160 MySQL Technical Reference for Version 5.0.0-alpha
Se vocˆ tiver problemas com sinais (MySQL finalzar inesperadamente sobre alta carga),
e
vocˆ pode ter encontrado um erro com threads e sinais no SO. Neste caso vocˆ pode dizer
e e
ao MySQL para n˜o usar sinais configurando-o com:
a
shell> CFLAGS=-DDONT_USE_THR_ALARM
CXXFLAGS=-DDONT_USE_THR_ALARM
./configure ...
Isto n˜o afeta a performance do MySQL, mas tem efeitos colaterais que n˜o permitem
a a
finalizar clientes que est˜o “dormindo” em uma conex˜o com mysqladmin kill ou
a a
mysqladmin shutdown. Neste caso o cliente ir´ morrer quando ele receber o pr´ximo
a o
comando.
Com gcc 2.95.2, vocˆ provavelmente encontrar´ o seguinte erro de compila¸˜o:
e a ca
sql_acl.cc:1456: Internal compiler error in ‘scan_region’, at except.c:2566
Please submit a full bug report.
Para corrigir isto vocˆ deve alterar para o diret´rio sql e fazer um “corta e cola” da ultima
e o ´
linha gcc, mas altere -O3 para -O0 (ou adicione -O0 imediatamente depois de gcc se vocˆ e
n˜o tiver algumas op¸˜o -O na sua linha de compila¸˜o.) Depois disto feito vocˆ deve apenas
a ca ca e
voltar ao diret´rio superior e executar make novamente.
o
2.6.6.8 Notas SGI Irix
Se vocˆ estiver usando Irix Vers˜o 6.5.3 ou mais novo, o mysqld s´ ir´ conseguir criar threads
e a o a
se vocˆ execut´-lo como um usu´rio com privil´gios de CAP_SCHED_MGT (como root) ou dar
e a a e
ao servidor mysqld este privil´gio com o seguinte comando shell:
e
shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
Vocˆ pode precisar indefinir alguns simbolos em ‘config.h’ depois de executar configure
e
e antes de compilar.
Em algumas implementa¸˜es Irix, a fun¸˜o alloca() est´ quebrada. Se o servidor mysqld
co ca a
morrer em alguma instru¸˜o SELECT, remova as linhas de ‘config.h’ que definem HAVE_
ca
ALLOC e HAVE_ALLOC_H. Se mysqladmin create n˜o funciona, remova a linha do ‘config.h’
a
que define HAVE_READDIR_R. Vocˆ tamb´m deve precisar remover a linha HAVE_TERM_H.
e e
A SGI recomenda que vocˆ instale todos os patches desta p´gina: http://support.sgi.com/surfzone/patches/
e a
No m´ inimo, vocˆ deve instalar o ultimo rollup do kernel, o ultimo rollup rld, e o ultimo
e ´ ´ ´
rollup libc.
Definitivamente vocˆ precisar´ de todos patches POSIX nesta p´gina, para suporte
e a a
pthreads:
http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
Se vocˆ obter o seguinte erro quando estiver compilando o ‘mysql.cc’:
e
"/usr/include/curses.h", line 82: error(1084): invalid combination of type
Digite o seguinte no diret´rio topo da sua ´rvore fonte do MySQL:
o a
shell> extra/replace bool curses_bool < /usr/include/curses.h
> include/curses.h
shell> make
195. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 161
Existem relatos de problemas com organiza¸˜o de threads. Se somente uma thread estiver
ca
executando, o sistema fica lento. Pode se evitar isto iniciando outro cliente. Isto pode
acarretar num crescimento de 2 para 10 vezes na velocidade de execu¸˜o para a outra
ca
thread. Isto ´ um problema n˜o compreendido com threads Irix; vocˆ deve improvisar para
e a e
encontrar solu¸˜es at´ que isto seja resolvido.
co e
Se vocˆ estiver compilando com gcc, vocˆ pode usar o seguinte comando configure:
e e
CC=gcc CXX=gcc CXXFLAGS=-O3
./configure --prefix=/usr/local/mysql --enable-thread-safe-client
--with-named-thread-libs=-lpthread
No Irix 6.5.11 com Irix C nativo e compiladores C++ ver. 7.3.1.2, o seguinte ir´ funcionar
a
CC=cc CXX=CC CFLAGS=’-O3 -n32 -TARG:platform=IP22 -I/usr/local/include
-L/usr/local/lib’ CXXFLAGS=’-O3 -n32 -TARG:platform=IP22
-I/usr/local/include -L/usr/local/lib’ ./configure
--prefix=/usr/local/mysql --with-innodb --with-berkeley-db
--with-libwrap=/usr/local
--with-named-curses-libs=/usr/local/lib/libncurses.a
2.6.6.9 Notas SCO
A vers˜o atual foi testado somente nos sistemas “sco3.2v5.0.4” e “sco3.2v5.0.5”. A vers˜oo
a a
para o “sco 3.2v4.2” tamb´m tem tido muito progresso.
e
At´ o momento o compilador recomendado no OpenServer ´ o gcc 2.95.2. Com isto vocˆ
e e e
deve estar apto a compilar o MySQL apenas com:
CC=gcc CXX=gcc ./configure ... (op¸~es)
co
1. Para o OpenServer 5.0.X vocˆ precisa usar gcc-2.95.2p1 ou mais novo da Skunkware.
e
http://www.SCO.com/skunkware/ e ecolher o pacote OpenServer browser ou por ftp
em ftp to ftp2.SCO.com no diret´rio pub/skunkware/osr5/devtools/gcc.
o
2. Vocˆ precisa do GCC vers˜o 2.5.x para este produto e do sistema de desenvolvimento.
e a
Eles s˜o necess´rios nesta vers˜o do SCO Unix. Vocˆ n˜o pode usar apenas o sistema
a a a e a
GCC Dev.
3. Vocˆ deve obter o pacote FSU Pthreads e instal´-lo primeiro. Pode ser obtido em
e a
http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-threads.tar.gz. Vocˆ
e
pode tamb´m obter um pacote precompilado de http://www.mysql.com/Downloads/SCO/FSU-threads
e
4. FSU Pthreads pode ser compilado com SCO Unix 4.2 com tcpip, ou OpenServer 3.0
ou OpenDesktop 3.0 (OS 3.0 ODT 3.0), com o Sistema de Desenvolvimento da SCO
instalado usando uma boa vers˜o do GCC 2.5.x ODT ou OS 3.0, no qual vocˆ necessi-
a e
tar´ de uma boa vers˜o do GCC 2.5.x. Existem v´rios problemas sem uma boa vers˜o.
a a a a
Esta vers˜o do produto necessita do sistema de Desenvolvimento SCO Unix. Sem ele,
a
vocˆ estar´ perdendo as bibliotecas e o editor de liga¸˜o necess´rio.
e a ca a
5. Para construir a FSU Pthreads no seu sistema, fa¸a o seguinte:
c
1. Execute ./configure no diret´rio ‘threads/src’ e selecione a op¸˜o SCO
o ca
OpenServer. Este comando copia ‘Makefile.SCO5’ para ‘Makefile’.
2. Execute make.
196. 162 MySQL Technical Reference for Version 5.0.0-alpha
3. Para instalar no diret´rio padr˜o ‘/usr/include’, use o usu´rio root, depois mude
o a a
para o diret´rio ‘thread/src’ e execute make install
o
6. Lembre de usar o GNU make quando estiver construindo o MySQL.
7. Se vocˆ n˜o iniciou o mysqld_safe como root, vocˆ provavelmente s´ ir´ obter, por
e a e o a
padr˜o, os 110 arquivos abertos por processo. O mysqld ir´ gravar uma nota sobre isto
a a
no arquivo log.
8. Com o SCO 3.2V5.0.5, vocˆ deve usar o FSU Pthreads vers˜o 3.5c ou mais nova. Vocˆ
e a e
deve tamb´m usar o gcc 2.95.2 ou mais novo.
e
O seguinte comando configure deve funcionar:
shell> ./configure --prefix=/usr/local/mysql --disable-shared
9. Com SCO 3.2V4.2, vocˆ deve usar FSU Pthreads vers˜o 3.5c ou mais nova. O seguinte
e a
comando configure deve funcionar:
shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4"
./configure
--prefix=/usr/local/mysql
--with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads"
--with-named-curses-libs="-lcurses"
Vocˆ pode ter alguns problemas com alguns arquivos de inclus˜o.
e a Neste
caso, vocˆ pode encontrar novos arquivos de inclus˜o espec´
e a ificos do SCO em
http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. Vocˆ deve e
descompactar este arquivo no diret´rio ‘include’ da sua ´rvore fonte do MySQL.
o a
Notas de desenvolvimento SCO:
• O MySQL deve detectar automaticamente FSU Pthreads e ligar o mysqld com -
lgthreads -lsocket -lgthreads.
• As bibliotecas de desenvolvimento SCO s˜o re-entrantes nas FSU Pthreads. A SCO
a
diz que suas bibliotecas de fun¸˜es s˜o re-entrantes, ent˜o elas devem ser re-entrantes
co a a
com as FSU-Pthreads. FSU Pthreads no OpenServer tentam usar o esquema SCO para
criar bibliotecas re-entrantes.
• FSU Pthreads (ao menos a vers˜o em http://www.mysql.com) vem ligada com GNU
a
malloc. Se vocˆ encontrar problemas com uso de mem´ria, tenha certeza que o
e o
‘gmalloc.o’ esteja inclu´ em ‘libgthreads.a’ e ‘libgthreads.so’.
ido
• Na FSU Pthreads, as seguintes chamadas de sistema s˜o compat´
a iveis com pthreads:
read(), write(), getmsg(), connect(), accept(), select() e wait().
• O CSSA-2001-SCO.35.2 (O patch ´ listado de costume como patch de seguran¸a
e c
erg711905-dscr remap ver 2.0.0) quebra FSU threads e deixa o mysqld inst´vel. Vocˆ
a e
deve remove-lo se vocˆ deseja executar o mysqld em uma m´quina OpenServer 5.0.6.
e a
• A SCO fornece Patches do Sistema Operacional em ftp://ftp.sco.com/pub/openserver5
para OpenServer 5.0.x
• A SCO fornece corre¸˜es de seguran¸a e libsocket.so.2 em ftp://ftp.sco.com/pub/security/OpenSer
co c
e ftp://ftp.sco.com/pub/security/sse para OpenServer 5.0.x
• Corre¸˜es de seguran¸a pre-OSR506.
co c Tamb´ a corre¸˜o do telnetd em
e ca
ftp://stage.caldera.com/pub/security/openserver/ ou ftp://stage.caldera.com/pub/securi
197. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 163
com a libsocket.so.2 e libresolv.so.1 com instru¸˜es para instalar em sistemas pre-
co
OSR506.
´
E provavelmente uma boa id´ia para instalar os patches acima tentando compilar/usar
e
o MySQL.
Se vocˆ deseja instalar o DBI no SCO, vocˆ deve editar o ‘Makefile’ em DBI-xxx e cada
e e
subdiret´rio.
o
Note que o exemplo abaixo considera o gcc 2.95.2 ou mais novo:
OLD: NEW:
CC = cc CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport CCDLFLAGS =
LD = ld LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib
LD = ld LD = gcc -G -fpic
OPTIMISE = -Od OPTIMISE = -O1
OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
Isto ´ porque o carregador dinˆmico Perl n˜o ir´ carregar os m´dulos DBI se elas foram
e a a a o
compiladas com icc ou cc.
Perl trabalha melhor quando compilado com cc.
2.6.6.10 Notas SCO Unixware Version 7.0
Vocˆ deve usar uma vers˜o de MySQL pelo menos t˜o recente quando a Vers˜o 3.22.13
e a a a
e UnixWare 7.1.0 porque esta vers˜o corrige alguns problemas de portabilidade sob o
a
Unixware.
N´s temos compilado o MySQL com o seguinte comando configure no UnixWare Vers˜o
o a
7.1.x:
CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
Se vocˆ deseja usar o gcc, dever´ ser usado o gcc 2.95.2 ou mais novo.
e a
CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql
1. A SCO fornece Patches do Sistema Operacional em ftp://ftp.sco.com/pub/unixware7
para UnixWare 7.1.1 e 7.1.3 ftp://ftp.sco.com/pub/openunix8 para OpenUNIX
8.0.0
2. A SCO fornece informa¸˜o sobre Security Fixes em ftp://ftp.sco.com/pub/security/OpenUNIX
ca
para OpenUNIX ftp://ftp.sco.com/pub/security/UnixWare para UnixWare
198. 164 MySQL Technical Reference for Version 5.0.0-alpha
2.6.7 Notas OS/2
O MySQL usa poucos arquivos aberto. Por isto, vocˆ deve adicionar uma linha parecida
e
com a abaixo em seu arquivo ‘CONFIG.SYS’:
SET EMXOPT=-c -n -h1024
Se vocˆ n˜o fizer isto, provavelmente vai ter o seguinte erro:
e a
File ’xxxx’ not found (Errcode: 24)
Quando usar o MysQL com OS/2 Warp 3, o FixPack 29 ou superior ´ necess´rio. Com OS/2
e a
Warp 4, FixPack 4 ou acima ´ necess´rio. Isto ´ uma exigˆncia da biblioteca Pthreads. O
e a e e
MySQL deve estar instalado em uma parti¸˜o que suporta nomes longos de arquivos como
ca
no HPFS, FAT32, etc.
O script ‘INSTALL.CMD’ deve ser executado pelo pr´prio ‘CMD.EXE’ do OS/2 e opde n˜o
o a
funcionar com shells substitutas como o ‘4OS2.EXE’.
O script ‘scripts/mysql-install-db’ foi renomeado. Agora ele ´ chamado ‘install.cmd’
e
e ´ um script REXX, que ir´ atualizar as configura¸˜es padr˜es de seguran¸a do MySQL e
e a co o c
criar os ´
icones na WorkPlace Shell para o MySQL.
Suporte a m´dulos dinˆmicos ´ compilado mas n˜o totalmente testado. M´dulos dinˆmicos
o a e a o a
devem ser compilados usando a biblioteca run-time Pthreads.
gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I..
-o example udf_example.cc -L../lib -lmysqlclient udf_example.def
mv example.dll example.udf
Nota: Devido a limita¸˜es no OS/2, o nome do m´dulo UDF n˜o deve esceder 8 caracteres.
co o a
M´dulos s˜o armazenados no diret´rio ‘/mysql2/udf’; o script safe-mysqld.cmd ir´ colo-
o a o a
car este diret´rio na vari´vel de ambiente BEGINLIBPATH. Quando usando m´dulos UDF,
o a o
extens˜es espec´
o ificas s˜o ignoradas — consuidera-se que seja ‘.udf’. Por exemplo, no Unix,
a
o m´dulo compartilhado deve ser nomeado ‘example.so’ e vocˆ deve carregar uma fun¸˜o
o e ca
dele desta forma:
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";
No OS/2, o m´dulo deve ter o nome de ‘example.udf’, mas vocˆ n˜o deve especificar a
o e a
extens˜o do m´dulo:
a o
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example";
2.6.8 Notas Novell NetWare
Portar o MySQL para NetWare foi um grande esfor¸o da Novell. Os clientes da Novell estar˜o
c a
satisfeitos ao notarem que o NetWare 6.5 vir´ com os bin´rios do MySQL, completa com
a a
uma licen¸a de uso comercial automatica para todos os servidores executando esta vers˜o
c a
do NetWare.
Veja Se¸˜o 2.1.4 [Instala¸˜o NetWare], P´gina 74.
ca ca a
MySQL para NetWare ´ compilado usando um combina¸˜o do Metrowerks CodeWarrior
e ca
for NetWare e uma vers˜o especial de compila¸˜o cruzada do GNU autotools. Verifique
a ca
esta se¸˜o no futuro para mais informa¸˜es sobre constru¸˜o e otimiza¸˜o do MySQL para
ca co ca ca
NetWare.
199. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 165
2.6.9 Notas BeOS
N´s j´ falamos com alguns desenvolvedores BeOS que disseram que o MySQL est´ 80%
o a a
portado para o BeOS, mas n´s n˜o sabemos qual a situa¸˜o no momento.
o a ca
2.7 Coment´rios de Instala¸˜o do Perl
a ca
2.7.1 Instalando Perl no Unix
O suporte Perl para o MySQL ´ fornecido pela interface cliente DBI/DBD. Veja Se¸˜o 12.5
e ca
[Perl], P´gina 877. O c´digo do cliente Perl DBD/DBI exige Perl Vers˜o 5.004 ou posterior.
a o a
A interface n˜o funcionar´ se vocˆ tiver uma vers˜o mais do Perl.
a a e a
O suporte MySQL Perl tamb´m exige que vocˆ tenha instalado o suporte a programa¸˜o
e e ca
do cliente MySQL. Se vocˆ instalou o MySQL a partir de arquivos RPM, os programas
e
cliente est˜o no cliente RPM, mas o suporte a programa¸˜o do cliente est´ no RPM de
a ca a
desenvolvimento. Certifique de se instalar este RPM posteriormente.
Na Vers˜o 3.22.8, o suporte Perl ´ distribu´ separadamente do dsitribui¸˜o principal do
a e ido ca
MySQL. Se vocˆ quiser instalar o suporte Perl, os arquivos que vocˆ precisr´ pode ser
e e a
obtidos em http://www.mysql.com/downloads/api-dbi.html.
As distribui¸˜es Perl s˜o fornecidas como arquios tar compactados e s˜o chamados
co a a
‘MODULE-VERSION.tar.gz’, onde MODULE ´ o nome do modulo e VERSION ´ o n´mero da
e e u
vers˜o. Vocˆ deve conseguir as distribui¸˜es Data-Dumper, DBI, e DBD-mysql e instal´-las
a e co a
nesta ordem. O procedimento de instala¸˜o ´ mostrado aqui. O exemplo mostrado ´ para
ca e e
o m´dulo Data-Dumper, mas o procedimento ´ o mesmo para todas as distribui¸˜es:
o e co
1. Descompacte as distribui¸˜es no diret´rio atual:
co o
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
Este comando cria um diret´rio chamado ‘Data-Dumper-VERSION’.
o
2. Entre no diret´rio principal da distribui¸˜o descompactada:
o ca
shell> cd Data-Dumper-VERSION
3. Contrua a dsitribui¸˜o e compile tudo:
ca
shell> perl Makefile.PL
shell> make
shell> make test
shell> make install
O comando make test ´ importante porque verifica que o m´dulo est´ funcionando. Note
e o a
que ao executar este comando durante a instala¸˜o do DBD-mysql para exercitar o c´digo
ca o
da interface, o servidor MySQL deve estar em execu¸˜o ou teste ir´ falhar.
ca a
´
E uma boa id´ia reconstruir e reinstalar a distribui¸˜o DBD-mysql mesmo se vocˆ instalar
e ca e
uma nova distribui¸˜o do MySQL, particularmente se vocˆ notar simntomas como se todos
ca e
os seus scripts DBI realizarem dump core depois de vocˆ atualizar o MySQL.
e
Se vocˆ n˜o tem o direito para instalar os m´dulos Perl no diret´rio de sistema ou se vocˆ
e a o o e
quiser instalar m´dulos Perl locais, a seguinte referˆncia pode ajud´-lo:
o e a
200. 166 MySQL Technical Reference for Version 5.0.0-alpha
http://servers.digitaldaze.com/extensions/perl/modules.html#modules
Procure sob o t´ itulo Installing New Modules that Require Locally Installed
Modules.
2.7.2 Instalaando ActiveState Perl no Windows
Para instalar o m´dulo DBD do MySQL com ActiveState Perl no Windows, vocˆ deve fazer
o e
o seguinte:
• Obter o ActiveState Perl em http://www.activestate.com/Products/ActivePerl/
e instal´-lo.
a
• Abrir um prompt do DOS.
• Se exigido, configurar a vari´vel HTTP_proxy. Por exemplo, vocˆ pode tentar:
a e
set HTTP_proxy=my.proxy.com:3128
• Inicie o progrma PPM:
C:> c:perlbinppm.pl
• Se vocˆ j´ n˜o o fez, instale o DBI:
e a a
ppm> install DBI
• Se der tudo certo, execute o seguinte comando:
install
ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
O acima deve funcionar pelo menos com o ActiveState Perl Vers˜o 5.6.
a
Se vocˆ n˜o puder fazer o mostrado acima funcionar, vocˆ deve instalar o driver MyODBC e
e a e
conectar ao servidor MySQL atrav´s do ODBC:
e
use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
die "Got error $DBI::errstr when connecting to $dsnn";
2.7.3 Problemas Usando a Interface Perl DBI/DBD
Se Perl informar que n˜o pode encontrar o m´dulo ‘../mysql/mysql.so’, ent˜o o
a o a
problema mais prov´vel ´ que o Perl n˜o pode localizar a biblioteca compartilhada
a e a
‘libmysqlclient.so’.
Vocˆ pode corrigir isto por qualquer um dos seguintes m´todos:
e e
• Compile a distribui¸˜o DBD-mysql com perl Makefile.PL -static -config em vez
ca
de perl Makefile.PL.
• Copie ‘libmysqlclient.so’ para a diret´rio onde sua bibliotecas compartilhadas est˜o
o a
localizadas (provavelmente ‘/usr/lib’ ou ‘/lib’).
• No Linux vocˆ pode adicionar o caminho do diret´rio onde ‘libmysqlclient.so’ est´
e o a
localizado ao arquivo ‘/etc/ld.so.conf’.
• Adicione o caminho do diret´rio onde ‘libmysqlclient.so’ est´ localizada ` vari´vel
o a a a
de ambiente LD_RUN_PATH.
201. Cap´
ıtulo 2: Instala¸˜o do MySQL
ca 167
Se voce receber os seguintes erros de DBD-mysql, vocˆ provavelmente est´ usando gcc (ou
e a
usando um bin´rio antigo compilado com gcc):
a
/usr/bin/perl: can’t resolve symbol ’__moddi3’
/usr/bin/perl: can’t resolve symbol ’__divdi3’
Adicione -L/usr/lib/gcc-lib/... -lgcc ao comando de liga¸˜o quando a biblioteca
ca
‘mysql.so’ estiver constru´ (verifique a sa´ de make para ‘mysql.so’ quando vocˆ
ida ida e
compilar o cliente Perl). A op¸˜o -L deve especificar o caminho do diret´rio onde
ca o
‘libgcc.a’ est´ localizada no seu sistema.
a
Outra causa deste problema pode ser que Perl e o MySQL n˜o s˜o compilados com gcc.
a a
Neste caso, vocˆ pode resolver o problema compilando ambos com gcc.
e
Se vocˆ receber o seguinte erro de DBD-mysql quando executar o teste:
e
t/00base............install_driver(mysql) failed:
Can’t load ’../blib/arch/auto/DBD/mysql/mysql.so’ for module DBD::mysql:
../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol:
uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
significa que vocˆ precisa adicionar a biblioteca compactada, -lz, a sua linha de liga¸˜o.
e ca
Isto pode ser feito com a seguinte altera¸˜o no arquivo ‘lib/DBD/mysql/Install.pm’:
ca
$sysliblist .= " -lm";
Altere esta linha para:
$sysliblist .= " -lm -lz";
Depois disto, vocˆ deve executar ’make realclean’ e proceder com o instala¸˜o desde o in´
e ca icio.
Se vocˆ quiser usar o m´dulo Perl em um sistema que n˜o suporta liga¸˜o dinˆmica (como
e o a ca a
SCO) vocˆ pode gerar uma vers˜o est´tica do Perl que inclui DBI e DBD-mysql. O modo
e a a
que isto funciona ´ que vocˆ gera uma vers˜o do Perl com o ¸odigo DBI ligado e instalado
e e a c
no topo do seu Perl atual. Entao vocˆ o utiliza para construir uma vers˜o do Perl que
e a
adicionalmente tem o c´digo DBD ligado em si, e instale-o.
o
No SCO, vocˆ deve ter as seguintes vari´veis de ambiente configuradas:
e a
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
ou
shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:
/usr/progressive/lib:/usr/skunk/lib
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:
/usr/progressive/lib:/usr/skunk/lib
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:
/usr/skunk/man:
Primeiro crie um Perl que inclui um m´dulo DBI ligado estaticamente executando estes
o
comandos no diret´rio onde a sua distribui¸˜o DBI est´ localiada:
o ca a
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
Ent˜o vocˆ deve intalar o novo Perl. A sa´ de make perl indicar´ o comando make
a e ida a
exato que vocˆ precisar´ executar para realizar a instala¸˜o. No SCO, isto ´ make -f
e a ca e
Makefile.aperl inst_perl MAP_TARGET=perl.
202. 168 MySQL Technical Reference for Version 5.0.0-alpha
A seguir use o Perl r´cem criado para criar outro Perl que tamb´m inclui uma DBD::mysql
e e
estaticamente ligado rodando estes comandos no diret´rio onde sua distribui¸˜o DBD-mysql
o ca
est´ localizada:
a
shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl
Finalmente vocˆ deve instalar este novo Perl. Novamente, a sa´ de make perl indica o
e ida
comando a usar.
203. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 169
3 Tutorial de Introdu¸˜o Do MySQL
ca
Este cap´itulo fornece um tutorial de introdu¸˜o ao MySQL demonstrando como usar o
ca
programa cliente mysql para criar e usar um banco de dados simples. mysql (algumas vezes
apresentado como o “terminal monitor” ou apenas “monitor”) ´ um programa interativo que
e
lhe permite conectar a um servidor MySQL, executar consultas e visualizar os resultados.
mysql pode tamb´m ser executado em modo batch: vocˆ coloca suas consultas em um
e e
arquivo, depois diz ao mysql para executar o conte´do do arquivo. Cobrimos aqui ambas
u
as formas de utilizar o mysql.
Para ver uma lista de op¸˜es conhecidas pelo mysql, chame-o com a op¸˜o --help:
co ca
shell> mysql --help
Este cap´itulo presume que o mysql est´ instalado na sua m´quina e que um servidor MySQL
a a
est´ dispon´
a ivel para quem puder conectar. Se isto n˜o for verdade, contate seu admin-
a
istrador MySQL. (Se vocˆ ´ o administrador, vocˆ precisar´ consultar outras se¸˜es deste
e e e a co
manual.)
Este cap´ itulo descreve todo o processo de configura¸˜o e uso de um banco de dados. Se
ca
vocˆ estiver interessado em apenas acessar um banco de dados j´ existente, podera pular
e a
as se¸˜es que descrevem como criar o banco de dados e suas respectivas tabelas.
co
Como este cap´ itulo ´ um tutorial, v´rios detalhes s˜o necessariamente omitidos. Consulte
e a a
as se¸˜es relevantes do manual para mais informa¸˜es sobre os t´picos cobertos aqui.
co co o
3.1 Conectando e Desconectando do Servidor
Para conectar ao servidor, normalmente vocˆ precisar´ fornecer um nome de usu´rio quando
e a a
o mysql for chamado e, na maioria dos casos, uma senha. Se o servidor executa em
uma m´quina diferente de onde vocˆ est´, vocˆ tamb´m precisar´ especificar um nome
a e a e e a
de m´quina. Contate seu administrador para saber quais parˆmetros de conex˜o vocˆ deve
a a a e
usar para conectar (isto ´, qual m´quina, usu´rio e senha usar). Uma vez que vocˆ saiba
e a a e
quais os parˆmetros corretos, vocˆ deve estar pronto para conectar da seguinte forma:
a e
shell> mysql -h servidor -u usuario -p
Enter password: ********
Os asteriscos (********) representam sua senha; digite-a quando o mysql mostrar o prompt
Enter password:.
Se isto funcionar, vocˆ deve ver algumas informa¸oes iniciais seguidas de um prompt mysql>
e c˜
shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 25338 to server version: 4.0.14-log
Type ’help;’ or ’h’ for help. Type ’c’ to clear the buffer.
mysql>
O prompt lhe diz que o mysql est´ pronto para que vocˆ digite os comandos.
a e
204. 170 MySQL Technical Reference for Version 5.0.0-alpha
Algumas instala¸˜es MySQL permitem aos usu´rios de se conectarem como usu´rios
co a a
anˆnimos ao servidor executando na m´quina local. Se isto ´ o caso na sua m´quina, vocˆ
o a e a e
deve conseguir conectar ao servidor chamando o mysql sem qualquer op¸˜o:
ca
shell> mysql
Depois de vocˆ conectar com sucesso, vocˆ pode disconectar a qualquer hora digitando QUIT
e e
(ou q) no prompt mysql>:
mysql> QUIT
Bye
No Unix, vocˆ tamb´m pode desconectar pressionando Control-D.
e e
A maioria dos exemplos nas se¸˜es seguintes assumem que vocˆ j´ est´ conectado ao servidor.
co e a a
Isto ´ indicado pelo prompt mysql>.
e
3.2 Fazendo Consultas
Tenha certeza que vocˆ est´ conectado ao servidor, como discutido na se¸˜o anterior. Isto
e a ca
feito, n˜o ser´ selecionado nenhum banco de dados para trabalhar, mas n˜o tem problemas.
a a a
Neste momento, ´ mais importante saber um pouco sobre como fazer consultas do que j´
e a
criar tabelas, carregar dados para elas, e recuperar dados delas. Esta se¸˜o descreve os
ca
princ´ipios b´sicos da entrada de comandos, usando diversas consultas vocˆ pode tentar se
a e
familiarizar com o funcionamento do mysql.
Aqui est´ um comando simples que solicita ao servidor seu n´mero de vers˜o e a data atual.
a u a
Digite-o como visto abaixo seguindo o prompt mysql> e digite a tecla RETURN:
mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| version() | CURRENT_DATE |
+--------------+--------------+
| 3.22.20a-log | 1999-03-19 |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>
Esta consulta ilustra v´rias coisas sobre o mysql:
a
• Um comando normalmente consiste de uma instru¸˜o SQL seguida por um ponto e
ca
v´
irgula. (Existem algumas exce¸˜es onde um ponto e v´
co irgula podem ser omitidos.
QUIT mencionado anteriormente, ´ um deles. Saberemos de outros mais tarde.)
e
• Quando vocˆ emite um comando, o mysql o envia para o servidor para execu¸˜o e
e ca
mostra os resultados, depois imprime outro prompt mysql> para indicar que est´ pronto
a
para outro comando.
• O mysql mostra a sa´ da consulta em forma tabular (linhas e colunas). A primeira
ida
linha cont´m r´tulos para as colunas. As linhas seguintes s˜o o resultado da consulta.
e o a
Normalmente, r´tulos de colunas s˜o os nomes das colunas que vocˆ busca das tabelas
o a e
do banco de dados. Se vocˆ est´ recuperando o valor de uma express˜o no lugar de
e a a
uma coluna de tabela (como no exemplo j´ visto), o mysql rotula a coluna usando a
a
pr´pria express˜o.
o a
205. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 171
• O mysql mostra quantas linhas foram retornadas e quanto tempo a consulta levou
para executar, o que lhe d´ uma vaga id´ia da performance do servidor. Estes valores
a e
s˜o impreciso porque eles representam tempo de rel´gio (N˜o tempo de CPU ou de
a o a
m´quina), e porque eles s˜o afetados pelos fatores como a carga do servidor e latˆncia
a a e
de rede. (Para resumir, a linha “rows in set” n˜o ´ mostrada nos exemplos seguintes
a e
deste cap´
itulo.)
Palavras Chave podem ser entradas em qualquer caso de letra. As seguintes consultas s˜o a
equivalentes:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
Aqui est´ outra consulta. Ela demonstra que vocˆ pode usar o mysql como uma calculadora
a e
simples:
mysql> SELECT SIN(PI()/4), (4+1)*5;
+-------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+-------------+---------+
| 0.707107 | 25 |
+-------------+---------+
As consultas mostradas at´ agora tˆm sido instru¸˜es relativamente pequenas, de uma linha.
e e co
Vocˆ pode tamb´m entrar com m´ltiplas instru¸˜es em uma unica linha. Basta finalizar
e e u co ´
cada uma com um ponto e v´ irgula:
mysql> SELECT VERSION(); SELECT NOW();
+--------------+
| VERSION() |
+--------------+
| 3.22.20a-log |
+--------------+
+---------------------+
| NOW() |
+---------------------+
| 1999-03-19 00:15:33 |
+---------------------+
Um comando n˜o necessita estar todo em uma unica linha, ent˜o comandos extensos que
a ´ a
necessitam de v´rias linhas n˜o s˜o um problema. O mysql determina onde sua instru¸˜o
a a a ca
termina atrav´s do ponto e v´
e irgula terminador, e n˜o pelo final da linha de entrada. (Em
a
outras palavras, o myqsl aceita entradas de livre formato: Ele coleta linhas de entrada mas
n˜o as executa at´ chegar o ponto e v´
a e irgula.)
Aqui est´ uma instru¸˜o simples usando m´ltiplas linhas:
a ca u
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+--------------------+--------------+
206. 172 MySQL Technical Reference for Version 5.0.0-alpha
| USER() | CURRENT_DATE |
+--------------------+--------------+
| joesmith@localhost | 1999-03-18 |
+--------------------+--------------+
Neste exemplo, note como o prompt altera de mysql> para -> depois de vocˆ entrar a e
primeira linha de uma consulta com m´ltiplas linhas. Isto ´ como o mysql indica que ainda
u e
n˜o achou uma instru¸˜o completa e est´ esperando pelo resto. O prompt ´ seu amigo,
a ca a e
porque ele fornece um retorno valioso. Se vocˆ usa este retorno, vocˆ sempre estar´ ciente
e e a
do que o mysql est´ esperando.
a
Se vocˆ decidir que n˜o deseja executar um comando que est´ no meio do processo de
e a a
entrada, cancele-o digitando c:
mysql> SELECT
-> USER()
-> c
mysql>
Note o prompt aqui tamb´m. Ele troca para o mysql> depois de vocˆ digitar c, fornecendo
e e
retorno para indicar que o mysql est´ pronto para um novo comando.
a
A seguinte tabela mostra cada dos prompts que vocˆ pode ver e resume o que ele significa
e
sobre o estado em que o mysql se encontra:
Prompt Significado
mysql> Pronto para novo comando.
-> Esperando pela pr´xima linha de comando com m´ltiplas linhas.
o u
’> Esperando pela pr´xima linha, coletando uma string que comece com
o
uma aspas simples (‘’’).
"> Esperando pela pr´xima linha, coletando uma string que comece com
o
aspas duplas (‘"’).
‘> Esperando pela pr´xima linha, coletando uma string que comece com
o
crase (‘‘’).
´ muito comum instru¸˜es multi-linhas ocorrerem por acidente quando vocˆ pretende pub-
E co e
licar um comando em uma unica linha, mas esquece o ponto e v´
´ irgula terminador. Neste
caso,o mysql espera por mais entrada:
mysql> SELECT USER()
->
Se isto ocorrer com vocˆ (acha que entrou uma instru¸˜o mas a unica resposta ´ um prompt
e ca ´ e
->), o mais prov´vel ´ que o mysql est´ esperando pelo ponto e v´
a e a irgula. Se vocˆ n˜o
e a
perceber o que o prompt est´ lhe dizendo, vocˆ pode parar por um tempo antes de entender
a e
o que precisa fazer. Entre com um ponto e v´ irgula para completar a instru¸˜o, e o mysql
ca
ir´ execut´-la:
a a
mysql> SELECT USER()
-> ;
+--------------------+
| USER() |
+--------------------+
| joesmith@localhost |
+--------------------+
207. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 173
O prompt ’> e "> ocorrem durante a coleta de strings. No MySQL, vocˆ pode escrever
e
strings utilizando os caracteres ‘’’ ou ‘"’ (por exemplo, ’hello’ ou "goodbye"), e o mysql
permite a entrada de strings que consomem m´ltiplas linhas. Quando vocˆ ver um prompt
u e
’> ou ">, significa que vocˆ digitou uma linha contendo uma string que come¸a com um
e c
caracter de aspas ‘’’ ou ‘"’ mas ainda n˜o entrou com a aspas que termina a string. Isto
a
´ bom se vocˆ realmente est´ entrando com uma string com m´ltiplas linhas, mas qual ´
e e a u e
a probalidade disto acontecer ? N˜o muita. Geralmente, os prompts ’> e "> indicam que
a
vocˆ, por algum descuido, esqueceu algum caracter de aspas. Por exemplo:
e
mysql> SELECT * FROM minha_tabela WHERE nome = "Smith AND idade < 30;
">
Se vocˆ entrar esta senten¸a SELECT, apertar ENTER e esperar pelo resultado, nada ir´
e c a
acontecer. Em vez de se perguntar o porquˆ desta query demorar tanto tempo, perceba a
e
pista fornecida pelo prompt ">. Ele lhe diz que o mysql espera pelo resto de uma string
n˜o terminada. (Vocˆ ve o erro na declara¸˜o? Falta a segunda aspas na string "Smith.)
a e ca
O que fazer neste ponto ? A coisa mais simples ´ cancelar o comando. Entretanto, vocˆ
e e
n˜o pode simplesmente digitar c neste caso, porque o mysql o intrerpreta como parte da
a
string que est´ coletando! Digite o caracter de aspas para fechar (ent˜o o mysql sabe que
a a
vocˆ fechou a string), ent˜o digite c:
e a
mysql> SELECT * FROM minha_tabela WHERE nome = "Smith AND idade < 30;
"> "c
mysql>
O prompt volta para mysql>, indicando que o mysql est´ pronto para um novo comando.
a
O prompt ‘> ´ similar aos prompts ’> e ">, mas indica que vocˆ come¸ou mas n˜o completou
e e c a
um identificados citado com o sinal de crase.
´
E importante saber o que os prompts ’>, "> e ‘> significam, porque se vocˆ entrar sem
e
querer com uma string sem termina¸˜o, quaisquer linhas seguintes que forem digitadas
ca
ser˜o ignoradas pelo mysql — incluindo uma linha contendo QUIT! Isto pode ser um pouco
a
confuso, especialmente se vocˆ n˜o sabe que vocˆ precisa fornecer as aspas finais antes poder
e a e
cancelar o comando atual.
3.3 Cria¸˜o e Utiliza¸˜o de um Banco de Dados
ca ca
Agora que vocˆ j´ sabe como entrar com os comandos, ´ hora de acessar um banco de dados.
e a e
Suponha que vocˆ tenha diversos animais de estima¸˜o em sua casa (menagerie) e vocˆ
e ca e
gostaria de ter o registro de v´rios tipos de informa¸˜es sobre eles. Vocˆ pode fazer isto
a co e
criando tabelas para armazenar seus dados e carreg´-los com a informa¸˜o desejada. Depois
a ca
vocˆ pode responder diferentes tipos de quest˜es sobre seus animais recuperando dados das
e o
tabelas. Esta se¸˜o mostrar´ como:
ca a
• Criar um banco de dados
• Criar uma tabela
• Carregar dados na tabela
• Recuperar dados de uma tabela de v´rias maneiras
a
• Usar m´ltiplas tabelas
u
208. 174 MySQL Technical Reference for Version 5.0.0-alpha
O banco de dados menagerie ser´ simples (deliberadamente), mas n˜o ´ dif´
a a e icil
pensar em situa¸˜es na vida real em que um tipo similar de banco de dados pode
co
ser usado. Por exemplo, um banco de dados deste tipo pode ser usado por um
fazendeiro para gerenciar seu estoque de animais, ou por um veterin´rio para
a
gerenciar registros de seus pacientes. Uma distribui¸˜o do menagerie contendo
ca
algumas das consultas e dados de exemplos usados nas se¸˜es seguintes podem ser
co
obtidas do site Web do MySQL. Est˜o dispon´
a iveis tanto no formato tar comprimido
(http://www.mysql.com/Downloads/Contrib/Examples/menagerie.tar.gz) como no
formato Zip (http://www.mysql.com/Downloads/Contrib/Examples/menagerie.zip).
Utilize a instru¸˜o SHOW para saber quais bancos de dados existem atualmente no servidor:
ca
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
| tmp |
+----------+
A lista de bancos de dados provavelmente ser´ diferente na sua m´quina, mas os bancos de
a a
dados mysql e test provavelmente estar˜o entre eles. O banco de dados mysql ´ necess´rio
a e a
porque ele descreve privil´gios de acessos de usu´rios. O banco de dados test ´ geralamente
e a e
fornecido como um espa¸o para que os usu´rios possam fazer testes.
c a
Note que vocˆ n˜o pode ver todos os banco de dados se vocˆ n˜i tiver o privil´gio SHOW
e a e a e
DATABASES. Veja Se¸˜o 4.4.1 [GRANT], P´gina 255.
ca a
Se o banco de dados test existir, tente acess´-lo:
a
mysql> USE test
Database changed
Perceba que o USE, como o QUIT, n˜o necessitam de um ponto e v´
a irgula. (Vocˆ pode
e
terminar tais declara¸˜es com uma ponto e v´
co irgula se gostar; isto n˜o importa) A instru¸˜o
a ca
USE ´ especial em outra maneira, tamb´m: Ela deve ser usada em uma unica linha.
e e ´
Vocˆ opde usar o banco de dados test (Se vocˆ tiver acesso a ele) para os exemplos que
e e
seguem mas qualquer coisa que vocˆ criar neste banco de dados pode ser removido por
e
qualquer um com acesso a ele. Por esta raz˜o, vocˆ provavelmente deve pedir permiss˜o
a e a
ao seu administrador MySQL para usar um banco de dados pr´prio. Suponha que vocˆ o
o e
chame de menagerie. O administrador precisar executar um comando como este:
mysql> GRANT ALL ON menagerie.* TO ’your_mysql_name’@’your_client_host’;
onde seu_usu´rio_mysql ´ o nome do usu´rio MySQL atribuido a vocˆ e your_client_
a e a e
host ´ a m´quina da qual vocˆ se conecta ao servidor.
e a e
3.3.1 Criando e Selecionando um Banco de Dados
Se o administrador criar seu banco de dados quando configurar as suas permiss˜es, vocˆ
o e
pode come¸ar a us´-lo. Sen˜o, vocˆ mesmo precisa cri´-lo:
c a a e a
209. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 175
mysql> CREATE DATABASE menagerie;
No Unix, nomes de bancos de dados s˜o caso sensitivo (ao contr´rio das palavras chave
a a
SQL), portanto vocˆ deve sempre fazer referˆncia ao seu banco de dados como menagerie
e e
e n˜o Menagerie, MENAGERIE ou outra varia¸˜o. Isto tamb´m ´ verdade para nomes de
a ca e e
tabelas. (No Windows, esta restri¸˜o n˜o se aplica, entiretanto vocˆ deve referenciar os
ca a e
bancos de dados e tabelas usando o mesmo caso em toda a parte da consulta.)
Criar um bancos de dados n˜o o seleciona para o uso; vocˆ deve fazer isso de forma expl´
a e icita.
Para fazer o menagerie o banco de dados atual, use o comando:
mysql> USE menagerie
Database changed
Seu banco de dados necessita ser criado somente uma unica vez, mas vocˆ deve selecion´-lo
´ e a
para o uso cada vez que vocˆ iniciar uma se¸˜o mysql. Vocˆ pode fazer isso usando a
e ca e
instru¸˜o USE como visto no exemplo. Uma forma alternativa ´ selecionar o banco de dados
ca e
na linha de comando quando vocˆ chamar o mysql. Apenas especifique seu nome depois de
e
qualquer parˆmetro de conex˜o que vocˆ pode precisar fornecer. Por exemplo:
a a e
shell> mysql -h servidor -u usuario -p menagerie
Enter password: ********
Perceba que menagerie n˜o ´ sua senha no comando mostrado. Se vocˆ precisar passar sua
a e e
senha na linha de comando depois da op¸˜o -p, vocˆ deve fazˆ-lo sem usar espa¸os (por
ca e e c
exemplo, -pminhasenha e n˜o como em -p minhasenha). Entretando, colocando sua senha
a
na linha de comando n˜o ´ recomendado, porque isto exp˜e sua senha permitindo que outro
a e o
usu´rio utilize a sua m´quina.
a a
3.3.2 Criando uma Tabela
Criar o banco de dados ´ a parte f´cil, mas neste ponto ele est´ vazio, como o SHOW TABLES
e a a
mostrar´:
a
mysql> SHOW TABLES;
Empty set (0.00 sec)
A parte mais dif´ ´ decidir qual a estrutura que seu banco de dados deve ter: quais tabelas
icil e
vocˆ precisar´ e que colunas estar˜o em cada uma delas.
e a a
Vocˆ ir´ precisar de uma tabela para guardar um registro para cada um de seus animais
e a
de estima¸˜o. Esta tabela pode ser chamada pet, e ela deve conter, pelo menos, o nome
ca
de cada animal. Como o nome por si s´ n˜o ´ muito interessante, a tabela dever´ conter
o a e a
outras informa¸˜es. Por exemplo, se mais de uma pessoa na sua fam´ tamb´m tem
co ilia e
animais, vocˆ pode desejar listar cada dono. Vocˆ pode tamb´m desejargravar algumas
e e e
informa¸˜es descritivas b´sicas como esp´cie e sexo.
co a e
Que tal a idade? Pode ser do interesse, mas n˜o ´ uma boa coisa para se armazenar em um
a e
banco de dados. A idade muda ` medida em que o tempo passa, o que significa que vocˆ
a e
sempre ter´ de atualizar seus registros. Em vez disso, ´ melhor armazenar um valor fixo
a e
como a data de nascimento. Ent˜o, sempre que vocˆ precisar da idade, basta vocˆ calcul´-la
a e e a
como a diferen¸a entre a data atual e a data de anivers´rio. O MySQL fornece fun¸˜es para
c a co
fazer aritm´tica de datas, ent˜o isto n˜o ´ dif´
e a a e icil. Armazenando datas de anivers´rio no
a
lugar da idade tamb´m oferece outras vantagens:
e
210. 176 MySQL Technical Reference for Version 5.0.0-alpha
• Vocˆ pode usar o banco de dados para tarefas como gerar lembretes para anivers´rios
e a
que est˜o chegando. (Se vocˆ pensa que este tipo de query ´ algo bobo, perceba que
a e e
´ a mesma quest˜o que vocˆ perguntar no contexto de um banco de dados comercial
e a e
para identificar clientes para quais vocˆ precisar´ enviar cart˜o de anivers´rio, para um
e a a a
toque pessoal assistido pelo computador.)
• Vocˆ pode calcular a idade em rela¸˜o a outras datas diferente da data atual. Por
e ca
exemplo, se vocˆ armazenar a data da morte no banco de dados, vocˆ poder´ facilmente
e e a
calcular qual a idade que o bicho tinha quando morreu.
Vocˆ provavelmente pode pensar em outros tipos de informa¸˜es que poder˜o ser uteis
e co a ´
na tabela pet, mas as identificadas at´ o momento s˜o suficientes por agora: nome(name),
e a
dono(owner), esp´cie(species), sexo(sex), data de nascimento(birth) e data da morte(death).
e
Utilize a sente¸a CREATE TABLE para especificar o layout de sua tabela:
c
mysql> CREATE TABLE pet (nome VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
VARCHAR ´ uma boa escolha para os campos name, owner, e species porque os valores da
e
coluna s˜o de tamanho vari´vel. Os tamanhos destas colunas n˜o precisam necess´riamente
a a a a
de ser os mesmos e n˜o precisam ser 20. Vocˆ pode escolher qualquer tamanho de 1 a 255,
a e
o que vocˆ achar melhor. (Se vocˆ n˜o fizer uma boa escolha e depois precisar de um campo
e e a
maior, o MySQL fornece o comando ALTER TABLE.)
O sexo dos animais podem ser representados em v´rias formas, por exemplo, "m" e "f" ou
a
´
mesmo "macho" e "f^mea". E mais simples usar os caracteres "m" e "f".
e
O uso do tipo de dados DATE para as colunas birth e death s˜o obviamente a melhor
a
escolha.
Agora que vocˆ criou uma tabela, a instru¸˜o SHOW TABLES deve produzir alguma sa´
e ca ida:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet |
+---------------------+
Para verificar se sua tabela foi criada da forma que vocˆ esperava, utilize a instru¸˜o
e ca
DESCRIBE:
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
Vocˆ pode usar DESCRIBE a qualquer hora, por exemplo, se vocˆ esquecer os nomes das
e e
colunas na sua tabela ou de que tipos elas tˆm.
e
211. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 177
3.3.3 Carregando dados em uma tabela
Depois de criar sua tabela, vocˆ precisar´ povo´-la. As instru¸˜es LOAD DATA e INSERT s˜o
e a a co a
uteis para isto.
´
Suponha que seu registro de animais possa ser descrito como ´ abaixo: (Observe que o
e
MySQL espera datas no formato AAAA-MM-DD; isto pode ser diferente do que vocˆ est´
e a
acostumado.)
name owner species sex birth death
Fluffy Harold cat f 1993-02-04
Claws Gwen cat m 1994-03-17
Buffy Harold dog f 1989-05-13
Fang Benny dog m 1990-08-27
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11
Whistler Gwen bird 1997-12-09
Slim Benny snake m 1996-04-29
Como vocˆ est´ come¸ando com uma tabela vazia, uma forma simples de povo´-la ´ criar
e a c a e
um arquivo texto contendo uma linha para cada um de seus animais, e depois carregar o
conte´do do arquivo para a tabela com uma simples instru¸˜o.
u ca
Vocˆ pode criar um arquivo texto ‘pet.txt’ contendo um registro por linha, com valores
e
separado por tabula¸˜es e na mesma ordem em que as colunas foram listadas na instru¸˜o
co ca
CREATE TABLE. Para valores em falta (como sexo desconhecido ou data da morte para
animais que ainda est˜o vivos), vocˆ pode usar valores NULL. Para represent´-lo em seu
a e a
´
arquivo texto, use N (barra invertidam N maiusculo). Por exemplo, o registro para Whistler
the bird podem parecer com isto (onde o espa¸o em branco entre os valores ´ um simples
c e
caractere de tabula¸˜o):
ca
name owner species sex birth death
Whistler Gwen bird N 1997-12-09 N
Para carregar o arquivo texto ‘pet.txt’ na tabela pet, use este comando:
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
Vocˆ pode especificar o valor do separador de colunas e o marcador de final de linha explici-
e
tamente na instru¸˜o LOAD DATA se vocˆ desejar. Mas os valores omitidos s˜o suficientes
ca e a
para a instru¸˜o ler o arquivo ‘pet.txt’ corretamente.
ca
Se a instru¸˜o falhar, ´ desej´vel que a sua instala¸˜o do MySQL n˜o tenha a capacidade
ca e a ca a
do arquivo local habilitada por padr˜o. Veja Se¸˜o 4.3.4 [LOAD DATA LOCAL], P´gina 232
a ca a
para informa¸˜es sobre como alterar isto.
co
Quando vocˆ desejar adicionar novos registros um a um, a instru¸˜o INSERT ´ usada. Na
e ca e
sua forma mais simples, vocˆ fornece valores para cada coluna, na ordem em que as colunas
e
foram listadas na instru¸˜o CREATE TABLE. Suponha que Diane tenha um novo hamster
ca
chamado Puffball. Vocˆ pode adicionar um registro utilizando uma instru¸˜o INSERT desta
e ca
forma:
mysql> INSERT INTO pet
-> VALUES (’Puffball’,’Diane’,’hamster’,’f’,’1999-03-30’,NULL);
212. 178 MySQL Technical Reference for Version 5.0.0-alpha
Perceba que os valores de string e datas s˜o especificados aqui como strings com aspas.
a
Com o INSERT vocˆ tamb´m pode inserir NULL diretamente para representar um valor em
e e
falta. N˜o pode ser usado N como vocˆ fez com LOAD DATA.
a e
A partir deste exemplo, vocˆ dever´ perceber que existem v´rias outras formas envolvidas
e a a
para carregar seus registros inicialmente utilizando diversas instru¸˜es INSERT do que uma
co
simples instru¸˜o LOAD DATA.
ca
3.3.4 Recuperando Informa¸oes de uma Tabela
c˜
A instru¸˜o SELECT ´ usada para recuperar informa¸˜es de uma tabela. A forma geral da
ca e co
instru¸˜o ´:
ca e
SELECT o_que_mostrar
FROM de_qual_tabela
WHERE condi¸~es_para_satisfazer;
co
o_que_mostrar indica o que vocˆ deseja ver. Isto pode ser uma lista de colunas ou * para
e
indicar “todas colunas.” de_qual_tabela indica a tabela de onde vocˆ deseja recuperar
e
os dados. A cl´usula WHERE ´ opcional. Se estiver presente, condi¸~es_para_satisfazer
a e co
especificam as condi¸˜es que os registros devem satisfazer para fazer parte do resultado.
co
3.3.4.1 Selecionando Todos os Dados
A forma mais simples do SELECT recuperar tudo de uma tabela:
mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
Esta forma do SELECT ´ util se vocˆ deseja ver sua tabela inteira como agora, depois de
e ´ e
vocˆ acabar de carreg´-la com os dados iniciais. Por exempo, vocˆ pode pensar que a data
e a e
de nascimento do Bowser n˜o est´ correta. Consultando seus pap´is originais de pedigree,
a a e
descobriu que o ano correto do nascimento deve ser 1989, n˜o 1979.
a
Existem pelo menos duas formas de corrigir isto:
• Edite o arquivo ‘pet.txt’ para corrigir o erro, depois limpe a tabela e recarregue-o
usando DELETE e LOAD DATA:
mysql> DELETE FROM pet;
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
213. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 179
Entretanto, se vocˆ fizer isto, vocˆ tamb´m deve refazer a entrada para Puffball.
e e e
• Corrigir somente o registro errado com uma instru¸˜o UPDATE:
ca
mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser";
O UPDATE altera apenas o registro em quest˜o e n˜o exige que vocˆ recarregue a tabela.
a a e
3.3.4.2 Selecionando Registros Espec´
ificos
Como foi mostrado na se¸˜o anterior, ´ f´cil recuperar uma tabela inteira. Apenas omita
ca e a
a cl´usula WHERE da instru¸˜o SELECT. Mas normalmente vocˆ n˜o quer ver toda a tabela,
a ca e a
particularmente quando a tabela ficar grande. Em vez disso, vocˆ estar´ mais interessado em
e a
ter a resposta de uma quest˜o em particular, no qual vocˆ especifica detalhes da informa¸˜o
a e ca
que deseja. Vamos ver algumas consultas de sele¸˜o nos termos das quest˜es sobre seus
ca o
animais.
Vocˆ pode selecionar apenas registros espec´
e ificos da sua tabela. Por exemplo, se vocˆ deseja
e
verificar a altera¸˜o que fez na data de nascimento do Bowser, selecione o registro desta
ca
forma:
mysql> SELECT * FROM pet WHERE name = "Bowser";
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
A sa´ confirma que o ano foi gravado corretamente agora como 1989 e n˜o 1979.
ida a
Compara¸˜es de strings normalmente s˜o caso insensitivo, ent˜o vocˆ pode especificar o
co a a e
nome como "bowser", "BOWSER", etc. O resultado da pesquisa ser´ o mesmo.
a
Vocˆ pode especificar condi¸˜es em qualquer coluna, n˜o apenas no name. Por exemplo,
e co a
se vocˆ deseja saber quais foram os animais que nasceram depois de 1998, teste o campo
e
birth:
mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
Vocˆ pode combinar condi¸˜es, por exemplo, para encontrar cadelas (dog/f):
e co
mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
A consulta anterior utiliza o operador l´gico AND (e). Existe tamb´m um operador OR (ou):
o e
214. 180 MySQL Technical Reference for Version 5.0.0-alpha
mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+-------+---------+------+------------+-------+
AND e OR podem ser misturados, embora AND tem maior precedˆncia que OR. Se vocˆ usar
e e
ambos os operadores, ´ uma ´tima id´ia usar parˆnteses para indicar explicitamente quais
e o e e
condi¸˜es devem ser agrupadas:
co
mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m")
-> OR (species = "dog" AND sex = "f");
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
3.3.4.3 Selecionando Colunas Espec´
ificas
Se vocˆ n˜o desejar ver todo o registro de sua tabela, especifique as colunas em que vocˆ
e a e
´
estiver interessado, separado por virgulas. Por exemplo, se vocˆ deseja saber quando seus
e
animais nasceram, selecione as colunas name e birth:
mysql> SELECT name, birth FROM pet;
+----------+------------+
| name | birth |
+----------+------------+
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Buffy | 1989-05-13 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+
Para saber quem s˜o os donos dos animais, use esta consulta:
a
mysql> SELECT owner FROM pet;
+--------+
| owner |
+--------+
| Harold |
215. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 181
| Gwen |
| Harold |
| Benny |
| Diane |
| Gwen |
| Gwen |
| Benny |
| Diane |
+--------+
Entretanto, perceba que a query simplesmente retornou o campo owner de cada registro, e
alguns deles apareceram mais de uma vez. Para minimizar a sa´
ida, recupere cada registro
apenas uma vez, adicionando a palavra chave DISTINCT:
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner |
+--------+
| Benny |
| Diane |
| Gwen |
| Harold |
+--------+
Vocˆ pode usar uma cl´usula WHERE para combinar sele¸˜o de registros com sele¸˜o de
e a ca ca
colunas. Por exemplo, para obter a data de nascimento somente dos gatos e cachorros,
utilize esta query:
mysql> SELECT name, species, birth FROM pet
-> WHERE species = "dog" OR species = "cat";
+--------+---------+------------+
| name | species | birth |
+--------+---------+------------+
| Fluffy | cat | 1993-02-04 |
| Claws | cat | 1994-03-17 |
| Buffy | dog | 1989-05-13 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
+--------+---------+------------+
3.3.4.4 Ordenando Registros
Vocˆ deve ter percebido nos exemplos anteriores que os registros retornados n˜o s˜o mostra-
e a a
dos de forma ordenada. Normalmente ´ mais f´cil examinar a saida
e a ´ da consulta quando os
registros s˜o ordenados com algum sentido. Para ordenar o resultado, utilize uma cl´usula
a a
ORDER BY.
Aqui est´ o dia de nascimento dos animais, ordenado por data:
a
mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
216. 182 MySQL Technical Reference for Version 5.0.0-alpha
| name | birth |
+----------+------------+
| Buffy | 1989-05-13 |
| Bowser | 1989-08-31 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+
Em colunas de tipo de caracter, ordenai¸˜o como qualquer outra opera¸˜o de compara¸˜o
ca ca ca
´ normalmente realizada no modo caso insensitivo. Isto significa que a ordem ser´ in-
e a
definida para colunas que s˜o idˆnticas exceto quanto ao caso da letra. Vocˆ pode for¸ar
a e e c
uma ordena¸˜o em caso senitivo para uma coluna usando a coer¸˜o BINARY: ORDER BY
ca ca
BINARY(campo).
A ordena¸˜o padr˜o ´ crescente, com os valores menores em primeiro. Para ordena¸˜o na
ca a e ca
ordem reversa, adicione a palavra chave DESC (descendente) ao nome da coluna que deve
ser ordenada:
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name | birth |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Claws | 1994-03-17 |
| Fluffy | 1993-02-04 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Buffy | 1989-05-13 |
+----------+------------+
Vocˆ pode ordenar por m´ltiplas colunas e vocˆ pode classificar colunas em dire¸˜es difer-
e u e co
entes. Por exemplo, para ordenar o tipo de animal em ordem crescente, depois por dia de
nascimento dentro do tipo de animal em ordem decrescente (com os mais novos primeiro),
utilize a seguinte consulta:
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
+----------+---------+------------+
| name | species | birth |
+----------+---------+------------+
| Chirpy | bird | 1998-09-11 |
| Whistler | bird | 1997-12-09 |
| Claws | cat | 1994-03-17 |
| Fluffy | cat | 1993-02-04 |
217. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 183
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
| Buffy | dog | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim | snake | 1996-04-29 |
+----------+---------+------------+
Perceba que a palavra chave DESC aplica somente para o nome da coluna precedente (birth);
ela n˜o afeta a ordena¸˜o da coluna species.
a ca
3.3.4.5 C´lculo de Datas
a
O MySQL fornece v´rias fun¸˜es que vocˆ pode usar para realizar c´lculos em datas, por
a co e a
exemplo, para calcular idades ou extrair partes de datas.
Para determinar quantos anos cada um do seus animais tem, compute a diferen¸a do ano
c
da data atual e a data de nascimento (birth), depois subtraia se a o dia/mˆs da data atual
e
for anterior ao dia/mˆs da data de nascimento. A consulta seguinte, mostra, para cada
e
animal, a data de nascimento, a data atual e a idade em anos.
mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
-> AS age
-> FROM pet;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
+----------+------------+------------+------+
Aqui, YEAR() separa a parte do ano de uma data e RIGHT() separa os cinco caracteres mais
a direita que representam a parte da data MM-DD. A parte da express˜o que compara os
a
valores MM-DD resulta em 1 ou 0, o qual ajusta a diferen¸a do ano um ano abaixo se CURDATE
c
ocorrer mais cedo, no ano, que birth. A express˜o completa ´ um tanto deselegante, ent˜o
a e a
um apelido (age) ´ usado para obter uma sa´ mais significativa.
e ida
A consulta funciona, mas o resultado pode ser mais compreens´ ivel se os registros forem
apresentados em alguma ordem. Isto pode ser feito adicionando uma cl´usula ORDER BY
a
´ pelo nome:
name para ordenar a saida
mysql> SELECT name, birth, CURDATE(),
218. 184 MySQL Technical Reference for Version 5.0.0-alpha
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
-> AS age
-> FROM pet ORDER BY name;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
+----------+------------+------------+------+
Para ordenar a sa´ por age em vez de name, ´ s´ utilizar uma cl´usua ORDER BY diferente:
ida e o a
mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
-> AS age
-> FROM pet ORDER BY age;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
+----------+------------+------------+------+
Uma consulta similar pode ser usada para determinar a idade na morte para animais que
morreram. Para determinar quais s˜o os animais, confira se o valor de death n˜o ´ NULL.
a a e
Depois para estes com valores n˜o-NULL, compute a diferen¸a entre os valores dos campos
a c
death e birth:
mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5))
-> AS age
-> FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name | birth | death | age |
219. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 185
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 | 5 |
+--------+------------+------------+------+
A consulta usa death IS NOT NULL em vez de death != NULL porque NULL ´ um valor es-
e
pecial que n˜o pode ser comparada usando operadores comuns de compara¸˜o. Isto ser´
a ca a
explicado depois. Veja Se¸˜o 3.3.4.6 [Working with NULL], P´gina 186.
ca a
E se vocˆ desejar saber quais animais fazem anivers´rio no pr´ximo mˆs? Para este tipo
e a o e
de c´lculo, ano e dia s˜o irrelevantes; vocˆ simplesmente deseja extrair a parte do mˆs da
a a e e
coluna birth. O MySQL fornece diversas fun¸˜es para extrair partes da data, como em
co
YEAR(), MONTH() e DAYOFMONTH(). MONTH ´ a fun¸˜o apropriada aqui. Para ver como ela
e ca
funciona, execute uma consulta simples que mostre o valor de birth e MONTH(birth):
mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name | birth | MONTH(birth) |
+----------+------------+--------------+
| Fluffy | 1993-02-04 | 2 |
| Claws | 1994-03-17 | 3 |
| Buffy | 1989-05-13 | 5 |
| Fang | 1990-08-27 | 8 |
| Bowser | 1989-08-31 | 8 |
| Chirpy | 1998-09-11 | 9 |
| Whistler | 1997-12-09 | 12 |
| Slim | 1996-04-29 | 4 |
| Puffball | 1999-03-30 | 3 |
+----------+------------+--------------+
Encontrar animais com an´ ivers´rio no pr´ximo mˆs tamb´m ´ f´cil. Suponha que o mˆs
a o e e e a e
atual ´ abril. Ent˜o o valor do mˆs ´ 4 e vocˆ procura por animais nascidos em Maio (mˆs
e a e e e e
5) assim:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name | birth |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+
Existe uma pequena complica¸˜o se o mˆs atual ´ Dezembro, ´ claro. Vocˆ n˜o pode apenas
ca e e e e a
adicionar um para o n´mero do mˆs (12) e procurar por animais nascidos no mˆs 13, porque
u e e
n˜o existe tal mˆs. O certo seria procurar por animais nascidos em Janeiro (mˆs 1).
a e e
Vocˆ pode tamb´m escrever uma consulta para que funcione sem importar qual ´ o mˆs
e e e e
atual. Assim vocˆ n˜o tˆm quee usar um n´mero de mˆs em particular na consulta. DATE_
e a e u e
ADD() permite adicionar um intervalo de tempo para uma data fornecida. Se vocˆ adicionar
e
um mˆs para o valor de CURDATE, ent˜o extrair a parte do mˆs com MONTH(), o resultado ´
e a e e
o mˆs no qual vocˆ deseja procurar por anivers´rios:
e e a
mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));
220. 186 MySQL Technical Reference for Version 5.0.0-alpha
Uma maneira diferente para realizar a mesma tarefa ´ adicionar 1 para obter o mˆs seguinte
e e
ao atual (depois de usar a fun¸˜o m´dulo (MOD) para o valor do mˆs retornar 0 se ele for
ca o e
12):
mysql> SELECT name, birth FROM pet
-> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
Perceba que MONTH retorna um n´mero entre 1 e 12. E MOD(alguma_coisa,12) retorna um
u
n´mero entre 0 e 11. Ent˜o a adi¸˜o tem que ser feita depois do MOD(), sen˜o ir´
u a ca a iamos de
Novembro (11) para Janeiro (1).
3.3.4.6 Trabalhando com Valores Nulos (NULL)
O valor NULL pode ser supreendente at´ vocˆ us´-lo. Conceitualmente, NULL significa valor
e e a
em falta ou valor desconhecido e ´ tratado de uma forma diferente de outros valores. Para
e
testar o valor NULL, vocˆ n˜o pode usar os operadores de compara¸˜es aritm´ticas como em
e a co e
=, <, ou !=. Para demonstrar para vocˆ mesmo, tente executar a seguinte consulta:
e
mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Claramente vocˆ n˜o obter´ resultados significativos destas compara¸˜es. Utilize os oper-
e a a co
adores IS NULL e IS NOT NULL no lugar:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
No MySQL, 0 ou NULL significa falso e o resto ´ verdadeiro. O valor verdadeiro por o padr˜o
e a
em uma opera¸˜o booleana ´ 1.
ca e
Este tratamento especial de NULL ´ porque, na se¸˜o anterior, foi necess´rio determinar
e ca a
quais animais n˜o estavam mais vivos usando death IS NOT NULL no lugar de death <>
a
NULL.
Dois valores NULL s˜o considerados como iguais em um GROUP BY.
a
Ao fazer um ORDER BY, valores NULL s˜o apresentados primeiro se vocˆ fizer ORDER BY ...
a e
ASC e por ultimo se vocˆ fizer ORDER BY ... DESC.
´ e
Note que o MySQL 4.0.2 a 4.0.10 sempre ordenam, incorretamente, valores NULL em primeiro
independente da ordem escolhida.
3.3.4.7 Combina¸˜o de padr˜es
ca o
O MySQL fornece combina¸˜o de padr˜es do SQL bem como na forma de combina¸˜o
ca o ca
de padr˜es baseado nas express˜es regulares extendidas similares `quelas usadas pelos
o o a
utilit´rios Unix como o vi, grep e sed.
a
221. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 187
A combina¸˜o de padr˜es SQL lhe permite vocˆ usar _ para coincidir qualquer caractere
ca o e
simples e % para coincidir um n´mero arbitr´rio de caracteres (incluindo zero caracter).
u a
No MySQL, padr˜es SQL s˜o caso insensitivo por padr˜o. Alguns exemplos s˜o vistos
o a a a
abaixo. Perceba que vocˆ n˜o usa = ou != quando usar padr˜es SQL; use os operadores de
e a o
compara¸˜o LIKE ou NOT LIKE neste caso.
ca
Para encontrar nomes come¸ando com ‘b’:
c
mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
Para encontrar nomes com o final ‘fy’:
mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Para encontrar nomes contendo um ‘w’:
mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
Para encontrar nomes contendo exatamente cinco caracteres, use cinco instˆncias do carac-
a
ter ‘_’:
mysql> SELECT * FROM pet WHERE name LIKE "_____";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
O outro tipo de combina¸˜o de padr˜es fornecido pelo MySQL usa express˜es regulares
ca o o
extendidas. Quando vocˆ testa por uma combina¸˜o para este tipo de padr˜o, utilize os
e ca a
operadores REGEXP e NOT REGEXP (ou RLIKE e NOT RLIKE, que s˜o sinˆnimos).
a o
Algumas caracter´
isticas das express˜es regulares extendidas s˜o:
o a
• ‘.’ combina qualquer caractere unico
´
222. 188 MySQL Technical Reference for Version 5.0.0-alpha
• Uma classe de caracteres ‘[...]’ combina qualquer caractere que consta dentro dos
colchetes. Por exemplo, ‘[abc]’ combina com ‘a’, ‘b’, ou ‘c’. Para nomear uma
sequˆncia de caracteres utilize um tra¸o. ‘[a-z]’ combina com qualquer letra e ‘[0-9]’
e c
combina com qualquer d´ igito.
• ‘*’ combina com nenhuma ou mais instˆncias de sua precedˆncia. Por exemplo, ‘x*’
a e
combina com qualquer n´mero de caracteres ‘x’, ‘[0-9]*’ combina com qualquer
u
n´mero de d´
u igitos e ‘.*’ combina com qualquer n´mero de qualquer coisa.
u
• Um padr˜o REGEXP casa com sucesso se ele ocorre em algum lugar no valor sendo
a
testado. (Ele difere do padr˜o LIKE, que s´ obtem suceeso se eles combinarem com
a o
todo o valor.)
• Para fazer com que um padr˜o deva combinar com o come¸o ou o fim de um valor
a c
sendo testado, utilize ‘^’ no come¸o ou ‘$’ no final do padr˜o.
c a
Para demonstrar como express˜es regulares extendidas funcionam, as consultas com LIKE
o
mostradas acima foram reescritas abaixo usando REGEXP.
Para encontrar nomes come¸ando com ‘b’, utilize ‘^’ para combinar com o come¸o do nome:
c c
mysql> SELECT * FROM pet WHERE name REGEXP "^b";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
Antes da vers˜o 3.23.4 do MySQL, REGEXP era caso sensitivo, e a consulta anterior n˜o iria
a a
retornar nenhum registro. Neste caso, para combinar letras ‘b’ mai´sculas e min´sculas,
u u
utilize esta consulta:
mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
A partir do MySQL 3.23.4, se vocˆ realmente deseja for¸ar uma compara¸˜o REGEXP com
e c ca
caso sensitivo, utilize a palavra-chave BINARY para tornar uma das strings em uma string
bin´rias. Esta consulta ir´ combinar somente com ‘b’s min´sculos no come¸o de um nome:
a a u c
mysql> SELECT * FROM pet WHERE name REGEXP BINARY "^b";
Para encontrar nomes finalizados com ‘fy’, utilize ‘$’ para combinar com o final do nome:
mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Para encontrar nomes contendo um ‘w’, utilize esta consulta:
mysql> SELECT * FROM pet WHERE name REGEXP "w";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
223. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 189
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
Como uma express˜o regular extendida encontra padr˜es coincidentes se eles ocorrem em
a o
qualquer lugar no valor comparado, n˜o ´ necess´rio utiliar, na consulta anterior, nenhum
a e a
metacaracter em nenhum dos lados do padr˜o para fazˆ-lo coincidir com todo o valor, como
a e
seria feito se fosse utilizado o padr˜o SQL.
a
Para encontrar nomes contendo exatamente cinco caracteres, utilize ‘^’ e ‘$’ para combinar
com o come¸o e fim do nome e cinco instˆncias de ‘.’ entre eles.
c a
mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
Vocˆ pode tamb´m escrever a consulta anterior utilizando o operador ‘{n}’ “repete-n-vezes”:
e e
mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
3.3.4.8 Contando Registros
Bancos de dados normalmente s˜o usados para responder a perguntas, “Qual a frequˆncia
a e
que certo tipo de dados ocorre em uma tabela?” Por exemplo, vocˆ deve querer saber
e
quantos animais tem, ou quantos animais cada dono tem, ou vocˆ pode querer fazer v´rios
e a
outros tipos de opera¸˜es de censo com seus animais.
co
Contando o n´mero total de animais que vocˆ tem ´ a mesma quest˜o como em “Quantos
u e e a
registros existem na tabela pet?” porque existe um registro por animal. COUNT(*) conta
o n´mero de resultados n˜o-NULL, portanto a pesquisa para contar seus animais parecer´
u a a
com isto:
mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+
Logo, vocˆ recuperar´ os nomes das pessoas que possuam animais. Vocˆ pode usar COUNT()
e a e
se vocˆ desejar encontrar quantos animais cada dono possui:
e
224. 190 MySQL Technical Reference for Version 5.0.0-alpha
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner | COUNT(*) |
+--------+----------+
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
+--------+----------+
Perceba o uso de GROUP BY para agrupar todos os registros para cada owner (dono). Sem
ele, vocˆ teria uma mensagem de erro:
e
mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
with no GROUP columns is illegal if there is no GROUP BY clause
COUNT() e GROUP BY s˜o uteis para personalizar seus dados de diversas maneiras. Os
a ´
seguintes exemplos mostram diferentes maneiras para realizar opera¸˜es de censo nos ani-
co
mais.
N´mero de animais por esp´cie:
u e
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| bird | 2 |
| cat | 2 |
| dog | 3 |
| hamster | 1 |
| snake | 1 |
+---------+----------+
N´mero de animais por sexo:
u
mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+------+----------+
| sex | COUNT(*) |
+------+----------+
| NULL | 1 |
| f | 4 |
| m | 4 |
+------+----------+
(Nesta sa´ida, NULL indica que o sexo ´ desconhecido.)
e
N´mero de animais combinando esp´cie e sexo:
u e
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird | NULL | 1 |
| bird | f | 1 |
225. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 191
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+---------+------+----------+
N˜o ´ necess´rio selecionar uma tabela inteira quando estiver usando COUNT(). Por exemplo,
a e a
a consulta anterior, quando realizada apenas procurando por cachorros e gatos, se parece
com isto:
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE species = "dog" OR species = "cat"
-> GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
+---------+------+----------+
Ou se vocˆ desejar saber o n´mero de animais por sexo somente de animais com sexo
e u
conhecido:
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE sex IS NOT NULL
-> GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+---------+------+----------+
3.3.4.9 Utilizando M´ ltiplas Tabelas
u
A tabela pet mant´m informa¸˜es de quais animais vocˆ tem. Se vocˆ deseja gravar outras
e co e e
informa¸˜es sobre eles como eventos em suas vidas, tais como visitas ao veterin´rio ou sobre
co a
suas crias, vocˆ necessitar´ de outra tabela. Como esta tabela deve se parecer ? Ela precisa:
e a
• Conter o nome do animal para que vocˆ saiba a qual animal pertence o evento.
e
• Uma data para que vocˆ saiba quando ocorreu o evento.
e
226. 192 MySQL Technical Reference for Version 5.0.0-alpha
• Um campo para descrever o evento.
• Um campo com o tipo de evento, se vocˆ desejar classific´-los por categoria.
e a
Dadas estas considera¸˜es, a instru¸˜o CREATE TABLE para a tabela event deve se parecer
co ca
com isto:
mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
-> type VARCHAR(15), remark VARCHAR(255));
Como na tabela pet, ´ mais f´cil carregar os registros iniciais criando um arquivo texto
e a
delimitado por tabula¸˜es contendo a informa¸˜o:
co ca
name date type remark
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday
Carregue os registros usando:
mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;
Baseado no que vocˆ j´ aprendeu com as consultas realizadas na tabela pet, vocˆ deve estar
e a e
apto para realizar pesquisas na tabela event; os princ´ipios s˜o o mesmo. Mas quando a
a
tabela event, sozinha, ´ insuficiente para responder `s suas quest˜es?
e a o
Suppose you want to find out the ages at which each pet had its litters. We saw earlier how
to calculate ages from two dates. The litter date of the mother is in the event table, but
to calculate her age on that date you need her birth date, which is stored in the pet table.
This means the query requires both tables:
Suponha que vocˆ deseje descobrir as idades de cada animal quando eles tiveram cria. N´s
e o
vemos logo que ´ poss´ calcular a idade a partir das duas datas. A idade dos filhotes est´
e ivel a
na tabela event, mas para calcular a idade da m˜e, vocˆ precisar´ da data de nascimento
a e a
dela, que est´ armazenado na tabela pet. Isto significa que vocˆ precisar´ das duas tabelas
a e a
para a consulta:
mysql> SELECT pet.name,
-> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age,
-> remark
-> FROM pet, event
-> WHERE pet.name = event.name AND type = "litter";
+--------+------+-----------------------------+
| name | age | remark |
+--------+------+-----------------------------+
| Fluffy | 2 | 4 kittens, 3 female, 1 male |
| Buffy | 4 | 5 puppies, 2 female, 3 male |
| Buffy | 5 | 3 puppies, 3 female |
227. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 193
+--------+------+-----------------------------+
Existem v´rias coisas que devem ser percebidas sobre esta consulta:
a
• A cl´usula FROM lista as duas tabelas porque a consulta precisa extrair informa¸˜o de
a ca
ambas.
• Quando combinar (unir) informa¸˜es de m´ltiplas tabelas, vocˆ precisa especificar como
co u e
registros em uma tabela podem ser coincididas com os registros na outra. Isto ´ simples
e
porque ambas possuem uma coluna name. A consulta utiliza a cl´usula WHERE para
a
coincidir registros nas duas tabelas baseadas nos valores de name.
• Como a coluna name ocorre em ambas tabelas, vocˆ deve especificar qual a tabela a que
e
vocˆ est´ se referindo. Isto ´ feito usando o nome da tabela antes do nome da coluna
e a e
separados por um ponto (.).
Vocˆ n˜o precisa ter duas tabelas diferentes para realizar uma uni˜o. Algumas vezes ´ util
e a a e´
unir uma tabela a ela mesma, se vocˆ deseja comparar registros em uma tabela com outros
e
registros na mesma tabela. Por exemplo, para encontrar pares entre seus animais, vocˆ e
pode unir a tabela pet com ela mesma para produzir pares candidatos de machos e fˆmeas
e
de acordo com as esp´cies:
e
mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
-> FROM pet AS p1, pet AS p2
-> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m";
+--------+------+--------+------+---------+
| name | sex | name | sex | species |
+--------+------+--------+------+---------+
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
+--------+------+--------+------+---------+
Nesta consulta, n´s especificamos apelidos para os nomes das tabelas para conseguir ref-
o
erenciar `s colunas e manter com qual instˆncia da tabela cada coluna de referˆncia est´
a a e a
associdada.
3.4 Obtendo Informa¸oes Sobre Bancos de Dados e Tabelas
c˜
E se vocˆ esquecer o nome de um banco de dados ou tabela, ou como ´ a estrutura de
e e
uma certa tabela (por exemplo, como suas colunas s˜o chamadas)? O MySQL resolve este
a
problema atrav´s de diversas instru¸˜es que fornecem informa¸˜es sobre os bancos de dados
e co co
e as tabelas que ele suporta.
Vocˆ j´ viu SHOW DATABASES, que lista os bancos de dados gerenciados pelo servidor. Para
e a
saber qual banco de dados est´ sendo usado atualmente, utilize a fun¸˜o DATABASE():
a ca
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+
228. 194 MySQL Technical Reference for Version 5.0.0-alpha
Se vocˆ ainda n˜o selecionou nenhum banco de dados ainda, o resultado ´ NULL. (ou a
e a e
string vazia antes do MySQL 4.1.1).
Para saber quais tabelas o banco de dados atual contˆm (por exemplo, quando vocˆ n˜o
e e a
tem certeza sobre o nome de uma tabela), utilize este comando:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| event |
| pet |
+---------------------+
Se vocˆ deseja saber sobre a estrutura de uma tabela, o comando DESCRIBE ´ util; ele mostra
e e´
informa¸˜es sobre cada uma das colunas da tabela:
co
mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
A coluna Field (campo) indica o nome da coluna, Type ´ o tipo de dados para a coluna,
e
Null indica se a coluna pode conter valores nulos (NULL), key indica se a coluna ´ indexada
e
ou n˜o e Default especifica o valor padr˜o da coluna.
a a
e ´
Se vocˆ tem indices em uma tabela, SHOW INDEX FROM tbl_nome traz informa¸˜es sobre eles.
co
3.5 Utilizando mysql em Modo Batch
Nas se¸˜es anteriores, vocˆ usou mysql interativamente para fazer consultas e ver os re-
co e
sultados. Vocˆ pode tamb´m executar mysql no modo batch. Para fazer isto, coloque os
e e
comando que vocˆ deseja executar em um arquivo, e diga ao mysqld para ler sua entrada
e
do arquivo:
shell> mysql < batch-file
Se vocˆ estiver executando o mysql no Windows e tiver algum caracter especial no arquivo
e
que provocou o problema, vocˆ pode fazer:
e
dos> mysql -e "source batch-file"
Se vocˆ precisa especificar parˆmetros de conex˜o na linha de comando, o comando deve
e a a
parecer com isto:
shell> mysql -h host -u user -p < batch-file
Enter password: ********
229. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 195
Quando vocˆ utilizar o mysql desta forma, vocˆ estar´ criando um arquivo script, depois
e e a
executando o script.
Se vocˆ quiser que o script continue mesmo se hopuver erros, vocˆ deve usar a op¸˜o de
e e ca
linha de comando --force.
Por que usar um script? Existem v´rias raz˜es:
a o
• Se vocˆ executa uma query repetidamente (digamos, todos os dias ou todas as semanas),
e
transform´-lo em um script permite que vocˆ n˜o o redigite toda vez que o executa.
a e a
• Vocˆ pode gerar novas consultas a partir das j´ existentes copiando e editando os
e a
arquivos de script.
• O modo batch pode tamb´m ser util quando vocˆ estiver desenvolvendo uma consulta,
e ´ e
particularmente para comandos de m´ltiplas linhas ou sequˆncias de comandos com
u e
v´rias instru¸˜es. Se vocˆ cometer um erro, n˜o ser´ necess´rio redigitar tudo. Apenas
a co e a a a
edite seu arquivo script e corrija o erro, depois diga ao mysql para execut´-lo novamente.
a
• Se vocˆ tem uma query que produz muita saida, vocˆ pode encaminhar a sa´ atrav´s
e ´ e ida e
de um p´ginador.
a
shell> mysql < batch-file | more
• Vocˆ pode capturar a sa´ em um arquivo para processamento posterior:
e ida
shell> mysql < batch-file > mysql.out
• Vocˆ pode distribuir seu script para outras pessoas para que elas possam executar os
e
comandos tamb´m. e
• Algumas situa¸˜es n˜o permitem uso interativo, por exemplo, quando vocˆ executa
co a e
uma consulta atrav´s de um processo autom´tico (cron job). Neste caso, vocˆ deve
e a e
usar o modo batch.
A formato padr˜o de sa´ ´ diferente (mais conciso) quando vocˆ executa o mysql no modo
a ida e e
batch do que quando vocˆ o usa interativamente. Por exemplo, a sa´ de SELECT DISTINCT
e ida
species FROM pet se parece com isto quando vocˆ o executa interativamente:
e
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
Mas fica assim quando vocˆ o executa no modo batch:
e
species
bird
cat
dog
hamster
snake
Se vocˆ desejar obter o formato de sa´ interativa no modo batch, utilize mysql -t. Para
e ida
´ dos comandos que s˜o executados, utilize mysql -vvv.
mostrar a saida a
230. 196 MySQL Technical Reference for Version 5.0.0-alpha
Vocˆ tamb´m pode utilizar scripts no prompt de linha de comando mysql usando o comando
e e
source:
mysql> source filename;
3.6 Exemplos de Consultas Comuns
Aqui est˜o os exemplos de como resolver problemas comuns com o MySQL.
a
Alguns dos exemplos usam a tabela shop para armazenar o pre¸o de cada ´
c item (article)
para certas revendas (dealers). Supondo que cada revenda tenha um pre¸o fixo por artigo,
c
ent˜o (article, dealer) ´ uma chave prim´ria para os registros.
a e a
Inicie a ferramenta de linha de comando mysql e selecione um banco de dados:
shell> mysql o-nome-do-seu-banco-de-dados
(Na maioria das instala¸˜es do MySQL, vocˆ pode usar o banco de dados test).
co e
Vocˆ pode criar e popular a tabela exemplo assim:
e
mysql> CREATE TABLE shop (
-> article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL,
-> dealer CHAR(20) DEFAULT ’’ NOT NULL,
-> price DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL,
-> PRIMARY KEY(article, dealer));
mysql> INSERT INTO shop VALUES
-> (1,’A’,3.45),(1,’B’,3.99),(2,’A’,10.99),(3,’B’,1.45),(3,’C’,1.69),
-> (3,’D’,1.25),(4,’D’,19.95);
Depois de executar as instru¸˜es a tabela deve ter o seguinte conte´do:
co u
mysql> SELECT * FROM shop;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
3.6.1 O Valor M´ximo para uma Coluna
a
“Qual ´ o maior n´mero dos ´
e u itens?”
SELECT MAX(article) AS article FROM shop;
+---------+
| article |
231. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 197
+---------+
| 4 |
+---------+
3.6.2 O Registro que Armazena o Valor M´ximo para uma Coluna
a
Determinada
“Encontre o n´mero, fornecedor e pre¸o do ´
u c item mais caro.”
No SQL ANSI isto ´ feito f´cilmente com uma sub-consulta:
e a
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);
No MySQL (que ainda n˜o suporta sub-selects), fa¸a isto em dois passos:
a c
1. Obtenha o valor do pre¸o m´ximo da tabela com uma instru¸˜o SELECT.
c a ca
mysql> SELECT MAX(price) FROM shop;
+------------+
| MAX(price) |
+------------+
| 19.95 |
+------------+
2. Usando o valor 19.95 mostrado pela consulta anterior como o pre¸o m´ximo do artigo,
c a
grave uma consulta para localizar e mostrar o registro correspondente:
mysql> SELECT article, dealer, price
-> FROM shop
-> WHERE price=19.95;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0004 | D | 19.95 |
+---------+--------+-------+
Outra solu¸˜o ´ ordenar todos os registros por pre¸o de forma descendente e obtenha so-
ca e c
mente o primeiro registro utilizando a cl´usula espec´
a ifica do MySQL LIMIT:
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;
NOTA: Se existir diversos ´
itens mais caros, cada um com um pre¸o de 19.95, a solu¸˜o
c ca
LIMIT mostra somente um deles !
3.6.3 M´ximo da Coluna por Grupo
a
“Qual ´ o maior pre¸o por ´
e c item?”
232. 198 MySQL Technical Reference for Version 5.0.0-alpha
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article
+---------+-------+
| article | price |
+---------+-------+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+---------+-------+
3.6.4 As Linhas Armazenando o Group-wise M´ximo de um Certo
a
Campo
“Para cada ´
item, encontre o(s) fornecedor(s) com o maior pre¸o.”
c
No SQL-99 (e MySQL 4.1 ou superior), o problema pode ser solucionado com uma subcon-
sulta como esta:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
Em vers˜es anteriores a do MySQL 4.1 ´ melhor fazˆ-lo em diversos passos:
o e e
1. Obtenha a lista de pares (article,maxprice).
2. Para cada ´item, obtenha os registros correspondentes que tenham o maior pre¸o.
c
Isto pode ser feito facilmente com uma tabela tempor´ria e um join:
a
CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL,
price DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL);
LOCK TABLES shop READ;
INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;
SELECT shop.article, dealer, shop.price FROM shop, tmp
WHERE shop.article=tmp.article AND shop.price=tmp.price;
UNLOCK TABLES;
DROP TABLE tmp;
Se vocˆ n˜o usar uma tabela TEMPOR´RIA, vocˆ deve bloquear tamb´m a tabela tmp.
e a A e e
“Posso fazer isto com uma unica query?”
´
Sim, mas somente com um truque ineficiente chamado “truque MAX-CONCAT”:
233. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 199
SELECT article,
SUBSTRING( MAX( CONCAT(LPAD(price,6,’0’),dealer) ), 7) AS dealer,
0.00+LEFT( MAX( CONCAT(LPAD(price,6,’0’),dealer) ), 6) AS price
FROM shop
GROUP BY article;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+---------+--------+-------+
O ultimo exemplo pode, ´ claro, ser feito de uma maneira mais eficiente fazendo a separa¸˜o
´ e ca
da coluna concatenada no cliente.
3.6.5 Utilizando Vari´veis de Usu´rio
a a
Vocˆ pode usar vari´veis de usu´rios no MySQL para lembrar de resultados sem a necessi-
e a a
dade de armazen´-las em vari´veis no cliente. Veja Se¸˜o 6.1.4 [Variables], P´gina 474.
a a ca a
Por exemplo, para encontrar os ´
itens com os pre¸os mais altos e mais baixos vocˆ pode fazer
c e
isto:
select @min_price:=min(price),@max_price:=max(price) from shop;
select * from shop where price=@min_price or price=@max_price;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
3.6.6 Utilizando Chaves Estrangeiras
No MySQL 3.23.44 e acima, tabelas InnoDB suportam verifica¸˜o de restri¸˜es de chaves
ca co
estrangerias. Veja Se¸˜o 7.5 [InnoDB], P´gina 642. Veja tamb´m Se¸˜o 1.8.4.5 [ANSI diff
ca a e ca
Foreign Keys], P´gina 50.
a
Vocˆ n˜o precisa de chaves estrangeiras para unir 2 tabelas. Para outros tipos de tabela
e a
diferentes de InnoDB, As unicas coisas que o MySQL atualmente n˜o faz s˜o 1) CHECK, para
´ a a
ter certeza que as chaves que vocˆ usa realmente existem na tabela ou tabelas referenciadas
e
e 2) apagar automaticamente registros da tabela com uma defini¸˜o de chave estrangeira.
ca
Usando suas chaves para unir a tabela funcionar´ bem:
a
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
234. 200 MySQL Technical Reference for Version 5.0.0-alpha
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM(’t-shirt’, ’polo’, ’dress’) NOT NULL,
colour ENUM(’red’, ’blue’, ’orange’, ’white’, ’black’) NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
PRIMARY KEY (id)
);
INSERT INTO person VALUES (NULL, ’Antonio Paz’);
INSERT INTO shirt VALUES
(NULL, ’polo’, ’blue’, LAST_INSERT_ID()),
(NULL, ’dress’, ’white’, LAST_INSERT_ID()),
(NULL, ’t-shirt’, ’blue’, LAST_INSERT_ID());
INSERT INTO person VALUES (NULL, ’Lilliana Angelovska’);
INSERT INTO shirt VALUES
(NULL, ’dress’, ’orange’, LAST_INSERT_ID()),
(NULL, ’polo’, ’red’, LAST_INSERT_ID()),
(NULL, ’dress’, ’blue’, LAST_INSERT_ID()),
(NULL, ’t-shirt’, ’white’, LAST_INSERT_ID());
SELECT * FROM person;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirt;
+----+---------+--------+-------+
| id | style | colour | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
235. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 201
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+
SELECT s.* FROM person p, shirt s
WHERE p.name LIKE ’Lilliana%’
AND s.owner = p.id
AND s.colour <> ’white’;
+----+-------+--------+-------+
| id | style | colour | owner |
+----+-------+--------+-------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+----+-------+--------+-------+
3.6.7 Pesquisando em Duas Chaves
O MySQL ainda n˜o otimiza quando vocˆ pesquisa em duas chaves diferentes combinadas
a e
com OR (Pesquisa em uma chave com diferentes partes OR ´ muito bem otimizadas).
e
SELECT field1_index, field2_index FROM test_table
WHERE field1_index = ’1’ OR field2_index = ’1’
A raz˜o ´ que n´s ainda n˜o tivemos tempos para fazer este tratamento de uma maneira
a e o a
eficiente no caso geral. (A manipula¸˜o do AND ´, em compara¸˜o, completamente geral e
ca e ca
funciona muito bem).
No MySQL 4.0 e acimo, vocˆ pode solucionar este problema eficientemente usando um UNION
e
que combina a sa´ de duas instru¸˜es SELECT separadas. Veja Se¸˜o 6.4.1.2 [UNION],
ida co ca
P´gina 569. Cada SELECT busca apenas uma chave e pode ser otimizada.
a
SELECT field1_index, field2_index FROM test_table WHERE field1_index = ’1’
UNION
SELECT field1_index, field2_index FROM test_table WHERE field2_index = ’1’;
Em vers˜es do MySQL anteirores a 4.0, vocˆ pode conseguir o mesmo efeito usando uma
o e
tabela TEMPORARY e instru¸˜es SELECT separadas. Este tipo de otimiza¸˜o tamb´m ´ muito
co ca e e
boa se vocˆ estiver utilizando consultas muito complicadas no qual o servidor SQL faz as
e
otimiza¸˜es na ordem errada.
co
CREATE TEMPORARY TABLE tmp
SELECT field1_index, field2_index FROM test_table WHERE field1_index = ’1’;
INSERT INTO tmp
SELECT field1_index, field2_index FROM test_table WHERE field2_index = ’1’;
SELECT * from tmp;
DROP TABLE tmp;
A maneira descrita acima para resolver esta consulta ´ uma uni˜o (UNION) de duas consultas.
e a
236. 202 MySQL Technical Reference for Version 5.0.0-alpha
3.6.8 Calculando Visitas Di´rias
a
O seguinte exemplo mostra como vocˆ pode usar as fun¸˜es bin´rias de agrupamento para
e co a
calcular o n´mero de dias por mˆs que um usu´rio tem visitado uma p´gina web.
u e a a
CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, day INT(2) UNSIGNED Z
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),(2000,2,23),(2000
A tabela exemplo cont´m valores ano-mˆs-dia representando visitas feitas pelos usu´rios a
e e a
p´gina. Para determinar quantos quantos dias diferentes em cada mˆs estas visitas ocorriam,
a e
use esta consulta:
SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;
que retornar´:
a
+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
+------+-------+------+
O exemplo acima calcula quantos dias diferentes foram usados para uma combina¸˜o ca
fornecida de mˆs/ano, com remo¸˜o autom´tica de entradas duplicadas.
e ca a
3.6.9 Usando AUTO_INCREMENT
O atributo AUTO_INCREMENT pode ser usado para gerar uma identifica¸˜o unica para um
ca ´
novo registro:
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO animals (name) VALUES ("dog"),("cat"),("penguin"),
("lax"),("whale"),("ostrich");
SELECT * FROM animals;
Que retorna:
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
+----+---------+
Vocˆ pode recuperar o valor AUTO_INCREMENT mais recente com a fun¸˜o SQL LAST_INSERT_
e ca
ID() ou a fun¸˜o da API C mysql_insert_id(). Nota: para uma inser¸˜o de v´rias
ca ca a
237. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 203
linhas LAST_INSERT_ID()/mysql_insert_id() retornar´ atualmente a AUTO_INCREMENT
a
chave da primeira linha inserida. Isto permite que inser¸˜es multi-linhas sejam reproduzidas
co
corretamente em outros servidores em uma configra¸˜o de replica¸˜o.
ca ca
Para tabelas MyISAM e BDB vocˆ pode especificar AUTO_INCREMENT em uma coluna secund´ria
e a
em um ´ indice multi-coluna. Neste caso, o valor gerado para a coluna AUTO_INCREMENT ´ e
calculado como MAX(auto_increment_column)+1) WHERE prefix=given-prefix. Isto ´ e
util quando vocˆ quer colocar dados em grupos ordenados.
´ e
CREATE TABLE animals (
grp ENUM(’fish’,’mammal’,’bird’) NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
);
INSERT INTO animals (grp,name) VALUES("mammal","dog"),("mammal","cat"),
("bird","penguin"),("fish","lax"),("mammal","whale"),
("bird","ostrich");
SELECT * FROM animals ORDER BY grp,id;
Que retorna:
+--------+----+---------+
| grp | id | name |
+--------+----+---------+
| fish | 1 | lax |
| mammal | 1 | dog |
| mammal | 2 | cat |
| mammal | 3 | whale |
| bird | 1 | penguin |
| bird | 2 | ostrich |
+--------+----+---------+
Note que neste caso (quando o valor AUTO_INCREMENT ´ parte de um ´
e indice multi-coluna), o
valor de AUTO_INCREMENT ser´ reutilizado se vocˆ deletar a linha com o maior valor AUTO_
a e
INCREMENT em qualquer grupo. Isto caontece mesmo para tabelas MyISAM, para as quais os
valores AUTO_INCREMENT normalmente n˜o s˜o reusados.)
a a
3.7 Consultas de Projetos Gˆmeos
e
Em Analytikerna e Lentus, n´s estamos fazendo os sistemas e trabalho de campo para um
o
grande projeto de pesquisa. Este projeto ´ uma colabora¸˜o entre o Institudo de Medicina
e ca
Ambiental em Karolinksa Institutet Stockholm e a Se¸˜o de Pesquisa Cl´
ca inica em Envelhec-
imento e Psicologia na University of Southern California.
O projeto envolve uma parte de sele¸˜o onde todos os gˆmeos na Su´cia mais velhos que 65
ca e e
anos s˜o entrevistados por telefone. Gˆmeos que preenchem certos crit´rios passam para
a e e
o pr´ximo est´gio. Neste est´gio posterior, gˆmeos que desejam participar s˜o visitados
o a a e a
por uma equipe de doutores/enfermeiros. Alguns dos consultas incluem exames f´ isicos e
neuropsicol´gico, testes de laborat´rio, imagem neural, determina¸˜o do estado psicol´gico
o o ca o
238. 204 MySQL Technical Reference for Version 5.0.0-alpha
e coletas de hist´rico familiar. Adicionalmente, dados s˜o coletados em fatores de riscos
o a
m´dicos e ambientais.
e
Mais informa¸˜es sobre o estudos dos gˆmeos pode ser encontrados em:
co e
http://www.mep.ki.se/twinreg/index_en.html
A parte posterior do projeto ´ administrada com uma interface Web escrita utilizando a
e
linguagem Perl e o MySQL.
Cada noite todos dados das entrevistas s˜o movidos para um banco de dados MySQL.
a
3.7.1 Encontrando Todos Gˆmeos N˜o-distribu´
e a idos
A seguinte consulta ´ usada para determinar quem vai na segunda parte do projeto:
e
SELECT
CONCAT(p1.id, p1.tvab) + 0 AS tvid,
CONCAT(p1.christian_name, " ", p1.surname) AS Name,
p1.postal_code AS Code,
p1.city AS City,
pg.abrev AS Area,
IF(td.participation = "Aborted", "A", " ") AS A,
p1.dead AS dead1,
l.event AS event1,
td.suspect AS tsuspect1,
id.suspect AS isuspect1,
td.severe AS tsevere1,
id.severe AS isevere1,
p2.dead AS dead2,
l2.event AS event2,
h2.nurse AS nurse2,
h2.doctor AS doctor2,
td2.suspect AS tsuspect2,
id2.suspect AS isuspect2,
td2.severe AS tsevere2,
id2.severe AS isevere2,
l.finish_date
FROM
twin_project AS tp
/* For Twin 1 */
LEFT JOIN twin_data AS td ON tp.id = td.id
AND tp.tvab = td.tvab
LEFT JOIN informant_data AS id ON tp.id = id.id
AND tp.tvab = id.tvab
LEFT JOIN harmony AS h ON tp.id = h.id
AND tp.tvab = h.tvab
LEFT JOIN lentus AS l ON tp.id = l.id
AND tp.tvab = l.tvab
/* For Twin 2 */
LEFT JOIN twin_data AS td2 ON p2.id = td2.id
239. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 205
AND p2.tvab = td2.tvab
LEFT JOIN informant_data AS id2 ON p2.id = id2.id
AND p2.tvab = id2.tvab
LEFT JOIN harmony AS h2 ON p2.id = h2.id
AND p2.tvab = h2.tvab
LEFT JOIN lentus AS l2 ON p2.id = l2.id
AND p2.tvab = l2.tvab,
person_data AS p1,
person_data AS p2,
postal_groups AS pg
WHERE
/* p1 gets main twin and p2 gets his/her twin. */
/* ptvab is a field inverted from tvab */
p1.id = tp.id AND p1.tvab = tp.tvab AND
p2.id = p1.id AND p2.ptvab = p1.tvab AND
/* Just the sceening survey */
tp.survey_no = 5 AND
/* Skip if partner died before 65 but allow emigration (dead=9) */
(p2.dead = 0 OR p2.dead = 9 OR
(p2.dead = 1 AND
(p2.death_date = 0 OR
(((TO_DAYS(p2.death_date) - TO_DAYS(p2.birthday)) / 365)
>= 65))))
AND
(
/* Twin is suspect */
(td.future_contact = ’Yes’ AND td.suspect = 2) OR
/* Twin is suspect - Informant is Blessed */
(td.future_contact = ’Yes’ AND td.suspect = 1
AND id.suspect = 1) OR
/* No twin - Informant is Blessed */
(ISNULL(td.suspect) AND id.suspect = 1
AND id.future_contact = ’Yes’) OR
/* Twin broken off - Informant is Blessed */
(td.participation = ’Aborted’
AND id.suspect = 1 AND id.future_contact = ’Yes’) OR
/* Twin broken off - No inform - Have partner */
(td.participation = ’Aborted’ AND ISNULL(id.suspect)
AND p2.dead = 0))
AND
l.event = ’Finished’
/* Get at area code */
AND SUBSTRING(p1.postal_code, 1, 2) = pg.code
/* Not already distributed */
AND (h.nurse IS NULL OR h.nurse=00 OR h.doctor=00)
/* Has not refused or been aborted */
AND NOT (h.status = ’Refused’ OR h.status = ’Aborted’
240. 206 MySQL Technical Reference for Version 5.0.0-alpha
OR h.status = ’Died’ OR h.status = ’Other’)
ORDER BY
tvid;
Algumas explica¸˜es:
co
CONCAT(p1.id, p1.tvab) + 0 AS tvid
N queremos ordenar o id e o tvab concatenados na ordem num´rica. Adicio-
e
nando 0 ao resultado faz o MySQL tratar o resultado como um n´mero.
u
coluna id Esta identifica um par de gˆmeos. Ela ´ uma chave em todas as tabelas.
e e
column tvab
Esta identifica um gˆmeo em um par. Ela pode ter um valor de 1 ou 2.
e
column ptvab
Esta ´ o inverso de tvab. Quando tvab ´ 1 este campo ´ 2 e vice versa. Ela
e e e
existe para poupar digita¸˜o e tornar mais f´cil para o MySQL otimizar a query.
ca a
Esta consulta demonstra, entre outras coisas, como fazer buscas em uma tabela a partir da
mesma tabela com uma uniao (p1 e p2). No exemplo, isto ´ usado para conferir se um par
e
de um gˆmeo morreu antes de 65 anos. Se for verdade, a linha n˜o ´ retornada.
e a e
Tudo acima existe em todas as tabelas com informa¸˜es relacionada aos gˆmeos. N´s temos
co e o
uma chave em ambos id,tvab (todas as tabelas) e id,ptvab (person_data) para tornar
as consultas mais r´pidas.
a
Na nossa m´quina de produ¸˜o (Um UltraSPARC 200MHz), esta consulta retorna entre
a ca
150-200 linhas e gasta menos que um segundo.
O n´mero atual de registros nas tabelas usadas acima:
u
Tabela Registros
person_data 71074
lentus 5291
twin_project 5286
twin_data 2012
informant_data 663
harmony 381
postal_groups 100
3.7.2 Mostrando uma Tabela sobre a Situa¸˜o dos Pares Gˆmeos
ca e
Cada entrevista termina com um c´digo da situa¸˜o chamado event. A consulta mostrada
o ca
abaixa ´ usada para mostrar uma tabela sobre todos pares gˆmeos combinados por evento.
e e
Ela indica em quantos pares ambos gˆmeos terminaram, em quantos pares um gˆmeo ter-
e e
minou e o outro foi recusado e assim por diante.
SELECT
t1.event,
t2.event,
COUNT(*)
FROM
lentus AS t1,
241. Cap´
ıtulo 3: Tutorial de Introdu¸˜o Do MySQL
ca 207
lentus AS t2,
twin_project AS tp
WHERE
/* We are looking at one pair at a time */
t1.id = tp.id
AND t1.tvab=tp.tvab
AND t1.id = t2.id
/* Just the sceening survey */
AND tp.survey_no = 5
/* This makes each pair only appear once */
AND t1.tvab=’1’ AND t2.tvab=’2’
GROUP BY
t1.event, t2.event;
3.8 Utilizando MySQL com Apache
Existem programas que lhe permite autenticar seus usu´rios a partir de um banco de dados
a
MySQL e tamb´m permite gravar seus arquivos de log em uma tabela MySQL.
e
Vocˆ pode alterar o formato de log do Apache para ser facilmente lido pelo MySQL colo-
e
cando o seguinte no arquivo de configura¸˜o do Apache:
ca
LogFormat
""%h",%{%Y%m%d%H%M%S}t,%>s,"%b","%{Content-Type}o",
"%U","%{Referer}i","%{User-Agent}i""
Para carregar uma arquivo de log naquele formato dentro do MySQL, vocˆ pode usar uma
e
instru¸˜o deste tipo:
ca
LOAD DATA INFILE ’/local/access_log’ INTO TABLE nome_tabela
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’"’ ESCAPED BY ’’
A tabela chamada deve ser criada para ter colunas que correpondem a aquelas que a linha
LogFormat gravam no arquivo de log.
242. 208 MySQL Technical Reference for Version 5.0.0-alpha
4 Administra¸˜o do Bancos de Dados MySQL
ca
4.1 Configurando o MySQL
4.1.1 Op¸˜es de Linha de Comando do mysqld
co
Na maioria dos casos vocˆ deve gerenciar as op¸˜es do mysqld por meio dos arquivos de
e co
op¸˜es. Veja Se¸˜o 4.1.2 [Arquivos de op¸˜es], P´gina 217.
co ca co a
mysqld e mysqld.server lˆem op¸˜es dos grupos mysqld e server. mysqld_safe lˆ as
e co e
op¸˜es dos grupos mysqld, server, mysqld_safe e mysqld_safe. Um servidor MySQL
co
embutido normalmente lˆ op¸˜es do grupos server, embedded e xxxxx_SERVER, onde xxxxx
e co
´ o nome da aplica¸˜o.
e ca
mysqld aceita os seguintes op¸˜es de linha de comando. Aqui est´ uma lista das mais
co a
comuns. Para uma lista completa execute mysqld --help. As op¸˜es usadas para replica¸˜o
co ca
est`o listadas em uma se¸˜o separada, veja Se¸˜o 4.11.6 [Replication Options], P´gina 393.
a ca ca a
--ansi Utilizar a sintaxe ANSI SQL no lugar da sintaxe MySQL Veja Se¸˜o 1.8.2 [ANSI
ca
mode], P´gina 42.
a
-b, --basedir=path
Encaminho para o diret´rio de instala¸˜o. Todos os caminhos normalmente s˜o
o ca a
resolvidos em rela¸˜o a este.
ca
--big-tables
Permite grandes conjuntos de resultados salvando todos os conjuntos tem-
por´rios em um arquivo. Ele resolve a maioria dos erros ’table full’, mas
a
tamb´m abaixa a velocidade das consultas nas quais as tabelas em mem´ria
e o
seriam suficientes. Desde a Vers˜o 3.23.2, o MySQL ´ capaz de resolver isto au-
a e
tomaticamente usando mem´ria para pequenas tabelas tempor´rias e trocando
o a
para o disco as tabelas, quando for necess´rio.
a
--bind-address=IP
Endere¸o IP para ligar.
c
--console
Grava a mensagem de erro no stderr/stdout mesmo se --log-error ´ espefi-
e
cado. No Windows o mysqld n˜o fechar´ a tela de console se esta op¸˜o ´
a a ca e
usada.
--character-sets-dir=path
Diret´rio onde est˜o os conjuntos de caracteres. Veja Se¸˜o 4.7.1 [Conjunto de
o a ca
caracteres], P´gina 326.
a
--chroot=path
Coloca o daemon mysqld no diretorio chroot durante a inicializa¸˜o. Medida
ca
de seguran¸a recomendada desde o MySQL 4.0 (MySQL 3.23 n˜o est´ apto a
c a a
fornecer um chroot 100% fechado. Limita os comandos LOAD DATA INFILE e
SELECT ... INTO OUTFILE.
243. Cap´
ıtulo 4: Administra¸˜o do Bancos de Dados MySQL
ca 209
--core-file
Grava um arquivo core se o mysqld morrer. Para alguns sistemas vocˆ deve
e
tamb´m especificar --core-file-size para mysqld_safe. Veja Se¸˜o 4.8.2
e ca
[mysqld_safe], P´gina 332. Note que em alguns sistemas, como Solaris, vocˆ
a e
n˜o consiguir´ um arquivo core se vocˆ tamb´m estiver usando a op¸˜o --user.
a a e e ca
-h, --datadir=caminho
Encaminha para o diret´rio raiz dos bancos de dados.
o
--debug[...]=
Se o MySQL est´ configurado com --with-debug, vocˆ pode usar esta op¸˜o
a e ca
para obter um arquivo de rastreamento indicando o que o mysqld est´ fazendo.
a
Veja Se¸˜o D.1.2 [Criando arquivos trace], P´gina 1071.
ca a
--default-character-set=conjunto_caracter
Configura o conjunto de caracteres padr˜o. Veja Se¸˜o 4.7.1 [Conjunto de
a ca
caracteres], P´gina 326.
a
--default-table-type=tipo
Configura o tipo de tabela padr˜o. Veja Cap´
a “ptexi tulo 7 [Tipos de tabelas],
P´gina 629.
a
--delay-key-write[= OFF | ON | ALL]
Como o DELAYED KEYS do MyISAM deve ser usado. Veja Se¸˜o 5.5.2
ca
[Parˆmetros do servidor], P´gina 455.
a a
--delay-key-write-for-all-tables; No MySQL 4.0.3 voc^ deve usar
e
--delay-key-write=ALL.
N˜o descarrega buffers das chaves entre escritas em nenhuma tabela MyISAM.
a
Veja Se¸˜o 5.5.2 [Parˆmetros do servidor], P´gina 455.
ca a a
--des-key-file=filename
Read the default keys used by DES_ENCRYPT() and DES_DECRYPT() from this
file.
--enable-external-locking (era --enable-locking)
Habilita o bloqueio do sistema. Perceba que se usar esta op¸˜o em um sistema
ca
que n˜o possui um lockd() completamente funcional (como no Linux) vocˆ pode
a e
fazer com que o mysqld entre em deadlock.
--enable-named-pipe
Habilita suporte para named pipes (somente no NT/Win2000/XP).
-T, --exit-info
Esta ´ uma m´scara bin´ria com diferˆntes parˆmetros que pode ser usada para
e a a e a
depurar o servidor mysqld; Esta op¸˜o n˜o deve ser usada por algu´m que n˜o
ca a e a
a conhe¸a muito bem!
c
--flush Atualiza todas as altera¸˜es no disco depois de cada comando SQL. Normal-
co
mente o MySQL s´ faz a escrita de todas as altera¸˜es no disco depois de cada
o co
comando SQL e deixa o sistema operacional lidar com a sincroniza¸˜o com o
ca
disco. Veja Se¸˜o A.4.1 [Falhas], P´gina 921.
ca a
244. 210 MySQL Technical Reference for Version 5.0.0-alpha
-?, --help
Mostra uma pequena ajuda e sai.
--init-file=arquivo
Lˆ comandos SQL do arquivo especificado na inicializa¸˜o.
e ca
-L, --language=...
Mensagens de erro do cliente na l´
ingua especificada. Pode ser fornecido como
um caminho completo. Veja Se¸˜o 4.7.2 [L´
ca inguas], P´gina 328.
a
-l, --log[=arquivo]
Log de conex˜es e consultas ao arquivo. Veja Se¸˜o 4.10.2 [Log de consultas],
o ca
P´gina 373.
a
--log-bin=[arquivo]
Registra todas as consultas que alteram dados em arquivo. Usado para backup
e replica¸˜o. Veja Se¸˜o 4.10.4 [Binary log], P´gina 375.
ca ca a
--log-bin-index[=arquivo]
Arquivo de ´indice para nomes de arquivos de log binario. Veja Se¸˜o 4.10.4
ca
[Log bin´rio], P´gina 375.
a a
--log-error[=arquivo]
Registra mensagens de erro e inicializa¸˜o neste arquivo. Veja Se¸˜o 4.10.1 [Log
ca ca
de erro], P´gina 373.
a
--log-isam[=arquivo]
Log de todas altera¸˜es ISAM/MyISAM no arquivo (usado somente quando
co
estiver depurando bancos ISAM/MyISAM).
--log-long-format
Registra algumas informa¸˜es extras nos aruivos de log (log de atualiza¸˜es,
co co
log bin´rio de atualiza¸˜es e log de consultas lentas, independente de qual est´
a co a
ativado). Por exemplo, nome do usu´rio e timestamp s˜o registrados para a
a a
consulta. Se vocˆ estiver usando --log-slow-queries e --log-long-format,
e
ent˜o consultas que n˜o est˜o usando ´
a a a indices s˜o registradas ao log de con-
a
sultas lentas. Note que --log-long-format est´ obsoleto a partir do MySQL
a
vers˜o 4.1, quando --log-short-format foi introduzido (--log-long-format
a
´ a configura¸˜o padr˜o desde a vers˜o 4.1). Note tamb´m que a partir do
e ca a a e
MySQL 4.1, a op¸˜o --log-queries-not-using-indexes est´ dispon´ para
ca a ivel
prop´sito de registro de consultas que n˜o usam ´
o a indices para o log de consultas
lentas.
--log-queries-not-using-indexes
Se vocˆ estiver usando --log-slow-queries, ent˜o consultas que n˜o est˜o
e a a a
´
usando indices est˜o registradas no log de consultas lentas. Esta op¸˜es
a co
est´ dispon´
a ivel a partir do MySQL 4.1. Veja Se¸˜o 4.10.5 [Slow query log],
ca
P´gina 378.
a
--log-short-format
Registra menos informa¸˜es extras nos aruivos de log (log de atualiza¸˜es, log
co co
bin´rio de atualiza¸˜es e log de consultas lentas, independente de qual est´
a co a
245. Cap´
ıtulo 4: Administra¸˜o do Bancos de Dados MySQL
ca 211
ativado). Por exemplo, nome do usu´rio e timestamp s˜o registrados para a
a a
consulta. Esta op¸˜o foi introduzida no MySQL 4.1.
ca
--log-slow-queries[=arquivo]
Log de todas as consultas que levam mais de long_query_time segundos de
execu¸˜o para um arquivo. Note que o padr˜o para a quantidade de informa¸˜o
ca a ca
registrada alterou no MySQL 4.1. Veja as op¸˜es --log-long-format e -
co
-log-long-format para mais detalhes. Veja Se¸˜o 4.10.5 [Slow query log],
ca
P´gina 378.
a
--log-update[=arquivo]
Log de atualiza¸˜es para file.# onde # ´ um n´mero unico se n˜o for fornecido.
co e u ´ a
Veja Se¸˜o 4.10.3 [Log de atualiza¸˜o], P´gina 374. O log de atualiza¸˜o
ca ca a ca
est´obsoleto e ser´ removido no MySQL 5.0; vocˆ deve usar o log bin´rio em
a a e a
seu lugar (--log-bin). Veja Se¸˜o 4.10.4 [Log bin´rio], P´gina 375. A partir
ca a a
da vers˜o 5.0, usar --log-update apenar ligar´ o log bin´rio.
a a a
--low-priority-updates
Opera¸˜es de altera¸˜es das tabelas (INSERT/DELETE/UPDATE) ir˜o ter priori-
co co a
dade menor do que as selects. Isto tamb´m pode ser feito usando {INSERT |
e
REPLACE | UPDATE | DELETE} LOW_PRIORITY ... para baixar a prioridade de
somente uma consulta, ou SET OPTION SQL_LOW_PRIORITY_UPDATES=1 para al-
terar a prioridade em uma unica thread. Veja Se¸˜o 5.3.2 [Bloqueio de tabelas],
´ ca
P´gina 445.
a
--memlock
Bloqueia o processo mysqld na mem´ria. Isto funciona somente se o seu sistema
o
suportar a chamada de sistema mklockall() (como no Solaris). Isto pode
ajudar se vocˆ tiver um problema no qual o sistema operacional faz com que
e
o mysqld fa¸a a troca em disco. Note que o uso desta op¸˜o exige que vocˆ
c ca e
execute o servidor como root, que normalmente n˜o ´ uma boa id´ia por raz˜es
a e e o
de seguran¸a.
c
--myisam-recover [=op¸~o[,op¸~o...]]] onde op¸~o ´ qualquer combina¸~o
ca ca ca e ca
de DEFAULT, BACKUP, FORCE ou QUICK. Vocˆ tamb´m pode configurar isto ex-
e e
plicitamente para "" se vocˆ deseja desabilitar esta op¸˜o. Se esta op¸˜o for
e ca ca
usada, o mysqld ir´ conferir na abertura se a tabela est´ marcada como que-
a a
brada ou se a tabela n˜o foi fechada corretamente. (A ultima op¸˜o funciona
a ´ ca
somente se vocˆ estiver executando com --skip-locking). Se este for o caso
e
mysqld ir´ executar uma conferˆncia na tabela. Se a tabela estiver corrompida,
a e
o mysqld ir´ tentar repar´-la.
a a
As seguintes op¸˜es afetam no funcionamento da repara¸˜o.
co ca
Op¸˜o
ca Descri¸˜o
ca
DEFAULT O mesmo que n˜o fornecer uma op¸˜o para --myisam-
a ca
recover.
BACKUP Se os dados da tabela foram alterados durante a recupera¸˜o,
ca
salve um backup do arquivo de dados ‘nome_tabela.MYD’
como ‘nome_tabela_dia_hora.BAK’.
FORCE Execute a recupera¸˜o mesmo se perdermos mais de uma
ca
linha do arquivo .MYD.
246. 212 MySQL Technical Reference for Version 5.0.0-alpha
QUICK N˜o confira as linhas na tabela se n˜o existir nenhum bloco
a a
apagado.
Antes da tabela ser reparada automaticamente, o MySQL ir´ adicionar uma
a
nota no log de erros. Se vocˆ desejar que a recupera¸˜o da maioria dos prob-
e ca
lemas n˜o tenha a interven¸˜o de algum usu´rio, devem ser usadas as op¸˜es
a ca a co
BACKUP,FORCE. Isto ir´ for¸ar um reparo de uma tabela mesmo se alguns reg-
a c
istros forem apagados, mas ele manter´ o arquivo de dados antigo como um
a
backup para que vocˆ possa examinar posteriormente o que aconteceu.
e
--new A partir da vers˜o 4.0.12, a op¸˜o --new pode ser usada para fazer o servidor
a ca
se comportar como 4.1 em certos aspectos, facilitando a atualiza¸˜o da vers˜o
ca a
4.0 para 4.1:
• TIMESTAMP ´ retornado com uma string com o formato ’YYYY-MM-DD
e
HH:MM:SSS. Veja Se¸˜o 6.2 [Tipos de colunas], P´gina 482.
ca a
--pid-file=caminho
Encaminha para o arquivo pid usado pelo mysqld_safe.
-P, --port=...
N´mero da porta para conex˜es TCP/IP.
u o
-o, --old-protocol
Utilize o protocolo 3.20 para compatibilidade com alguns clientes muito antigos.
Veja Se¸˜o 2.5.5 [Atualizando a vers˜o 3.20], P´gina 129.
ca a a
--one-thread
Usa somente uma thread (para depura¸˜o sobre Linux). Esta op¸˜o est´
ca ca a
dispon´
ivel apenas se o servidor est´ constru´ com a depura¸˜o habilitada.
a ido ca
Veja Se¸˜o D.1 [Depurando o servidor], P´gina 1070.
ca a
--open-files-limit=
Para alterar o n´mero de descritores de arquivos dispon´
u iveis para o mysqld. Se
isto n˜o estiver configurado com 0, ent˜o o mysqld usar´ este valor para reservar
a a a
descritores de arquivos para usar com setrlimit(). Se este valor ´ 0 ent˜o o
e a
mysqld reservar´ max_connections*5 ou max_connections + table_cache*2
a
(que ´ sempre