Mysql
Mysql
c 1997-2003 MySQL AB
Copyright °
i
Sumário
1 Informações Gerais . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Convenções Usadas Neste Manual . . . . . . . . . . . . . . . . 2
1.2 Visão Geral do Sistema de Gerenciamento de Banco de Dados
MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 História do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.2 As Principais Características do MySQL . . . . . . . . . . 6
1.2.3 Estabilidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem
Ter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.5 Compatibilidade Com o Ano 2000 (Y2K) . . . . . . . . 11
1.3 Visão Geral da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 O Modelo de Negócio e Serviços da MySQL AB . . 13
1.3.1.1 Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.1.2 Treinamento e Certificação. . . . . . . . . . . . . 14
1.3.1.3 Consultoria . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.1.4 Licenças Comerciais . . . . . . . . . . . . . . . . . . . 15
1.3.1.5 Parcerias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2 Informações para Contato . . . . . . . . . . . . . . . . . . . . . . 15
1.4 Suporte e Licenciamento do MySQL . . . . . . . . . . . . . . . . . . . . . 17
1.4.1 Suporte Oferecido pela MySQL AB . . . . . . . . . . . . . 17
1.4.2 Copyrights e Licenças Usadas pelo MySQL . . . . . . 17
1.4.3 Licenças do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4.3.1 Usando o Programa MySQL Sob uma
Licença Comercial . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4.3.2 Usando o Programa MySQL Sem Custo
Sob GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.4 Logomarcas e Marcas Registradas da MySQL AB
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.4.1 O Logo Original do MySQL. . . . . . . . . . . . 20
1.4.4.2 Logomarcas da MySQL que Podem Ser
Usadas Sem Permissão de Alteração . . . . . . . . 20
1.4.4.3 Quando Você Precisa de Permissão de
Alteração para Usar as Logomarcas do MySQL?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.4.4 Logomarcas dos Parceiros da MySQL AB
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.4.5 Usando a Palavra MySQL em Texto Impresso
ou Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.4.6 Usando a Palavra MySQL em Nomes de
Companhias e Produtos . . . . . . . . . . . . . . . . . . . 21
1.5 Mapa de Desenvolvimento do MySQL. . . . . . . . . . . . . . . . . . . . 22
1.5.1 MySQL 4.0 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 22
ii
2 Instalação do MySQL . . . . . . . . . . . . . . . . . . . . . 60
2.1 Instalação rápida padrão do MySQL . . . . . . . . . . . . . . . . . . . . . 60
2.1.1 Instalando o MySQL no Windows . . . . . . . . . . . . . . . 60
2.1.1.1 Exigências do Sistema Windows . . . . . . . . 61
2.1.1.2 Instalando uma Distribuição Binária do
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.1.1.3 Preparando o Ambiente MySQL do
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.1.1.4 Selecionando um Servidor Windows . . . . 63
2.1.1.5 Iniciando o Servidor pela Primeira Vez . . 64
2.1.1.6 Iniciando o MySQL no Windows 95, 98, ou
Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.1.1.7 Iniciando o MySQL no Windows NT, 2000,
ou XP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.1.1.8 Executando o MySQL no Windows . . . . . 68
2.1.2 Instalando o MySQL no Linux . . . . . . . . . . . . . . . . . . 69
2.1.3 Instalando o MySQL no Mac OS X . . . . . . . . . . . . . 71
2.1.4 Instalando o MySQL no NetWare . . . . . . . . . . . . . . . 74
2.1.4.1 Instalando o MySQL para Binários do
NetWare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2.2 Detalhes Gerais de Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.2.1 Como obter o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.2.2 Verificando a Integridade do Pacote Usando MD5
Checksums ou GnuPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
2.2.3 Sistemas Operacionais suportados pelo MySQL . . 78
2.2.4 Qual versão do MySQL deve ser usada . . . . . . . . . . 80
2.2.5 Layouts de Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . 83
2.2.6 Como e quando as atualizações são lançadas? . . . . 84
2.2.7 Filosofia das Distribuições - Nenhum Bug
Conhecidos nas Distribuições . . . . . . . . . . . . . . . . . . . . . 85
2.2.8 Binários MySQL compilados pela MySQL AB . . . 86
2.2.9 Instalando uma Distribuição Binária do MySQL . . 91
2.3 Instalando uma distribuição com fontes do MySQL . . . . . . . 94
2.3.1 Visão geral da instalação rápida . . . . . . . . . . . . . . . . 95
2.3.2 Aplicando patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.3.3 Opções típicas do configure . . . . . . . . . . . . . . . . . . . 97
2.3.4 Instalando pela árvore de fontes do desenvolvimento
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
2.3.5 Lidando com Problemas de Compilação . . . . . . . . 103
2.3.6 Notas MIT-pthreads . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.3.7 Instalando o MySQL a partir do Fonte no Windows
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.3.7.1 Construindo o MySQL Usando VC++ . . 108
iv
1 Informações Gerais
O programa MySQL ° R
é um servidor robusto de bancos de dados SQL (Structured Query
Language - Linguagem Estruturada para Pesquisas) muito rápido, multi-tarefa e multi-
usuário. O Servidor MySQL pode ser usado em sistemas de produção com alta carga e
missão crítica bem como pode ser embutido em programa de uso em massa. MySQL é uma
marca registrada da MySQL AB.
O programa MySQL é de Licença Dupla. Os usuários podem escolher entre usar o pro-
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-
ercial padrão da MySQL AB. Veja Seção 1.4 [Licensing and Support], Página 17.
O site web do MySQL (http://www.mysql.com/) dispõe das últimas informações sobre o
programa MySQL.
A seguinte lista descreve algumas seções de particular interesse neste manual:
• Para informações sobre a empresa por trás do Servidor do Banco de Dados MySQL,
veja Seção 1.3 [What is MySQL AB], Página 12.
• Para discussões das capacidades do Servidor do Banco de Dados MySQL, veja
Seção 1.2.2 [Features], Página 6.
´
• Para instruções de instalação, veja Cap“ptexi tulo 2 [Installing], Página 60.
• Para dicas sobre a portabilidade do Servidor do Banco de Dados MySQL para novas
arquiteturas ou sistemas operacionais, veja Apêndice E [Porting], Página 1078.
• Para informações sobre a atualização da versão 4.0, veja Seção 2.5.1 [Upgrading-from-
4.0], Página 121.
• Para informações sobre a atualização da versão 3.23, veja Seção 2.5.2 [Upgrading-from-
3.23], Página 123.
• Para informações sobre a atualização da versão 3.22, veja Seção 2.5.3 [Upgrading-from-
3.22], Página 127.
• Para um tutorial de introdução ao Servidor do Banco de Dados MySQL, veja Cap“ptexi ´
tulo 3 [Tutorial], Página 168.
• Para exemplos de SQL e informações sobre benchmarks, veja o diretório de benchmarks
(‘sql-bench’ na distribuição).
• Para o histórico de novos recursos e correções de erros, veja Apêndice D [News],
Página 957.
• Para uma lista de erros atualmente conhecidos e mal-funcionamento, veja Seção 1.8.6
[Bugs], Página 54.
• Para projetos futuros, veja Seção 1.6 [TODO], Página 27.
• Para ver a lista de todos os colaboradores deste projeto, veja Apêndice C [Credits],
Página 945.
Importante:
Relatórios de erros (também chamados bugs), bem como dúvidas e comentários, devem ser
enviados para a lista de email geral do MySQL. Veja Seção 1.7.1.1 [Mailing-list], Página 33.
Veja Seção 1.7.1.3 [Bug reports], Página 36.
2 MySQL Technical Reference for Version 5.0.1-alpha
O script mysqlbug deve ser usado para gerar comunicados de erros no Unix. (A distribuição
do Windows contém um arquivo ‘mysqlbug.txt’ no diretório base que pode ser usado como
um template para um relatório de erro.
Em distribuições fonte, o script mysqlbug pode ser encontrado no diretório ‘scripts’. Para
distribuições binárias, o mysqlbug pode ser encontrado no diretório ‘bin’ (‘/usr/bin’ para
o pacote RMP do servidor MySQL.
Se você encontrou um erro de segurança no Servidor MySQL, você deve enviar um email
para [email protected].
Este é o manual de referência MySQL; ele documenta o MySQL até a versão 5.0.1-alpha.
Mudanças funcionais são sempre indicadas com referência a versão, assim este manual
também pode ser utiliado caso você esteja utilizando uma versão mais antiga do MySQL
(como 3.23 ou 4.0-produção). Também a referências a versão 5.0 (desenvolvimento).
Sendo um manual de referência, ele não fornece instruções gerais sobre SQL ou conceitos de
banco de dados relacionais.
Como o Programa da Banco de Dados MySQL está sob constante desenvolvimento, o manual
também é atualizado freqüentemente. A versão mais recente deste manual está disponível
em http://www.mysql.com/documentation/ em diferentes formatos, incluindo HTML,
PDF, e versões HLP do Windows.
O documento original é uma arquivo Texinfo. A versão HTML é produzida automatica-
mente usando uma versão modificada do texi2html. A versão texto e Info são produzidas
com makeinfo. A versão PostScript é produzida usando texi2dvi e dvips. A versão PDF
é produzida com pdftex.
Se você tiver dificuldades de encontrar informações no manual, você pode tentar nossa
versão com busca em http://www.mysql.com/doc/.
Se você tiver qualquer sugestão a respeito de adições e correções neste manual, por favor
envie-os para a equipe de documentação em [email protected].
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
Lentz, Paul DuBois e Stefan Hinz. Para outros colaboradores, veja Apêndice C [Credits],
Página 945.
A traduçao deste manual foi feita por Daniel Coelho Teobaldo e Carlos Henrique Paulino
sob a supervisão da EAC Software.
Os direitos autorais (2003) deste manual pertence a compania Sueca MySQL AB. Veja
Seção 1.4.2 [Direitos Autorais], Página 17.
MySQL, o mais popular sistema de gerenciamento de banco de dados SQL Open Source, é
desenvolvido, distribuído e tem suporte da MySQL AB. A MySQL AB é uma empresa comercial,
fundada pelos desenvolvedores do MySQL, cujos negócios é fornecer serviços relacionados
ao sistema de gerenciamento de banco de dados MySQL. Veja Seção 1.3 [What is MySQL
AB], Página 12.
O web site do MySQL (http://www.mysql.com/) fornece informações mais recentes sobre e
programa MySQL e a MySQL AB.
O MySQL é um sistema de gerenciamento de bancos de dados.
Um banco de dados é uma coleção de dados estruturados. Ele pode ser qual-
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,
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
como o Servidor MySQL. Como os computadores são muito bons em lidar com
grandes quantidades de dados, o gerenciamento de bancos de dados funciona
como a engrenagem central na computação, seja como utilitários independentes
ou como partes de outras aplicações.
O MySQL é um sistema de gerenciamento de bancos de dados relacional.
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-
idade. A parte SQL do “MySQL” atenda pela “Structured Query Language -
Linguagem Estrutural de Consultas”. SQL é linguagem padrão mais comum
usada para acessar banco de dados e é definida pelo Padrão ANSI/ISO SQL. (O
padrão SQL está vem evoluindo desde 1986 e existem diversas versões. Neste
manual, ”SQL-92” se refere ao padrão liberado em 1992, ”SQL-99” se refere ao
padrão liberado em 1999, e ”SQL:2003” se refere a versão do que esperamos que
seja liberado no meio de 2003. Nós usamos o termo ”o padr~ ao SQL” indicando
a versão atual do Padrão SQL em qualquer momento).
O é MySQL um software Open Source.
Open Source significa que é possível para qualquer um usar e modificar o pro-
grama. Qualquer pessoa pode fazer download do MySQL pela Internet e usá-lo
sem pagar nada. Se você quiser, você pode estudar o código fonte e alterá-lo
para adequá-lo às suas necessidades. O MySQL usa a GPL (GNU General Public
License - Licença Pública Geral GNU) http://www.fsf.org/licenses,
para definir o que você pode e não pode fazer com o software em diferentes
situações. Se você sentir desconforto com a GPL ou precisar embutir o MySQL
Capı́tulo 1: Informações Gerais 5
Quando começamos, tínhamos a intenção de usar o mSQL para conectar às nossas tabelas
utilizando nossas rápidas rotinas de baixo nível (ISAM). Entretanto, depois de alguns testes,
chegamos a conclusão que o mSQL não era rápido e nem flexível 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
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
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
continua sendo um mistério, mesmo para nós.
6 MySQL Technical Reference for Version 5.0.1-alpha
O nome do golfinho do MySQL (nosso logo) é Sakila. Sakila foi escolhido pelos fun-
dadores da MySQL AB de uma enorme lista de nomes sugeridos pelos usuários em nosso
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ízes em SiSwati, a língua local de Swaziland. Sakila é também o
nome de uma cidade em Arusha, Tanzania, próxima ao país de orígem de Ambrose, Uganda.
A seguinte lista descreve algumas das características mais importantes do Progrma de Banco
de Dados MySQL. Veja Seção 1.5.1 [MySQL 4.0 Nutshell], Página 22.
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.
• Utiliza o GNU Automake, Autoconf, e Libtool para portabilidade.
• APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl estão
disponíveis. Veja Cap´ “ptexi tulo 12 [Clients], Página 775.
• Suporte total a multi-threads usando threads diretamente no kernel. Isto
significa que se pode facilmente usar múltiplas CPUs, se disponível.
• Fornece mecanismos de armazenamento transacional e não transacional.
• Tabelas em disco (MyISAM) baseadas em árvores-B extremamente rápidas
com compressão de índices.
• É relativamente fácil se adicionar outro mecanismo de armazenamento.
Isto é útil se você quiser adicionar uma interface SQL a um banco de
dados caseiro.
• Um sistema de alocação de memória muito rápido e baseado em pro-
cesso(thread).
• Joins muito rápidas usando uma multi-join de leitura única otimizada.
• Tabelas hash em memória que são usadas como tabelas temporárias.
• Funções SQL são implementadas por meio de uma biblioteca de classes
altamente otimizada e com o máximo de performance. Geralmente não há
nenhuma alocação de memória depois da inicialização da pesquisa.
• O código do MySQL foi testado com Purify (um detector comercial de
falhas de memória) e também com o Valgrind, uma ferramenta GPL
(http://developer.kde.org/~sewardj/).
• Disponível como versão cliente/servidor ou embutida(ligada).
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],
Página 481.
• Registros de tamanhos fixos ou variáveis.
Capı́tulo 1: Informações Gerais 7
Comandos e Funções
• Completo suporte a operadores e funções nas partes SELECT e WHERE das
consultas. Por exemplo:
mysql> SELECT CONCAT(first_name, " ", last_name)
-> FROM nome_tbl
-> WHERE income/dependents > 10000 AND age > 30;
• Suporte pleno às cláusulas SQL GROUP BY e ORDER BY. Suporte para funções
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íveis como definidos no padrão SQL92.
• DELETE, INSERT, REPLACE, e UPDATE retornam o número de linhas que
foram alteradas (afetadas). É possível retornar o número de linhas com
padrão coincidentes configurando um parâmetro quando estiver conectando
ao servidor.
• O comando específico do MySQL SHOW pode ser usado para devolver in-
formações sobre bancos de dados, tabelas e índices. 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
exemplo, ABS é um nome de campo válido. A única restrição é que para uma
chamada de função, espaços não são permitidos entre o nome da função e
o ‘(’ que o segue. Veja Seção 6.1.7 [Palavras reservadas], Página 479.
• Você pode misturar tabelas de bancos de dados diferentes na mesma
pesquisa (como na versão 3.22).
Segurança
• Um sistema de privilégios e senhas que é muito flexível, seguro e que per-
mite verificação baseada em estações/máquinas. Senhas são seguras porque
todo o tráfico de senhas é criptografado quando você se conecta ao servidor.
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
o Servidor MySQL com 60.000 tabelas e aproximadamente 5.000.000.000
de linhas.
• São permitidos até 32 índices por tabela. Cada índice pode ser composto
de 1 a 16 colunas ou partes de colunas. O tamanho máximo do índice é
de 500 bytes (isto pode ser alterado na compilação do MySQL). Um índice
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ília NT (NT, 2000
ou XP), os clientes podem se conectar usando named pipes. No sistema
Unix, os clientes podem se conectar usando arquivos sockets.
8 MySQL Technical Reference for Version 5.0.1-alpha
Esta seção discute as questões “Quão estável é o MySQL?” e “Posso depender do MySQL
neste projeto?”. Tentaremos deixar claro estes assuntos e responder algumas das questões
mais importantes que dizem respeito a muito de nossos usuários. A informação nesta seção
é baseada em dados colhidos da lista de discussão, que é muito ativa na identificação de
problemas e assim como nos relatos de tipos de uso.
Originalmente, o código vem do início dos anos 80, fornecendo um código estável e o formato
de tabelas ISAM permanece compatível com versões anteriores. Na TcX, a predecessora da
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,
nossos novos usuários rapidamente encontraram algumas partes de “código sem testes”.
Desde então, cada distribuição nova teve menos problemas de portabilidade (mesmo com
os novos recursos implementados em cada uma destas versões)
Capı́tulo 1: Informações Gerais 9
Cada distribuição do Servidor MySQL foi sendo usado, e os problemas tem ocorrido somente
quando os usuários começam a usar o código das “áreas cinzentas.” Naturalmente, novos
usuários não sabem o que são as áreas cinzentas; esta seção tenta indicar aquelas que são
conhecidas atualmente. As descrições lidam com a Versão 3.23 e 4.0 do Servidor MySQL.
Todos os erros conhecidos e relatados são corrigidos na última versão, com a exceção dos
bugs listados na seção de erros, os quais são relacionados ao desenho. Veja Seção 1.8.6
[Bugs], Página 54.
O Servidor MySQL é escrito em múltiplas camadas com módulos independentes. Alguns
dos novos módulos estão listados abaixo com indicações de quão bem-testado foi cada um
deles.
Replicação — Gamma
Grandes grupos de servidores usando replicação estão em uso, com bom resul-
tados. O trabalho no aprimoramento dos recursos de replicação continua no
MySQL 4.x.
Tabelas InnoDB — Estável (na 3.23, 3.23.49)
O mecanismo de armazenamento transacional InnoDB foi declarado estável na
árvore do MySQL 3.23, a partir da versão 3.23.49. InnoDB tem sido usado em
sistema de produção grandes e com carga pesada.
Tabelas BDB — Gamma
O código do Berkeley DB é muito estável, mas ainda estamos melhorando 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
outro tipos de tabela.
Pesquisas Full-text — Beta
Pesquisa full-text funcionam mas ainda não são largamente usadas. Melhora-
mentos importantes forma implementados no MySQL 4.0.
MyODBC 3.51 (usa ODBC SDK 3.51) — Estável
Em grande uso na produção. Alguns problemas apresentados parecem ser rela-
cionados a aplicação e independente do driver ODBC ou do servidor de banco
de dados.
Recuperação automática de tabelas MyISAM — Gamma
Este status se aplica apenas ao novo código que confere no mecanismo de ar-
mazenamento MyISAM que verifica, na inicialização, se a tabela foi fechada cor-
retamente e executa uma conferência/reparo automático da tabela em caso
negativo.
Bulk-insert — Alpha
Novo recurso nas tabelas MyISAM no MySQL 4.0 para inserções mais rápidas de
vários registros.
Locking — Gamma
Esse módulo é muito dependente do sistema. Em alguns sistemas existem certos
problemas por utilizar o locking padrão do SO (fcntl(). Nestes casos, você
deve executar o mysqld com o parâmetro --skip-external-locking. São
conhecidos alguns problemas ocorridos em alguns sistemas Linux e no SunOS
quando utiliza-se sistemas de arquivos montados em NFS.
10 MySQL Technical Reference for Version 5.0.1-alpha
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
pessoa pode tirar suas dúvidas.
Erros são normalmente corrigidos com um patch; para erros sérios, normalmente é lançada
uma nova distribuição.
A Versão 3.22 do MySQL tem suporte para tabelas com limite de tamanho até 4G. Com
o novo MyISAM no MySQL versão 3.23 o tamanho máximo foi expandido até 8 milhões de
terabytes (2 ^ 63 bytes). Com este tamanho de tabela maior permitido, o tamanho máximo
efetivo das tabelas para o banco de dados MySQL é normalmente limitado pelas restrições
do sistema operacional quanto ao tamanho dos arquivos, não mais por limites internos do
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 (É possível 4GB com patch)
Solaris 2.6 4G (pode ser alterado com parâmetro)
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
de arquivos ext2. No Linux 2.4 já existem patches para o sistema de arquivos ReiserFS para
ter suporte a arquivos maiores. A maioria das distribuições atuais são baseadas no kernel
2.4 e já incluem todos os patches Suporte a Arquivos Grandes (Large File Support - LFS)
exigidos. No entanto, o tamanho máximo disponível 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
"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
tamanho máximo em torno de 4G. Você pode verificar o tamanho máximo da tabela com
o comando SHOW TABLE STATUS ou com o myisamchk -dv nome_tabela Veja Seção 4.6.8
[SHOW], Página 302.
Se você precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos
grandes), a instrução CREATE TABLE permite as opções AVG_ROW_LENGHT e MAX_ROWS. Use
estas opções para criar uma tabela que possa ter mais de 4GB. Veja Seção 6.5.3 [CREATE
TABLE], Página 598. Você pode também alterar isso mais tarde com ALTER TABLE. Veja
Seção 6.5.4 [ALTER TABLE], Página 608.
Outros modos se contornar o limite do tamanho do arquivo das tabelas MyISAM são os
seguintes:
• Se sua tabela grande será somente leitura, você poderá usar o myisampack para unir
e comprimir várias tabelas em uma. mysisampack normalmente comprime uma tabela
Capı́tulo 1: Informações Gerais 11
em pelo menos 50%, portanto você pode obter, com isso, tabelas muito maiores. Veja
Seção 4.8.4 [myisampack], Página 336.
• Outra opção para contornar o limite de tamanho de arquivos do sistema operacional
para arquivos de dados MyISAM usando a opção RAID. Veja Seção 6.5.3 [CREATE TABLE],
Página 598.
• O MySQL incluí uma biblioteca MERGE que permite acessar uma coleção de tabelas
idênticas como se fosse apenas uma. Veja Seção 7.2 [MERGE], Página 638.
O Servidor MySQL não apresenta nenhum problema com o ano 2000 (Y2K compatível)
• O Servidor MySQL usa funções de tempo Unix que tratam datas até o ano 2037 para
valores TIMESTAMP; para valores DATE e DATETIME, datas até o ano 9999 são aceitas.
• Todas as funções de data do MySQL estão no arquivo ‘sql/time.cc’ e codificadas com
muito cuidado para ser compatível com o ano 2000.
• No MySQL versão 3.22 e posterior, o novo tipo de campo YEAR pode armazenar anos 0 e
1901 até 2155 em 1 byte e mostrá-lo usando 2 ou 4 dígitos. Todos os anos de 2 dígitos
são considerados estar na faixa de 1970 até 2069; o que significa que se você armazenar
01 em uma coluna YEAR, O Servidor MySQL o tratará como 2001.
O seguinte demonstração simples ilustra que o MySQL Server não tem nenhum problema
com datas até depois do ano 2030:
mysql> DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec)
O valor da coluna TIMESTAMP final é zero porque o ano final (2050) excede o TIMESTAMP
maximo. O tipo de dados TIMESTAMP, que é usado para armazenar a hora atual, suporta
valores na faixa de 19700101000000 a 20300101000000 em máquinas 32 bits (valor com
sinal). Em máquinas de 64 bits, TIMESTAMP trata valores até 2106 (valores sem sinal).
O exemplo mostra que os tipos DATE e DATETIME não tem problemas com as datas usadas.
Eles irão conseguir trabalhar com datas até o ano 9999.
Embora o MySQL Server seja seguro em relação ao ano 2000, você pode ter problemas se você
usá-lo com aplicações que não são seguras com o ano 2000. Por exemplo, muitas aplicações
antigas armazenam ou manipulam anos usando valores de 2 digitos (que são ambíguos) em
vez de 4 dígitos. Este problema pode ser aumentado por aplicações que usam valores como
00 ou 99 como indicadores de valores “perdidos”. Infelizmente, estes problemas pode ser
difíceis de corrigir, cada um deles pode usar um conjunto diferente de convenções e funções
de tratamento de datas.
Assim, apesar do Servidor MySQL não ter problemas com o ano 2000, é de responsabilidade
de sua aplicação fornecer datas que não sejam ambíguas. Veja Seção 6.2.2.1 [Y2K issues],
Página 490 para as regras do Servidor MySQL para lidar com entrada de datas ambíguas
que contenham valores de ano com 2 dígitos.
Os desenvolvedores do servidor MySQL são todos empregados pela companhia. ny Nós somo
uma organização virtual com pessoas em uma dúzia de países. Nos comunicamos exten-
sivamente na internet todos os dias uns com os outros e com nossos usuários, agentes de
suporte e parceiros.
Nós nos dedicamos a desenvolver o programa MySQL e propagar nosso banco de dados a
novos usuários.A MySQL AB detém os direitos autorais do código fonte do MySQL, do logo e
da marca MySQL e deste manual. Veja Seção 1.2 [What-is], Página 4.
A ideologia do MySQL mostra nossa dedicação ao MySQL e ao Open Source.
Nós desejamos que o Programa de Banco de Dados MySQL seja:
O melhor e o mais usado banco de dados no mundo.
• Acessível e disponível para todos.
• Fácil de usar.
• Melhorado continuamente, permanecendo rápido e seguro.
• 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.
• Tem como objetivo serem bons cidadãos.
• Tem preferência por parceiros que compartilhem nossos valores e idéias.
• Respondem e-mails e dão suporte.
• São uma empresa virtual, conectada com outras.
• Trabalha contra patentes de sistemas.
O site do MySQL (http://www.mysql.com/) fornece as últimas informações sobre o MySQL
e a MySQL AB.
A propósito, a parte “AB” do nome da companhia é o acrônimo para a palavra suéca
“aktiebolag”, ou “sociedade anônima.” Ela é traduzida para “MySQL, Inc.” De fato,
MySQL Inc. e MySQL GmbH são exemplos de subsidiárias da MySQL AB. Elas estão
localizadas nos EUA e Alemanha, respectivamente.
Uma das dúvidas mais comuns que encontramos é: “Como você pode viver de algo que você
disponibiliza sem custo? ” É assim que fazemos.
A MySQL AB ganha dinheiro com suporte, serviços, licenças comerciais e royalties. Us-
amos estes rendimentos para patrocinar o desenvolvimento de produtos e para expandir os
negócios da MySQL.
A compania tem sido luccrativa desde de sua criação. Em Outubro de 2001, aceitamos um
financiamento de risco de investidores Escandinavos e um pounhado de pessoas de negócio.
Este investimento é usado para solidificarmos nosso modelo de negócio e construir um base
para o crescimento sustentável.
14 MySQL Technical Reference for Version 5.0.1-alpha
1.3.1.1 Suporte
1.3.1.3 Consultoria
O banco de dados MySQL é liberado sob a licença GNU General Public License (GPL). Isto
significa que o programa MySQL pode ser usado sem custos sob a GPL. Se você não deseja estar
limitado pelos termos da GPL (tais como a exigência de que a sua aplicação também deva ser
GPL), você pode comprar uma licença comercial para o mesmo produto da MySQL AB; veja
http://www.mysql.com/products/pricing.html. Desde de que a MySQL AB é dona dos
direitos do código fonte do MySQL, estamos aptos a empregar o Licenciamento Dual, que
significa que o mesmo produto está disponível sob a GPL e sob uma licença comercial. Isto
não afeta o nosso comprometimento com o Open Source de forma alguma. Para detalhes
sobre quando uma licença comercial é exigida, veja Seção 1.4.3 [MySQL licenses], Página 18.
1.3.1.5 Parcerias
Se você tiver sugestões a respeito de adições ou conexões para este manual, envie-os para a
equipe do manual via e-mail em [email protected].
Para questões ou comentários sobre o funcionamento ou coteúdo do web site da MySQL
(http://www.mysql.com/), envie um e-mail para [email protected].
A MySQL AB tem uma política de privacidade que pode ser lida em http://www.mysql.com/company/privacy.h
Para qualquer questões a respeito desta política, envie um e-mail para [email protected].
Para todos os outros assunto, envie um e-mail para [email protected].
MySQL AB possui os direitos sobre o código fonte do MySQL, as logomarcas e marcas reg-
istradas do MySQL e este manual. Veja Seção 1.3 [What is MySQL AB], Página 12. Diversas
licenças são relevantes a distribuição do MySQL:
1. Todo o código específico do MySQL no servidor, a biblioteca mysqlclient e o cliente,
assim como a biblioteca GNU readline é coberta pela GNU General Public License.
Veja Apêndice H [GPL license], Página 1096. O texto desta licença podee ser encon-
trado no arquivo ‘COPYING’ na distribuição.
2. A biblioteca GNU getopt é coberta pela GNU Lesser General Public License. Veja
http://www.fsf.org/licenses/.
18 MySQL Technical Reference for Version 5.0.1-alpha
O programa MySQL é distribuído sob a GNU General Public License (GPL), que
é provavelmente a melhor licença Open Source conhecida. Os termos formais da
licença GPL pode ser encontrado em http://www.fsf.org/licenses/. Veja também
http://www.fsf.org/licenses/gpl-faq.html e http://www.gnu.org/philosophy/enforcing-gpl.html.
Como o programa MySQL é distribuído sob a GPL, ele pode ser usa geralmente de graça, mas
para certos usos você pode querer ou precisar comprar lincenças comerciais da MySQL AB em
https://order.mysql.com/. Veja http://www.mysql.com/products/licensing.html
para mais informações.
Versões mais antigas do MySQL (3.22 e anteriores) estão sujeitos a uma licença mais estrita
(http://www.mysql.com/products/mypl.html). Veja a documentação da versão específica
para mais informação.
Note que o uso do programa MySQL sob uma licença comercial, GPL ou a antiga licença do
MySQL não dá automaticamente o direito de usar as marcas registradas da MySQL AB. Veja
Seção 1.4.4 [MySQL AB Logos and Trademarks], Página 20.
• Quando você liga um programa com qualquer código GPL do programa MySQL e não que
que o produto resultante seja licenciado sob a GPL, talvez porque você queira criar um
produto comercial ou manter fechado o código não GPL adicionado por outras razões.
Ao comprar a lincença comercial, você não está usando o programa MySQL sob GPL
embora o código seja o mesmo.
• Quando você distribui uma aplicação não GPL que só funciona com o programa MySQL
e a entrega com o programa MySQL. Este tipo de solução é considerada mesmo se feita
em uma rede.
• Quando você distribui cópias do programa MySQL sem fornecer o código fonte como
exigido sob a licença GPL.
• Quando você quiser dar suporte adional ao desenvolvimento do banco de dados do
MySQL mesmo se você não precisar formalmente de uma licença comercial. Comprar
o suporte diretamente da MySQL AB é outro bom modo de contribuir com o desen-
volvimento do programa MySQL, com vantagens imediatas para você. Veja Seção 1.4.1
[Support], Página 17.
Se você requisita uma licecnça, você precisará de uma para cada instalação do programa
MySQL. Ela cobre qualquer número de CPUs na máquina, e nãp há nenhum limite artificial
no número de clientes que conectam aom servidor de qualquer modo.
Para licenças comercias, ,visite o nosso site web em http://www.mysql.com/products/licensing.html.
Para contrato de suporte, veja http://www.mysql.com/support/. Se você tiver necessi-
dades especiais ou tiver acesso restrito a Internet, contate a nossa quipe de vendas via
email em [email protected].
Você pode utilizar o programa MySQL sem custo sob a GPL se você concordar as condições do
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
produto.
• Quando você distribui o código fonte do MySQL junto com outros programas que não
são ligados ou dependentes do sistema do MySQL para suas funcionalidades mesmo se
você vender a distribuição comercialmente. Isto é chamado agregação na licença GPL.
• Quando você não está distribuindo qualquer parte do sistema do MySQL, você pode
usá-lo de graça.
• Quando você for um Provedos de Serviços de Internet (Internet Service Provider - ISP),
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
confiança qie seus provedores terão, de fato, os recursos para resolver qualquer problema
que eles possam experimentar com a instalação do MySQL. Mesmo se um provedor não
tiver uma licença comercial ara o MySQL Server, seus clientes devem ter acesso de
leitura ao fonte da instalação do MySQL para que seus clientes verifiquem que ela está
correta.
20 MySQL Technical Reference for Version 5.0.1-alpha
• Quando você usa o banco de dados MySQL em conjunto com um servidor web, você não
precisa de uma licença comercial (uma vez que este não é um produto distribuído por
você). Isto é verdade mesmo se você executar um servidor web comercial que utilize
MySQL Server, pois você não está distribuindo qualquer parte do sistema MySQL. No
entanto, neste caso nós gostariamos que você adquirisse o suporte ao MySQL pois o
MySQL está ajudandoa sua empresa.
Se o seu uso do banco de dados MySQL não exige uma licença comercial, lhe encorajamos
a adquirir um suporte da MySQL AB de qualquer forma. Deste modo você contribui com o
desenvolvimento do MySQL e também ganha vantegens imediatas. Veja Seção 1.4.1 [Support],
Página 17.
Se você utiliza o bancdo de dados MySQL em um contexto comercial e obtem lucro com
o seu uso, pedimos que você ajude no desenvolvimento do MySQL adquirindo algum nível
de suporte. Sentimos que se banco de dados MySQL ajudou os seus negócios, é razoável
pedirmos que você ajude a MySQL AB. (De outra forma, se você nos pedir suporte, você não
só estará usando de graça algo em que colocamos muito trabalhom mas também pedindo
que lhe forneçamos suporte de graça também).
Muitos usuários do banco de dados MySQL deseja mostar o logo do golfinho da MySQL AB
em seus web sites,livros ou produtos fechados. Isto é bem vindo, mas deve haver anotações
indicando que a palavra MySQL e o logo do golfinho da MySQL são marcas registradas da
MySQL AB e só podem ser usadas como indicado na nossa política de marcas registradas em
http://www.mysql.com/company/trademark.html.
O logo do golfinho do MySQL foi desenhado pela Finnish advertising agency Priority em
2001. O golfinho foi escolhido como um símbolo para o baco de dados MySQL já que ele
é esperto, rápido e um animal ágil, se esforándo em navegar pelos oceanos de dados. Nós
também gostamos de golfinos.
O logo original MySQL só podem ser usados pr representates da MySQL AB e aqueles que
possuem um acordo escrito permitndo-os de fazê-lo.
• Deixe evidente que você, e não a MySQL AB, é o criado e proprietário do site que mostra
a logomarca do MySQL.
• Não use a logomarca em detrimento à MySQL AB ou ao valor das marcas registradas da
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
http://www.mysql.com/.
• Se você utilizar o banco de dados MySQL sob GPL em uma aplicação, sua aplicação deve
ser Open Source deve estar apta a conectar a um servidor MySQL.
Contate-nos via e-mail em [email protected] para saber sobre os nosso acordos espe-
ciais que sirvam as suas necessidades.
Você precisa de permissão escrita da MySQL AB antes de usar as logomarcas do MySQL nos
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.
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
com treinador ou consultor do MySQL. Para mais informações, Seção 1.3.1.5 [Partnering],
Página 15.
A MySQL AB considera bem vindas as referências ao banco de dados MySQL mas deve ser
indicado que a palavra MySQL é uma marca registrada da MySQL AB. Por isto, você deve
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-
istrada da MySQL AB. Para mais informações, veja nossa política de marcas registradas em
http://www.mysql.com/company/trademark.html.
22 MySQL Technical Reference for Version 5.0.1-alpha
Esta seção fornece uma amostra do mapa de desenvolvimento do MySQL, incluindo prin-
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
mais requisitados estão listada na tabela a seguir.
Feature MySQL version
Unions 4.0
Subqueries 4.1
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
Muito aguardado por nossos usuários, o MySQL Server 4.0 agora está disponível em sua
versão de produção.
O MySQL 4.0 está disponível 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
mutios sites.
Os principais novos recursos do MySQL Server 4.0 são trabalhados em conjunto com os
usuários corporativos e da comunidade, melhorando o programa de banco de dados MySQL
como uma solução para missões críticas e sistemas de bancos de dados de alta carga. Outros
novos recursos visam os usuários de bancos de dados embutidos.
O MySQL 4.0 foi declarado estável para uso em produção a partir da versão 4.0.12 em
Março de 2003. Isto significa que, no futuro, apenas correção de erros serão feitas para a
distribuição da série 4.0 e apenas correção de erros críticos serão feitas para a antiga série
3.23. Veja Seção 2.5.2 [Upgrading-from-3.23], Página 123.
Novos recursos para o MySQL está sendo adicionado ao MySQL 4.1 que também está
disponível (versão alfa). Veja Seção 1.5.2 [MySQL 4.1 Nutshell], Página 24.
Capı́tulo 1: Informações Gerais 23
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
[Query Cache], Página 625.
• A versão 4.0 aumenta a velocidade do MySQL Server em um número e
áreas tais como INSERTs em bloco, buscas em índices empacotados, criação
de índices FULLTEXT, e COUNT(DISTINCT).
Introdução ao Servidor MySQL Embutido
• A nova biblioteca do Servidor Ebutido pode ser facilmente usada em
aplicações standalone e embarcadas. O servidor embutido fornce uma
alternativa para o uso do MySQL em um ambiente cliente/servidor. Veja
Seção 1.5.1.2 [Nutshell Embedded MySQL], Página 24.
Mecanismo de armazenamento InnoDB como padrão
• O mecanismo de armazenamento InnoDB é oferecido como um recurso
padrão do servidor MySQL. Isto significa suporte a transações ACID, chaves
estrangeiras com UPDATE/DELETE em cacata e lock de registro agora
são recursos padrões. Veja Seção 7.5 [InnoDB], Página 643.
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
natural e binária de lógica de busca. Você pode personalizar o tamanho
mínimo de palavras e definir a sua própria lista de palavras de parasa em
qualquer linguagem humana, habilitando um novo conjunto de aplicações
a serem construídas no MySQL Server. Veja Seção 6.8 [Fulltext Search],
Página 619.
Compatibilidade com os padrões, portabilidade e migração
• Recursos para simplificar a migração de outros sistemas de banco de dados
para o MySQL Server incluem TRUNCATE TABLE (como no Oracle)
• Muitos usuários também ficarão satisfeitos ao perceber que o MySQL
Server agora suporta a instrução UNION, um recurso padrão SQL muito
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.
Internacionalização
• Nossos usuários alemães, austríacos e suiços notarão que o MySQL agora
suporta um novo conjunto de caracteres, latin1_de, que assegura que a
Ordenaç~
ao em alem~ ao classificará palavras com umlauts na mesma ordem
das agendas telefônicas alemãs.
Aprimoramento da Usabilidade
No porcesso de construção de recursos para novos usuários, não esquecemos os
pedidos de nossa leal comunidade de usuários.
24 MySQL Technical Reference for Version 5.0.1-alpha
libmysqld faz o MySQL Server adequado para uma grande área de aplicações. Usando a
biblioteca do servidor MySQL embutido, pode embarcar o MySQL Server em vários aplica-
tivos e dispositivos eletrônicos, onde o usuário final não têm conhecimento de possuir um
banco de dados básico. O servidor MySQL embutido é ideal para uso nos bastidores em
aplicações de Internet, quiosques públicos, responsável por unidades de combinação hard-
ware/software, servidores Internet de alta performance, banco de dados de auto-contenção
distribuídos em CDROM, e assim por diante
Muitos usuários da libmysqld se benficiarão da iLicença Dual do MySQL. Para aqueles
que não desejam ser limitar pela GPL, o software é tambem está disponível sob uma licença
comercial. A biblioteca embutida do MySQL também usa a mesma interface que a biblioteca
do cliente normal, sendo então conveniente e fácil de usar. Veja Seção 12.1.15 [libmysqld],
Página 864.
MySQL Server 4.0 prepara a criação de novos recursos como subqueries e Unicode (imple-
mentado na versão 4.1) e o funcionamento de stored procedures do SQL-99 está sendo feito
para a versão 5.0. Estes recursos estão no topo da lista de recursos desejados de muitos de
nossos clientes.
Com estas adições, os críticos do MySQL Database Server devem ser mais imaginativos que
nunca para apontar as deficiências do MySQL Database Management System. Já conhecido
por sua estabilidadem velocidade e facilidade de uso, o MySQL Server estará apto a atender
as necessidades de vários compradores exigentes.
Os recursos listados nesta seção estão implementados no MySQL 4.1. Outros poucos recur-
sos estão planejados para o MySQL 4.1. Veja Seção 1.6.1 [TODO MySQL 4.1], Página 27.
Capı́tulo 1: Informações Gerais 25
A maioria dos novos recursos em codificação, como stored procedures, estarão disponíveis
no MySQL 5.0. Veja Seção 1.6.2 [TODO MySQL 5.0], Página 27.
Suporte a subqueries e tabelas derivadas
•
Uma subquery é uma instrução SELECT aninhada dentro de outras in-
struções. Uma tabela dericada (unnamed view) é uma subquery na cláusula
FROM de outras instruções. Veja Seção 6.4.2 [Subqueries], Página 570.
Aumento na velocidade
• Protocols binários mais rápidos com instruções preparadas e parâmetros
de ligação. Veja Seção 12.1.4 [C API Prepared statements], Página 828.
• Indexação BTREE agora é suportado por tabelas HEAP, aumentando de forma
significante o tempo de resposta para busca que não são exatas.
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
único comando.
• Suporte aos tipos espaciais OpenGIS (dados geográficos). Veja Cap´
“ptexi
tulo 10 [Spatial extensions in MySQL], Página 733.
• A replicação pode ser feita sobre conexão SSL.
Compatibilidade aos padrões, portabilidade e migração
• O novo protocolo cliente/servidor adiciona a possibilidade de se passar
múltiplos avisos ao cliente, no lugar se um único resultado. Isto faz com
que o trabalho como uma grande carga de dados seja muito mais fácil
de rastrear. SHOW WARNINGS exibe avisos para o último comando. Veja
Seção 4.6.8.9 [SHOW WARNINGS], Página 323.
Internacionalização
• Para suportar nossa base de usuário sempre em expansão usando linguagens
locais nas aplicações, o programa MySQL agora oferece suporte Unicode
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.
• Para documentação sobre este suporte a conjunto de caracters aprimorados,
veja Cap´“ptexi tulo 9 [Charset], Página 710.
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 é
que a informação é sempre aplicável para aquela versão do servidor em par-
ticular. Como esta informação está disponível executando uma instrução
SQL, outros clientes também poderão ser escritos para acessá-la. Por ex-
emplo, o cliente mysql de linha de comando foi modificado para ter esta
capacidade.
26 MySQL Technical Reference for Version 5.0.1-alpha
Novos recursos estão sendo adicionados ao MySQL 4.1. A versão Alfa já stá disponível para
download. Veja Seção 1.5.2.3 [Nutshell Ready for Immediate Use], Página 26.
O conjunto de recursos que estão sendo adicionados a versão 4.1 estão, na maioria, cor-
rigidos. Desenvolvimento adicional já está em andamento na versão 5.0. O MySQL 4.1
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
erros são realizados0) e Gamma (indicando que ima distribuição de produção está quase
pronta). No fim deste processo, o MySQL 4.1 se tornará o nova distribuição de produção).
O MySQL 4.1 está atualmente no estágio alfa e os binários estão disponíveis para download
em http://www.mysql.com/downloads/mysql-4.1.html. Todas as distribuições binárias
passaram por nossos extensivos teste sem nenhum erro na plataforma em que testamos.
Veja Seção D.2 [Novidades na versão 4.1], Página 957.
Para aqueles que desejam usar o fonte mais recente do desenvolvimento do MySQL 4.1, deix-
amos nosso repositório do BitKeeper publicamente disponível. Veja Seção 2.3.4 [Installing
source tree], Página 100.
O novo desenvolvimento para o MySQL está focado na distribuição 5.0, comrecursos como
Stored Procedures entre outros. Veja Seção 1.6.2 [TODO MySQL 5.0], Página 27.
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ível publicamente. Veja
Seção 2.3.4 [Instalando a árvore fonte], Página 100.
Capı́tulo 1: Informações Gerais 27
Esta seção lista os recursos que planejamos impementar no MySQL Server. As listas são
apresentadas por versão, e os itens estão aproximadamente na ordem em que serão feitos.
Nota: Se você é um usuário corporativo com uma necessidade urgente de um recurso par-
ticular, por favor, contate [email protected] para conversarmos sobre patrocínio. Financia-
mento feito por uma ou mais companhias nos permite alocar recursos adicionais para aquele
propósito específico. Um exemplo de um recurso patrocinado no passado é a replicação.
Os recursos abaixo ainda não estão implementados no MySQL 4.1, mass estão planejados
para implementação antes que o MySQL 4.1 vá para a fase beta. Para uma lista do que já
está feito no MySQL 4.1, veja Seção 1.5.2.1 [Nutshell 4.1 features], Página 24.
• Suporte OpenSSL estável (o MySQL 4.0 tem suporte rudimentar ao OpenSSL, não
testado 100%).
• Mais teste de instruções preparadas
• Mais testes de múltiplos conjunto de caracteres para uma tabela.
Os seguintes recursos estão planejados para inclusão no MySQL 5.0. Note que como pos-
suimos diversos desenvolvedores que estão trabalhando em diferentes projetos, haverão
também muitos recursos adicionais. Há também um pequena chance qie alguns destes
recursos sejam adicionados ao MySQL 4.1. Para uma lista do que já está feito no MySQL
4.1, veja Seção 1.5.2.1 [Nutshell 4.1 features], Página 24.
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ível.
Veja Seção 2.3.4 [Instalando a árvore fonte], Página 100.
Stored Procedures
• Stored procedures estão sendo implementadas atualmente. Este esforço é
baseado no SQL-99, o que tem m sintaxe básica similar (mas não idêntica) a
do Oracle PL/SQL. Nós também implementaremos o framework do SQL-99
para enganchar em linguagens externas e (onde possível) 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
índice deve ser criado como um índice RTREE. Na versão 4.1, índices RTREE
são usados internamente para dados geométricos (tipos de dados GIS), mas
não podem ser criados no pedido.
• Registros de tamanhos dinâmicas para tabelas HEAP.
28 MySQL Technical Reference for Version 5.0.1-alpha
Novas funcionalidades
• Suporte FOREIGN KEY para todos os tipos de tabelas.
• Restrições a nível de colunas.
• Replicação seguro a falhas.
• Backup online com baixa queda de desempenho. O backup online tornará
mais fácil adicionar um novo slave de replicação sem desligar o master.
Aumento de velocidade
• Novo formato dos arquivos de definição e tabelas baseados em texto (ar-
quivos ‘.frm’) e uma cache de tabelas para a definição de tabelas. Isto nos
permitirá fazer consultas mais rápidas da estruturas de tabela e dar um
suporte a chaves estrangeiras mais eficiente.
• Otimizar o tipo BIT para gastar 1 bit (agora BIT gasta 1 byte; e é tratado
como um sinônimo para TINYINT.)
Aprimoramento da usabilidade
• Adicionar opções ao protocolo cliente/servidor para obter notas de pro-
gresso para longos comandos em execução.
• Implementar RENAME DATABASE. Para tornar isto seguro para todos os
mecanismos de armazenamento, ele deve funcionar como a seguir:
Capı́tulo 1: Informações Gerais 29
Novas funcionalidade
• Comando como do Oracle CONNECT BY PRIOR ... para estruturas de busca
tipo árvore (hierárquica)
• 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.
• Permitir a atualização de variáveis nas instruções UPDATE. Por exemplo:
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á-
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
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
valor de chave primária, linhas existentes correspondendo às chaves
primárias são atualizadas para o restante das colunas de entrada. No
entanto, colunas faltosas na inserção dos registros de entradas não
são alteradas.
• Para tabelas com chaves primárias, se um registro de entrada não
contém um valor de chave primária ou estrá faltando alguma parte da
chave, o registro é tratado como um LOAD DATA INFILE ... REPLACE
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.
30 MySQL Technical Reference for Version 5.0.1-alpha
Esta seção introduz a lista de deiscussão do MySQL e dá algumas explicações sobre como a
lista deve ser utilizada. Quando você se inscreve na lista de discussão, você receberá, como
mensagens de email, tudo o que é enviado para a lista. Você também poderá enviar suas
próprias dúvidas e respostas para a lista.
Para se inscrever ou cancelar a inscrição de qualquer uma das listas de email descritas nesta
seção, visite http://lists.mysql.com/. Por favor, não envie mensagem sobre inscrição
ou cancelamento para qualquer das listas de emasil, porque tais mensagens são distribuídas
automaticamente para milhares de outros usuários.
Seu site local pode ter muitas inscrições para uma lista de email do MySQL. Se sim, o site
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
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
de correio separada no seu programa de emails, configure um filtro com base nos cabeçalhos
das mensagens. Você pode também usar os cabeçalhos List-ID: ou Entregar-Para: para
identificar suas mensagens.
Existe também as seguintes listas de discussão sobre MySQL atualmente:
announce Esta é para anuncio de novas versões do MySQL e programas relacionados.
Esta é uma lista com baixo volume na qual todos usuarios do MySQL deveriam
se inscrever.
mysql A principal lista para discussões MySQL em geral. Note que alguns tópicos são
mais bem discutidos em listas mais especializadas. Se você enviar para a lista
errada você pode não obter resposta.
34 MySQL Technical Reference for Version 5.0.1-alpha
mysql-digest
A lista mysql na forma resumida. Isto significa que você irá receber todas
mensagens individuais, enviadas na forma de uma grande mensagem uma única
vez ao dia.
bugs Esta lista só será do seu interesse se você quiser ficar informado sobre assuntos
relatados desde a última distribuição do MySQL ou se você quiser estar ativa-
mente envolvido no processo de busca e correção de erros. Veja Seção 1.7.1.3
[Relatório de erros], Página 36.
bugs-digest
Uma versão resumida da lista bugs.
internals
Uma lista para pessoas que trabalham no código do MySQL. Nesta lista pode-se
discutir desenvolvimento do MySQL e pos-patches.
internals
Uma versão resumida da lista internals.
mysqldoc Esta lista é para pessoas que trabalham na documentação do MySQL: pessoas
da MySQL AB, tradutores e outros membros da comunidade.
mysqldoc-digest
Esta é uma versão resumida da lista mysqldoc.
benchmarks
Esta lista é para qualquer um interessado em assuntos de desempenho. Dis-
cussões concentradas em desempenho de banco de dados (não limitado ao
MySQL) mas também inclue categorias ,com desempenho do kernel, sistema
de arquivos, sistema de disco e outros.
benchmarks
Esta é uma versão resumida da lista benchmarks.
packagers
Esta lista é para discussões sobre empacotamento e distribuição do MySQL.
Este é o fórum usado pela pessoas que mantém a distribuição para troca de
idéias de pacotes do MySQL e para assegurar que o MySQL esteja o mais
parecido possível em todas as plataformas e sistemas operacionais suportados.
packagers-digest
Esta é uma versão resumida da lista packagers.
java Discussão sobre o servidor MySQL e Java. É mais usada para discussões sobre
o driver JDBC, incluindo MySQL Connector/J.
java-digest
Uma versão resumida da lista java.
win32 Esta é a lista para todos os tópicos relacionados ao MySQL em sistemas opera-
cionais Microsoft, como o Win95, Win98, NT e Win2000.
win32-digest
Uma versão resumida da lista win32.
Capı́tulo 1: Informações Gerais 35
myodbc Lista para todos os tópicos relacionados a conectividade do MySQL com ODBC.
myodbc-digest
Uma versão resumida da lista myodbc.
mysqlcc Esta lista é sobre todos os tópicos relativos ao cliente gráfico MySQL Control
Center.
mysqlcc-digest
Esta lista é uma versão resumida da lista mysqlcc.
plusplus Lista sobre todos os tópicos relacionados à programação da API C++ para o
MySQL.
plusplus-digest
Uma versão resumida da lista plusplus.
msql-mysql-modules
Lista sobre o Suporte MySQL no Perl com o msql-mysql-modules que é
chamado DBD-mysql.
msql-mysql-modules-digest
Lista resumida sobre a versão do msql-mysql-modules.
Se você não obtiver uma resposta para suas questões na lista de mensagens do MySQL, uma
opção é pagar pelo suporte da MySQL AB, que irá colocar você em contato direto com
desenvolvedores MySQL. Veja Seção 1.4.1 [Suporte], Página 17.
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
podemos garantir a qualidade destas.
[email protected] Lista de mensagens na
língua francesa.
[email protected] Lista de mensagens coreana.
Envie subscribe mysql [email protected] para esta lista.
[email protected] Lista de mensagens alem~a.
Envie subscribe mysql-de [email protected] para esta lista.
Você pode encontrar informações sobre esta lista de mensagens em
http://www.4t2.com/mysql.
[email protected] Lista de mensagens
em português Envie subscribe mysql-br [email protected] para esta lista.
[email protected] Lista de mensagens espanhola.
Envie subscribe mysql [email protected] para esta lista.
Antes de enviar um relato de erro ou uma questão, por favor faça o seguinte:
• Comece pesquisando o manual MySQL online em:
http://www.mysql.com/doc/
36 MySQL Technical Reference for Version 5.0.1-alpha
Nosso banco de dados de bugs é publico e pode ser pesquisado por qualquer um em
http://bugs.mysql.com/. Se você logar no sistema, você poderá entrar novos relatórios.
Escrever um bom relatório de erro exige paciência, e fazê-lo de forma apropriada economiza
tempo para nós e para você. Um bom relatório de erros contendo um teste de caso para o
bug irá torná-lo muito mais fácil para corrigí-lo no próximo release. Esta seção irá ajudá-lo
a escrever seu relatório corretamente para que você não perca seu tempo fazendo coisas que
não irão ajudar-nos muito ou nada.
Nós encorajamos todo mundo a usar o script mysqlbug para gerar um relato de erros (ou um
relato sobre qualquer problema), se possível. mysqlbug pode ser encontrado no diretório
‘scripts’ na distribuição fonte, ou, para uma distribuição binária, no diretório ‘bin’ no
diretório de instalação do MySQL. Se você não puder utilizar o mysqlbug (por exemplo,
se você o estiver executando no Windows), é ainda de vital importância que você incluia
todas as informações necessárias listadas nesta seção (o mais importante é uma descrição
do sistema operacional e a versão do MySQL).
O script mysqlbug lhe ajudará a gerar um relatório determinando muitas das seguintes
informações automaticamente, mas se alguma coisa importante estiver faltando, por favor
forneça-o junto de sua mensagem! Por favor leita esta seção com cuidado e tenha certeza
que todas as informações descritas aquie estão incluídas no seu relatório.
De preferência, você deve testar o problema usando a última versão de produção ou desen-
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ído no relatório de erros.
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
mudanças de código forem necessárias enviaremos um patch para corrigir o problema.
Capı́tulo 1: Informações Gerais 37
Por favor lembre-se que muitas das pessoas que lerão seu relatório podem usar um vídeo de
80 colunas. Quando estiver gerando relatórios ou exemplos usando a ferramenta de linha
de comando mysql, então deverá usar a opção --vertical (ou a instrução terminadora \G)
para saída que irá exceder a largura disponível para este tipo de vídeo (por exemplo, com
a instrução EXPLAIN SELECT; veja exemplo abaixo).
Por favor inclua a seguinte informação no seu relatório:
• O número da versão da distribuição do MySQL que está em uso (por exemplo, MySQL
Version 3.22.22). Você poderá saber qual versão vocês está executando, usando o
comando mysqladmin version. mysqladmin pode ser encontrado no diretório ‘bin’
sob sua instalação do MySQL.
• O fabricante e o modelo da máquina na qual você está trabalhando.
• O nome do sistema operacional e a versão. Para a maioria dos sistemas operacionais,
você pode obter esta informação executando o comando Unix uname -a. Se você tra-
balho no Windows, você pode normalmente conseguir o nome e o número da versão com
um duplo clique sobre o ícone ”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
dúvida, inclua esses valores.
• Se você estiver usando uma distribuição fonte do MySQL, é necessário o nome e número
da versão do compilador usado. Se você estiver usando uma distribuição binária, é
necessário o nome da distribuição.
• Se o problema ocorre durante a compilação, inclua a(s) exata(s) mensagem(s) de erro(s)
e também algumas linhas do contexto envolvendo o código no arquivo onde o erro
ocorreu.
• Se o mysqld finalizou, você deverá relatar também a consulta que travou o mysqld.
Normalmente você pode encontrar isto executando mysqld com o log habilitado. Veja
Seção E.1.5 [Using log files], Página 1083.
• Se alguma tabela do banco de dados estiver relacionado ao problema, inclua a saída de
mysqldump --nodata nome_db nome_tbl1 nome_tbl2.... Isto é muito fácil de fazer
e é um modo poderoso de obter informações sobre qualquer tabela em um banco de
dados que irá ajudar-nos a criar uma situação parecida da que você tem.
• Para problemas relacionados à velocidade ou problemas com instruções SELECT, você
sempre deve incluir a saída de EXPLAIN SELECT ... e ao menos o número de linhas que
a instrução SELECT produz. Você também deve incluir a saída de SHOW CREATE TABLE
nome_tabela para cada tabela envolvida. Quanto mais informação você fornecer sobre
a sua situação, mais fácil será para alguém ajudar-lo! A seguir um exemplo de um
relatório de erros muito bom (ele deve ser postado com o script mysqlbug):
Exemplo de execução usando a ferramenta de linha de comando mysql (perceba o uso
do instrução terminadora \G para instruções cuja largura de saída deva ultrapassar 80
colunas):
mysql> SHOW VARIABLES;
mysql> SHOW COLUMNS FROM ...\G
<saida para SHOW COLUMNS>
mysql> EXPLAIN SELECT ...\G
Capı́tulo 1: Informações Gerais 39
você obteve quando tentava conectar! Quando você testar seus privilégios, você deve
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.
• Se você tiver um patch para um erro, isso é bom, mas não assuma que o patch é
tudo que precisamos, ou que iremos usá-lo, se você não fornecer algumas informações
necessárias, como os casos de testes mostrando o erro que seu patch corrige. Nós
podemos encontrar problemas com seu patch ou nós podemos não entendê-lo ao todo;
se for assim, não podemos usá-lo.
Se nós não verificarmos exatamente o que o patch quer dizer, nós não poderemos usá-
lo. Casos de testes irão ajudar-nos aqui. Mostre que o patch irá cuidar de todas as
situações que possam ocorrer. Se nós encontrarmos um caso (mesmo que raro) onde o
patch não funcionaria, ele pode ser inútil.
• Palpites sobre qual é o erro, porque ocorre, ou do que ele depende, geralmente estão
errados. Mesmo o time MySQL não pode adivinhar antecipadamente tais coisas sem
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
de mensagens para que outros saibam que você tentou solucionar o problema.
• Se você obter um parse error, por favor confira sua sintaxe com atenção! Se
você não conseguiu encontrar nada errado com ela, é extremamente provável
que que sua versão corrente do MySQL não suporte a consulta que você
está utilizando. Se você estiver usando a versão recente e o manual em
http://www.mysql.com/documentation/manual.php não cobrir a sintaxe que
você estiver usando, o MySQL não suporta sua consulta. Neste caso, suas unicas
opções são implementar você mesmo a sintaxe ou enviar uma mensagem para
[email protected] e perguntar por uma oferta para implementá-lo!
Se o manual cobrir a sintaxe que você estiver usando, mas você tiver uma versão mais
antiga do MySQL, você deverá conferir o histórico de alterações do MySQL para ver
quando a sintaxe foi implementada. Neste caso, você tem a opção de atualizar para
uma nova versão do MySQL. Veja Apêndice D [News], Página 957.
• Se você tiver um problema do tipo que seus dados aparecem corrompidos ou você
obtem erros quando você acessa alguma tabela em particular, você deverá primeiro
checar depois tentar reparar suas tabelas com myisamchk ou CHECK TABLE e REPAIR
TABLE. Veja Cap´“ptexi tulo 4 [MySQL Database Administration], Página 207.
• Se você frequentemente obtém tabelas corrompidas, você deve ten-
tar encontrar quando e porque isto acontece! Neste caso, o arquivo
‘mysql-data-directory/’hostname’.err’ deve conter algumas informações
sobre o que aconteceu. Veja Seção 4.10.1 [Error log], Página 372. Por favor forneça
qualquer informação relevante deste arquivo no seu relatório de erro! Normalmente
o mysqld NUNCA deverá danificar uma tabela se nada o finalizou no meio de uma
atualização! Se você puder encontrar a causa do fim do mysqld, se torna muito mais
fácil para nós fornecemos a você uma solução para o problema! Veja Seção A.1 [What
is crashing], Página 911.
• Se possível, faça o download e instale a versão mais recente do MySQL para saber se
ela resolve ou não o seu problema. Todas versões do MySQL são muito bem testadas
Capı́tulo 1: Informações Gerais 41
Se você considerar que sua respota possa ter um amplo interesse, você pode querer postá-la
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ível para que outras pessoas além
da que postou a pergunda possam se beneficiar dela. Quando você postar para a lista, por
favor tenha certeza que sua resposta não é uma réplica de uma resposta anterior.
Tente resumir a parte essencial da questão na sua resposta, não se sinta obrigado a citar a
mensagem original inteira.
Por favor não poste mensagens a partir de seu browser com o modo HTML ligado! Muitos
usuários não leem e-mail com browser!
Em adição as diversas listas de email, você pode pessoas experientes da comunidade no IRC
(Internet Relay Chat). Estes são os melhores canais atualmente conhecidos por nós:
• freenode (veja http://www.freenode.net/ para servidores)
• #mysql A princípio são questões sobre o MySQL, mas dúvidas sobre outros bancos
de dados e SQL são bemvindas.
• #mysqlphp Questões sobre MySQL+PHP, uma combinação popular.
• #mysqlperl Questões sobre MySQL+Perl, outra combinação popular.
• EFnet (veja http://www.efnet.org/ para servidores)
• #mysql Questões sobre MySQL.
Se você está procurando por programas clientes de IRC para conectar a uma rede IRC, dê
uma olhada no X-Chat (http://www.xchat.org/). X-Chat (licença GPL) está disponível
para as plataformas Unix e Windows.
42 MySQL Technical Reference for Version 5.0.1-alpha
Esta seção descreve como o MySQL se relaciona aos padrões ANSI/ISO SQL. O Servidor
MySQL tem muitas extensões aos padrões SQL, e aqui você descobrirá quais são elas, e como
usá-las. Você irá também encontrar informação sobre falta de funcionalidade do Servidor
MySQL, e como trabalhar com algumas diferenças.
Nosso objetivo é não restringir, sem um boa razão, a usabilidade do MySQL Server para
qualquer uso. Mesmo se não tivermos os recursos para fazer o desenvolvimento para todos
os usos possíveis, estamos sempre querendo ajudar e oferecer sugestões para pessoas que
estão tentando usar o MySQL Server em novos territórios.
Um dos nossos principais objetivos com o produto é continuar a trabalhar em acordo com
o padrão SQL-99, mas sem sacrificar velocidade e confiança. Não estamos receosos em
adicionar extensões ao SQL ou suporte para recursos não SQL se ele aumentar extremamente
a usabilidade do MySQL Server para uma grande parte de nossos usuários. (A nova interface
HANDLER no MySQL Server 4.0 é um exeemplo desta estratégia. Veja Seção 6.4.9 [HANDLER],
Página 595.)
Continuaremos a suportar bancos de dados transacionais e não transacionais para satisfazer
tanto o uso pesado na web quanto o uso de missão crítica 24/7.
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-
cionais pequenos. Continuaremos a extender o MySQL Server para funcionar ainda melhor
com banco de dados na ordem de terabytes, assim como tornar possível compilar uma versão
reduzida do MySQL mais apropriadas para handhels e uso embutido. O design compacto
do servidor MySQL tornam ambas as direções possíveis sem qualquer conflito na árvore
fonte.
Atualmente não estamos buscando suporte em tempo real (mesmo se você já puder fazer
muitas coisas com nossos serviços de replicação).
Suporte a banco de dados em cluster está planejado para 2004 pela implementação de um
novo mecanismo de armazenamento.
Estamos buscando melhoras no fornecimento de suporte a XML no servidor de banco de
dados.
• ‘"’ é tratado como um caracter identificados (com o caracter de aspasr ‘‘’ do MySQL
Server)e não um caracter de string. Você ainda pode usar ‘‘’ para citar identificadores
no modo ANSI. Uma implicação disto é que você não pode usar aspas duplas para citar
um string literal, porque ela será intepretada como um identificador.
• Você pode ter qualquer número de espaços entre um nome de função e o ‘(’. Isto
faz com que todos nomes de funções sejam tratadas como palavras reservadas. Como
resultado, se você quiser acessar qualquer banco de dados, tabelas ou coluna que é uma
palavra reservada, você deve colocá-lo entre aspas. Por exemplo, por haver a função
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:
SELECT "User" FROM mysql."user";
• REAL é um sinônimo para FLOAT no lugar de um sinônimo de DOUBLE.
• O nível de isolamento padrão de um transação é SERIALIZABLE. Veja Seção 6.7.6 [SET
TRANSACTION], Página 619.
• Você pode usar um campo/expressão em GROUP BY que não está na lista de campos.
Executando o servidor em modo ANSI é o mesmo que iniciá-lo com estas opções:
--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:
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 última opção sql_mode também pode ser dada com:
SET GLOBAL sql_mode="ansi";
No caso acima o sql_mode estará configurado com todas as opções que são relevantes para
o modo ANSI. Você pode verificar o resultado fazendo:
mysql> SET GLOBAL sql_mode="ansi";
mysql> SELECT @@GLOBAL.sql_mode;
-> "REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,
O MySQL fornece algumas extensões que você provavelmente não irá encontrar em alguns
bancos de dados SQL. Fique avisado que se você usá-las, seu código pode não ser mais
portável para outros servidores SQL. Em alguns casos, você pode escrever código que inclui
extensões MySQL, mas continua portável, usando comentários da forma /*! ...*/. Neste
caso, o MySQL irá analisar e executar o código com o comentário como irá fazer com
qualquer outra instrução MySQL, mas outros servidores SQL irão ignorar as extensões.
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
versão do MySQL é igual ou maior que o número de versão usado:
44 MySQL Technical Reference for Version 5.0.1-alpha
• Você pode remover múltiplas tabelas com uma instrução única DROP TABLE.
• As cláusulas ORDER BY e LIMIT das instruções UPDATE e DELETE.
• Sintaxe INSERT INTO ... SET col_name = ....
• A cláusula DELAYED das instruções INSERT e REPLACE.
• A cláusula LOW_PRIORITY das instruções INSERT, REPLACE, DELETE e UPDATE.
• O uso de LOAD DATA INFILE. Em alguns casos essa sintaxe é compatível com o Oracle
LOAD DATA INFILE. Veja Seção 6.4.8 [LOAD DATA], Página 588.
• As intruções ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE, e REPAIR TABLE.
• A instrução SHOW. Veja Seção 4.6.8 [SHOW], Página 302.
• Strings podem ser fechadas pelo ‘"’ ou ‘’’, não apenas pelo ‘’’.
• O uso do meta-caractere de escape ‘\’.
• A instrução SET OPTION. Veja Seção 5.5.6 [SET OPTION], Página 460.
• Você não precisa nomear todos os campos selecionados na parte GROUP BY. Isto fornece
melhor performance para algumas consultas específicas, mas muito comuns. Veja
Seção 6.3.7 [Group by functions and modifiers], Página 555.
• 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
suporta apelidos (aliases) para várias funções. Por exemplo, todas funções de string
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
AND. Devido a esta ótima sintaxe, o MySQL não suporta o operador ANSI SQL para
concatenação de strings ||; em vez disso, use o CONCAT(). Como CONCAT() aceita
vários argumentos, é fácil converter o uso do operador || para MySQL.
• CREATE DATABASE or DROP DATABASE. Veja Seção 6.5.1 [CREATE DATABASE], Página 597.
• O operador % é um sinônimo para MOD(). Isto é, N % M é equivalente a MOD(N,M). % é
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:
mysql> SELECT col1=1 AND col2=2 FROM nome_tabela;
• A função LAST_INSERT_ID(). Veja Seção 12.1.3.32 [mysql_insert_id()], Página 803.
• Os operadores extendidos REGEXP e NOT REGEXP utilizados em expressões regulares.
• CONCAT() ou CHAR() com um ou mais de dois argumentos. (No MySQL, estas funções
receber qualquer número de argumentos.)
• As funções BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(),
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
únicos.
• As funções do GROUP BY: STD(), BIT_OR(), BIT_AND() e BIT_XOR() e GROUP_CONCAT().
Veja Seção 6.3.7 [Group by functions and modifiers], Página 555.
46 MySQL Technical Reference for Version 5.0.1-alpha
• Uso de REPLACE no lugar de DELETE + INSERT. Veja Seção 6.4.7 [REPLACE], Página 587.
• As instruções FLUSH, RESET e DO.
• A possibilidade de configurar variáveis em uma instrução com :=:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS media FROM tabela_teste;
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
Nós tentamos fazer com que o MySQL siguisse os padrões ANSI SQL (SQL-92/SQL-99) e
o ODBC SQL, mas em alguns casos, o MySQL realiza operações de forma diferente:
• Para campos VARCHAR, expaços extras são removidos quando o valor é armazenado.
Veja Seção 1.8.6 [Bugs], Página 54.
• Em alguns casos, campos CHAR são alterados sem perguntas para o tipo de campo
VARCHAR. Veja Seção 6.5.3.1 [Silent column changes], Página 607.
• Privilégios para uma tabela não são negadas automaticamente quando você apaga uma
tabela. Você deve usar explicitamente um REVOKE para negar privilégios para uma
tabela. Veja Seção 4.4.1 [GRANT], Página 254.
Para uma lista priorizada indicando quando novas extensões serão adi-
cionadas ao MySQL você deve consultar lista TODO online do MySQL em
http://www.mysql.com/doc/en/TODO.html. Esta é a última versão da lista TODO neste
manual. Veja Seção 1.6 [TODO], Página 27.
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 570.
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 578.
O MySQL ainda não suporta a extensão SQL do Sybase: SELECT ... INTO TABLE ....
MySQL suporta a sintaxe ANSI SQL INSERT INTO ... SELECT ..., que é basicamente a
mesma coisa. Veja Seção 6.4.3.1 [INSERT SELECT], Página 581.
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 ...
SELECT para resolver seu problema.
O MySQL Server (versão 3.23-max e todas as versões 4.0 e acima) suportam transações com
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 630.
Capı́tulo 1: Informações Gerais 47
Os outros tipos de tabelas não transacionais (tais como MyISAM) no MySQL Server seguem
um paradigma diferente para integridade de dados chamado “Operç~ oes At^
omicas.” Em
termos de transação, tabelas MyISAM efetivamente sempre operam em modo AUTOCOMMIT=1.
Operações atômicas geralmente oferecem integridade comparável com a mais alta perfor-
mance.
Com o MySQL Server suportando ambos os paradigmas, o usuário pode decidir se precisa
da velocidade das operações atômicas ou se precisa usar recursos transacionais em seu
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,
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
significantemente maior e maior sobrecarga da CPU. Tipos de tabelas transacionais como
InnoDB oferecem muitos recursos únicos. 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.
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
de tabelas transacionais?
1. No paradigma transacional, se as suas aplicações são escritas de uma forma que é
dependente na chamada de ROLLBACK em vez de COMMIT em situações críticas, então
transações são mais convenientes. Além disso, transações asseguram que atualizações
inacabadas ou atividades corrompidas não sejam executadas no banco de dados; o
servidor oferece uma oportunidade para fazer um rollback automático e seu banco de
dados é mantido.
O MySQL Server, na maioria dos casos, permite a você resolver potenciais problemas
incluindo simples conferências antes das atualizações e executando scripts simples que
conferem inconsistências no banco de dados e, automaticamente, repara ou avisa caso
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
atômicas. De fato podemos dizer que todos problemas de integridade que transações
resolvem podem ser feitas com LOCK TABLES ou atualizações atômicas, assegurando que
você nunca irá ter uma finalização automática da tabela, o que é um problema comum
em bancos de dados transacionais.
3. Nem mesmo transações podem prevenir todas as falhas se o servidor cair. Nestes
casos mesmo um sistema transacional pode perder dados. A diferença entre sistemas
diferentes é apenas em quão pequeno é o lapso de tempo em que eles podem perder
dados. Nenhum sistema é 100% seguro, somente “seguro o suficiente.” Mesmo o
Oracle, com reputação de ser o mais seguro bancos de dados transacionais, tem relatos
de algumas vezes perder dados nestas situações.
Para estar seguro com o MySQL Server, você apenas deve fazer backups e ter o log
de atualizações ligado. Com isto você pode se recuperar de qualquer situação possível
com bancos de dados transacionais. É sempre bom ter backups, independente de qual
banco de dados você usa.
48 MySQL Technical Reference for Version 5.0.1-alpha
registro antigo versus o novo em uma janela, assim o usuário pode decidir qual versão
do registro de cliente de ser usado.
Isto nos dá algo similar a lock de colunas mas que, na verdade, é melhor porque apenas
atualizamos algumas das colunas, usando valores relativos ao seu valor atual. Isto
significa que instruções UPDATE comuns se parecem com estas:
UPDATE nometabela SET pay_back=pay_back+125;
UPDATE customer
SET
customer_date=’current_date’,
address=’new address’,
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
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
de gerenciarem identificadores únicos para algumas tabelas. Isto pode ser tratado muito
mais eficientemente usando uma coluna AUTO_INCREMENT e também uma função SQL
LAST_INSERT_ID() ou a função da API C mysql_insert_id(). Veja Seção 12.1.3.32
[mysql_insert_id()], Página 803.
Geralmente você pode codificar evitando lock de registro. Algumas situações realmente
precisam disto, e tabelas InnoDB suportam lock de regitstro. Comoo MyISAM, você
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
e row_flag já não era 1 na linha original.
Você pode pensar nisto como se o MySQL Server tivesse alterado a consulta anterior
para:
UPDATE nome_tbl SET row_flag=1 WHERE id=ID AND row_flag <> 1;
Steored procedures estão sendo implementadas em nossa versão 5.0 na árvore de desenvolvi-
mento. Veja Seção 2.3.4 [Instalando da árvore de fontes], Página 100.
Este esforço é baseado no SQL-99, que têm uma sintaxe básica similar (mas não idêntica) ao
Oracle PL/SQL. Em adição a isto, estamoas implementando o framework SQL-99 enganchar
em linguagens externas.
Uma Stored Procedure é um conjunto de comandos SQL que podem ser compilados e
armazenados no servidor. Uma fez feito isso, os clientes não necessitam reescrever toda a
consulta mas podem fazer referência à stored procedure. Isto fornece melhor performance
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
50 MySQL Technical Reference for Version 5.0.1-alpha
1.8.4.6 Views
Views estão senda implementadas atualmente e aparecerão na versão 5.0 e 5.1 do MySQL
Server.
Historicamente o MySQL Server tem sido mais usado em aplicações e sistemas web onde o
desenvolvedor da aplicação tem total controle sobre o uso do banco de dados. É claro que o
uso aumentou em várias vezes e então descobrimos que um crescente números de usuários
consideram views como um importante aspecto.
Unnamed views (derived tables, uma seubquery na cláusula FROM de uma SELECT) já estão
implementadas na versão 4.1.
Views geralmente são muito úteis para permitir aos usuários acessar uma série de relações
(tabelas) como uma tabela, e limitar o acesso a apenas estas relações. Views também
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
o MySQL Server tem um sofisticado sistema de privilégios. Veja Seção 4.3 [Sistema de
privilégios], Página 226.
Muitos SGBD não permitem atualizar nenhum registro em uma view, mas você tem que
fazer as atualizações em tabelas separadas.
Em nosso projeto de implemtação de views, nós buscamos (tanto quanto for possível dentro
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
prática.
Outros bancos de dados SQL usam ‘--’ para iniciar comentários. O MySQL usa ‘#’ como
o caractere para início de comentário, mesmo se a ferramenta de linha de comando mysql
remover todas linhas que começam com ‘--’. Você também pode usar o comentário no
estilo C /*isto é um comentário*/ com o MySQL Server. Veja Seção 6.1.6 [Comentários],
Página 479.
O MySQL Server versão 3.23.3 e superior suporta o estilo de comentário ‘--’ somente se o
comentário for seguido por um caractere de espaço (ou por um caracter de controle como
uma nova linha). Isto ocorre porque este estilo de comentário causou muitos problemas
52 MySQL Technical Reference for Version 5.0.1-alpha
com queries SQL geradas automaticamente que usavam algo como o código seguinte, onde
automaticamente erá inserido o valor do pagamento para !pagamento!:
UPDATE nome_tabela SET credito=credito-!pagamento!
O que você acha que irá acontecer quando o valor de pagamento for negativo? Como 1--1
é legal no SQL, nós achamos terrível que ‘--’ signifique início de comentário.
Usando a nossa implementação deste método de comentário no MySQL Server Version
3.23.3 e posterior, 1-- Isto é um comentário é atualmente seguro.
Outro recurso seguro é que o cliente de linha de comando mysql remove todas as linhas que
iniciam com ‘--’.
A seguinte discussão somente interessa se você estiver executando uma versão do MySQL
inferior a versão 3.23:
Se você tem um programa SQL em um arquivo texto que contêm comentários ‘--’ você
deverá usar:
shell> replace " --" " #" < arquivo-texto-com-comentário.sql \
| 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 ‘--’
para ‘#’:
shell> replace " --" " #" -- arquivo-texto-com-comentario.sql
Desfaça utilizando este comando:
shell> replace " #" " --" -- arquivo-texto-com-comentario.sql
Como o MySQL lhe permite trabalhar com tabelas transacionais e não transacionais (que
não permitem rollback), o tratamento de restrições é um pouco diferente no MySQL que
em outros bancos de dados.
Temos que tratar o caso quando você atualiza diversos registros com uma tabela não transa-
cional que não pode fazer rollback em erros.
A filosofia básica é tentar obter um erro para qualquer coisa que possamos detectar em temp
de compilação mas tentar recuperar de qualquer erro que abtemos em tempo de execução.
Fazemos isto na maiorioa dos casos, mas não para todos ainda. Veja Seção 1.6.4 [TODO
future], Página 29.
A opção básica que o MySQL tem é parar a instrução no meio ou fazer o melhor para se
recuperar do problema e continuar.
A seguir mostramos o que acontece com diferentes tipos de restrições.
Normalmente você receberá um erro quando tentar fazer um INSERT / UPDATE de um registro
que cause uma violação de uma chave primária, chave única ou chave estrangeira. Se você
Capı́tulo 1: Informações Gerais 53
Para poder suportar um fácil tratamento de tabelas não transacionais todos os campos no
MySQL têm valores padrão.
Se você inserir um valor ’errado’ em uma coluna como um NULL em uma coluna NOT NULL
ou um valor numérico muito grande em um campo numérico, o MySQL irá atribuir a coluna
o ’melhor valor possível’ em vez de dar uma mensagem de erro. Para strings este valor é
uma string vazia ou a maior string possível que possa estar na coluna.
Isto significa que se você tentar armazenar NULL em uma coluna que não aceita valores NULL,
o MySQL Server armazenará 0 ou ’’ (strig vazia) nela. Este último comportamento pode,
para uma simples inserção de registro, ser alterado com a opção de compilação -DDONT_
USE_DEFAULT_FIELDS.) Veja Seção 2.3.3 [Opções de configuração], Página 98. Isto faz com
que as instruções INSERT gerem um erro a menos que você explicite valores específicos 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
começar a executar. Se encontrarmos um problema depois de atualizar algumas linahs, não
podemos fazer um rollback já que o tipo de tabela não suporta isto. A opção de parar não
é tão boa como no caso em que a atualização esteja feita pela metade que é provavelmente
o pior cenário possível. Neste caso é melhor ’fazer o possível’ e então continuar como se
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
das instruções que usam apenas tabelas transacionais no caso de tal instrução fizer uma
definição de campo não permitida.
O mostrado acima significa que não se deve usar o MySQL para verificar o conteúdo dos
campos, mas deve se fazê-lo por meio da aplicação.
54 MySQL Technical Reference for Version 5.0.1-alpha
No MySQL 4.x ENUM não é uma restrição real, mas um modo mauis eficiente de armazenar
campos que possam apenas conter um conjunto de valores dados. Isto é devido as mesmas
razões pelas quais NOT NULL não é respeitado. Veja Seção 1.8.5.2 [restrições NOT NULL],
Página 53.
Se você inserir um valor errado em um campo ENUM, ele será configurado com uma string
vazia em um contexto string. Veja Seção 6.2.3.3 [ENUM], Página 499.
Se você inserir uma opção errada em um campo SET, o valor errado será ignorado. Veja
Seção 6.2.3.4 [SET], Página 500.
Os seguintes erros/bugs conhecidos não estão corrigidos no MySQL 3.23 porque corrigí-los
involveria a mudança de muito código, o que poderia introduzir outros erros, talvez piores.
Os erros são também classificados como ’não fatal’ ou ’tolerável’.
• Pode se obter um deadlock ao fazer LOCK TABLE em multiplas tabelas e então na mesma
conexão fizer um DROP TABLE em uma delas enquanto outra thread está tentando blo-
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
• SELECT MAX(campo_chave) FROM t1,t2,t3... onde uma das três tabelas está vazia
não retorna NULL, mas sim o valor máximo da coluna. Corrigido na versão 4.0.11.
• DELETE FROM heap_table sem um WHERE não funcionam em tabelas HEAP com lock.
Os seguintes problemas são conhecidos e tem prioridade muito alta para serem corrigidos:
• FLUSH TABLES WITH READ LOCK não bloqueia CREATE TABLE ou COMMIT, que pode criar
um problema com a posição do log binário ao se fazer um backup completo de tabelas
e do log binário.
• ANALYZE TABLE em uma tabela BDB pode, em alguns, casos inutilizar a tabela até que
se reinicie o servidor mysqld. Quando isto acontecer você irá ver o seguinte tipo de
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
não são retornados erros é que muitos clientes que geram consultas automaticamente
adicionam parentesis na parte FROM mesmo onde eles não são necessários.
• 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
que precedem um join LEFT ou antes de um join RIGHT. Isto será corrigido na versão
5.0 junto com o suporte a parentesis na parte FROM.
Capı́tulo 1: Informações Gerais 55
• Não execute ALTER TABLE em uma tabela BDB em que você estiver executando
transações multi-instruções não completadas. (A transação provavelmente será
ignorada).
• ANALYZE TABLE, OPTIMIZE TABLE e REPAIR TABLE podem causar problemas em tabelas
para as quais você estiver usando INSERT DELAYED.
• Fazendo um LOCK TABLE .. e FLUSH TABLES .. não garante que não existem transações
não terminadas em progresso na tabela.
• Tabelas BDB são um pouco lentas para abrir. Se você tiver várias tabelas BDB em um
banco de dados, gastará muito tempo para usar o cliente mysql no banco de dados se
você não estiver usando a opção -A ou se você estiver usando rehash. Isto é percebido
principalmente quando você tiver um cache de tabelas grandes.
• A replicação utiliza o log a nivel de consulta: o master grava a consulta no log binário.
Isto é um rápido, compacto e eficiente método de registro o que funciona perfeitamente
na maioria dos casos. Embora nunca tenhamos ouvido sobre um caso ocorrido, há uma
chance teórica que o dado no master e slave sejam diferente se uma consulta é feita
de tal modo que a modificação do dado é não determinística, isto é, deixar ao desejo
do otimizador de consultas (o que geralmente não é uma boa prática, mesmo fora da
replicação!). Por exemplo:
− 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-
trangeiras com a propriedade ON DELETE CASCADE.
− REPLACE ... SELECT, INSERT IGNORE ... SELECT se você tiver valores de chaves
duplicados nos dados inseridos.
Se e somente se todos estas consultas NÃO tiverem cláusulas ORDER BY garantindo uma
ordem determinística.
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
diferentes posições, obtendo um número diferente na coluna auto_increment), depen-
dendo da escolhe feita pelo otimizador no master e slave. Uma consulta será otimizada
deiferentemente no master e slave apenas se:
− Os arquivos usados pelas duas consultas não são exatamente a mesma; por exemplo
OPTIMIZE TABLE foi executado nas tabelas master e não nas nas tabelas slave (para
corrigir isto, desde o MySQL 4.1.1, OPTIMIZE, ANALYZE e REPAIR são escritos no
log binário).
− A tabela está armazenada em um mecanismo de armazenamento diferente no mas-
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ível em disco).
− 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
é diferente entre estas versões.
56 MySQL Technical Reference for Version 5.0.1-alpha
com precisão DOUBLE. Devemos evitar o uso de valores sem sinal maiores que 63 bits
(9223372036854775807) para qualquer outra coisa além de campos binários!
• 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
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.
• Você só pode ter até 255 colunas ENUM e SET em uma tabela.
• Em MIN(), MAX() e outras funções de agrupamente, o MySQL atualmente compara as
colunas ENUM e SET pelo valor de suas strings ao invés da posição relativa da string no
conjunto.
• 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
log, a stdout e a stderr continuam redirecionadas para o log antigo. Se você utiliza
--log extensivamente, deverá editar o mysqld_safe para logar em ‘’hostname’.err’
em vez de ‘’hostname’.log’; assim você pode facilmente utilizar o espaço do log antigo
apagando-o e executando mysqladmin refresh.
• Em instruções UPDATE, colunas são atualizadas da esquerda para a direita. Se você
referenciar a uma coluna atualizada, você irá obter o valor atualizado em vez do valor
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
referir a qualquer tabelas temporárias dada mais de uma vez. Por exemplo, a seguinte
instrução não funciona.
mysql> SELECT * FROM temporary_table, temporary_table AS t2;
• RENAME não funciona com tabelas temporárias (TEMPORARY) ou tabelas usadas em uma
tabelas MERGE.
• O otimizador pode lidar com o DISTINCT de forma diferente se você estiver usando col-
unas ’escondidas’ em uma join ou não. Em uma join, colunas escondidas são contadas
como parte do resultado (mesmo se elas não são mostradas) enquanto que em queries
normais colunas escondidas não participam na comparação DISTINCT. Nós provavel-
mente iremos alterar isto no futuro para nunca comparar as colunas escondidas quando
executando DISTINCT.
um exemplo disto é:
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
resultado (porque o campo escondido ’id’ pode variar).
58 MySQL Technical Reference for Version 5.0.1-alpha
Perceba que isto somente acontece em consultas onde você não tem colunas ORDER
BY no resultado, algo não permitido no SQL-92.
• Como o MySQL permite trabalhar com tipos de tabelas que não suportam transações
(e assim não pode fazer rollback em dados) algumas coisas funcionam um pouco
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
pouco estranho em casos que os valores dos campos devem ser verificados na aplicação,
mas isto ira fornacer um ótimo ganho de velocidade assim como permite ao MySQL
fazer algumas otimizações que de outro modo seriam muito difíceis para serem feitas.
Se você informar um valor incorreto em uma coluna, o MySQL, em vez de fazer um
rollback, aramzenará o melhor valor possível no campo.
− Se tentar armazenar um valor fora da faixa em uma coluna numérico, o MySQL
irá armazenar o menor ou maior valor possível no campo.
− Se tentar armazenar uma string que não comece com um número em uma coluna
numérica, o MySQL irá armazenar 0 na coluna.
− Se você tentar armazenar NULL em uma coluna que não aceita valores
nulos, MySQL irá armazenar 0 ou ’’ (string vazia) na coluna. (Este
comportamento pode, entretanto, ser alterado com a opção de compilação
-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 é
serviço do servidor SQL validar datas. Se o MySQL pode armazenar uma data e
recuperar extamente a mesma data, então o MySQL armazenará a data. Se a data
estiver totalmente errada, o MySQL irá armazenar a data 0000-00-00 no campo.
− Se você especificar um valor não suportado para um campo do tipo enum, ele será
alterado para o valor de erro ’empty string’, com valor numérico 0.
− Se você definir uma coluna SET com um valor não suportado, o valor será ignorado.
• Se você executar uma PROCEDURE em uma pesquisa que retorna uma série vazia, em
alguns casos a instrução PROCEDURE não irá transformar as colunas.
• Criação da tabela do tipo MERGE não verifiva se as tabelas envolvidas são de tipos
compatíveis.
• O MySQL ainda não pode lidar com valores NaN, -Inf e Inf em tipos double. Usá-los
causará problemas na exportação e importação de dados. Uma solução intermediária
é alterar NaN para NULL (se for possível) e -Inf e Inf para o valor double mínimo ou
máximo respectivo possível.
• Se você usar ALTER TABLE para primeiro adicionar um índice UNIQUE a uma tabela usada
em uma tabela MERGE e então usar ALTER TABLE para adicionar um índice normal na
tabela MERGE, a ordem das chaves será diferente para as tabelas se existir uma chave
antiga não única na tabela. Isto é porque o ALTER TABLE coloca chaves UNIQUE antes
de chaves normais para ser possível detectar chaves duplicadas o mais cedo o possível.
Os seguintes erros são conhecidos em versões mais antigas do MySQL:
• Você pode pendurar um processo se você fizer um DROP TABLE em uma tabela entre
outras que esteja travada com LOCK TABLES.
Capı́tulo 1: Informações Gerais 59
• No caso seguinte você pode obter um descarrego de memória para o arquivo core:
− Tratamento de inserções com atraso tem deixado inserções pendentes na tabela.
− LOCK table com WRITE
− FLUSH TABLES
• Antes da versão 3.23.2 do MySQL um UPDATE que atualizava uma chave com um WHERE
na mesma chave podia falhar porque a chave era usada para procurar por registros e a
mesma linha poderia ter encontrado vários itens:
UPDATE nome_tabela SET KEY=KEY+1 WHERE KEY > 100;
Um modo de contornar este erro é utilizar:
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
WHERE.
• Antes da versão 3.23 do MySQL, todos os tipos numéricos tratados como campos
de pontos fixos. Isto significa que você tem que especificar quantas casas decimais um
campo de ponto flutuante deve ter. Todos os resultados eram retornados com o número
correto de casas decimais.
Para erros específicos na plataforma, vejas as seções sobre compilação e portabilidade. Veja
Seção 2.3 [Installing source], Página 94. Veja Apêndice E [Porting], Página 1078.
60 MySQL Technical Reference for Version 5.0.1-alpha
2 Instalação do MySQL
Este capítulo 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
MySQL], Página 75.
• Para saber quais são as plataformas suportadas, veja em Seção 2.2.3 [Which OS],
Página 78. Por favor perceba que nem todas as plataformas suportadas são igualmente
boas para executar o MySQL. Algumas são mais robustas e eficientes que outras - ver
Seção 2.2.3 [Which OS], Página 78 para detalhes.
• Várias versões do MySQL estão disponíveis em distribuições binárias e fonte. Nós
também fornecemos acesso público à nossa árvore fonte atual para aqueles que desejam
ver nossos desenvolvimentos mais recentes e nos ajudar a testar novos códigos. Para
determinar que versão e tipo da distribuição você deve usar, veja Seção 2.2.4 [Which
version], Página 80. Se ainda restar dúvidas, use uma a distribuição binária.
• Instruções de instalação para distribuições binária e fonte são descritos em Seção 2.2.9
[Installing binary], Página 91 e Seção 2.3 [Installing source], Página 94. Cada conjunto
de instruções inclui uma seção sobre problemas específicos de sistemas que você pode
precisar.
• Para procedimentos pós-instalação, veja Seção 2.4 [Post-installation], Página 111. Estes
procedimentos podem ser aplicados caso você use uma distribuição binária ou fonte do
MySQL.
Este capítulo cobre a instalação do MySQL em plataformas onde oferecemos pacotes usando
oformato de empacotamento nativo da respectiva plataforma. No entanto, as distribuições
binárias do MySQL estão disponíveis para muitas outras plataformas, veja Seção 2.2.9
[Installing binary], Página 91 para instruções gerais de instalação para estes pacotes que se
aplicam a todas as plataformas.
Veja Seção 2.2 [General Installation Issues], Página 75 para mais informações sobre quais
outras distribuições binárias estão disponíveis e como obtê-las.
Para instalar o MySQL no Windows usando uma distribuição binária, siga este procedi-
mento:
1. Se você estiver trabalhando em uma máquina Windows NT, 2000, ou XP, esteja certo
de que você está logado com um usuário com privileios de administrador.
2. Se você estiver fazendo uma atualização de uma instalação MySQL mais nova, é
necessário parar o servidor atual. Em máquinas com Windows NT, 200 ou XP, se
você estiver executando o servidor como um serviço, pare-o com o comando:
C:\> NET STOP MySQL
Se você planeja usar um servidor diferente depois da atualização (por exemplo, se você
quiser executar o mysqld-max em vez do mysqld), remova o serviço existente:
C:\mysql\bin> mysqld --remove
3.
Você pode reinstalar o serviço com o servidor próprio depois de atualizar.
Se você não estiver executando o servidor MySQL como um serviço, pare desta forma:
62 MySQL Technical Reference for Version 5.0.1-alpha
Se você precisar especificar opções de inicialização quando executar o servidor, você pode
indentifica-los na linha de comando ou colocá-los em um arquivo de opção. Par opções que
são usadas sempre que o servidor iniciar, você achará mais conveniente utilizar um arquivo
de opcão para especificar a configuração do seu MySQL. Isto é particularmente verdade sob
as seguintes circunstâncias:
• A localização do diretório de instalação ou dados são diferentes dos locais padrão
(‘c:\mysql’ e ‘c:\mysql\data’).
• Você precisa ajustar as configurações do servidor. Por exemplo, para usar as tabelas
transacionais InnoDB no MySQL versão 3.23, você deve criar manualmente dois novos
diretórios para guardar os arquivos de dados e de log do InnoDB — por exemplo,
‘c:\ibdata’ e ‘c:\iblogs’. Você também poderá adicionar algumas linhas extras ao
arquivo de opção, como descrito em Seção 7.5.3 [Iniciando o InnoDB], Página 644. (A
partir do MySQL 4.0, o InnoDB cria os seus arquivos de log e dados no diretório de da-
dos por padrão. Isto significa que você não precisa configurar o InnoDB explicitamente.
Você ainda deve fazê-lo se desejar, e um arquivo de opção será útil neste caso.)
No Windows, o instalador do MySQL coloca o diretório de dados diretamente sob o diretório
onde você instalou o MySQL. Se você quisesse utilizar um diretório de dados em um local
diferente, você deve copiar todo o conteúdo do diretórios data para a nova localização. Por
exemplo, por padrão, o instalador coloca o MySQL em ‘C:\mysql’ e o diretório de dados
em ‘C:\mysql\data’. Se você quiser usar um diretório de dados de ‘E:\mydata’, você deve
fazer duas coisas:
• Mova o diretório de dados de ‘C:\mysql\data’ para ‘E:\mydata’.
• Use uma opção --datadir para especificar a nova localização do diretório de dados
cada vez que você iniciar o servidor.
Quando o servidor MySQL inicia no Windows, ele procura pelas opções em dois arquivos:
O arquivo ‘my.ini’ no diretório Windows e o arquivo chamado ‘C:\my.cnf’. O diretório
do Windows é normalmente chamado ‘C:\WINDOWS’ ou ‘C:\WinNT’. Você pode determinar
a sua localização exata a partir do valor da variável de ambiente WINDIR usando o seguinte
comando:
C:\> echo %WINDIR%
Capı́tulo 2: Instalação do MySQL 63
O MySQL procura pelas opções primeiro no arquivo ‘my.ini’, e então pelo arquivo ‘my.cnf’.
No entanto, para evitar confusão, é melhor se você usar apenas um destes arquivos. Se o
seu PC usa um boot loader onde o drive C: não é o drive de boot, sua única opção é usar
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
programa Notepad. Por exemplo, se o MySQL está instalado em ‘D:\mysql’ e o diretório
de dados está localizado em ‘D:\mydata\data’, você pode criar o arquivo de opção e definir
uma seção [mysqld] para especificar valores para os parâmetros basedir e datadir:
[mysqld]
# defina basedir com o seu caminho de instalaç~
ao
basedir=D:/mysql
# defina datadir com o local do diretório de dados,
datadir=D:/mydata/data
Note que os nome de caminho do Windows são específicados em arquivos de opção usando
barras normais em ves de barra invertida. Se você usar barras invertidas, você deve usá-las
em dobro.
Outro modo de se gerenciar um arquivo de opção é usar a ferramenta WinMySQLAdmin. Você
pode encontrar o WinMySQLAdmin no diretório ‘bin’ de sua instalação MySQL, assim como
um arquivo de ajuda contendo instruções para usá-lo. O WinMySQLAdmin tem a capacidade
de editar os seus arquivos de opção, mas note o seguinte:
• WinMySQLAdmin usa apenas o arquivo ‘my.ini’.
• Se o WinMySQLAdmin encontra o arquivo ‘C:\my.cnf’, ele o renomeará para
‘C:\my_cnf.bak’ para disabilitá-lo.
Agora você está pronto para testar o servidor.
Iniciado com o MySQL 3.23.38, a distribuição Windows inclui ambos binários, normal e o
MySQL-Max. Aqui está uma lista dos diferentes servidores MySQL dos quais você pode
escolher:
Binario Descrição
mysqld Compilado com debugger integral e conferência automática de alocação
de memória, links simbólicos, BDB e tabelas InnoDB.
mysqld-opt Binário otimizado. A partir da versão 4.0 o InnoDB está habili-
tado. Antes desta versão, este servidor não tem suporte a tabelas
transacionais.
mysqld-nt Binário otimizado para NT/2000/XP com suporte para named pipes.
mysqld-max Binário otimizado com suporte para links simbólicos, tabelas BDB e
InnoDB.
mysqld-max-nt Como o mysqld-max, porém compilado com suporte para named pipes.
Todos os binários acima são otimizados para processadores Intel modernos mas deve fun-
cionar em qualquer processador Intel i386 ou melhor.
Os servidores mysqld-nt e mysqld-max-nt suportam conexões named pipe. Se você usar
um destes servidores, o uso de named pipes está sujeito a estas condições:
64 MySQL Technical Reference for Version 5.0.1-alpha
• Os servidores devem ser executados em uma versão do Windows que suporte named
pipes (NT, 2000, XP).
• A partir da versão 3.23.50, named pipes só estarão habilitados se você iniciar estes
servidores com a opção --enable-named-pipe.
• 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.
• No Windows 95, estes servidores não podem ser usados.
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
conexões named pipes.
Para informações sobre qual servidor binário executar, veja Seção 2.1.1.3 [Windows prepare
environment], Página 62.
Esta seção lhe dá um visão geral da inicialização de um servidor MySQL. A seguinte seção
fornce informação mais específica para versões particulares do Windows.
Os exemplos nesta seção assumem que o MySQL está instalado sob a localização padrão,
‘C:\mysql’. Ajuste o caminho mostrado nos exemplos se você tiver o MySQL instalado em
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
na janela do DOS. Se alguma coisa estiver errado com sua configuração, estas mensagens
tornarão mais fácil para você de identificar e corrigir qualquer problema.
Tenha certeza que você está no diretório onde o servidor é localizado e então entre este
comando:
shell> mysqld --console
Para servidores que incluem suporte InnoDB, você deve ver as seguintes mensagens assim
que o servidor iniciar:
InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280
InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created
InnoDB: Setting log file c:\iblogs\ib_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
Capı́tulo 2: Instalação do MySQL 65
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
isto, você deve ter certeza de que o suporte TCP/IP está instalado na sua máquina antes
de iniciar o MySQL. Você pode encontrar o TCP/IP no seu CD-ROM do Windows.
Note que se você estiver usando uma versão antiga do Win95 (por exemplo, OSR2). É
preferível que você use um pacote antigo Winsock; para o MySQL é necessário o Winsock
2! Você pode obter o Winsock mais novo em http://www.microsoft.com. O Windows 98
tem a nova biblioteca Winsock 2, portanto não é necessário atualizar a biblioteca.
Para iniciar o servidor mysqld, você deve iniciar uma janela do Prompt (Janela “MS-DOS”)
e digitar:
shell> C:\mysql\bin\mysqld
Isto irá iniciar o mysqld em segundo plano. Isto é, depois do servidor iniciar, você deve ver
outro prompt de comando. (Note que se você iniciar o servidor deste modo no Windows
NT, 2000 ou XP, o servidor irá executar em segundo plano e nenhum prompt de comando
aparecerá até que o servidor finalize. Por isto, você deve abrir outro prompt de comando
para executar programas clientes enquanto o servidor estriver em execução.)
Você pode finalizar o servidor MySQL executando:
shell> C:\mysql\bin\mysqladmin -u root shutdown
Isto chama o utilitário administrativo do MySQL mysqladmin para conectar ao servidor e
manda-lo finalizar. O comando conecta como root que é a conta administrativa padrão no
sistema de permissões do MySQL. Por favor, note que o sistema de permissões do MySQL
é totalmente independente de qualquer login de usuário sob o Windows.
Se o mysqld não iniciar, por favor, verifique o log de erro para ver se o servidor escreveu
alguma mensagem que possa indicar a causa do problema. Você pode também tentar iniciar
o servidor com mysqld --console; neste caso, você pode obter alguma informação útil na
tela que pode ajudar a resolver o problema.
A última opção é iniciar o mysqld com --standalone --debug. Neste caso o mysqld irá
escrever em um arquivo log ‘C:\mysqld.trace’ que deve conter a razão pela qual o mysqld
não inicia. Veja Seção E.1.2 [Making trace files], Página 1080.
Use mysqld --help para mostrar todas as opções que o mysqld entende!
66 MySQL Technical Reference for Version 5.0.1-alpha
Nota: Antes do MySQL 4.0.17, um servidor instalado como um serviço do Windows tinha
problema na inicialização se o seu caminho ou nome do serviço possuisse espaços. Por esta
razão, evite instalar o MySQL em um diretório como ‘C:\Program Files’ ou usar um nome
de serviço contendo espaço.
No caso normal que você instala o servidor com --install mas nenhum nome de serviço,
o servidor é instalado com um nome de serviço de MySQL.
Como um exemplo mais complexo, considere o seguinte comando:
shell> C:\mysql\bin\mysqld --install mysql --defaults-file=C:\my-opts.cnf
Aqui, um nome de serviço é dado depois de opção --install. Se nenhuma opção --
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
de opção é para ser usado pelo programa cliente mysql.) No entanto, como a opção --
defaults-file está presente, o servidor lê as opções apenas a partir do arquivo indicado,
e apenas do grupo de opção [mysqld].
Você também pode especificar as opções como “Par^ ametros de inicializaç~
ao” no
utilitário de Serviços do Windows antes de você iniciar o serviço MySQL.
Uma vez que o servidor MySQL é instalado, o Windows irá iniciar o serviço automaticamente
sempre que o Windows inicia. O serviço também pode ser iniciado imediatamente a partir
do utilitário Serviços ou usando o comando NET START MYSQL. O comando NET não é caso
sensitivo.
Note que quando executado como um serviço, o mysqld não têm acesso a um console e
então nenhuma mensagem pode ser vista. Se o mysqld não iniciar, verifique o log de erros
par ver se o servidor gravou alguma mensagem lá indicando a causa do problema. O log de
erro está localizado no diretório ‘c:\mysql\data’. É o arquivo com um sufixo ‘.err’.
Quando o mysqld está executando como um serviço, ele pode ser parado usando o utilitários
Serviços, o comando NET STOP MYSQL, ou o comando mysqladmin shutdown. Se o serviçp
estiver em execução quando o Windows desliga, o Windows irá parar o servidor automati-
camente.
A partir do MySQL versão 3.23.44, você pode escolher entre instalar o servidor como um
serviço Manual se você não deseja que os serviços sejam executados automaticamente du-
rante o processo de inicialização. Para fazer isto, use a opção --install-manual em vez
da opção --install.
shell> C:\mysql\bin\mysqld --install-manual
Para remover um serviço que está instalado como um serviço, primeiro pare-o se ele estiver
em execução. Então use a opção --remove para removê-lo:
shell> mysqld --remove
Um problema com a finalização automática do serviço MySQL é que, para versões do
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
partir do MySQL 3.23.49, o Windows irá esperar mais para que a finalização do MySQL
Server esteja completa. Se você notar que ainda não é o suficiente para a sua instalação,
68 MySQL Technical Reference for Version 5.0.1-alpha
não é seguro executar o MySQL Server como um serviço. Em vez disso, execute-o a partir
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
funciona apenas com o Windows 2000 e XP, mas não para o Windows NT. No NT, o
Windows espera apenas 20 segundos para que o serviço seja finalizado, e depois desso ele
mata o processo do serviço. Você pode aumentar este padrão abrindo o Editor de Registro
(‘\winnt\system32\regedt32.exe’) e editar o valor de WaitToKillServiceTimeout em
‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control’ na árvore do Registro. Es-
pecifique o novo valor mais largo em milisegundos (por exemplo 12000 para que o Windows
NT espere até 120 segundos).
Se você não quiser iniciar o mysqld como um serviço, você pode iniciá-lo a partir da linha
de comando do mesmo modo que em versões do Windows que não são baseados no NT.
Para instruções use Seção 2.1.1.6 [Win95 start], Página 65.
Se você desejar usar o mysqlc, deve ter uma cópia da biblioteca ‘cygwinb19.dll’ em al-
gum lugar que o mysqlc possa encontrá-la. Se sua distribuição do MySQL não tiver esta
biblioteca instalada no mesmo diretório que o mysqlc (o diretório bin sob o diretório base
sa dua instalação do MySQL). Se sua distribuição não tem a biblioteca cygwinb19.dll no
diretório ‘bin’, olhe no diretório lib para encontrá-lo e copiá-lo para o seu diretório de
sistema no Windows. (‘\Windows\system’ ou um lugar parecido).
Os privilégios padrões no Windows dão a todos usuários locais privilégios totais para todos
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
mysql.user que tem Host=’localhost’ e User=’’.
Você também deve adicionar uma senha para o usuário root. O exemplo seguinte exemplo
inicia removendo o usuário anônimo que tem todos os privilégios, e então configura uma
senha para o usuário root:
C:\> C:\mysql\bin\mysql mysql
mysql> DELETE FROM user WHERE Host=’localhost’ AND User=’’;
mysql> FLUSH PRIVILEGES;
mysql> QUIT
C:\> C:\mysql\bin\mysqladmin -u root password your_password
Depois de configurar a senha, se você desejar desligar o servidor mysqld, você pode usar o
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
o comando mysqladmin para configurar uma senha irá falhar com um erro: parse error
near ’SET password’. A correção para este problema é atualizar para uma versão mais
nova do MySQL.
Com as versões atuais do MySQL você pode facilmente adicionar novos usuários e alterar
privilégios com os comandos GRANT e REVOKE. Veja Seção 4.4.1 [GRANT], Página 254.
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ínima padrão, execute:
shell> rpm -i MySQL-server-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
Para instalar somente o pacote cliente, execute:
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
Package Integrity], Página 75.
O RPM coloca dados sob o ‘/var/lib/mysql’. O RPM também cria as entradas apropriadas
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,
você pode desejar criar uma cópia do script para que você não perca ao instalar um RPM
mais novo). Veja Seção 2.4.3 [Automatic start], Página 118 para mais informações sobre
como o MySQL pode ser iniciado automaticamente na inicialização do sistema.
Se você quiser instalar o RPM do MySQL em uma distribuição Linux mais antiga que não
suporte scripts de inicialização no ‘/etc/init.d’ (diretamente ou via link simbólico), você
deve criar um link simbólico que aponte para a localização onde o seu script de instalação
está atualmente instalado. Por exemplo, se esta localização for ‘/etc/rc.d/init.d’, use
estes comandos antes de intalar o RPM para criar ‘/etc/init.d’ como um link simbólico
que aponte lá:
shell> cd /etc; ln -s rc.d/init.d .
No entanto, todas as distribuições de Linux atuais já devem suportar este novo layout
de diretório que usa ‘/etc/init.d’ já que ele é exigido para compatibilidade LBS (Linux
Standard Base).
Se o arquivo RPM que você instalar inclui o MySQL-server, o daemon mysqld deve estar
pronto e em execução após a instalação. Agora você já deve poder iniciar o MySQL. Veja
Seção 2.4 [Pós Instalação], Página 111.
Se alguma coisa der errado, você encontrar maiores informações no capítulo de instalação.
Veja Seção 2.2.9 [Instalado o binário], Página 91.
A partir do MySQL 4.0.11, você pode instalar o MySQL no Mac OS X 10.2 (“Jaguar”)
usando um pacote do binário do Mac OS X PKG em vez da distribuição binário em tarball.
Note que versões mais antigas do Mac OS X (ex.: 10.1.x) não são suportadas por este
pacote.
Este pacote está localizado dentro de um arquivo de imagem de disco (.dmg). que você
primeiro precisa montar com um duplo clique em sua ícone no Finder. Ele deve então
montar a imagem e exibir o seu conteúdo.
NOTA: Antes de proceder com a instalação, tenha certeza que você finalizou todas as
instâncias do MySQL em execução usando o MySQL Manager Aplication (no Mac OS X
Server) ou via mysqladmin shutdown na linha de comando.
72 MySQL Technical Reference for Version 5.0.1-alpha
Para relamente instalar o MySQL PKG, de um duplo clique na ícone do pacote. Isto inicia
o Mac OS Package Installer, que irá guia-lo pela instalação do MySQL.
O Mac OS X PKG do MySQL irá se instalar em ‘/usr/local/mysql-<version>’
e também instalrá um link simbólico ‘/usr/local/mysql’, apontando para a nova
localização. Se um diretório chamado ‘/usr/local/mysql’ já existe, ele será renomeado
para ‘/usr/local/mysql.bak’ em primeiro lugar. Adicionalmente, ele irá instalar a
tabela de permissões do banco de dados MySQL executando mysql_install_db depois da
instalação.
O layout de instalação é similar a aquele da distribuição binária, todos os binários do MySQL
estão localizados no diretório ‘/usr/local/mysql/bin’. O socket MySQL será colocado em
‘/tmp/mysql.sock’ por padrão. Veja Seção 2.2.5 [Installation layouts], Página 83.
A instalação do MySQL exige uma conta de usuário do Mac OS X chamada mysql (uma
conta de usuário com este nome existe por padrão no Mac OS X 10.2 e acima).
Se você estiver executando o MAC OS X Server, você já terá uma versão do MySQL
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
ajuda da Apple sobre a instalação do MySQL (Execute o aplicativo “Help View”, selecione
a ajuda do “Mac OS X Server” e faça uma busca por “MySQL” e leia o item entitulado
“Installing MySQL”).
Note especialmente, que a versão pré-instalada do MySQL no Mac OS X Server é iniciado
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
http://www.entropy.ch, você pode simplesmente seguir as intruções de atualização para
pacotes usando o layout de instalação dos binário como dados em suas páginas.
Se você está atualizado da versão 3.23.xx de Marc ou do versão Mac OS X Server do
MySQL para o MySQL PKG oficial, você também deve converter a tabela de privilégios do
MySQL existente para o formato atual, porque alguns novos privilégios de segurança foram
adicionados. Veja Seção 2.5.6 [Upgrading-grant-tables], Página 130.
Se você preferisse iniciar automaticamente o MySQL durante o boot do sistema, você
tambén precisa instalar o MySQL Startup Item. A partir do MySQL 4.0.15, ele é parte do
disco de instalação do Mac OS X como um pacote de instalação separado. Simplesmente
de um duplo clique no ícone MySQLStartupItem.pkg e siga as instruções para instalá-lo.
Note que isto só precisa ser feito uma vez! Não há necessidade de se instalar o Startup Item
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
mensagem de erro You cannot install this software on this disk. (null) no diálogo
de seleção do disco de destino. Se este erro ocorrer, simplesmente clique no botão Go
Back uma vez para retornar a tela anterior. Agora clique em Continue para avançar para a
seleção do disco de destino novamente - agora você deve estar apto a escolher o disco destino
corretamente. Nós informamos este erro a Apple e eles estão investigando este problema.
Capı́tulo 2: Instalação do MySQL 73
A partir da versão 4.0.11, o MySQL está disponível para a Novell NetWare na forma de
pacote do binário. Para servir o MySQL, o servidor NetWare deve suprir estas exigências:
• NetWare versão 6.5, ou NetWare 6.0 com Support Pack 3 instalado (Você pode obtê-lo
em http://support.novell.com/filefinder/13659/index.html). O sistema deve
obedecer as exigências mínimas da Naveel para executar a respectiva versão do Net-
Ware.
• Os dados do MySQL, assim com os seus binários, devem ser instalados em um volume
NSS; volumes tradicionais não são suportados.
O pacote binário para o NetWare pode ser obtido em http://www.mysql.com/downloads/.
Se você estiver executando o MySL no NetWare 6.0, sugerimos que você utilize a opção
--skip-external-locking na linha de comando. Também será necessário utilizar CHECK
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.
Depois de fazer o download do pacote MySQL que serve às suas necessidades e antes de
tentar instalá-lo, você deve ter certeza de que ele esta intacto e não foi manipulado.
A MySQL AB oferece dois tipos de verificação de integridade: MD5 checksums e assinaturas
criptografadas usando GnuPG, o GNU Privacy Guard.
Depois de fazer o download do pacote, você deve verificar se o MD5 checksum corresponde
a aquele fornecido na página de download do MySQL. Cada pacote tem um checksum
individual, que você pode verificar com o seguinte comando:
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
GNU Text Utilities, que está disponível para uma grande faixa de plataformas. Você
76 MySQL Technical Reference for Version 5.0.1-alpha
mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
Capı́tulo 2: Instalação do MySQL 77
hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
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.
Veja a documentação de GPG para mais informações de como trabalhar com chaves públicas.
Depois de fazer o download e importar a chave publica criada, faça o download
do pacote MySQL desejado e da assinatura correspondente, que também está
disponível na página de download. A assinatura tem a extensão ‘.asc’. Por exemplo,
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
para verificar a assinatura para este arquivo:
shell> gpg --verify <package>.asc
Exemplo:
Para pacotes RPM, não há assinaturas separadas - pacotes RPM atualmente têm uma assi-
natura GPG incluída e MD5 checksum. Você pode verificá-los executando o seguinte comando:
shell> rpm --checksig <package>.rpm
Exemplo:
Exemplo:
Nós ulitizamos o GNU Autoconf, para que seja possível 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
mesmos usamos e desenvolvemos o software primeiramente no Linux (SuSE e red Hat),
FreeBSD e Sun Solaris (Versões 8 e 9).
Perceba que para alguns sistemas operacionais, o suporte nativo a thread funciona somente
nas últimas versões. O MySQL compila com sucesso nas seguintes combinações de sistema
operacional/pacote de thread:
• AIX 4.x com threads nativas. Veja Seção 2.6.6.4 [IBM-AIX], Página 155.
• Amiga.
• BSDI 2.x com o pacote incluído MIT-pthreads. Veja Seção 2.6.4.5 [BSDI], Página 151.
• BSDI 3.0, 3.1 e 4.x com threads nativas. Veja Seção 2.6.4.5 [BSDI], Página 151.
• SCO OpenServer with a recent port of the FSU Pthreads package. Veja Seção 2.6.6.9
[SCO], Página 161.
Capı́tulo 2: Instalação do MySQL 79
• SCO UnixWare 7.0.1. Veja Seção 2.6.6.10 [SCO Unixware], Página 163.
• DEC Unix 4.x com threads nativas. Veja Seção 2.6.6.6 [Alpha-DEC-UNIX], Página 157.
• FreeBSD 2.x com o pacote incluído MIT-pthreads. Veja Seção 2.6.4.1 [FreeBSD],
Página 148.
• FreeBSD 3.x e 4.x com threads nativas. Veja Seção 2.6.4.1 [FreeBSD], Página 148.
• FreeBSD 4.x com Linuxthreads. Veja Seção 2.6.4.1 [FreeBSD], Página 148.
• HP-UX 10.20 com o pacote incluído MIT-pthreads ou DCE threads. Veja Seção 2.6.6.2
[HP-UX 10.20], Página 153.
• HP-UX 11.x com as threads nativas. Veja Seção 2.6.6.3 [HP-UX 11.x], Página 154.
• Linux 2.0+ com LinuxThreads 0.7.1+ ou glibc 2.0.7+. Veja Seção 2.6.2 [Linux],
Página 137.
• Mac OS X Server. Veja Seção 2.6.5 [Mac OS X], Página 152.
• NetBSD 1.3/1.4 Intel e NetBSD 1.3 Alpha (Necessita GNU make). Veja Seção 2.6.4.2
[NetBSD], Página 150.
• Novell NetWare 6.0. Veja Seção 2.6.8 [Novell NetWare], Página 164.
• OpenBSD > 2.5 com threads nativas. OpenBSD < 2.5 com o pacote incluído MIT-
pthreads . Veja Seção 2.6.4.3 [OpenBSD], Página 150.
• OS/2 Warp 3, FixPack 29 e OS/2 Warp 4, FixPack 4. Veja Seção 2.6.7 [OS/2],
Página 163.
• SGI Irix 6.x com threads nativas. Veja Seção 2.6.6.8 [SGI-Irix], Página 160.
• Solaris 2.5 e superior com threads nativas nas plataformas SPARC e x86. Veja
Seção 2.6.3 [Solaris], Página 144.
• SunOS 4.x com o pacote incluído MIT-pthreads. Veja Seção 2.6.3 [Solaris], Página 144.
• Tru64 Unix
• Windows 9x, Me, NT, 2000 e XP. Veja Seção 2.6.1 [Windows], Página 133.
Perceba que nem todas as plataformas são apropriadas para executar o MySQL. Os seguintes
fatores determinam se uma certa plataforma é apropriada para uma missão crítica pesada:
• Estabilidade geral da biblioteca thread. Uma plataforma pode ter excelente reputação,
entretanto, se a biblioteca thread é instável no código que é usado pelo MySQL, mesmo
se todo o resto for perfeito, o MySQL irá ser tão estável quanto a biblioteca thread.
• 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ível para aquela thread executar em uma CPU diferente que o processo original.
• A habilidade do kernel e/ou a biblioteca thread executar várias threads que
adiquire/libera um bloqueio mutex sobre uma pequena região crítica frequentemente
sem trocas de contexto excessivos. Em outras palavras, se a implementação de
pthread_mutex_lock() requisitar a CPU muito rapidamente, isto irá afetar o MySQL
tremendamente. Se esse detalhe não estiver sendo cuidado, adicionar CPUs extras
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.
80 MySQL Technical Reference for Version 5.0.1-alpha
Baseado nos critérios acima, as melhores plataformas para a execução do MySQL até este
ponto são o x86 com SuSe Linux 8.2, kernel 2.4 e ReiserFS (ou qualquer distribuição Linux
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á
melhorando. Nós também acreditamos que em certo ponto iremos estar aptos para incluir
todas as outras plataformas em que o MySQL compila e executa, mas não tão bem e com
o mesmo nível de estabilidade e performance, na categoria superior. Isto necessitará de
algum esforço da nossa parte em cooperação com os desenvolvedores dos componentes do
Sistema Operacional/Biblioteca que o MySQL depende. Se você tiver interesse em melhorar
algum de nossos componentes, está em uma posição para influenciar seu desenvolvimento,
e precisa de instruções mais detalhadas sobre o que o MySQL necessita para uma melhor
execução, envie um e-mail para lista de email “insternals” do MySQL. Veja Seção 1.7.1.1
[Mailing-list], Página 33.
Por favor, perceba que a comparação acima não é para dizer que um SO é melhor ou pior
que o outro em geral. Nós estamos falando sobre a escolha de um SO para um propósito
dedicado: executar o MySQL, e comparamos as plataformas levando isto em consideração.
Desta forma, o resultado desta comparação seria diferente se nós incluíssemos mais detalhes.
E em alguns casos, a razão de um SO ser melhor que o outro pode ser simplesmente
porque colocamos mais esforço nos testes e otimização para aquela plataforma em particular.
Estamos apenas colocando nossas observações para ajudá-lo na decisão de qual plataforma
usar o MySQL na sua configuração.
A primeira decisão a ser feita é se você deve usar a última versão de desenvolvimento ou a
última versão estável:
• Normalmente, se você estiver usando o MySQL pela primeira vez ou tentando portá-
lo para algum sistema em que não exista distribuição binária, recomendamos o uso
da versão estável (atualmente Versão 5.0.1-alpha). Repare que todos os lançamentos
do MySQL são conferidos com os testes comparativos de performance e um conjunto
extenso de testes antes de cada lançamento.
• Senão, caso você esteja trabalhando com um antigo sistema e quiser atualizá-lo, mas não
que correr o risco com uma atualização sem correções, você deve faze-lo do mesmo ramo
que você está usando (onde aenas o último número da versão é mais novo que o seu).
Nós temos tentado corrigir somente erros fatais e torná-los menores, com alterações
relativamente seguras para aquela versão.
Capı́tulo 2: Instalação do MySQL 81
A segunda decisão a ser feita é se você deseja usar uma distribuição fonte ou binária. Na
maioria dos casos provavelmente você deverá usar a distribuição binária, se alguma existir
para sua plataforma, será normalmente muito mais fácil para instalar do que a distribuição
em código fonte.
Nos seguites casos você provavelmente será mais bem servido com uma instalação baseada
em código fonte:
• Se você desejar instalar o MySQL em algum lugar expecífico. (O padrão das dis-
tribuições binárias é estar“pronto para rodar” em qualquer lugar, mas talvez você
deseje ainda mais flexibilidade).
• Para estar apto e satisfazer diferentes requisições dos usuários, estaremos fornecendo
duas versões binárias diferentes; Uma compilada com os manipuladores de tabelas não
transacionais (um binário rápido e pequeno) e um configurado com as mais importantes
opções extendidas como tabelas transacionais. Ambas versões são compiladas da mesma
distribuição fonte. Todos clientes MySQL nativos pode conectar com ambas versões do
MySQL.
A distribuição binária extendida é marcada com o sufixo -max e é configurada com as
mesmas opções de mysqld-max. Veja Seção 4.8.5 [mysqld-max], Página 343.
Se você deseja usar o RPM MySQL-Max, primeiramente você deve instalar o RPM MySQL-
server padrão.
• Se você deseja configurar mysqld com alguns recursos extras que NÃO estão nas dis-
tribuições binárias. Segue abaixo a lista das opções extras mais comuns que você pode
querer usar:
• --with-innodb
• --with-berkeley-db (padrão para o MySQL 4.0 e seguintes)
• --with-raid (não disponível para todas as plataformas)
• --with-libwrap
• --with-named-z-lib (Isto é feito para alguns dos binários)
• --with-debug[=full]
• A distribuição binária padrão é normalmente compilada com suporte para todos con-
juntos de caracteres e deve funcionar em uma variedade de processadores para a mesma
família do processador.
Se você precisar de um servidor MySQL mais rápido você pode querer recompilá-lo com
suporte para somente o conjunto de caracteres que você precisa, usar um compilador
melhor (como pgcc) ou usar opções de compiladores para usar otimizações para seu
processador.
• Se você encontrar um erro e relatá-lo para o time de desenvolvimento do MySQL você
provavelmente receberá um patch que será necessário aplicá-lo para a distribuição fonte
para ter o bug corrigido.
• Se você deseja ler (e/ou modificar) o código C e C++ que é o MySQL, você pode obter
uma distribuição fonte. O código fonte é sempre o manual final. Distribuições fontes
também contem mais testes e exemplos que as distribuições binárias.
O esquema de nomes do MySQL usa números de versões que consistem de tres números e
um sufixo. Por exemplo, um nome de lançamento como mysql-4.1.0-alpha é interpretado
da seguinte maneira:
82 MySQL Technical Reference for Version 5.0.1-alpha
• O primeiro número (4) é a versão principal e também descreve o formato dos arquivos.
Todas releases da Versão 4 tem o mesmo formato de arquivo.
• O segundo número (1) é o nível da distribuição.
• O terceiro número (0 é o número da versão do nível de distribuição. Este é incrementado
para cada nova distribuição. Normalmente você desejará a última versão para o nível
de publicação que tiver escolhido.
• O sufixo (alpha) indica o nível de estabilidade da versão. Os possíveis sufixo são:
− alpha indica que a versão contém grandes seções de novos códigos que não foram
100% testados. Bugs conhecidos (normalmente não tem nenhum) devem estar doc-
umentados na seção News. Veja Apêndice D [News], Página 957. Existem também
novos comandos e extensões na maioria das publicações alpha. Desenvolvimento
ativo que podem envolver maiores alterações no código pode ocorrer numa versão
alpha, mas tudo será testado antes de fazer a publicação. Não podem existir erros
conhecidos em nenhuma publicação do MySQL.
− beta significa que todo o novo código foi testado. Não serão adicionados novos
recursos que podem causar algum tipo de corrompimento. Não deve existir bugs
conhecidos. Uma alteração de versão de alpha para beta ocorre quando não existir
nenhum relato de erro fatal com uma versão alpha por pelo menos um mês e não
planejarmos adicionar nenhum recurso que pode deixar algum antigo comando
menos confiável.
− gamma é o beta que já tem sido usado a algum tempo e parece funcionar bem.
Apenas pequenas correções são adicionadas. Isto é o que muitas empresas chamam
de release.
− Se não existir um sufixo, significa que esta versão já está sendo executada há
algum tempo em diferentes locais sem relatos de erros além dos específicos de
certas plataformas. Somente correções de erros críticos são adicionados ao release.
Isto é o que chamamos de uma distribuição estável.
No processo de desenvolvimento do MySQL, várias versões coexistem e estão em um estágio
diferente. Naturalmente, correções de erros relevantes de uma série anterior são propagados.
• Para a antiga série 3.23 estável/de produção, novas versões só são liberadas para erros
críticos.
• A série atual (4.0) é de qualidade estável/produção. Nenhum novo recurso que possa
influenciar a estabilidade do código é adicionado.
• No ramo alpha 4.1 principal, novos recursos são adicionados. Fontes e binários estão
disponíveis para uso e teste em sistemas de desenvolvimento.
• O ramo de desenvolvimento 5.0 só está disponível para a árvore do BitKeeper.
Todas as versões do MySQL funcionam sobre nossos testes padrões e comparativos para
garantir que eles são relativamente seguros para o uso. Como os testes padrões são exten-
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:
Um pacote de testes interna
Faz parte de um sistema de produção para um cliente. Ela tem diversas tabelas
com centenas de megabytes de dados.
Capı́tulo 2: Instalação do MySQL 83
Esta seção descreve o layout padrão dos diretórios criados pela instalção das distribuições
binária e fonte.
Uma distribuição binária é instalada descompactando-a no local de instalação de sua escolha
(tipicamente ‘/usr/local/mysql’) e cria os seguintes diretórios nesses locais:
Diretório Conteúdo do diretório
‘bin’ Programas clientes e o servidor mysqld
‘data’ Arquivos Log, bancos de dados
‘docs’ Documentação, Log de alterações
‘include’ Arquivos de cabeçalho (headers)
‘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á-
la. Por padrão, a instalação copia os arquivos em ‘/usr/local’, nos seguintes subdiretórios:
Diretório Conteúdo do diretório
‘bin’ Programas clientes e scripts
‘include/mysql’Arquivos de cabeçalho (headers)
‘info’ Documentação no formato Info
‘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-
encia de uma instalação binária nas seguintes formas:
• The mysqld server is installed in the ‘libexec’ directory rather than in the ‘bin’
directory.
• The data directory is ‘var’ rather than ‘data’.
84 MySQL Technical Reference for Version 5.0.1-alpha
semanas e que não tenham sido sustituída por uma nova versão. Veja Seção 2.2.4 [Qual
versão], Página 80.
Colocamos muito tempo e esforço em tornar nossas distribuições livres de erros. Pelo nosso
conhecimento, não liberamos uma única versão do MySSQL com qualquer erro conhecido
’fatal’.
Um erro fatal é algo que faz o MySQL falhar com o uso normal, traz respostas erradas para
consultas normais ou tem um problema de segurança.
Nós temos documentados todos os problemas conhecidos, bugs e assuntos que são depen-
dentes das decisões de projeto. Veja Seção 1.8.6 [Bugs], Página 54.
Nosso objeto é corrigir tudo que é possível, mas sem correr o risco de tornarmos uma
versão menos estável. Em certos casos, isto significa que podemos corrigir um problema
na(s) versão(ões) de desenvolvimento, mas não o corrigirmos na versão estável (produção).
Naturalmente, documentamos tais problemas para que o usuários esteja ciente.
Aqui está um descrição de como nosso processo de contrução funciona:
• 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.
• Quando corrigimos um erro, sempre tentamos fazer um caso de teste para ele e incluí-lo
em nosso sistema de teste para assegurar que o erro nunca retornará. (Cerca de 90%
de todos os erros corrigidos têm um caso de teste.)
• Também criamos casos de teste para todos os novos recursos adicionados ao MySQL.
• Antes de começarmos a fazer uma nova distribuição do MySQL, asseguramos que todos
os erros repetitíveis relatados para a versão do MySQL (3.23.x, 4.0.x, etc) estão cor-
rigidos. Se algo for impossível de corrigir (devido a alguma decisão de projeto interno
no MySQL), documentaremos isto no manual. Veja Seção 1.8.6 [Bugs], Página 54.
• Nós fazemos uma construção para todas as plataformas para as quais suportamos
binários (mais de 15 plataformas) e executamos nosso pacote de teste e benchmarks
para todas elas.
• Não publicaremos um binário para uma plataforma na qual os testes do pacote de
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.
• Se nós, durante a o porcesso de construção e teste (que leva de 2 a 3 dias) recebermos um
relatório sobre um erro fatal (por exemplo, um que cause um core dump), o corrigiremos
e reiniciaremos o processo de construção).
• Depois de publicarmos os binários em http://www.mysql.com/, enviamos um email
de anúncio nas listas de email mysql e announce. Veja Seção 1.7.1.1 [Mailing-list],
Página 33. A mensagem de anúncio contém uma lista de todas as alterações da dis-
tribuição e qualquer problema conhecido com ela. (A seção ’problemas conhecidos’ na
notas das distribuições só tem sido necessária em algumas da distribuições.)
86 MySQL Technical Reference for Version 5.0.1-alpha
• Para darmos acesso rapidamente aos nossos usuários dos últimos recursos
do MySQL, fazemos uma nova distribuição do MySQL a cada 4-8 semanas.
Instantâneos do código finte são contruídos diariamente e estão disponíveios em
http://downloads.mysql.com/snapshots.php.
• Se, depois da distribuição estar pronta, recebermos qualquer relatório que houve (de-
pois de tudo) qualquer coisa criticamente errada com a construção em uma plataforma
específica, corrigiremo-na imediatamente e liberaremos um nova distribuição ’a’ para
aquela plataforma. Graças aos nosso grande base de usuários, problemas são encontra-
dos rapidamente.
• Nosso registro para boas distribuições feitas é muito boa. Nas últimas 150 distribuições,
tivemos que fazer uma nova contrução para menos de 10 distribuições (em 3 destes
casos, o erro era uma biblioteca glibc com problema em uma de nossas máquinas que
levamos um longo tempo para encontrar.
-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
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
90 MySQL Technical Reference for Version 5.0.1-alpha
Este capítulo cobre a instalação da distribuição binária do MySQL (.tar.gz Archives) para
várias plataformas (veja MySQL binaries para uma lista detalhada).
Em adição a estes pacotes genéricos, também oferecemos binários em formatos de pacote
específicos da plataforma para plataformas selecionadas. Veja Seção 2.1 [Quick Standard
Installation], Página 60 para mais informações sobre como\ intalá-los.
As distribuições genéricas do MySQL estão empacotados com arquivos GNU tar com com-
pactação gzip (.tar.gz). Você precisa das seguintes ferramentas para instalar um dis-
tribuição binária do MySQL:
• GNU gunzip para descompactar a distribuição.
• Um tar razoável para descompactar a distribuição. Sabemos que o GNU tar funciona.
Algumas implementações tar que vêm pré-instaladas como o sistema operacional (ex.
Sun tar) possuem problemas (com nome de arquivos grandes, por exemplo) Neste caso,
você deve instalar o GNU tar primeiro.
Se você tiver problemas, sempre use mysqlbug ao enviar dúvidas para a lista de email do
MySQL. Mesmo se o problema não for um bug, mysqlbug colhe informações do sistema que
ajudarão os outros a solucionar o seu problema. Se não usar mysqlbug, você terá diminuída
a probabilidade de conseguir a solução do seu problema. Você encontrará o mysqlbug no
diretório ‘bin’ depois de descompactar a distribuição. Veja Seção 1.7.1.3 [Relato de erros],
Página 36.
Os comando básicos que você deve executar para instalar e usar uma distribuição binária
do MySQL são:
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
92 MySQL Technical Reference for Version 5.0.1-alpha
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
bin/mysqld_safe no comando final.
Você pode adicionar novos usuários usando o script bin/mysql_setpermission se você
instalar os módulos Perl DBI e DBD-mysql.
Uma descrição mais detalhada é apresentada a seguir.
Para instalar uma distribuição binária, siga estes passos, então proceda com a Seção 2.4
[Pós Instalação], Página 111, para a configuração da pós istalação e testes:
1. Escolha o diretório sob o qual você deseja descompactar a distribuição e a mova para
dentro dele. No exemplo a seguir, descompactamos a distribuição sob ‘/usr/local’ e
criamos um diretório ‘/usr/local/mysql’ dentro do qual o MySQL é instalado. (As
seguintes instruções, consequentemente, assumem que você tem permissão para criar
arquivos em ‘/usr/local’. Se este diretório é protegido, você precisará realizar a
instalação como root.)
2. Obtenha um arquivo de distribuição de um dos sites listados em Seção 2.2.1 [Getting
MySQL], Página 75.
As distribuições binárias do MySQL são fornecidas como arquivos tar compactados e
tem nomes como ‘mysql-VERS~ AO-SO.tar.gz’, onde VERS~ AO é um número (por exem-
plo, 3.21.15) e SO indica o tipo de sistema operacional para o qual a distribuição é
pretendida (por exemplo, pc-linux-gnu-i586).
3. Se você ver uma distribuição binária marcada com o sufixo -max, significa que o
binário tem suporte para tabelas transacionais e outros recursos. Veja Seção 4.8.5
[mysqld-max], Página 343. Note que todos os binários são contruídos a partir da
mesma distribuição fonte do MySQL.
4. Adicione um usuário e grupo para o mysqld ser executado:
shell> groupadd mysql
shell> useradd -g mysql mysql
Estes comandos adicionam o grupo mysql e o usuário mysql. A sintaxe para useradd
e groupadd podem diferir um pouco nas diversas versões de Unix. Eles tambémpodem
ser chamado adduser e addgroup. Você pode desejar criar o grupo e usuário com outro
nome, diferente de mysql.
5. Chame o diretório no qual se pretende fazer a instalação:
shell> cd /usr/local
6. Descompacte a distribuição, que criará o diretório de instalação. Então crie um link
simbólico para aquele diretório:
shell> gunzip < /path/to/mysql-VERS~ AO-SO.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERS~ AO-SO mysql
O primeiro comando cria um diretório chamado ‘mysql-VERS~ AO-SO’. O segundo co-
mando cria um link simbólico para o diretório. Isto torna a referência ao diretório de
instalação mais fácil, chamado como ‘/usr/local/mysql’.
Capı́tulo 2: Instalação do MySQL 93
Se a sua versão do MySQl for mais antiga do que a 4.0, substitua bin/safe_mysqld por
bin/mysqld_safe no comando.
Agora prossiga com Seção 4.8.2 [mysqld_safe], Página 331 e Veja Seção 2.4 [Pós instalação],
Página 111.
Antes de você continuar com as instalações dos fontes, confira antes se nosso binário está
disponível para sua plataforma e se ela funcionará para você. Nós colocamos muito esforço
para ter certeza que nossos binários são contruídos com as melhores opções possíveis.
Você precisa das seguintes ferramentas para contruir e instalar o MySQL a partir do código
fonte:
• GNU gunzip para descompactar a distribuição.
• Um tar razoável para desempacotar a distribuição. Sabe-se que o GNU tar funciona.
Algumas implementações tar que vêm pré-instaladas como o sistema operacional (ex.
Sun tar) possuem problemas (com nome de arquivos grandes, por exemplo) Neste caso,
você deve instalar o GNU tar primeiro.
• 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 libg++ não é necessária quando o gcc for usado. gcc 2.7.x tem um bug que
torna impossível 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
conseguir compilar o MySQL. gcc 2.8.1 é também conhecido por ter problemas em
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.
• Um bom programa make. GNU make é sempre recomendado e é algumas vezes
necessário. Se você tiver problemas, recomendamos tentar o GNU make 3.75 ou mais
novo.
Se você estiver usando uma versão recente de gcc, recente o bastante para entender a opção
-fno-exceptions, é MUITO IMPORTANTE que você a use. De outra forma, você pode
compilar um binário que quebra randomicamente. Nós também recomendamos que você use
-felide-constructors e -fno-rtti juntas com -fno-exception. Se estiver com dúvidas,
faça o seguinte:
Na maioria dos sistemas você irá obter um binário rápido e estável com essas opções.
Se você tiver problemas, SEMPRE USE mysqlbug quando postar questões para a lista de
email do MySQL Mesmo se o problema não for um bug, mysqlbug recolhe informações
do sistema que facilitará aos outros resolverem seu problema. Por não suar mysqlbug,
você perde a vantagem de ter seu problema resolvido! Você irá encontrar mysqlbug no
Capı́tulo 2: Instalação do MySQL 95
diretório ‘scripts’ depois de desempacotar a distribuição. Veja Seção 1.7.1.3 [Bug reports],
Página 36.
Os comandos básicos que você deve executar para instalar o MysQL a partir da distribuição
fonte são:
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
bin/mysqld_safe no comando final.
Se você deseja ter suporte para tabelas InnoDB, você deve editar o arquivo /etc/my.cnf e
remover o caractere # antes dos parâmetros que iniciam com innodb_.... Veja Seção 4.1.2
[Option files], Página 216. Veja Seção 7.5.3 [InnoDB start], Página 644.
Se você iniciar de um RPM fonte, então faça o seguinte:
shell> rpm --rebuild --clean MySQL-VERSION.src.rpm
Isto irá criar um RPM binário que você pode instalar.
Você pode adicionar novos usuários utilizando o script bin/mysql_setpermission se você
instalar os módulos Perl DBI e DBD-mysql.
Segue uma descrição mais detalhada.
Para instalar uma distribuição fonte, siga os passos a seguir, então prossiga para Seção 2.4
[Post-installation], Página 111, para inicialização do pós-instalação e testes:
1. Escolha o diretório sobre o qual você deseja descompactar a distribuição e vá para ele.
2. Obtenha um arquivo de distribuição de algum dos sites listados em Seção 2.2.1 [Getting
MySQL], Página 75.
3. Se você esta interessado em usar tabelas Berkeley DB com MySQL, você precisará obter
uma versão com o patch do código fonte do Berkeley DB. Por favor leia o capítulo sobre
tabelas Berkeley DB antes de continuar. Veja Seção 7.6 [BDB], Página 698.
Distribuições fontes do MySQL são fornecidas como arquivos tar compactados e tem
nomes como ‘mysql-VERSION.tar.gz’, onde VERSION é um número como 5.0.1-alpha.
4. Adicione um usuário e grupo para o mysql executar assim:
96 MySQL Technical Reference for Version 5.0.1-alpha
11. Se você deseja instalar suporte para a interface Perl DBI/DBD, veja Seção 2.7 [Perl
support], Página 164.
12. Se você deseja que o MySQL inicie automaticamente quando você ligar sua máquina,
você pode copiar support-files/mysql.server para o local onde seu sistema tem seus
arquivos de incialização. Mais informações podem ser encontradas no próprio script
support-files/mysql.server e em Seção 2.4.3 [Automatic start], Página 118.
Depois de tudo ter sido instalado, você deve iniciar e testar sua distribuição usando este
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_
safe no comando:
Se o comando falhar imediatamente com mysqld daemon ended então você pode achar al-
guma informação no arquivo ‘diretório-dados-mysql/’nome_maquina’.err’. A razão
pode ser que você já possua outro servidor mysqld sendo executado. Veja Seção 4.2 [Mul-
tiple servers], Página 219.
Veja Seção 2.4 [Post-installation], Página 111.
Algumas vezes patches aparecem na lista de mensagens ou são colocados na área de patches
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
estes comandos:
shell> patch -p1 < patch-file-name
shell> rm config.cache
shell> make clean
Patches do site FTP são distribuídos 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
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
fontes começando com o passo ./configure. Depois de executar o passo make install,
reinicie seu servidor MySQL.
Você pode precisar derrubar algum servidor atualmente em execução antes de executar make
install. (Use mysqladmin shutdown para fazer isto.) Alguns sistemas não lhe permitem
instalar uma nova versão do programa se ele substitui agum que estiver em execução.
98 MySQL Technical Reference for Version 5.0.1-alpha
O script configure fornece uma grande gama de controle sobre como você configura sua
distribuição MySQL. Normalmente você faz isto usando opções na linha de comando do
configure. Você também pode alterar configure usando algumas variáveis de ambiente.
Veja Apêndice F [Environment variables], Página 1092. Para uma lista de opções suportadas
pelo configure, execute este comando:
shell> ./configure --help
Algumas das opções mais usadas normalmente com o configure estão descritas a seguir:
• Para compilar apenas as bibliotecas clientes do MySQL e programas clientes e não o
servidor, use a opção --without-server:
shell> ./configure --without-server
Se você não possui um compilador C++, mysql não irá compilar (ele é o programa
cliente que exige C++). Neste caso, você pode remover o código no configure que
testa pelo compilador C++ e executar ./configure com a opção --without-server.
O passo da compiação continuará tentaindo construir mysql, mas você pode ignorar as
advertências sobre ‘mysql.cc’. (Se o make parar, tente make -k para continuar com o
resto da compilação mesmo se erros ocorrerem.)
• Se você quiser uma biblioteca embutida do MySQL (libmysqld.a) você deve usar a
opção --with-embedded-server.
• Se você não deseja que seus arquivos de logs e diretórios de bancos de dados fiquem
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
‘/usr/local/mysql’ em vez do padrão ‘/usr/local’. O segundo comando preserva o
diretório da instalação padrão, mas altera a localização padrão para diretórios de ban-
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
opções. Veja Seção 4.1.2 [Option files], Página 216.
• Se você estiver usando Unix e deseja que o arquivo socket do MySQL fique em um
diretório diferente do padrão (normalmente no diretório ‘/tmp’ ou ‘/var/run’) use 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,
mais tarde, alterar a localização de ‘mysql.sock’ usando os arquivos de opções do
MySQL. Veja Seção A.4.5 [Problems with mysql.sock], Página 929.
• Se você deseja compilar programas linkeditados estaticamente (por exemplo, para criar
uma distribuição binária, obter mais velocidade, ou evitar problemas com algumas
distribuições Red Hat Linux), execute configure desta forma:
shell> ./configure --with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static
Capı́tulo 2: Instalação do MySQL 99
• Se você estiver usando gcc e não tem libg++ ou libstdc++ instalados você pode dizer
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
libstdc++. Isto pode ser uma boa idéia para se fazer se você tiver as bibliotecas acimas
instaladas, já que algumas versões destas bibliotecas tem causado problemas estranhos
para usuários do MySQL no passado.
Segue algumas configurações de variáveis de ambiente comuns, dependendo do compi-
lador que você estiver usando:
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
usando as opções acima e adicionar as seguintes opções para a linha de configuração:
--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
para todas as versões recentes do gcc:
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-
dos compilados com otimização plena e deve ser perfeito para a maioria dos usuários.
Veja Seção 2.2.8 [Binários do MySQL], Página 86. Existem algumas definições de
configuração que você pode alterar para criar um binário ainda mais rápido, mas
isto é somente para usuários avançados. Veja Seção 5.5.3 [Compile and link options],
Página 456.
Se a construção falhar e produzir erros sobre seu compilador ou linkeditor não
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
--disable-share para o configure. Neste caso, configure não construirá uma
biblioteca libmysqlclient.so.* compartilhada.
• Você pode configurar o MySQL para não usar valores de campos DEFAULT para campos
não-NULL (isto é, campos que não podem ser NULL). Veja Seção 1.8.5.2 [Restrições NOT
NULL], Página 53.
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
• Por padrão, o MySQL usa o conjunto de caracteres ISO-8859-1 (Latin1). Para alterar
o conjunto padrão, use a opção --with-charset:
100 MySQL Technical Reference for Version 5.0.1-alpha
CUIDADO: Você deve ler esta seção somente se você estiver interessado em nos ajudar a
testar nossos novos códigos. Se você só deseja deixar o MySQL funcionando em seus sistema,
você deve usar uma distribuição padrão (pode ser uma distribuição binária ou fonte).
Para obter noss mais nova árvore de desenvolvimento, use estas instruções:
1. Faça download do BitKeeper em http://www.bitmover.com/cgi-bin/download.cgi.
Você precisará do Bitkeeper 3.0 ou posterior para acessar nosso repositório.
2. Siga as instruções para instalá-lo.
3. Depois que o BitKeeper estiver instalado, primeiro vá ao diretório no qual você deseja
trabalhar e então use um dos seguintes comandos para clonar o ramo da versão MySQL
de sua escolha:
Capı́tulo 2: Instalação do MySQL 101
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ç~ oes favoritas aqui
make
Caso apareçam alguns erros estranhos durantes este estágio, confira se você realmente
tem a libtool instalada!
Uma coleção de nossos scripts de configuração padrões está localizada no subdiretório
‘BUILD/’. Se preferir, você pode usar ‘BUILD/compile-pentium-debug’. Para compilar
em uma arquitetura diferente, modifique o script removendo opções que são específicas
da arquitetura Pentium.
5. Quando a construção estiver pronta, execute make install. Seja cuidadoso com isto
em uma máquina de produção; o comando pode sobrescrever sua versão atual insta-
lada. Se você tem outra instalação do MySQL, nós recomendamos que você execute
./configure com valores diferentes para as opções prefix, tcp-port e unix-socket-
path que as usadas pelo seu servidor em produção.
6. Seja rígido com sua nova instalação e tente fazer com que os novos recursos falhem.
Inicie executando make test. Veja Seção 14.1.2 [MySQL test suite], Página 896.
7. Se você chegar ao estágio make e a distribuição não compilar, por favor relate-o para
[email protected]. Se você instalou as últimas versões das ferramentas GNU
exigidas, e elas falharam tentando processar nossos arquivos de configuração, por fa-
vor informe isto também. Entretanto, se você executar aclocal e obtêm um erro de
command not found não o reporte.Tenha certeza que todas as ferramentas necessárias
estejam instaladas e que sua variável PATH esteja corretamente configurada para que
sua shell possa encontrá-la.
8. Depois da operação inicial bk clone para obter a árvore fonte, você deve executar bk
pull periodicamente para obter as atualizações.
9. Você pode examinar o histórico de alterações para a árvore com todos os diffs usando bk
sccstool. Se você ver alguns diffs estranhos ou código sobre o qual você tenha alguma
dúvida, não hesite em enviar um e-mail para lista de email “internals” do MySQL. Veja
Seção 1.7.1.1 [Mailing-list], Página 33. Além disso, se você acha que tem uma idéia
melhor em como fazer algo, envie um email para o mesmo endereço com um patch. bk
diffs irá produzir um patch para você após fazer as alterações no código fonte. Se
você não tiver tempo para codificar sua idéia, apenas envie uma descrição.
10. BitKeeper tem um ótimo utilitário de ajudar que você pode acessar via bk helptool.
11. Note que qualquer commit (bk ci ou bk citool) irá disparar o envio da mensagem com
as alterações para nossa lista de email internos, bem como a submissão openlogging.org
usual apenas com os comentários da alteração. Geralmente você não precisar usar
commit (já que o árvore pública não permitirá bk push), mas é preferível usar o método
bk diffs descrito arteriormente.
Você também pode procurar alterações, comentários e código fonte online procurando por
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:
Capı́tulo 2: Instalação do MySQL 103
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
sistemas. Veja Seção 2.3.6 [MIT-pthreads], Página 106 para avisos que podem ocorrer
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
notas do seguinte:
• Se configure é executado depois dele já ter sido chamado, ele pode usar informação
que foi colhida durante a chamada anterior. Esta informação é armazenada no ar-
quivo ‘config.cache’. Quando configure inicia, ele procura por este arquivo, lê seu
conteúdo, se ele existir, assumindo que aquela informação continua correta. Essa con-
jetura é inválida quando você reconfigurar.
• Cada vez que você executa configure, você deve executar make de novo para re-
compilar. Entretanto, você pode desejar remover primeiro antigos arquivos objeto de
construções anteriores, porque eles foram compilados usando diferentes opções de con-
figuração.
Para prevenir antigas informações de configurações ou arquivos objetos de serem usados,
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-
mente tem de falta de memória ou espaço de swap:
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
‘sql_yacc.cc’ com funções inline. Tente executando configure com a opção --with-
low-memory:
104 MySQL Technical Reference for Version 5.0.1-alpha
Estas instruções descrevem como construir o binário do MySQL a partir do fonte paras
versões 4.1 e acima no Windows. As instruções são fornecidas para construir binários a
partir de uma distribuição fonte padrão ou a partir da árvore do BitKeeper que contém o
fonte do desenvolvimento mais atuais.
108 MySQL Technical Reference for Version 5.0.1-alpha
Nota: As instruções neste documento estão restritas aos usuários que queiram testar o
MySQL no Windows a partir da última distribuição fonte ou da árvore do BitKeeper.
Para uso em produção, a MySQL AB não aconselha que você utilize um servidor MySQL
construído por você mesmo a partir de um fonte. Normalmente é melhor usar uma dis-
tribuição binária precompilada do MySQL que é construída especificamente para desem-
penho otimizado no Windows pela MySQL AB. Instruções para instalar uma distribuição
binária está disponível em Seção 2.1.1 [Windows installation], Página 60.
Para construir o MySQL no Windows a partir do fonte, você precisa dos seguintes compi-
ladores e recursos disoníveis 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:
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/faq.aspx.
• Aproximadamente 45 MB de espaço em disco.
• 64 MB de RAM
Você também precisará de um distribuição fonte para o Windows. Existem dois modos de
conseguir uma distribuição fonte do MySQL versão 4.1 e acima:
1. Obtenha um pacote de uma distribuição fonte pela MySQL AB para a versão do
MySQL que você está particularmente interessado. Distribuições fontes empacotadas
estão disponíveis para versões distribuídas 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
de desenvolvimento do BitKeeper. Se você planeja fazer isto, você deve criar o pacote
em um sistema Unix e então transfrí-lo para seu sistema Windows. (A razão para isto é
que alguns dos passos de configuração e construção exigem ferramentas que funcionam
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
http://www.bitkeeper.com/.
Se você estiver usando uma distribuição fonte do Windows, você pode ir diretamente para
Seção 2.3.7.1 [Windows VC++ Build], Página 108. Para contruir a partir da árvore do
BitKeeper, vá para Seção 2.3.7.2 [Windows BitKeeper Build], Página 110.
Se você encontrar alguma coisa que não está funcionando como esperado, ou tiver sugestões
sobre o mode de melhorar o processo de construção atual no Windows, envie uma mensagem
para a lista de email win32. Veja Seção 1.7.1.1 [Mailing-list], Página 33.
Nota: O MySQL 4.1 e arquivos do espeço de trabalho do VC++ são compatíveis com o
Microsoft Visual Studio 6.0 e as edições acima (7.0/.NET) e testados pela equipe da MySQL
AB antes de cada distribuição.
Siga este procedimento para construir o MySQL:
1. Crie um diretório de trabalho (ex.: ‘workdir’).
2. Descompacte a distribuição fonte no diretório mencionado acima usando Winzip ou
outra ferramenta que possa ler arquivos ‘.zip’.
Capı́tulo 2: Instalação do MySQL 109
mkdir \mysql\lib
mkdir \mysql\lib\debug
mkdir \mysql\lib\opt
Se você quiser fazer um benchamrk do MySQL, crie este diretório:
mkdir \mysql\sql-bench
Benchmark exigem suporte Perl.
2. Copie do diretório workdir para o diretório c:\mysql os seguintes diretórios:
copy client_release\*.exe C:\mysql\bin
copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
xcopy scripts\*.* C:\mysql\scripts /E
xcopy share\*.* C:\mysql\share /E
Se você quiser compilar outros clientes e ligá-los ao MySQL, você também deve fazer
isto:
copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
copy lib_debug\libmysql.* C:\mysql\lib\debug
copy lib_debug\zlib.* C:\mysql\lib\debug
copy lib_release\mysqlclient.lib C:\mysql\lib\opt
copy lib_release\libmysql.* C:\mysql\lib\opt
copy lib_release\zlib.* C:\mysql\lib\opt
copy include\*.h C:\mysql\include
copy libmysql\libmysql.def C:\mysql\include
Se você quiser fazer um benchmark do MySQL, você também deve fazer isto:
xcopy sql-bench\*.* C:\mysql\bench /E
Configure e inicie o servidor da mesma forma que a distribuição binária do Windows. Veja
Seção 2.1.1.3 [Windows prepare environment], Página 62.
Para construir o último pacote fonte do Windows a partir da arvoré fonte atual do Bit-
Keeper, use as seguintes instruções. Por favor, note que este procedimento deve ser real-
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-
jado). Para mais informações sobre como clonar a árvore fonte veja as instruções em
Seção 2.3.4 [Installing source tree], Página 100.
2. Configure e construa as distribuições para que você tenha um binário do servidor para
trabalhar. Um modo de se fazer isto é executar o seguinte comando no diretório de
mais alto nível de sua árvore fonte:
shell> ./BUILD/compile-pentium-max
3. Depois de se certificar que o processo de construção foi completado com sucesso, execute
o seguinte script utilitário a a partir do diretório de nível mais alto da sua arvore fonte:
Capı́tulo 2: Instalação do MySQL 111
shell> ./scripts/make_win_src_distribution
Este script cria um pacote fonte Windows. para ser usado em seu sistema Windows.
Você pode fornecer diferentes opções para o script baseado em suas necessidades. Ele
aceita as seguintes opções:
--debug Depura, sem criar o pacote
--tmp Especifica a localizaç~
ao temporária
--suffix Nome de sufixo para o pacote
--dirname Nome do diretório onde os arquivos s~ao copiados (intermediario)
--silent N~
ao apresenta uma lista dos arquivos processados
--tar Cria um pacote tar.gz em vez de .zip
--help Mostra esta mensagem de ajuda
Por padrão, make_win_src_distribution cria um arquivo zipado com o nome
‘mysql-VERSION-win-src.zip’, onde VERSION representa a versão de sua árvore fonte
do MySQL.
4. Faça uma copia ou upload para a sua máquina o pacote fonte Windows que você tiver
criado. Para compilá-lo use as instruções em Seção 2.3.7.1 [Windows VC++ Build],
Página 108.
Uma vez instalado o MySQL (de uma distribuição binária ou fonte), você deve inicializar
as tabelas de concessões, iniciar o servidor e ter certeza que o servidor está funcionando
bem. Você pode também desejar que o servidor inicie e pare automaticamente quando seu
sistema iniciar e desligar.
Normalmente você instala as tabelas de concessões e inicia o servidor assim para instalações
baseadas em uma distribuição fonte:
shell> ./scripts/mysql_install_db
shell> cd diretorio_instalaç~
ao_mysql
shell> ./bin/mysqld_safe --user=mysql &
Para uma distribuição binária (sem ser pacotes RPM ou PKG), faça isto:
shell> cd diretorio_instalaç~
ao_mysql
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
do banco de dados, o banco de dados test que você poderá usar para testar o MySQL e
também entradas de privilégio para o usuário que usa o mysql_install_db e o usuário
root. As estrandas são criadas sem senhas. O script mysqld_safe inicia o servidor mysqld.
(Se sua versão for anterior a 4.0, use safe_mysqld em vez de mysqld_safe.)
mysql_install_db não irá sobrescrever nenhuma tabela de privilégios antiga, então deve
ser seguro executá-lo em quaisquer circunstâncias. Se você não deseja ter o banco de dados
test você pode removê-lo com mysqladmin -u root drop test depois de iniciar o servidor.
Testes são geralmente facilmente feitos de um diretório raiz da distribuição MySQL.
Para uma distribuição binária, este é seu diretório de instalação (normalmente algo como
112 MySQL Technical Reference for Version 5.0.1-alpha
5. Verifique que você possa reiniciar o servidor. Faça isto usando mysqld_safe ou
chamado o mysqld diretamente. Por exemplo:
shell> BINDIR/mysqld_safe --log &
Se o mysqld_safe falhar, tente executá-lo do diretório de instalação do MySQL (se
você já não estiver lá). Se não funcionar, veja Seção 2.4.2 [Starting server], Página 116.
6. Execute alguns testes básicos para verificar se o servidor está funcionando. A saída
deve ser similar ao mostrado abaixo:
shell> BINDIR/mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
+-----------+
O propósito do script mysql_install_db é gerar novas tabelas de privilégios. Ele não irá
afeter nenhum outro dado! Ele também não fará nada se você já tem a tabela de privilégio
do MySQL instalada.
Se você deseja refazer suas tabelas de privilégios, você deve desligar o servidor mysqld, se
ele já está executando, então faça assim:
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_
install_db:
mysql_install_db não instala as tabelas de permissões
Você pode descobrir que o mysql_install_db falha ao instalar as tabelas de
permissões e termina depois de mostrar as seguintes mensagens:
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
se encontrar no diretório ‘XXXXXX’ nomeado pela mensagem de erro, e deve
indicar porque mysqld não inicializa. Se você não entende o que aconteceu,
inclua o log quando você postar um relato de erro usando mysqlbug! Veja
Seção 1.7.1.3 [Bug reports], Página 36.
Já existe um daemon mysqld sendo executado
Neste caso, provavelmente não será necessário executar o mysql_install_db.
Você deve executar o mysql_install_db somente uma vez, quando você insta-
lar o MySQL da primeira vez.
Instalair um segundo daemon mysqld não funciona quando um daemon
estiver em execução.
116 MySQL Technical Reference for Version 5.0.1-alpha
Isto pode acontecer quando você já tiver uma instalação do MySQL existente,
mas deseja colocar uma nova instalação em um diferente lugar (por exemplo,
para testes, ou talvez você simplesmente deseja executar duas instalações ao
mesmo tempo). Geralmente o problema que ocorre quando você tenta executar
o segundo servidor é que ele tenta usar o mesmo socket e porta que o outro.
Neste caso você irá obter a mensagem de erro: Can’t start server: Bind
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 219.
Você não tem direito de escrita no diretório ‘/tmp’
Se você não tem direito de escrita para criar um arquivo socket no local padrão
(em ‘/tmp’) ou permissão para criar arquivos temporáris em ‘/tmp,’ você irá
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:
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 929.
‘algum_dir_tmp’ deve ser o caminho para o mesmo diretório no qual você tem
permissão de escrita. Veja Apêndice F [Environment variables], Página 1092.
Depois disto você deve estar apto para executar mysql_install_db e iniciar o
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-
terior a 2.0.7-5 você deve ter certeza que você instalou todos os patches para
a glibc! Existe muita informação sobre isto nos arquivos das listas de men-
sagens do MySQL. Links para os arquivos de correio estão disponíveis online
em http://lists.mysql.com/. Veja também Seção 2.6.2 [Linux], Página 137.
Você pode também iniciar o mysqld manualmente usando a opção --skip-
grant-tables e adicionar a informação de privilégios usando o mysql:
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.
Se você for usar tabelas que suportem transações (BDB, InnoDB), primeiro deve-se criar
um arquivo my.cnf e configurar opções de inicialização para os tipos de tabelas que você
planeja usar. Veja Cap´“ptexi tulo 7 [Table types], Página 630.
Geralmente, você inicia o servidor mysqld de uma das três maneiras:
Capı́tulo 2: Instalação do MySQL 117
você pode tentar iniciar o mysqld com --bdb-no-recover. Se isto ajudar, então você pode
remover todos os arquivos ‘log.*’ do diretório de dados e tentar iniciar o mysqld novamente.
Se você obter o seguinte erro, significa que algum outro programa (ou outro servidor mysqld)
já está usando a porta TCP/IP ou socket mysqld está tentando usar:
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ê
não consegue encontrar outro servidor, você pode tentar executar o comando telnet sua_
maquina numero_porta_tcp-ip e apertar ENTER várias vezes. Se você não obter uma
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
[mysql install db], Página 115 e Seção 4.2 [Multiple servers], Página 219.
Se o mysqld está atualmente em execução, você pode verificar as configurações que ele está
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
significa que você não pode ter o direito de leitura/criação de arquivos no diretório do
banco de dados ou log. Neste caso você também deve iniciar o mysqld como usuário root
ou alterar a permissão para os arquivos e diretórios envolvidos para uqe você tenha o direito
de usá-los.
Se o mysqld_safe inicia o servidor mas você não consegue se conectar a ele, tenha certeza
que você tem uma entrada no arquivo ‘/etc/hosts’ que parece com isto:
127.0.0.1 localhost
Este problema só ocorre em sistemas que não possuem uma biblioteca thread funcional e
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-
mento de erros (trace) para encontrar o problema. Veja Seção E.1.2 [Making trace files],
Página 1080.
Se você estiver utilizando tabelas InnoDB, procure pelas opções especificas de inicialização
do InnoDB. Veja Seção 7.5.3 [InnoDB start], Página 644.
Se você estiver usando tabelas BDB (Berkeley DB), você deve se familiarizar com as difer-
entes opções especificas de inicialização do BDB. Seção 7.6.3 [BDB start], Página 699.
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
servidor.
O script mysql.server pode ser usado para inicializar ou parar o servidor utilizando-o com
os argumentos start ou stop:
Capı́tulo 2: Instalação do MySQL 119
[mysql.server]
basedir=/usr/local/mysql
O script mysql.server entende as seguintes opções: datadir, basedir e pid-file.
A seguinte tabela mostra quais grupos de opções cada script de inicialização lê dos arquivos
de opções:
Script Grupos de opções
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_
server] e mysqld_safe também lê o grupo [safe_mysqld]. No entanto, você deve atu-
alizar os seus arquivos de opções para usar os grupos [mysql.server] e [mysqld_safe].
Veja Seção 4.1.2 [Arquivos de Opções], Página 216.
Antes de fazer uma atualização, você deve fazer o backup de seus bancos de dados antigos.
Você sempre pode mover os arquivos de formato e de dados do MySQL entre diferentes
versões na mesma arquitetura enquanto você tiver versão base do MySQL. A versão base
atual é 4. Se você alterar o conjunto de caracteres quando executar o MySQL, você deve
executar myisamchk -r -q --set-character--set=charset em todas tabelas. De outra
forma seus índices podem não ser corretamente ordenados, porque alterar o conjunto de
caracteres também pode alterar a ordenação.
Se você tem receio de novas versões, você sempre pode renomear seu antigo mysqld para
algo como mysqld-’número-da-versão-antiga’. Se o seu novo mysqld comportar de maneira
inesperada, você simplesmente pode desliga-lo e reiniciar com seu antigo mysqld!
Se depois de uma atualização, você tiver problemas com programas clientes recompilados
como Commands out of sync ou “core dumps” inexperados, você provavelmente usou um
arquivo de cabeçalho ou de biblioteca antigo na compilação de seus programas. Neste caso
você deve conferir a data de seu arquivo ‘mysql.h’ e da biblioteca ‘libmysqlclient.a’
para verificar que eles são da nova distribuição MySQL. Se não, por favor, recompile seus
programas!
Se você tiver problemas, como na inicialização do novo servidor mysqld ou caso você não
consiga conectar sem uma senha, confira se o seu arquvo ‘my.cnf’ é o mesmo da antiga
instalação! Você pode conferir com isto: nome-programa --print-defaults. Se isto não
produzir outra saída além do nome do programa, você tem um arquivo my.cnf ativo que
está afetando a operacionalidade do servidor!
É uma boa idéia reconstruir e reinstalar o módulo Perl DBD-mysql sempre que instalar uma
nova versão do MySQL. O mesmo se aplica para outras interfaces MySQL, como Python
MySQLdb.
Capı́tulo 2: Instalação do MySQL 121
Varias comportamentos visíveis foram alteradas entre o MySQL 4.0 e o MySQL 4.1 para
corrigir erros críticos e tornar o MySQL mais compatível com o padrão ANSI SQL. Estas
alterações podem afetar à sua aplicação.
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 últimas distribuições do MySQL 4.0
(a paritr da 4.0.12) a opção de inicialização --new para o mysqld.
Esta opção lhe dá o comportamento da versão 4.1 para as alterações mais críticas. Você
também pode habilitar estes comportamentos para a conexão de uma determinado cliente
com o comando SET @@new=1, ou desabilitá-lo se ele for iniciado com SET @@new=0.
Se você acredita que algumas das alterações da versão 4.1 o afetarão, recomendamos que
antes de atualizar para a versão 4.1, você faça o download da última distribuição do MySQL
4.0 e o execute com a opção --new adicionando o seguinte ao seu arquivo de configuração:
[mysqld-4.0]
new
Deste modo você pode testar o novo comportamento com seus aplicativos na versão 4.0 para
certificar-se que eles funcionam. Isto o ajudará a ter uma transição suave quando realizar
uma atualização completa do MySQL 4.1. Fazendo isto do modo acima irá assegurar que
você não execute acidentalemte a versão 4.1 com a opção --new mais tarde.
A seguinte lista descreve alterações que podem afetar aplicações e que você deve observar
ao atualizar para a versão 4.1:
• TIMESTAMP agora é retornado como uma string com o formato ’YYYY-MM-DD HH:MM:SS’.
(A opção --new pode ser usada a partir da versão 4.0.12 para fazer um servidor 4.0
se comportar como 4.1 a este respeito.) Se você quiser tê-lo com um número (como a
Versão 4.0 faz) deve-se adicionar +0 a coluna TIMESTAMP a eles:
mysql> SELECT ts_col + 0 FROM tbl_name;
Tamanhos de display para TIMESTAMP não são mais suportados. Por exemplo, se você
declarar um coluna como TIMESTAMP(10), o (10) é ignorado.
Esta mudança era necessária para compatibilidade com os padrões SQL. Em uma versão
futura. Em uma versão futura, uma alteração adicional será feita (compatível com
versões anteriores com esta mudaça), permitindo que o tamanho do timestamp indique
o número desejado de dígitos de frações de um segundo.
• Valores binários (0xFFDF) agora são assumidos como strings em vez de números. Isto
corrige o problema com conjunto de caracteres onde é conveniente colocar a string como
um valor binário. Com esta alteração você deve usar CAST() se você quiser comparar
valores binários numericamente como inteiros:
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:
mysql> SELECT 0xFEFF < 0xFF;
-> 1
Usando itens binários em um contexto numérico ou comparando-os usando o operador
= deve funcionar como antes. (A opção --new pode ser usado para fazer o servidor 4.0
se comportar como 4.1 a partir da versão 4.0.13.)
122 MySQL Technical Reference for Version 5.0.1-alpha
• Para funções que produzem um valor DATE, DATETIME, ou TIME, o resultado retornado
para o cliente agora está corrigido para ter um tipo temporal. Por exemplo, no MySQL
4.1, você tem este resultado:
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> ’2001-01-01 00:00:00’
No MySQL 4.0, o resultado é diferente:
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> ’2001-01-01’
• Valores DEFAULT não podem mais ser especificado para colunas AUTO_INCREMENT (Na
versão 4.0, um valor DEFAULT é ignorado sem aviso, na 4.1 ocorre um erro).
• LIMIT não aceita mais argumentos negativos. Use 18446744073709551615 em vez de
-1.
• SERIALIZE não é mais uma opção válida para sql_mode. Deve-se usar SET
TRANSACTION ISOLATION LEVEL SERIALIZABLE. SERIALIZE também não é mais válido
para a opção --sql-mode do mysqld. Use --transaction-isolation=SERIALIZABLE
• Todas tabelas e colunas strings agora têm um conjunto de caracter. Veja Cap´ “ptexi
tulo 9 [Charset], Página 710. A informação do conjunto de caracteres é mostrada por
SHOW CREATE TABLE e mysqldump. (O MySQL versão 4.0.6 e acima pode ler o novo
arquivo dump; versões mais antigas não podem.)
• O formato de definição de tabela usado nos arquivos ‘.frm’ mudaram um pouco na
versão 4.1. O MySQL 4.0.11 e adiante leêm o novo formato ‘.frm’ diretamente, mas
versões mais antigas não podem. Se você precisa mover tabelas da versão 4.1. para
uma mais nova que a 4.0.11, você de usar mysqldump. Veja Seção 4.9.7 [mysqldump],
Página 361.
• Se você estiver executando vários servidores na mesma máquina Windows, você deve
usar uma opção --shared_memory_base_name diferentes para cada máquina
• A interface para agrupar funções UDF alterou um pouco. Você deve agora declarar
uma função xxx_clear() para cada função de agrupamento.
Em geral, atualizar para o MySQL 4.1 a partir de uma versão mais nova do MySQL envolve
os serguintes passos:
• Verifique na seção de alterações se houve alguma mudança que pode afetar a sua
aplicação.
• Leia os novos itens da versão 4.1 para ver quais itens interessantes que você pode usar
na versão 4.1. Veja Seção D.2 [Novidades na versão 4.1.x], Página 957.
• Se você estiver executando o MySQL Server no Windows, veja também Seção 2.5.8
[Windows upgrading], Página 132.
• Após o upgrade, atualize a tabela de permissões para gerar uma nova coluna Password
maior que é necessária para tratamento seguro de senhas. O procedimento usa mysql_
fix_privilege_tables e está descrito em Seção 2.5.6 [Upgrading-grant-tables],
Página 130. Estratégias alternativas para tratamento de senhas depois de uma
atualização estão descritos posteriormente nesta seção.
O mecanismo de hashing da senha foi alterado na versão 4.1 para fornecer maior segurança,
mas ele pode causar problemas de compatibilidade se você ainda tiver clientes que usam a
Capı́tulo 2: Instalação do MySQL 123
biblioteca cliente 4.0 ou anterior. (É bastante indesejável que você tenha clientes 4.0 em
situações onde o cliente conecta de uma máquina remota que ainda não tenha sido atualizada
para a versão 4.1). A seguinte lista indica algumas estratégias possíveis de atualização. Elas
representam o que se deve fazer para escolher se ter compatibilidade com clientes antigos e
ter maior segurança.
• Não atualizar para a versão 4.1. Nenhum comportamento será alterado, mas é claro
que você não poderá usar qualquer um dos novos recursos fornecido pelo protocolo
cliente/servidor da versão 4.1. (O MySQL 4.1 tem um protocolo cliente/servidor ex-
tendido que oferece tais recursos como instruções preparadas e conjuntos de múltiplos
resultados.) Veja Seção 12.1.4 [C API Prepared statements], Página 828.
• Atualizar para a versão 4.1 e executar o script mysql_fix_privilege_tables para
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-
bilidade com versões anteriores que premitem que clientes pre-4.1 continuem a conectar
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-
passwords. Você também pode alterar as senhas em sua conta MySQL para usar o
novo formato que é mais seguro.
• Atualizar para versão 4.1 e executar o script mysql_fix_privilege_tables para au-
mentar a coluna Password na tabela user. Se você sabe que todos os clientes também
foram atualizados para a versão 4.1, não execute o servidor com a opção --old-
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.
Informações adicionais sobre hashing de senha em relação a autenticação no cliente e
operações de alteração de senha podem ser encontrados em Seção 4.3.11 [Password hashing],
Página 245.
Em geral, o que você deve fazer é atualizar para a versão 4.0 um versão mais nova do
MySQL:
• Após o upgrade, atualize a tabela de permissões para adicionar novos privilégios e
recursos. O procedimento usa o script mysql_fix_privilege_tables e está descrito
em Seção 2.5.6 [Upgrading-grant-tables], Página 130.
• Edite qualquer script de inicialização ou arquivo de configuração para não utilizar
nenhuma das opções obsoletas listadas posteriormente nesta seção.
• 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
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
de dados são ISAM ou MyISAM. Para evitar a conversão de tabelas de outros tipos para
MyISAM, você pode listar explicitamente o nome de suas tabelas ISAM depois do nome
do banco de dados na linha de comando. Você também pode executar uma instrução
124 MySQL Technical Reference for Version 5.0.1-alpha
ALTER TABLE table_name TYPE=MyISAM para cada tabela ISAM para convertê-la para
MyISAM.
Para descobir o tipo de uma determinada tabela, use esta instrução:
mysql> SHOW TABLE STATUS LIKE ’tbl_name’;
• Certifique-se de que você não tem nenhum cliente MySQL que utiliza bibliotecas com-
partilhadas (com o Perl DBD-mysql). Se você tiver, você deve recompilá-las já que
as estruturas usadas em ‘libmysqlclient.so’ foram alteradas. O mesmo se aplica a
outras interfaces MySQL, como Python MySQLdb.
O MySQL 4.0 funcionará mesmo se você não fizer o acima, mas você não poderá usar os
novos privilégios de segurança pois o MySQL 4.0 e você podem encontrar problemas ao
atualizar o MySQL para a versão 4.1 ou mais nova. O formato do arquivo ISAM ainda
funciona no MySQL 4.0 mas está obsoleto e será disabilitado (não compilado por padrão)
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.
Mesmo se você fizer o indicado acima, você ainda pode voltar para o MySQL 3.23.52 ou
mais novo se você encontrar problemas com o MySQL da série 4.0. Neste caso você deve
usar o mysqldump para fazer um dump de qualquer tabela que use um índice full-text e
recarregar o arquivo de dump no servidor 3.23 (pois o 4.0 usa um novo formato para índices
full-text).
A seguir está uma lista mais completa com o que deve ser observado para atualizar para a
versão 4.0;
• O MySQL 4.0 tem vários novos privilégios na tabela mysql.user. Veja Seção 4.4.1
[GRANT], Página 254.
Para fazer estes novos privilégios funcionarem, deve se atualizar a tabela de permissões.
O procedimento está descrito em Seção 2.5.6 [Upgrading-grant-tables], Página 130. Até
que este script esteja executando todos os usuários têm os privilégios SHOW DATABASES,
CREATE TEMPORARY TABLES e LOCK TABLES. Os privilégios SUPER e EXECUTE tiram o seu
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
usar os novos privilégios. Se você não está usando o comando GRANT nos scripts, este
é um bom momento para alterar os seus scripts e usar GRANT em vez de modificar a
tabela de permissões diretamente.
A partir da versão 4.0.2 a opção --safe-show-database está obsoleta (e não faz mais
nada). Veja Seção 4.3.3 [Opções de privilégio], Página 230.
Se você receber um erro Access denied para novos usuários na versão 4.0.2, você deve
verificar se você precisa de alguma das novas concessões que você não precisava antes.
Em particular, você precisará REPLICATION SLAVE (em vez de FILE) para novos slaves.
• ‘safe_mysqld’ é renomeado para ‘mysqld_safe’. Para compatibilidade com versões
anteriores, as distribuições binárias, irão, por algum tempo, incluir safe_mysqld como
um link simbólico para mysqld_safe.
• Suporte para InnoDB agora está incluído na distribuição binária. Se você contruir o
MySQL a partir de um fonte, o InnoDB está configurado por padrão, Se você não usar
o InnoDB e quiser economizar memória ao executar o servidor que possui suorte a
Capı́tulo 2: Instalação do MySQL 125
• O resultado de todos os operadores bitwise (|, &, <<, >> e ~) agora são unsigned. Isto
pode causar problemas se você estiver usando-as em um contexto onde você quer um
resultado com sinal. Veja Seção 6.3.5 [Funções de Conversão], Página 544.
• Nota: quando você usa subtração entre valores inteiros onde um deles é do tipo
UNSIGNED, o resultado será sem sinal. Em oyras palavras, antes de atualizar para o
MySQL 4.0, você deve verificar sua aplicação para os casos onde você está subtraindo
um valor de uma entidade sem sinal e quer um número negativo como resposta ou sub-
traindo um valor sem sinal de uma coluna do tipo inteiro. Você pode disabilitar este
comportamento usando a opção --sql-mode=NO_UNSIGNED_SUBTRACTION ao iniciar o
mysqld. Veja Seção 6.3.5 [Funções de conversão], Página 544.
• Para usar MATCH ... AGAINST (... IN BOOLEAN MODE) com suas tabelas, você precisa
recontruí-las com REPAIR TABLE nome_tabela USE_FRM.
• LOCATE() e INSTR() são caso sensitivo se um dos argumentos é uma string binária. De
outra forma elas são caso-insensitivo.
• STRCMP() agora usa o conjunto de caracteres atual ao fazer comparações, o que significa
que o comportamento padrão das comparações agora é caso-insensitivo.
• 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ê
chama HEX() com um argumento numérico.
• Na versão 3.23, INSERT INTO ... SELECT sempre tem o IGNORE habilitado. Na versão
4.0.1, o MySQL irá parar (e possívelmente fazer um roll back) por padrão no caso de
‘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.
• um erro se você não especificar IGNORE.
• As funções antigas da API C mysql_drop_db(), mysql_create_db() e mysql_
connect() não sã mais suportadas a menos que você compile o MySQL com
CFLAGS=-DUSE_OLD_FUNCTIONS. No entanto, é preferível 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
mensagens de avisos quando quando usado como argumento em uma classe printf()
de funções.
• Você deve usar TRUNCATE TABLE quando quiser deletar todos os registros de uma tabela
e você não precisa obter uma contagen de quantas colunas forma deletadas. (DELETE
FROM table_name retorna a contagem de linhas na versão 4.0, e TRUNCATE TABLE é mais
rápido.)
• Você receberá um erro se tiver um LOCK TABLES ativo ou transações ao tentar executar
TRUNCATE TABLE ou DROP DATABASE.
• Você deve usar inteiros para armazenar valores em colunas BIGINT (em vez de usar
strings, como você fez no MySQL 3.23). Usar strings ainda funicona, mas usar inteiros
é mais eficiente.
• 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 863.
Capı́tulo 2: Instalação do MySQL 127
• Se você quiser recompilar o módulo Perl DBD::mysql, você deve conseguir o DBD-mysql
versão 1.2218 ou mais novo porque os módulos DBD mais antigos usam a chamada
obsoleta mysql_drop_db(). A versão 2.1022 ou mais nova é recomendada.
• Na versão RAND(seed) retorna uma série de número randômicas diferente que na 3.23;
isto foi feito para uma diferenciação maior de RAND(seed) e RAND(seed+1).
• O tipo padrão retornado por IFNULL(A,B) agora está configurado para ser o mais ’geral’
dos tipos de A e B. (A ordem geral-para-específco é string, REAL ou INTEGER).
Se você estiver executando o MySQL Server no Windows, veja Seção 2.5.8 [Atualizando o
Windows], Página 132. Se você estiver usando replicação, veja Seção 4.11.2 [Replication
Implementation], Página 379.
A Versão 3.23 do MySQL suporta tabelas do novo tipo MyISAM e do antigo tipo ISAM. Você
não necessita converter suas antigas tabelas para usá-las com a versão 3.23. Por padrão,
todas novas tabelas serão criadas usando o tipo MyISAM (a menos que você inicie o mysqld
com a opção --default-table-type=isam). Você pode converterr uma tabela ISAM para
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
versão 3.23.
As seguintes listas dizem o que você deve conferir quando atualizar para a versão 3.23:
• 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
ligação e o banco de dados original serão apagados. (Isto não acontece na 3.22 porque
o configure não detecta a disponibilidade da chamada de sistema readlink).
• 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
TABLE a tabela é, agora, bloqueada para prevenir que seja usada por outras threads.
• O cliente MySQL mysql é, agora, inicializado por padrão com a opção --no-named-
commands (-g). Esta opção pode ser desabilitada com --enable-named-commands
(-G). Isto pode causar problemas de imcompatibilidade em alguns casos, por exemplo,
em scripts SQL que usam comandos sem ponto e vírgula! Comandos longos continuam
funcionando.
• Funções de data que funcionam em partes de datas (como MONTH()) não retornará 0
para datas 0000-00-00. (No MySQL 3.22 estas funções retornam NULL.)
• Se você estiver usando a ordem de classificação de caracteres alem~a para tabelas ISAM,
você deve reparar todas suas tabelas com isamchk -r, porque foram feitas alterações
na sua ordem de classificação!
• O tipo padrão de retorno de IF() irá agora depender de ambos argumentos e não
apenas do primeiro argumento.
• Colunas AUTO_INCREMENT não devem ser usadas para armazenar números negativos. A
razão para isto é que números negativos causam problemas quando o -1 passa para 0.
128 MySQL Technical Reference for Version 5.0.1-alpha
Você não deve armazenar 0 em uma coluna AUTO_INCREMENT também; CHECK TABLE irá
reclamar sobre valores 0 porque eles podem alterar se você fizer um dump e restaurar a
tabela. AUTO_INCREMENT é, agora, tratado em um nível mais baixo para tabelas MyISAM
e é muito mais rápido que antes. Para tabelas MyISAM números antigos também não
são mais reusados, mesmo se você apagar algumas linhas da tabela.
• CASE, DELAYED, ELSE, END, FULLTEXT, INNER, RIGHT, THEN e WHEN agora são palavras
reservadas.
• FLOAT(X) agora é um tipo de ponto flutuante verdadeiro e não um valor com um
número fixo de decimais.
• Quando estiver declarando colunas usando o tipo DECIMAL(tamanho,dec, o argumento
tamanho não inclui mais um lugar para o símbolo do ponto decimal.
• 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
que o operador ’=’. Se você precisa do antigo compartamento, você pdoe compilar o
MySQL com a opção CXXFLGAS=-DLIKE_CMP_TOUPPER.
• REGEXP agora é caso insensitivo se nenhuma das strings forem binárias.
• Quando for necessário dar manutenção ou reparar tabelas MyISAM ‘.MYI’ deve ser usado
a instrução CHECK TABLE ou o comando myisamchk. Para tabelas ISAM (.ISM), use o
comando isamchk
• Se desejar que os arquivos mysqldump sejam compatíveis entre as versões 3.22 e 3.23
do MySQL, não deve ser usados as opções --opt ou --full com o mysqldump.
• Confira todas suas chamadas à DATE_FORMAT() para ter certeza que exista um ‘%’ antes
de cada caractere formatador. (Versões mais antigas que o MySQL 3.22 aceitaivam esta
sintaxe.)
• mysql_fetch_fields_direct() agora é uma função (era uma macro) e ela retorna um
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
função que obtem valores MYSQL_RES* como um argumento). Com um objeto MYSQL*
agora voce deve usar mysql_field_count().
• No MySQL Versão 3.22, a saída de SELECT DISTINCT ... era na maioria das vezes
ordenada. Na Versão 3.23, você deve usar GROUP BY ou ORDER BY para obter a saída
ordenada.
• SUM() agora retorna NULL, em vez de 0 se não existir registros coincidentes. Isto é de
acordo com o ANSI SQL.
• Um AND ou OR com valores NULL agora retornam NULL no lugar de 0. Isto afetará, em
grande parte, pesquisas que usam NOT em uma expressão AND/OR como NOT NULL =
NULL.
• LPAD() e RPAD() reduzirão a string resultante se ela for maior que o tamanho do
argumento.
Capı́tulo 2: Instalação do MySQL 129
Nada que afetaria a compatibilidade foi alterada entre a versão 3.21 e 3.22. A única difi-
culdade é que novas tabelas que são criadas com colunas do tipo DATE usarão a nova forma
de armazenar a data. Você não pode acessar esses novos campos com uma versão antiga de
mysqld.
Depois de instalar o MySQL versão 3.22, você deve iniciar o novo servidor e depois executar
o script mysql_fix_privilege_tables. Isto adicionará os novos privilégios que você pre-
cisará para usar o comando GRANT. Se você se esquecer disto, sera retornado o erro Access
denied quando você tentar usar ALTER TABLE, CREATE INDEX ou DROP INDEX. O procedi-
mento para atualizar a tabela de permissões está descrito em Seção 2.5.6 [Upgrading-grant-
tables], Página 130.
A interface API C para mysql_real_connect() foi alterada. Se você tem um programa
cliente antigo que chama essa função, você deve colocar um 0 para o novo argumento db (ou
recodificar o cliente para enviar o elemento db para conexões mais rápidas). Você também
deve chamar mysql_init() antes de chamar mysql_real_connect()! Esta alteração foi
feita para permitir à nova função mysql_options() salvar opções na estrutura do manipu-
lador do MYSQL.
A variável key_buffer do mysqld foi renomeada para key_buffer_size, mas você ainda
pode usar o antigo nome nos seus arquivos de inicialização.
Se você estiver executando uma versão mais antiga que a Versão 3.20.28 e deseja mudar
para a versão 3.21 você deve fazer o seguinte:
Inicie o servidor mysqld versão 3.21 com a opção --old-protocol para usá-lo com clientes
de uma distribuição da versão 3.20 Neste caso, a nova função cliente mysql_errno() não
irá retornar erro do servidor, somente CR_UNKNOWN_ERROR (mas isto funciona para erros de
clientes) e o servidor usa a forma função password() anterior a 3.21 para verificação, ao
invés do novo método.
Se você NÃO estiver usando a opção --old-protocol para mysqld, você precisará fazer as
seguir alterações:
• Todo o código cliente deve ser recompilado. Se você usa o ODBC, deve obter o novo
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 versão do MySQL 3.20.28 e superiores podem manipular o novo formato da tabela de
usuários sem afetar os clientes. Se você tem uma versão do MySQL mais nova que 3.20.28,
senhas não irão mais funcionar se você converter a tabela de usuaios. Por segurança, você
primeiro deve fazer uma atualização para a versão 3.20.28, pelo menos, e então atualizar
para a versão 3.21.
130 MySQL Technical Reference for Version 5.0.1-alpha
O novo código cliente trabalha com um servidor mysqld 3.20.x, portanto se houver proble-
mas com 3.21.x você deve usar o antigo servidor 3.20.x sem a necessidade de recompilar os
clientes novamente.
Se você não está usando a opção --old-protocol para o mysqld, antigos clientes não
poderão se conectar e exibirão a seguinte mensagem de erro:
ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
A nova interface PERL DBI/DBD também suporta a antiga interface mysqlperl. A única
alteração que deve ser f