Manual MySQL 4.1
Manual MySQL 4.1
1
Manual de Referência do MySQL 4.1
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference
Manual is in English, and this translation is not necessarily as up to date as the English version.
Copyright © 1997-2006 MySQL AB
Resumo
• Conversion to other formats is allowed, but the actual content may not be altered or edited in any way.
• You may create a printed copy for your own personal use.
• For all other uses, such as selling printed copies or using the manual in whole or in part within another publication, prior written agreement from
MySQL AB is required.
Please contact the http://www.mysql.com/company/contact/ for more information or if you are interested in doing a translation.
Índice
Preface ........................................................................................................................................ xv
1. Informações Gerais ........................................................................................................................1
1.1. Sobre Este Manual ...............................................................................................................1
1.1.1. Convenções Usadas Neste Manual ..................................................................................2
1.2. Visão Geral do Sistema de Gerenciamento de Banco de Dados MySQL ................................................3
1.2.1. História do MySQL ...................................................................................................4
1.2.2. As Principais Características do MySQL ..........................................................................4
1.2.3. Estabilidade do MySQL ..............................................................................................6
1.2.4. Qual o Tamanho Que as Tabelas do MySQL Podem Ter? ......................................................7
1.2.5. Compatibilidade Com o Ano 2000 (Y2K) .........................................................................8
1.3. Visão Geral da MySQL AB ....................................................................................................9
1.3.1. O Modelo de Negócio e Serviços da MySQL AB .............................................................. 10
1.3.2. Informações para Contato .......................................................................................... 11
1.4. Suporte e Licenciamento do MySQL ....................................................................................... 12
1.4.1. Suporte Oferecido pela MySQL AB .............................................................................. 12
1.4.2. Copyrights e Licenças Usadas pelo MySQL ..................................................................... 12
1.4.3. Licenças do MySQL ................................................................................................ 13
1.4.4. Logomarcas e Marcas Registradas da MySQL AB ............................................................. 14
1.5. Mapa de Desenvolvimento do MySQL ..................................................................................... 15
1.5.1. MySQL 4.0 in a Nutshell ........................................................................................... 15
1.5.2. MySQL 4.1 in a Nutshell ........................................................................................... 17
1.5.3. MySQL 5.0, A Próxima Distribuição de Desenvolvimento ................................................... 18
1.6. MySQL e o Futuro (o TODO) ............................................................................................... 18
1.6.1. Novos Recursos Planejados Para a Versão 4.1 .................................................................. 18
1.6.2. Novos Recursos Planejados Para a Versão 5.0 .................................................................. 19
1.6.3. Novos Recursos Planejados Para a Versão 5.1 .................................................................. 19
1.6.4. Novos Recursos Planejados Para a Versão em um Futuro Próximo .......................................... 20
1.6.5. Novos Recursos Planejados Para a Versão em um Futuro a Médio Prazo ................................... 22
1.6.6. Novos Recursos que Não Planejamos Fazer ..................................................................... 23
1.7. Fontes de Informações do MySQL .......................................................................................... 23
1.7.1. Listas de Discussão MySQL ....................................................................................... 23
1.7.2. Suporte a Comunidade MySQL Atrvés do IRC (Internet Relay Chat) ....................................... 29
1.8. Qual compatibilidade aos padrões o MySQL oferece ? .................................................................. 29
1.8.1. Qual Padrão o MySQL Segue? .................................................................................... 30
1.8.2. Executando o MySQL no modo ANSI ........................................................................... 30
1.8.3. Extensões do MySQL para o Padrão SQL-92 ................................................................... 31
1.8.4. Diferenças do MySQL em Comparação com o SQL-92 ....................................................... 33
1.8.5. Como o MySQL Lida com Restrições ............................................................................ 37
1.8.6. Erros Conhecidos e Deficiências de Projetos no MySQL ...................................................... 38
2. Instalação do MySQL ................................................................................................................... 43
2.1. Instalação rápida padrão do MySQL ........................................................................................ 43
2.1.1. Instalando o MySQL no Windows ................................................................................ 43
2.1.2. Instalando o MySQL no Linux .................................................................................... 50
2.1.3. Instalando o MySQL no Mac OS X ............................................................................... 51
2.1.4. Instalando o MySQL no NetWare ................................................................................. 53
2.2. Detalhes Gerais de Instalação ................................................................................................ 54
2.2.1. Como obter o MySQL .............................................................................................. 54
2.2.2. Verificando a Integridade do Pacote Usando MD5 Checksums ou GnuPG .............................. 54
2.2.3. Sistemas Operacionais suportados pelo MySQL ................................................................ 56
2.2.4. Qual versão do MySQL deve ser usada .......................................................................... 57
2.2.5. Layouts de Instalação ............................................................................................... 59
2.2.6. Como e quando as atualizações são lançadas? .................................................................. 60
2.2.7. Filosofia das Distribuições - Nenhum Bug Conhecidos nas Distribuições .................................. 61
2.2.8. Binários MySQL compilados pela MySQL AB ................................................................. 61
2.2.9. Instalando uma Distribuição Binária do MySQL ............................................................... 65
2.3. Instalando uma distribuição com fontes do MySQL ...................................................................... 67
2.3.1. Visão geral da instalação rápida ................................................................................... 68
2.3.2. Aplicando patches ................................................................................................... 69
2.3.3. Opções típicas do configure ................................................................................... 70
2.3.4. Instalando pela árvore de fontes do desenvolvimento .......................................................... 72
2.3.5. Lidando com Problemas de Compilação ......................................................................... 74
2.3.6. Notas MIT-pthreads ................................................................................................. 76
2.3.7. Instalando o MySQL a partir do Fonte no Windows ........................................................... 77
2.4. Configurações e Testes Pós-instalação ..................................................................................... 80
iv
Manual de Referência do MySQL 4.1
v
Manual de Referência do MySQL 4.1
vi
Manual de Referência do MySQL 4.1
vii
Manual de Referência do MySQL 4.1
viii
Manual de Referência do MySQL 4.1
ix
Manual de Referência do MySQL 4.1
x
Manual de Referência do MySQL 4.1
xi
Manual de Referência do MySQL 4.1
xii
Manual de Referência do MySQL 4.1
xiii
Manual de Referência do MySQL 4.1
xiv
Preface
Este é o Manual de Referência para o Sistema de Banco de Dados MySQL. Este versão se refere a versão 5.0.6-beta do
MySQL Server mas também se aplica a versões mais antigas (tais como 3.23 e 4.0-produção) já que as alterações são sempre in-
dicadas. Também há referência a versão 5.0 (desenvolvimento).
xv
Capítulo 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 sis-
temas 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 programa 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 comercial padrão da MySQL AB. See Secção 1.4, “Suporte e Licenciamento do MySQL”.
O site web do MySQL (http://www.mysql.com/) dispõe das últimas informações sobre o programa MySQL.
• Para informações sobre a empresa por trás do Servidor do Banco de Dados MySQL, veja Secção 1.3, “Visão Geral
da MySQL AB”.
• Para discussões das capacidades do Servidor do Banco de Dados MySQL, veja Secção 1.2.2, “As Principais Caracte-
rísticas do MySQL”.
• Para dicas sobre a portabilidade do Servidor do Banco de Dados MySQL para novas arquiteturas ou sistemas opera-
cionais, veja Apêndice E, Portando para Outros Sistemas.
• Para informações sobre a atualização da versão 4.0, veja Secção 2.5.1, “Atualizando da Versão 4.0 para 4.1”.
• Para informações sobre a atualização da versão 3.23, veja Secção 2.5.2, “Atualizando da Versão 3.23 para 4.0”.
• Para informações sobre a atualização da versão 3.22, veja Secção 2.5.3, “Atualizando da versão 3.22 para 3.23”.
• Para um tutorial de introdução ao Servidor do Banco de Dados MySQL, veja Capítulo 3, Tutorial de Introdução Do
MySQL.
• 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, Histórico de Alterações do MySQL.
• Para uma lista de erros atualmente conhecidos e mal-funcionamento, veja Secção 1.8.6, “Erros Conhecidos e Deficiências de
Projetos no MySQL”.
• Para ver a lista de todos os colaboradores deste projeto, veja Apêndice C, Colaboradores do MySQL.
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. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”. See Secção 1.7.1.3, “Como relatar erros ou problemas”.
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]>.
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 fre-
1
Informações Gerais
qüentemente. A versão mais recente deste manual está disponível em http://www.mysql.com/documentation/ em diferentes forma-
tos, incluindo HTML, PDF, e versões HLP do Windows.
O documento original é uma arquivo Texinfo. A versão HTML é produzida automaticamente 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 http://www.mysql.com/company/contact/.
Este manual foi inicialmente escrito por David Axmark e Michael (Monty) Widenius. Atualmente é mantido pela Equipe de Docu-
mentação da MySQL, que conta com Arjen Lentz, Paul DuBois e Stefan Hinz. Para outros colaboradores, veja Apêndice C, Cola-
boradores do MySQL.
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-2006) deste manual pertence a compania Sueca MySQL AB. See Secção 1.4.2, “Copyrights e Licenças
Usadas pelo MySQL”.
• constant
Fonte de largura fixa é usada para nomes de comandos e opções; instruções SQL; nomes de bancos de dados, tabelas e colunas;
código C e Perl; e variáveis de ambiente. Exemplo: ``Para ver como o mysqladmin funciona, execute-o com a opção -
-help.''
• filename
Fonte de largura fixa com aspas é usada para nomes e caminhos de arquivos. Exemplo: ``A distribuição é instalada sobre o dire-
tório /usr/local.''
• ‘c’
Fonte de largura constante com aspas é também usada para indicar sequências de caracteres. Exemplo: ``Para especificar um
meta caracter, use o caractere ‘%’.''
• italic
• boldface
Quando um comando deve ser executado por um programa, ele é indicado por um prompt antes do comando. Por exemplo,
shell> indica um comando que é executado do seu shell atual e mysql> indica um comando que é executado no programa cli-
ente mysql;
shell> digite um comando shell aqui
mysql> digite um comando mysql aqui
A ``shell'' é seu interpretador de comando. No Unix, ele é normalmente um programa como sh ou csh. No Windows, o equivalen-
te é o command.com ou cmd.exe, normalmente executado como um console do Windows.
Comandos Shell são mostrados usando a sintaxe do Shell Bourne. Se você usa um shell do estilo csh, pode ser necessário alterar
algum de seus comandos. Por exemplo, a sequência para configurar uma variável de ambiente e executar um comando se parece
com o listado abaixo na sintaxe Bourne Shell:
shell> NOMEVAR=valor algum_comando
2
Informações Gerais
Frequentemente, nomes de bancos de dados, tabelas e colunas devem ser substituídos nos comandos. Para indicar que as substitui-
ções são necessárias, este manual usa nome_db, nome_tbl e nome_col. Por exemplo, você pode encontrar uma expressão as-
sim:
mysql> SELECT nome_col FROM nome_bd.nome_tbl;
Isso significa que se você estiver trabalhando numa expressão similar, forneceria seu próprio nome de banco de dados, tabela e co-
lunas, talvez assim:
mysql> SELECT nome_autor FROM biblio_bd.lista_autor;
SQL keywords não caso sensitivas e podem ser escritas em maiúscula ou minúscula. Este manual utiliza letras maiúsculas.
Em descrições de sintaxe, colchetes (‘[’ e ‘]’) são usados para indicar palavras ou cláusulas opcionais. Por exemplo, na seguinte
instrução, IF EXISTS é opcional:
DROP TABLE [IF EXISTS] nome_tbl
Quando elementos da sintaxe possuem mais de uma alternativa, elas são separados por barras verticais (‘|’). Quando um menbro
de um conjunto de opções pode ser escolhido, as alternativas são listadas em colchetes (‘[’ e ‘]’):
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
Quando um membro de um conjunto de opções deve ser selecionado, as alternativas são listadas dentro de chaves (‘{’ e ‘}’):
{DESCRIBE | DESC} nome_tbl {nome_col | metacar}
O web site do MySQL (http://www.mysql.com/) fornece informações mais recentes sobre e programa MySQL e a MySQL AB.
Um banco de dados é uma coleção de dados estruturados. Ele pode ser qualquer 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 da-
dos armazenados em um banco de dados de um computador, você necessita de um sistema de gerenciamento de bancos de da-
dos como o Servidor MySQL. Como os computadores são muito bons em lidar com grandes quantidades de dados, o gerencia-
mento de bancos de dados funciona como a engrenagem central na computação, seja como utilitários independentes ou como
partes de outras aplicações.
Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados um só local. Isso propor-
ciona velocidade e flexibilidade. A parte SQL do ``MySQL'' atenda pela ``Structured Query Language - Lingua-
gem Estrutural de Consultas''. SQL é linguagem padrão mais comum usada para acessar banco de dados e é defini-
da 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ão SQL'' indicando a versão atual
do Padrão SQL em qualquer momento).
Open Source significa que é possível para qualquer um usar e modificar o programa. 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ê sen-
tir desconforto com a GPL ou precisar embutir o MySQL em uma aplicação comercial¸ você pode adquirir a versão comercial li-
cenciada conosco. See Secção 1.4.3, “Licenças do MySQL”.
3
Informações Gerais
O servidor de banco de dados MySQL é extremamente rápido, confiável, e fácil de usar. Se isto é o que você está
procurando, você deveria experimentá-lo. O Servidor MySQL também tem um conjunto de recursos muito práticos desen-
volvidos com a cooperação de nossos usuários. Você pode encontrar comparativos de performance do Servidor MySQL
com outros gerenciadores de bancos de dados na nossa página de benchmark See Secção 5.1.4, “O Pacote de Benchmark do
MySQL”.
O Servidor MySQL foi desenvolvido originalmente para lidar com bancos de dados muito grandes de maneira muito mais
rápida que as soluções existentes e tem sido usado em ambientes de produção de alta demanda por diversos anos de maneira
bem sucedida. Apesar de estar em constante desenvolvimento, o Servidor MySQL oferece hoje um rico e proveitoso con-
junto de funções. A conectividade, velocidade, e segurança fazem com que o MySQL seja altamente adaptável para acessar ban-
cos de dados na Internet.
Para informações técnicas avançadas, veja Capítulo 6, Referência de Linguagem do MySQL. O Programa de Banco de
Dados MySQL é um sistema cliente/servidor que consiste de um servidor SQL multi-tarefa que suporta acessos diferentes, di-
versos programas clientes e bibliotecas, ferramentas administrativas e diversas interfaces de programação (API's).
Também concedemos o Servidor MySQL como uma biblioteca multi-tarefa que você pode ligar à sua aplicação para chegar
a um produto mais rápido, menor e mais fácilmente gerenciável.
É bem provável que sua aplicação ou linguagem favorita já suporte o Servidor de Banco de Dados MySQL.
A pronúncia oficial do MySQL é ``Mai Ess Que Ell'' (e não MAI-SEQUEL). Mas nós não ligamos se você pronunciar MAI-
SEQUEL ou de outra forma qualquer.
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.
O nome do golfinho do MySQL (nosso logo) é Sakila. Sakila foi escolhido pelos fundadores 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 Twe-
baze, 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.
• Portabilidade e
• Escrito em C e C++.
• Funciona em diversas plataformas. See Secção 2.2.3, “Sistemas Operacionais suportados pelo MySQL”.
• APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby e Tcl estão disponíveis. See Capítulo 12, Ferramentas de Clientes
e APIs do MySQL.
4
Informações Gerais
• Suporte total a multi-threads usando threads diretamente no kernel. Isto significa que se pode facilmente usar múltiplas
CPUs, se disponível.
• 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.
• Funções SQL são implementadas por meio de uma biblioteca de classes altamente otimizada e com o máximo de perfor-
mance. 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/).
• 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. See Secção 6.2, “Tipos de Campos”.
• 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(), CO-
UNT(DISTINCT ...), AVG(), STD(), SUM(), MAX() e MIN()).
• Suporte para LEFT OUTER JOIN e RIGHT OUTER JOIN com as sintaxes SQL e ODBC.
• 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 informaçõ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 úni-
ca 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. See
Secção 6.1.7, “Tratamento de Palavras Reservadas no MySQL”.
• 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 permite 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 cam-
po com um tipo CHAR ou VARCHAR.
5
Informações Gerais
• 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.
• A interface Connector/ODBC fornece ao MySQL suporte a progras clientes que usam conexão ODBC
(Open-DataBase-Connectivity). Por exemplo, você pode usar o MS Access para conectar ao seu servidor MySQL. Os clien-
tes podem ser executados no Windows ou Unix. O fonte do Connector/ODBC está disponível. Todas as funções ODBC são
suportadas, assim como muitas outras.
• Localização
• O servidor pode apresentar mensagem de erros aos clientes em várias línguas. See Secção 4.7.2, “Mensagens de Erros em
Outras Línguas”.
• Suporte total para vários conjuntos de caracteres, que incluem ISO-8859-1 (Latin1), big5, ujis e mais. Por exemplo, os ca-
racteres Escandinavos ‘â’, ‘ä’, ‘ö’ são permitidos em nomes de tabelas e colunas.
• Todos os dados são armazenados no conjunto de caracteres escolhido. Todas as comparações em colunas de seqüências ca-
so-insensitivo.
• A ordenação é feita de acordo com o conjunto de caracteres escolhido (o modo sueco por padrão). É possível alterar isso
quando o servidor MySQL é iniciado. Para ver um exemplo de várias ordenações avançadas, procure pelo código de ordena-
ção Tcheca. O Servidor MySQL suporta diversos conjuntos de caracteres que podem ser especificados em tempo de
compilação e execução.
• Clientes e Ferramentas
• O servidor MySQL foi construído com suporte para instruções SQL que verificam, otimizam e reparam tabelas. Estas ins-
truções estão disponíveis a partir da linha de comando por meio do cliente myisamcheck, O MySQL inclui também o
myisamchk, um utilitário muito rápido para realizar estas operações em tabelas MyISAM. See Capítulo 4, Administração
do Bancos de Dados MySQL.
• Todos os programas MySQL podem ser chamados com as opções --help ou -? para obter ajuda online.
Originalmente, o código vem do início dos anos 80, fornecendo um código estável e o formato de tabelas ISAM permanece compa-
tí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, nos-
sos novos usuários rapidamente encontraram algumas partes de ``código sem testes''. Desde então, cada distribuição nova teve me-
nos problemas de portabilidade (mesmo com os novos recursos implementados em cada uma destas versões)
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 co-
nhecidos 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. See Secção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no MySQL”.
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.
Grandes grupos de servidores usando replicação estão em uso, com bom resultados. O trabalho no aprimoramento dos recursos
de replicação continua no MySQL 4.x.
6
Informações Gerais
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.
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.
Pesquisa full-text funcionam mas ainda não são largamente usadas. Melhoramentos importantes forma implementados no
MySQL 4.0.
Em grande uso na produção. Alguns problemas apresentados parecem ser relacionados a aplicação e independente do driver
ODBC ou do servidor de banco de dados.
Este status se aplica apenas ao novo código que confere no mecanismo de armazenamento MyISAM que verifica, na inicializa-
ção, se a tabela foi fechada corretamente e executa uma conferência/reparo automático da tabela em caso negativo.
Novo recurso nas tabelas MyISAM no MySQL 4.0 para inserções mais rápidas de vários registros.
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.
Clientes que pagam recebem suporte direto e de alta qualidade da MySQL AB. A MySQL AB também fornece uma lista de discus-
sã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 seguinte tabela lista alguns exemplos do limite do tamanho de arquivos do sistema operacional:
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.
7
Informações Gerais
Por padrão, o MySQL cria tabelas MyISAM com uma estrutura interna que permite um tamanho máximo em torno de 4G. Você po-
de verificar o tamanho máximo da tabela com o comando SHOW TABLE STATUS ou com o myisamchk -dv nome_tabela
See Secção 4.6.8, “Sintaxe de SHOW”.
Se você precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos grandes), a instrução CREATE TABLE per-
mite as opções AVG_ROW_LENGHT e MAX_ROWS. Use estas opções para criar uma tabela que possa ter mais de 4GB. See Sec-
ção 6.5.3, “Sintaxe CREATE TABLE”. Você pode também alterar isso mais tarde com ALTER TABLE. See Secção 6.5.4, “Sintaxe
ALTER TABLE”.
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. my-
sisampack normalmente comprime uma tabela em pelo menos 50%, portanto você pode obter, com isso, tabelas muito maio-
res. See Secção 4.8.4, “myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL”.
• Outra opção para contornar o limite de tamanho de arquivos do sistema operacional para arquivos de dados MyISAM usando a
opção RAID. See Secção 6.5.3, “Sintaxe CREATE TABLE”.
• O MySQL incluí uma biblioteca MERGE que permite acessar uma coleção de tabelas idênticas como se fosse apenas uma. See
Secção 7.2, “Tabelas MERGE”.
• 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)
mysql> CREATE TABLE y2k (date DATE,
-> date_time DATETIME,
-> time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO y2k VALUES
-> ("1998-12-31","1998-12-31 23:59:59",19981231235959),
-> ("1999-01-01","1999-01-01 00:00:00",19990101000000),
-> ("1999-09-09","1999-09-09 23:59:59",19990909235959),
-> ("2000-01-01","2000-01-01 00:00:00",20000101000000),
-> ("2000-02-28","2000-02-28 00:00:00",20000228000000),
-> ("2000-02-29","2000-02-29 00:00:00",20000229000000),
-> ("2000-03-01","2000-03-01 00:00:00",20000301000000),
-> ("2000-12-31","2000-12-31 23:59:59",20001231235959),
-> ("2001-01-01","2001-01-01 00:00:00",20010101000000),
-> ("2004-12-31","2004-12-31 23:59:59",20041231235959),
-> ("2005-01-01","2005-01-01 00:00:00",20050101000000),
-> ("2030-01-01","2030-01-01 00:00:00",20300101000000),
-> ("2050-01-01","2050-01-01 00:00:00",20500101000000);
Query OK, 13 rows affected (0.01 sec)
Records: 13 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date | date_time | time_stamp |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
8
Informações Gerais
O valor da coluna TIMESTAMP final é zero porque o ano final (2050) excede o TIMESTAMP maximo. O tipo de dados TIMES-
TAMP, que é usado para armazenar a hora atual, suporta valores na faixa de 19700101000000 a 20300101000000 em máqui-
nas 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 da-
tas 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 conjun-
to 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 Secção 6.2.2.1, “Assuntos referentes ao ano 2000 (Y2K) e Tipos de Data” para as regras do Ser-
vidor 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 extensivamente 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. See Secção 1.2, “Visão Geral do Sistema
de Gerenciamento de Banco de Dados MySQL”.
• Fácil de usar.
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 é
9
Informações Gerais
traduzida para ``MySQL, Inc.'' De fato, MySQL Inc. e MySQL GmbH são exemplos de subsidiárias da MySQL AB. Elas estão lo-
calizadas nos EUA e Alemanha, respectivamente.
A MySQL AB ganha dinheiro com suporte, serviços, licenças comerciais e royalties. Usamos 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.
1.3.1.1. Suporte
A MySQL AB é gerenciada pelos fundadores e principais desenvolvedores do banco de dados MySQL. Os desenvolvedores tem o
compromisso de dar suporte aos clientes e outros usuários com objetivo de manterem contato com as suas necessiades e problemas.
Todo o nosso suporte é dado por desenvolvedores qualificado. Dúvidas mais complicadas são respondidas por Michael Monty Wi-
denius, principal autor do MySQL Server. See Secção 1.4.1, “Suporte Oferecido pela MySQL AB”.
Para maiores informações e pedido de suporte de diversos níveis, veja http://www.mysql.com/support/ ou contate nossos vendedo-
res em <[email protected]>.
Nosso material de treinamento usa os mesmos bancos de dados exemplos usados em nossa documentação e nossos exemplos de
aplicativos. Ele está sempre atualizado de acordo com a última versão do MySQL. Nossos instrutores são apoiados por nossa equipe
de desenvolvimento para garantir a qualidade do treinamento e o desenvolvimento contínuo do material de nossos cursos. Isto tam-
bém assegura que nenhuma questão surgida durante o curso fique sem resposta.
Fazendo nossos cursos de treinamento permitirá que você alcance os objetivos de seu aplicativo MySQL. você também irá:
• Economizar tempo.
• Melhorar a segurança.
Se você estiver interessado em nosso treinamento como um participante em portencial ou como um parceiro de treinamento, viste a
seção de treinamento em http://www.mysql.com/training/ ou contate nos em: <[email protected]>.
1.3.1.3. Consultoria
A MySQL AB e seus Parceiros Autorizados oferecem serviços de consultoria para usuários do Servidor MySQL e
àqueles que utilizam o Servisdor MySQL embutido em seus programas, em qualquer parte do mundo.
Nossos consultores podem ajudá-lo projetando e ajustando o seu banco de dados, criar consultas eficientes, ajustar sua plataforma
para uma melhor performance, resolver questões de migração, configurar replicação, criar aplicações transacionais robustas, e
mais. Também ajudamos os nossos clientes com o Servidor MySQL embutido em seus produtos e aplicações para desenvolvi-
mento em larga-escala.
Nossos consultores trabalham em colaboração com a nossa equipe de desenvolvimento, o que assegura a qualidade técnica de nos-
sos serviços profissionais. Os serviços de consultoria varia de sessões de 2 dias a projetos que gastam semanas e meses. Nosso peri-
tos não apenas cobrem o Servidor MySQL¯eles também conhecem sobre linguagens de programação e scripts tais como PHP,
10
Informações Gerais
Perl e mais.
Se estiver interessado em nossos serviços de consultoria ou quiser se tornar nosso parceiro, visite a seção sobre consultaria em nos-
so web site em http://www.mysql.com/consulting/.
1.3.1.5. Parcerias
A MySQL AB tem um programa de parceria mundial que cobre cursos de treinamento, consultaria e suporte, publicações, mais a
revenda e distribiuição do MySQL e produtos relacionados. Os Parceiros da MySQL AB ganham visibilidade no nosso web
site (http://www.mysql.com/) e o direito de usarem versões especiais da marca MySQL para identificar seus produtos e promoverem
os seus negócios.
Se você está interessado em se tornar um Parceiro da MySQL AB, envie-nos um email para <[email protected]>.
A palavra MySQL e o logomarca do golfinho da MySQL são marcas registradas da MySQL AB. See Secção 1.4.4, “Logomarcas e
Marcas Registradas da MySQL AB”. Estas marcas registradas representam um valor significante que os fundadores do MySQL
construiram ao longo dos anos.
O web site do MySQL (http://www.mysql.com/) é popular entre desenvolvedores e usuários. Em Outubro de 2001, obtivemos mais
de 10 milhões e views. Nossos visitantes representam um grupo que tomam decisões de compra e fazem recomendções de software
e hardware. Vinte por cento de nossos vistantes autorizam decisões de compra e apenas nove por cento não estão envolvidos com a
área de compras. Mais de 65% fizeram uma ou mais compras online no último semaster e 70% planejam fazer uma compra nos
próximos meses.
Para serviços de imprensa e questões não cobertas por nossas releases de nottícias (http://www.mysql.com/news/), envie-nos um
email para <[email protected]>.
Se você tiver um contrato de suporte válido com a MySQL AB, você receberá em tempo, respostas precisas para as suas questões
técnicas sobre o programa MySQL. Para mais informações, veja Secção 1.4.1, “Suporte Oferecido pela MySQL AB”. Em nosso site
na web, veja http://www.mysql.com/support/, ou envie um e-mail para <[email protected]>.
Para informações sobre treinamento MySQL, visite a seção de treinamento em http://www.mysql.com/training/. Se você tiver aces-
so restrito à Internet, conte a equipe de treinamento da MySQL AB via e-mail em <[email protected]>. See Sec-
ção 1.3.1.2, “Treinamento e Certificação”.
Para informações sobre o Progrma de Certificaço MySQL, veja http://www.mysql.com/certification/. See Secção 1.3.1.2,
“Treinamento e Certificação”.
Se você estiver interessado em consultoria, visite a seção de consultorias de nosso web site em http://www.mysql.com/consulting/.
See Secção 1.3.1.3, “Consultoria”.
Licenças comerciais podem ser compradas online em https://order.mysql.com/. Lá você também encontrará informações de como
enviar um fax da sua ordem de compra para a MySQL AB. Mais informações sobre licenças podem ser encontradas em
http://www.mysql.com/products/pricing.html. Se você tiver duvidas em relação a licenciamento ou quiser cota para negociação de
um alto volume de licenças, preencha o formulário de contato em nosso site web (http://www.mysql.com/) ou envie um email para
<[email protected]> (para questões sobre licenciamento) ou para <[email protected]> (para pedidos de compra).
See Secção 1.4.3, “Licenças do MySQL”.
Se você está interessado em fazer parceira com a MySQL AB, envie um e-mail para <[email protected]>. See Sec-
ção 1.3.1.5, “Parcerias”.
Para mais detalhes sobre a política da marca MySQL, visite http://www.mysql.com/company/trademark.html ou envie um e-mail
para <[email protected]>. See Secção 1.4.4, “Logomarcas e Marcas Registradas da MySQL AB”.
Se você está interessado em qualquer um dos trabalhos da MySQL AB lista na seção de trabalhos
(http://www.mysql.com/company/jobs/), envie um e-mail para <[email protected]>. Não nos envie o seu CV em anexo, mas
11
Informações Gerais
Para discussões gerais entre nosso muitos usuários, direcione a sua atenção para a lista de discussão apropriada. See Secção 1.7.1,
“Listas de Discussão MySQL”.
Relatórios de erros (geralmente chamados bugs), assim como questões e comentários, devem ser enviados para a lista de email ge-
ral do MySQL. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”. Caso você encontre um bug de segurança importante no
MySQL Server, envie-nos um e-mail para <[email protected]>. See Secção 1.7.1.3, “Como relatar erros ou
problemas”.
Se você tiver resultados de benchmarks que podemos publicar, contate-nos via e-mail em <[email protected]>.
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
http://www.mysql.com/company/contact/.
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.html. Para qualquer
questões a respeito desta política, envie um e-mail para <[email protected]>.
Tentamos ter uma visão ampla e inclusiva de suporte técnico. Qualquer problema envolvendo o MySQL é importante par nós se for
importante para você. Normalmente os clientes procuram ajuda em como comandos e utilitários diferentes funcionam, remover
gargalos de desempenhos, restaurar sistemas com falhas, entender impactos do sistema operacional e rede no MySQL, configurar
melhor práticas de backup e restauração, utiluizaar APIs, e assim por diante. Nosso suporte cobre apenar o servidor MySQL e nos-
sos próprios utilitários, e não produtos de terceirosque acessam o servidor MySQL, embora tentamos ajudar com eles quando pode-
mos.
Suporte técnico é como seguro de vida. Você pode viver felizsem ele durante anos, mas quando sua hora chegar ele é de grande im-
portância, mas já é muito tarde para adquirí-lo. Se você utiliza o MySQL Server para aplicações importantes e encontrar dificul-
dades repentinas, você pode gastar horas tentando resolver os problemas sozinho. Você pode precisar de acesso imediato aos res-
ponsáveis pela solução de problemas do MySQL dsiponíveis, contratados pela MySQL AB.
1. Todo o código específico do MySQL no servidor, a biblioteca mysqlclient e o cliente, assim como a biblioteca GNU re-
adline é coberta pela GNU General Public License. See Apêndice H, GPL - Licença Pública Geral do GNU. O
texto desta licença podee ser encontrado no arquivo COPYING na distribuição.
2. A biblioteca GNU getopt é coberta pela GNU Lesser General Public License. Veja http://www.fsf.org/licenses/.
3. Algumas partes da fonte (a biblioteca regexp) é coberta por um copyright no estilo Berkeley.
4. Versões mais antiga do MySQL (3.22 e anteriror) estão sujeitos a uma licença estrita
(http://www.mysql.com/products/mypl.html). Veja a documentação da versão específica para mais informação.
5. O manual de referência do MySQL atualmente não é distribuído sob uma licecnça no estilo da GPL. O uso deste manual está
sujeito aos seguintes termos:
• A conversão para outros formatos é permitido, mas o conteúdo atual não pode ser alterado ou editado de modo algum.
• Você pode criar uma cópia impressa para seu próprio uso pessoal.
12
Informações Gerais
• Para todos os outros usos, como venda de cópias impressas ou uso (de partes) do manual em outra publicação, é necessári-
os um acordo com a MySQL AB previamente escrito.
Envie-nos email para http://www.mysql.com/company/contact/ para maiores informações ou se você estiver interessado em
fazer a tradução.
Para informações sobre como as licenças do MySQL funcionam na prática, de uma olhada em Secção 1.4.3, “Licenças do MySQL”.
Veja também Secção 1.4.4, “Logomarcas e Marcas Registradas da MySQL AB”.
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 di-
reito de usar as marcas registradas da MySQL AB. See Secção 1.4.4, “Logomarcas e Marcas Registradas da MySQL AB”.
• Quando você liga um programa com qualquer código GPL do programa MySQL e não que que o produto resultante seja licenci-
ado sob a GPL, talvez porque você queira criar um produto comercial ou manter fechado o código não GPL adicionado por ou-
tras razões. Ao comprar a lincença comercial, você não está usando o programa MySQL sob GPL embora o código seja o mes-
mo.
• 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 formal-
mente 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ê. See Secção 1.4.1, “Suporte Oferecido pela MySQL AB”.
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 necessidades especiais ou tiver acesso restrito a Internet, contate a nossa quipe de
vendas via email em <[email protected]>.
• 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.
13
Informações Gerais
• 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 ser-
viodres 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 experi-
mentar com a instalação do MySQL. Mesmo se um provedor não tiver uma licença comercial ara o MySQL Server, seus cli-
entes devem ter acesso de leitura ao fonte da instalação do MySQL para que seus clientes verifiquem que ela está correta.
• 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. See Sec-
ção 1.4.1, “Suporte Oferecido pela MySQL AB”.
Se você utiliza o bancdo de dados MySQL em um contexto comercial e obtem lucro com o seu uso, pedimos que você ajude no de-
senvolvimento 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 al-
go em que colocamos muito trabalhom mas também pedindo que lhe forneçamos suporte de graça também).
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.
1.4.4.2. Logomarcas da MySQL que Podem Ser Usadas Sem Permissão de Alteração
Projetamos um conjunto de logos especiais de Uso Condicionale que podem se encontrados em nosso site web em
http://www.mysql.com/press/logos.html e usado em sites web de terceiros sem permissões de escrita da MySQL AB. O uso destas
logomarcas não são totalmente irrestritas mas, como o nome indica, sujeitos a nossa política de marcas registradasque também está
disponível em nosso site. Você deve ler a política de marcas registradas se plabeja usá-las. As exigências são basicamente as apre-
sentadas aqui:
• Use a logomarca que você preciisa como mostrado no site http://www.mysql.com/. Você pode mudar sua escala para servir as
suas necessidades, mas não pode alterar cores ou o desenho, ou alterar os graficos de forma alguma.
• Deixe evidente que você, e não a MySQL AB, é o criado e proprietário do site que mostra 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 especiais que sirvam as suas necessi-
dades.
14
Informações Gerais
• 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 mencionadas anteiormente em sites ou outro
lugar.
Devido a razões comerciais e legais monitoramos o so das marcas registradas do MySQL em proutos, livros e outros itens. Normal-
mente exigimos um valor para a exibição das logomarcas da MySQL AB em produtos comerciais, já que achamos razoável que
parte dos rendimentos seja retornado para financiar o desenvolvimento do banco de dados MySQL.
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 futu-
ro, 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. See Secção 2.5.2, “Atualizando da Versão 3.23 para 4.0”.
Novos recursos para o MySQL está sendo adicionado ao MySQL 4.1 que também está disponível (versão alfa). See Secção 1.5.2,
15
Informações Gerais
• Aumento da velocidade
• O MySQL 4.0 tem uma cache de consultas que pode dar uma grande aumento na velocidade de aplicações com consutas re-
petitivas. See Secção 6.9, “Cache de Consultas do MySQL”.
• A versão 4.0 aumenta a velocidade do MySQL Server em um número e áreas tais como INSERTs em bloco, buscas em ín-
dices empacotados, criação de índices FULLTEXT, e COUNT(DISTINCT).
• A nova biblioteca do Servidor Ebutido pode ser facilmente usada em aplicações standalone e embarcadas. O servidor embu-
tido fornce uma alternativa para o uso do MySQL em um ambiente cliente/servidor. See Secção 1.5.1.2, “Servidor Embuti-
do MySQL”.
• 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.
See Secção 7.5, “Tabelas InnoDB”.
• 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 defi-
nir 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. See Secção 6.8, “Pesquisa Full-text no MySQL”.
• 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. See Secção 2.6.8, “Notas Novell Net-
Ware”.
• Internacionalização
• Nossos usuários alemães, austríacos e suiços notarão que o MySQL agora suporta um novo conjunto de caracteres, la-
tin1_de, que assegura que a Ordenação em alemão 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.
• A maioria dos parâmetros mysqld (opções de inicialização) agora podem ser definidas se finalizar o servidor. Isto é um re-
curso conveniente para Administradores de Bancos de Dados (DBAs). See Secção 5.5.6, “Sintaxe de SET”.
• Foi adicionado suporte ao mecanismo de armazenamento MyISAM para link simbólico no nível de tabela (e não apenas a
nível de banco de dados como antes) e para habilitar o tratamento de links simbólicos no Windows por padrão.
• SQL_CALC_FOUND_ROWS e FOUND_ROWS() são novas funções que tornaram possível encontrar o números de linhas
que uma consulta SELECT que inclui uma cláusula LIMIT teria retornado se a cláusula não fosse utilizada.
A seção de novidades deste manual inclui uma lista mais aprofundada dos recursos. See Secção D.3, “Alterações na distribuição
4.0.x (Production)”.
16
Informações Gerais
do, pode embarcar o MySQL Server em vários aplicativos 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, quios-
ques públicos, responsável por unidades de combinação hardware/software, servidores Internet de alta performance, banco de da-
dos 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. See Secção 12.1.15, “libmysqld, a Biblioteca do Servi-
dor Embutido MySQL”.
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.
A maioria dos novos recursos em codificação, como stored procedures, estarão disponíveis no MySQL 5.0. See Secção 1.6.2,
“Novos Recursos Planejados Para a Versão 5.0”.
• Uma subquery é uma instrução SELECT aninhada dentro de outras instruções. Uma tabela dericada (unnamed view) é uma
subquery na cláusula FROM de outras instruções. See Secção 6.4.2, “Sintaxe de Subquery”.
• Aumento na velocidade
• Protocols binários mais rápidos com instruções preparadas e parâmetros de ligação. See Secção 12.1.4, “Instruções Prepara-
das da API C”.
• 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). See Capítulo 10, Extensões Espacias em MySQL.
• O novo protocolo cliente/servidor adiciona a possibilidade de se passar múltiplos avisos ao cliente, no lugar se um único re-
sultado. 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. See Secção 4.6.8.9, “SHOW WARNINGS | ERRORS”.
• Internacionalização
• Para suportar nossa base de usuário sempre em expansão usando linguagens locais nas aplicações, o programa MySQL ago-
ra 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ítulo 9, Conjunto de Caracteres Nacio-
nais e Unicode.
• Aprimoramento da usabilidade
• Em resposta a demanda popular, adicionamos um comando HELP com base no servidor que pode ser usado para conseguir
17
Informações Gerais
ajuda para comandos MySQL. A vantagem de se ter esta informação no lado do servidor é que a informação é sempre apli-
cável para aquela versão do servidor em particular. Como esta informação está disponível executando uma instrução SQL,
outros clientes também poderão ser escritos para acessá-la. Por exemplo, o cliente mysql de linha de comando foi modifi-
cado para ter esta capacidade.
• No novo protocolo cliente/servidor, várias instruções podem ser feitas com uma única chamada. See Secção 12.1.8,
“Tratando a Execução de Múltiplas Consultas na API C”.
• O novo protocolo cliente/servidor também suporta retorno de vários resultados. Isto pode ocorrer como resultado de enviar
várias instruções, por exemplo (Veja o item anterior).
• Uma nova sintaxe INSERT ... ON DUPLICATE KEY UPDATE ... tem sido implementada. Isto lhe permite execu-
tar um UPDATE em um registro existente se o um INSERT criasse uma chave (índice) primária (PRIMARY) ou única
(UNIQUE) (index) duplicada. See Secção 6.4.3, “Sintaxe INSERT”.
• Projetamos uma nova função de agrupamento GROUP_CONCAT(), adicionando a capacidade de concatenar colunas de re-
gistros agrupados em uma única string de resultado, o que é extremamente útil. See Secção 6.3.7, “Funções e Modificadores
para Usar com Cláusulas GROUP BY”.
A seção de novidades neste manual incluem uma lista mais completa de recursos. See Secção D.2, “Alterações na distribuição 4.1.x
(Alpha)”.
O conjunto de recursos que estão sendo adicionados a versão 4.1 estão, na maioria, corrigidos. 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 adio-
nados/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).
Para aqueles que desejam usar o fonte mais recente do desenvolvimento do MySQL 4.1, deixamos nosso repositório do BitKeeper
publicamente disponível. See Secção 2.3.4, “Instalando pela árvore de fontes do desenvolvimento”.
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. See Secção 2.3.4, “Instalando pela árvore de fontes do desenvolvimento”.
Nota: Se você é um usuário corporativo com uma necessidade urgente de um recurso particular, por favor, contate
<[email protected]> para conversarmos sobre patrocínio. Financiamento feito por uma ou mais companhias nos permite alo-
car recursos adicionais para aquele propósito específico. Um exemplo de um recurso patrocinado no passado é a replicação.
18
Informações Gerais
• Suporte OpenSSL estável (o MySQL 4.0 tem suporte rudimentar ao OpenSSL, não testado 100%).
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. See Secção 2.3.4, “Instalando pela árvore de fontes do desenvolvimento”.
• 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
• 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 cria-
dos no pedido.
• Adiciona suporte real a VARCHAR (tamanho de colunas maiores que 255, e sem corte de espaços em branco extras). (Já
existe suporte para isto nos mecanismos de armazenamento do MyISAM, mas ainda não está disponível a nível de usuário).
• Aumento na velocidade
• SHOW COLUMNS FROM nome_tabela (usado pelo cliente mysql para permitir expansões de nomes de colunas) não
deve abrir a tabela, apenas o arquivo de definição. ISto exigirá menos memória e será muito mais rápido.
• Permite que o DELETE em tabelas MyISAM usem a cache de registros. Para fazer isto, precisamos atualizar a thread da ca-
che de registro quando atualizarmos os arquivos .MYD.
• Internacionalização
• Ap usar SET CHARACTER SET devemos traduzir toda a consulta de uma vez e não apenas as strings. Isto permitirá que
os usuários usem caracteres traduzidos nos nomes de banco de dados, tabelas e colunas.
• Aprimoramento da usabilidade
• Resolver a questão de RENAME TABLE em uma tabela usada em uma tabela MERGE ativa, o que possivelmente corrompe a
tabela.
• Novas funcionalidades
19
Informações Gerais
• 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 (arquivos .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 progresso para longos comandos em execução.
• Implementar RENAME DATABASE. Para tornar isto seguro para todos os mecanismos de armazenamento, ele deve funcio-
nar como a seguir:
• Para cada tabelas, renomeie-a para outro banco de dados, o qual fazemos com o comando RENAME.
• Nova alteração da interface de arquivo interno. Isto fará todos os manipuladores de arquivos mais gerais e tornará mais fácil
adicionar extensões tipo RAID.
• Novas funcionalidade
• Comando como do Oracle CONNECT BY PRIOR ... para estruturas de busca tipo árvore (hierárquica)
• Adicionar SUM(DISTINCT).
• INSERT SQL_CONCURRENT e mysqld --concurrent-insert para fazer uma inserção concorrente no fim do ar-
quivo 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 segu-
ir: 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 corres-
pondendo à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.
20
Informações Gerais
Isto pode ser usado para saltar colunas extras no arquivo texto, ou atualizar colunas baseadas nas expressões dos dados li-
dos.
• ADD_TO_SET(valor,conjunto)
• REMOVE_FROM_SET(valor,conjunto)
• Se você abortar o mysql no meio de uma consulta, você deve abrir outra conexão e matar a consulta antiga em execução.
Alternativamente, deve ser feita um tentativa de detecção deste problema no servidor.
• Adicione um interface do mecanismo de armazenamento para informações da tabela assim que você puder usá-la como uma
tabela de sistema. Isto seria um pouco mais lento se você pedisse informações sobre todas as tabelas, mas muito flexível.
SHOW INFO FROM tbl_name para informações básicas das tabelas deve ser implementado.
• Permite SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a); neste caso é considerado que a vem
da tabela crash_me.
• Opções DELETE e REPLACE para a instrução UPDATE (isto deletará registros quando se tiver um erro de chave duplicada
durante a atualização).
• Possibilitar o uso da nova biblioteca regexp GNU em vez da atual (a biblioteca GNU deve ser muito mais rápida que a anti-
ga).
• Não adicionar valores DEFAULT automáticos as colunas. Enviar um erro ao usar um INSERT que não contenha uma colu-
na que não tenha um DEFAULT.
• Adicionar as funções de agrupamento ANY(), EVERY() e SOME(). No padrão SQL isto só funciona em colunas boolea-
nas, mas podemos extendê-las para funcionar em qualquer coluna/expressão tratando valores 0 como FALSE e valores dife-
rentes de 0 como TRUE.
• Aumento de velocidade
• Não permitir mais que um número definido de threads façam a recuperação do MyISAM ao mesmo tempo.
• Adicionar uma opção para descarregar paginas de chaves para tabelas com delayed keys se elas não forem usados por um
tempo.
• Um analizador de arquivos de log que possam analizar informações sobre quais tabelas são usadas com mais frequência, a
frequência com que joins multi-tables são executados, etc. Isto deve ajudar os usuários a identificar áreas ou projetos de ta-
belas que podiam ser otimizados para executar consultas muito mais eficientes.
• Internacionalização
• Aprimoramentos de usabilidade
• Retorna os tipos dos campos originais ao se fazer SELECT MIN(coluna) ... GROUP BY.
21
Informações Gerais
• Ligue o código myisampack no servidor assim ele poderá realizar operações PACK e COMPRESS.
• Adicionar uma cache de chaves temporária durante INSERT/DELETE/UPDATE para podermos fazer um recuperação se o
índice ficar cheio.
• Se você realizar um ALTER TABLE em uma tabela que é ligada simbolicamente a outro disco, crie tabelas tenporárias nes-
te disco.
• Implementar um tipo DATE/DATETIME que trate as informações de fusos horários de forma apropriada e assim lidar com
datas em diferentes fusos horários será mais fácil.
• Corrigir o configure para se poder compilar todas as bibliotecas (como no MyISAM) sem threads.
• Muito mais variáveis para SHOW STATUS. Leitura e atualização de registros. Selects em 1 tabela e select com joins. Nú-
mero de tabelas na select. Número de consultas ORDER BY e GROUP BY.
• mysqladmin copy database novo-banco_dados; exige que o comando COPY seja adicionado ao mysqld.
• Alterar o nome de tabelas de string vazias para NULL para colunas calculadas.
• Não usar Item_copy_string em valores numéricos para evitar a conversão number->string->number no casos de: SE-
LECT COUNT(*)*(id+0) FROM nome_tabela GROUP BY id
• Alterar aqueles ALTER TABLE que não abortam clientes que executam INSERT DELAYED.
• Colunas referênciadas em uma cláusula UPDATE irão conter os valores antigos antes da atualização iniciar.
• Alterar leitura através de tabelas para usar mapeamento de memória quando possível. Atualmente somente tabelas compactadas
usam mapeamento de memória.
• Tornar o código de timestamp automático melhor. Adicionar timestamps para o log de atualizações com SET TIMES-
TAMP=#;
• Views simples (inicialmente em uma tabela, depois em qualquer expressão). See Secção 1.8.4.6, “Views”.
• Fechar algumas tabelas automaticamente se uma tabela, tabela temporária ou arquivos temporários obtiverem o erro 23 (não
pode abrir arquivos suficientes).
• Melhor propagação de constantes. Quando uma ocorrência de nome_col=n é encontrada em uma expressão, para algumas
constantes n, substitua outras ocorrências de nome_col dentro da expressão por n. Atualmente, isto é feito somente para al-
guns casos simples.
• Chave otimizadora = expressão. No momento somente a chave = campo ou a chave = constante são otimizadas.
22
Informações Gerais
• Alterar sql_yacc.yy para um analizador em linha para reduzir seu tamanho e obter melhores mensagems de erro (5 dias).
• Alterar o analisador para usar somente uma regra para diferentes números de argumentos em uma função.
• MINUS, INTERSECT e FULL OUTER JOIN. (Atualmente UNION [na 4.0] e LEFT OUTER JOIN são suportados).
• Por favor, perceba as alterações ao mysqld_safe: de acordo com o FSSTND (que o Debian tenta seguir) arquivos PID dever
ir em /var/run/<progname>.pid e arquivos de log em /var/log. Seria ótimo se você puder colocar o diretório de da-
dos na primeira declaração de "pidfile" e "log", para que a colocação destes arquivos possa ser alterada com uma simples ins-
trução.
• Adicionar uso de zlib() a LOAD DATA INFILE, para permitir que as instruções leiam arquivos compactados com gzip.
• Alterar para o uso de semáforos quando contar threads. Devemos primeiro implementar uma biblioteca de semáforos para a
MIT-pthreads.
• Como uma alternativa para uma thread / conexão gerencie uma fila de threads para manipular as pesquisas.
• Permitir obter mais de um bloqueio com GET_LOCK. Quando isto for feito, serão, também, tratados os possíveis deadlocks que
essa alteração irá acarretar.
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 En-
tregar-Para: para identificar suas mensagens.
23
Informações Gerais
• 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 especializa-
das. Se você enviar para a lista errada você pode não obter resposta.
• 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 ativamente envolvido no processo de busca e correção de erros. See Secção 1.7.1.3, “Como relatar erros
ou problemas”.
• bugs-digest
• internals
Uma lista para pessoas que trabalham no código do MySQL. Nesta lista pode-se discutir desenvolvimento do MySQL e pos-
patches.
• 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
• benchmarks
Esta lista é para qualquer um interessado em assuntos de desempenho. Discussõ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
• 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
• java
Discussão sobre o servidor MySQL e Java. É mais usada para discussões sobre o driver JDBC, incluindo MySQL Connector/J.
• java-digest
24
Informações Gerais
• win32
Esta é a lista para todos os tópicos relacionados ao MySQL em sistemas operacionais Microsoft, como o Win95, Win98, NT e
Win2000.
• win32-digest
• myodbc
• myodbc-digest
• mysqlcc
Esta lista é sobre todos os tópicos relativos ao cliente gráfico MySQL Control Center.
• mysqlcc-digest
• plusplus
Lista sobre todos os tópicos relacionados à programação da API C++ para o MySQL.
• plusplus-digest
• msql-mysql-modules
Lista sobre o Suporte MySQL no Perl com o msql-mysql-modules que é chamado DBD-mysql.
• msql-mysql-modules-digest
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. See Secção 1.4.1, “Suporte Oferecido pela MySQL
AB”.
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.
língua francesa.
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.
25
Informações Gerais
• Comece pesquisando o manual MySQL online em: http://www.mysql.com/doc/ Nós tentaremos manter o manual atualizado,
frequentemente atualizando-o com soluções para novos problemas encontrados! O apêndice de histórico de mudanças
(http://www.mysql.com/doc/en/News.html) pode ser útil já que é bem possível que uma versão mais nova ja tenha a solução pa-
ra o seu problema.
• Procure no banco de dados de bugs em http://bugs.mysql.com/ para ver se o erro já foi relatado/resolvido.
• Você pode também usar a página http://www.mysql.com/search.html para pesquisar todas as páginas Web (incluindo o manual)
que estão localizados em http://www.mysql.com/.
Se você não puder encontrar uma resposta no manual ou nos arquivos, confira com seu expert em MySQL local. Se você continua
não encontrando uma resposta para sua questão, vá em frente e leia a próxima seção para saber como enviar email para lista de
email do MySQL.
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 dire-
tório bin no diretório de instalação do MySQL. Se você não puder utilizar o mysqlbug (por exemplo, se você o estiver executan-
do no Windows), é ainda de vital importância que você incluia todas as informações necessárias listadas nesta seção (o mais impor-
tante é 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 al-
guma 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 desenvolvimento 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 execu-
tando 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.
Se você tiver um relatório de erro que possa ser repetido, relate-o no banco de dados de bugs em http://bugs.mysql.com. Note que
mesmo neste caso é bom executar o script mysqlbug primeiro para ter informações sobre o sistema. Qualquer erro que pudermos
repetir tem uma grande chance de ser corrigido na próxima distribuição do MySQL.
Para relatar outros problemas, você pode usar a lista de email do MySQL.
Lembre-se que é possível responder a uma mensagem contendo muita informação, mas não a uma contendo muito pouca. Frequen-
temente pessoas omitem fatos porque acreditam que conhecem a causa do problema e assumem que alguns detalhes não importam.
Um bom principio é: Se você está em dúvida sobre declarar alguma coisa, declare-a ! É milhares de vezes mais rápido e menos pro-
blemático escrever um pouco de linhas a mais no seu relatório do que ser forçado a perguntar de novo e esperar pela resposta por-
que você não forneceu informação sufiente da primeira vez.
Os erros mais comuns acontecem porque as pessoas não indicam o número da versão da distribuição do MySQL que estão usando,
26
Informações Gerais
ou não indicam em qual plataforma elas tem o MySQL instalado (Incluindo o número da versão da plataforma). Essa informação é
muito relevante, e em 99% dos casos o relato de erro é inútil sem ela! Frequentemente nós recebemos questões como, ``Por que isto
não funciona para mim?'' então nós vemos que aquele recurso requisitado não estava implementado naquela versão do MySQL, ou
que o erro descrito num relatório foi resolvido em uma versão do MySQL mais nova. Algumas vezes o erro é dependente da plata-
forma; nesses casos, é quase impossível corrigir alguma coisa sem conhecimento do sistema operacional e o número da versão da
plataforma.
Lembre-se também de fornecer informações sobre seu compilador, se isto for relacionado ao problema. Frequentemente pessoas
encontram erros em compiladores e acreditam que o problema é relacionado ao MySQL. A maioria dos compiladores estão sobre
desenvolvimento todo o tempo e tornam-se melhores a cada versão. Para determinar se o seu problema depende ou não do compila-
dor, nós precisamos saber qual compilador foi usado. Note que todo problema de compilação deve ser estimado como relato de er-
ros e, consequentemente publicado.
É de grande ajuda quando uma boa descrição do problema é incluída no relato do erro. Isto é, um bom exemplo de todas as coisas
que o levou ao problema e a correta descrição do problema. Os melhores relatórios são aqueles que incluem um exemplo completo
mostrando como reproduzir o erro ou o problema See Secção E.1.6, “Fazendo um Caso de Teste Se Ocorre um Corrompimento de
Tabela”.
Se um programa produz uma mensagem de erro, é muito importante incluir essas mensagens no seu relatório! Se nós tentarmos
procurar por algo dos arquivos usando programas, é melhor que as mensagens de erro relatadas sejam exatamente iguais a que o
programa produziu. (Até o caso deve ser observado!) Você nunca deve tentar lembrar qual foi a mensagem de erro; e sim, copiar e
colar a mensagem inteira no seu relatório!
Se você tem um problema com o MyODBC, você deve tentar gerar um arquivo para rastremento de erros (trace) do MyODBC. See
Secção 12.2.7, “Relatando Problemas com MyODBC”.
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 re-
lató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).
• 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 dire-
tório bin sob sua instalação do MySQL.
• O nome do sistema operacional e a versão. Para a maioria dos sistemas operacionais, você pode obter esta informação execu-
tando o comando Unix uname -a. Se você trabalho 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. See Secção E.1.5, “Usando Arquivos de Log para Encontrar a Causa dos Erros no
mysqld”.
• 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 EX-
PLAIN 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 situ-
açã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 ins-
truções cuja largura de saída deva ultrapassar 80 colunas):
mysql> SHOW VARIABLES;
mysql> SHOW COLUMNS FROM ...\G
<saida para SHOW COLUMNS>
27
Informações Gerais
• Se um erro ou problema ocorrer quando estiver executando o mysqld, tente fornecer um script de entrada que irá reproduzir a
anomalia. Este script deve incluir qualquer arquivo de fonte necessário. Quanto mais próximo o script puder reproduzir sua si-
tuação, melhor. Se você puder fazer uma série de testes repetidos, você poderá postá-lo para o <[email protected]>
para um tratamento de alta prioridade!
Se não puder fornecer o script, você ao menos deve incluir a saída de mysqladmin variables extended-status
processlist na sua mensagem para fornecer alguma informação da performance do seus sistema.
• Se você não puder produzir um caso de teste em algumas linhas, ou se a tabela de testes for muito grande para ser enviada por
email para a lista de mensagens (mais de 10 linhas), você deverá dar um dump de suas tabelas usando o mysqldump e criar
um arquivo README que descreve seu problema.
Crie um arquivo comprimido de seus arquivos usando tar e gzip ou zip, e use o ftp para transferir o arquivo para
ftp://support.mysql.com/pub/mysql/secret/. E envie uma pequena descrição do problema para <[email protected]>.
• Se você achar que o MySQL produziu um resultado estranho para uma consulta, não inclua somente o resultado, mas também
sua opinião de como o resultado deve ser, e uma conta descrevendo o base de sua opinião.
• Quando fornecer um exemplo do problema, é melhor usar os nomes de variáveis, nomes de tabelas, etc. utilizados na sua situa-
ção atual do que enviar com novos nomes. O problema pode ser relacionado ao nome da variável ou tabela! Esses casos são ra-
ros, mas é melhor prevenir do que remediar. Além disso, será mais fácil para você fornecer um exemplo que use sua situação
atual, que é o que mais importa para nós. No caso de ter dados que não deseja mostrar para outros, você pode usar o ftp para
transferi-lo para ftp://support.mysql.com/pub/mysql/secret/. Se os dados são realmente confidenciais, e você não deseja mostrá-
los nem mesmo para nós, então vá em frente e providencie um exemplo usando outros nome, mas, por favor considere isso co-
mo uma única chance.
• Inclua, se possível, todas as opções fornecidas aos programas relevantes. Por exemplo, indique as opções que você utiliza quan-
do inicializa o daemon mysqld e aquelas que são utilizadas para executar qualquer programa cliente MySQL. As opções para
programas como o mysqld e mysql, e para o script configure, são frequentemente chaves para respostas e são muito rele-
vantes! Nunca é uma má idéia incluí-las de qualquer forma! Se você usa algum módulo, como Perl ou PHP por favor forneça o
número da versão deles também.
• Se sua questão é relacionada ao sistema de privilégios, por favor forneça a saída de mysqlaccess, a saída de mysqladmin
reload, e todas as mensagens de erro que você obteve quando tentava conectar! Quando você testar seus privilégios, você de-
ve primeiramente executar mysqlaccess. Depois, execute mysqladmin reload version e tente conectar com o pro-
grama que gerou o problema. mysqlaccess pode ser encontrado 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 pode-
mos 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 pa-
ra uma nova versão do MySQL. See Apêndice D, Histórico de Alterações do MySQL.
• Se você tiver um problema do tipo que seus dados aparecem corrompidos ou você obtem erros quando você acessa alguma ta-
bela em particular, você deverá primeiro checar depois tentar reparar suas tabelas com myisamchk ou CHECK TABLE e RE-
28
Informações Gerais
• Se você frequentemente obtém tabelas corrompidas, você deve tentar encontrar quando e porque isto acontece! Neste caso, o
arquivo mysql-data-directory/'hostname'.err deve conter algumas informações sobre o que aconteceu. See Sec-
ção 4.10.1, “O Log de Erros”. Por favor forneça qualquer informação relevante deste arquivo no seu relatório de erro! Normal-
mente o mysqld NUNCA deverá danificar uma tabela se nada o finalizou no meio de uma atualização! Se você puder encon-
trar a causa do fim do mysqld, se torna muito mais fácil para nós fornecemos a você uma solução para o problema! See Sec-
ção A.1, “Como Determinar o Que Está Causando Problemas”.
• 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 e devem funcionar sem problemas! Acreditamos em deixar tudo, o mais compátivel
possível com as versões anteriores, e você conseguirá mudar de versões MySQL em minutos! See Secção 2.2.4, “Qual versão
do MySQL deve ser usada”.
Se você é um cliente de nosso suporte, por favor envio o seu relatório de erros em <[email protected]> para trata-
mento de alta prioritário, bem como para a lista de mensagens apropriada para ver se mais alguém teve experiências com (e talvez
resolveu) o problema.
Para informações sobre relatar erros no MyODBC, veja Secção 12.2.4, “Como Relatar Problemas com o MyODBC”.
Para soluções a alguns problemas comuns, veja See Apêndice A, Problemas e Erros Comuns.
Quando respostas são enviadas para você individualmente e não para a lista de mensagens, é considerado boa etiqueta resumir as
respostas e enviar o resumo para a lista de mensagens para que outras possam ter o benefício das respostas que você recebeu que
ajudaram a resolver seu problema!
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!
• #mysql A princípio são questões sobre o MySQL, mas dúvidas sobre outros bancos de dados e SQL são bemvindas.
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.
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 pes-
soas que estão tentando usar o MySQL Server em novos territórios.
29
Informações Gerais
Um dos nossos principais objetivos com o produto é continuar a trabalhar em acordo com o padrão SQL-99, mas sem sacrificar ve-
locidade e confiança. Não estamos receosos em adicionar extensões ao SQL ou suporte para recursos não SQL se ele aumentar ex-
tremamente 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. See Secção 6.4.9, “Sintaxe HANDLER”.)
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 computacionais 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 re-
plicação).
Suporte a banco de dados em cluster está planejado para 2004 pela implementação de um novo mecanismo de armazenamento.
We are aiming toward supporting the full SQL-99 standard, but without concessions to speed and quality of the code.
• ‘"’ é 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";
• O nível de isolamento padrão de um transação é SERIALIZABLE. See Secção 6.7.6, “Sintaxe SET TRANSACTION”.
• 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=serializa
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:
30
Informações Gerais
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:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
O exemplo acima significa que se você tiver uma versão do MySQL 3.23.02 ou mais nova, então o MySQL irá usar a palavra-cha-
ve TEMPORARY
• Todas comparações de strings por padrão são caso insensitivo, com classificação ordenada determinada pelo conjunto de carac-
teres corrente (ISO-8859-1 Latin1 por padrão). Se você não gosta disso você deverá declarar suas colunas com o atributo BI-
NARY ou usar o operador BINARY, que fazendo com que as comparações sejam feitas de acordo com a ordem ASCII usada na
máquina servidora do MySQL.
• O MySQL mapeia cada banco de dados em um diretório sob o diretório de dados do MySQL, e tabelas internamente num ban-
co de dados para arquivos no diretório do banco de dados.
• Nomes de bancos de dados e tabelas são caso sensitivoo no MySQL em sistemas operacionais que possuem o sistema de ar-
quivos caso sensitivoo (como na maioria dos sistemas Unix). See Secção 6.1.3, “Caso Sensitivo nos Nomes”.
• Nomes de Bancos de dados, tabelas, índices, campos ou apelidos pode começar com um dígito (porém não podem consistir
somente de digitos).
• Você pode usar comandos padrão do sistemas para fazer backups, renomear, apagar e copiar tabelas. Por exemplo, para re-
nomear uma tabela, renomeie os arquivos .MYD, .MYI e .frm. para o nome da tabela correspondente.
• Em algumas instruções SQL, você pode acessar tabelas de diferentes bancos de dados com a sintaxe nome_bd.nome_tbl.
Alguns servidores SQL fornecem a mesma funcionalidade mas chamam isto de User space. O MySQL não suporta tables-
paces como em: create table ralph.my_table...IN minha_tablespace.
• O uso de INTO OUTFILE e STRAIGHT_JOIN em uma instrução SELECT. See Secção 6.4.1, “Sintaxe SELECT”.
• EXPLAIN SELECT para obter uma descrição de como as tabelas são ligadas.
• A utilização de nomes de índices, índices em um prefixo de um campo, e uso de INDEX ou KEY em uma instrução CREATE
TABLE. See Secção 6.5.3, “Sintaxe CREATE TABLE”.
• O uso de CHANGE nome_campo, DROP nome_campo, ou DROP INDEX, IGNORE ou RENAME em uma instrução ALTER
TABLE. See Secção 6.5.4, “Sintaxe ALTER TABLE”.
31
Informações Gerais
• Utilização de múltiplas cláusulas ADD, ALTER, DROP, ou CHANGE em uma instrução ALTER TABLE.
• Você pode remover múltiplas tabelas com uma instrução única DROP TABLE.
• O uso de LOAD DATA INFILE. Em alguns casos essa sintaxe é compatível com o Oracle LOAD DATA INFILE. See Sec-
ção 6.4.8, “Sintaxe LOAD DATA INFILE”.
• Strings podem ser fechadas pelo ‘"’ ou ‘'’, não apenas pelo ‘'’.
• 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. See Secção 6.3.7, “Funções e Modificadores para Usar com Cláusulas 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. See Secção 6.5.1, “Sintaxe CREATE DATABASE”.
• 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 esquer-
da do FROM nas instruções SELECT. Por exemplo:
mysql> SELECT col1=1 AND col2=2 FROM nome_tabela;
• CONCAT() ou CHAR() com um ou mais de dois argumentos. (No MySQL, estas funções receber qualquer número de argu-
mentos.)
• As funções BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), MD5(), EN-
CODE(), 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(). See Secção 6.3.7,
“Funções e Modificadores para Usar com Cláusulas GROUP BY”.
• Uso de REPLACE no lugar de DELETE + INSERT. See Secção 6.4.7, “Sintaxe REPLACE”.
32
Informações Gerais
• Para campos VARCHAR, expaços extras são removidos quando o valor é armazenado. See Secção 1.8.6, “Erros Conhecidos e
Deficiências de Projetos no MySQL”.
• Em alguns casos, campos CHAR são alterados sem perguntas para o tipo de campo VARCHAR. See Secção 6.5.3.1, “Alteração
de Especificações de Colunas”.
• 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. See Secção 4.4.1, “A Sintaxe de GRANT e REVOKE”.
Para uma lista priorizada indicando quando novas extensões serão adicionadas 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. See Secção 1.6,
“MySQL e o Futuro (o TODO)”.
1.8.4.1. Subqueries
MySQL Version 4.1 supports subqueries and derived tables (unnamed views). See Secção 6.4.2, “Sintaxe de Subquery”.
For MySQL versions prior to 4.1, most subqueries can be successfully rewritten using joins and and other methods. See Sec-
ção 6.4.2.11, “Rewriting Subqueries for Earlier MySQL Versions”.
De maneira alternativa, você pode usar SELECT INTO OUTFILE... ou CREATE TABLE ... SELECT para resolver seu
problema.
Os outros tipos de tabelas não transacionais (tais como MyISAM) no MySQL Server seguem um paradigma diferente para integri-
dade de dados chamado ``Operções Atômicas.'' 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 performance.
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 tran-
sacionais 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
33
Informações Gerais
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 pa-
ra 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 ta-
belas 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 to-
dos problemas de integridade que transações resolvem podem ser feitas com LOCK TABLES ou atualizações atômicas, asse-
gurando que você nunca irá ter uma finalização automática da tabela, o que é um problema comum em bancos de dados tran-
sacionais.
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ê po-
de 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.
O paradigma transacional tem seus benefícios e suas desvantagens. Muitos usuários e desenvolvedores de aplicações dependem da
facilidade com a qual eles podem codificar contornando problemas onde abortar parece ser, ou é necessário. No entanto, se você é
novo no paradigma de operações atômicas ou tem mais familiaridade ou conforto com transações, considere o benefício da veloci-
dade que as tabelas não transacionais podem oferece, na ordem de 3 a 5 vezes da velocidade que as tabelas transacionais mais rápi-
das e otimizadas.
Em situações onde integridade é de grande importância, as atuais características do MySQL permitem níveis transacionais ou me-
lhor confiança e integridade. Se você bloquear tabelas com LOCK TABLES todos as atualizações irão ser adiadas até qualquer ve-
rificação de integridade ser feita. Se você só obter um bloqueio de leitura (oposto ao bloqueio de escrita), então leituras e inserções
poderão ocorrer. Os novos registros inseridos não poderão ser visualizados por nenhum dos clientes que tiverem um bloqueio de
LEITURA até eles liberarem estes bloqueios. Com INSERT DELAYED você pode enfileirar inserções em uma fila local, até os
bloqueios serem liberados, sem que o cliente precise esperar atá a inserção completar. See Secção 6.4.3.2, “Sintaxe INSERT DE-
LAYED”.
``Atômico'', no sentido em que nós mencionamos, não é mágico. Significa apenas que você pode estar certo que enquanto cada atu-
alização específica está sendo executada, nenhum outro usuário pode interferir com ela, e nunca haverá um rollback automático
(que pode acontecer em sistemas baseados em transações se você não tiver muito cuidado). O MySQL também assegura que nunca
ocorrerá uma leitura suja.
A seguir estão algumas técnicas para trabalhar com tabelas não transacionais:
• Loops que precisam de transações normalmente pode ser codificados com a ajuda de LOCK TABLES, e você não precisa de
cursores para atualizar regitros imeditamente.
1. Use LOCK TABLES ... para fazer um lock todas as tabelas que você quer acessar.
2. Condições de teste.
Isto é normalmente um método muito mais rápido que usar transações com possíveis ROLLBACKs, mas nem sempre. A única
situação que esta solução não pode tratar é quando alguém mata a threads no meio de uma atualização. Neste caso, todas os
locks serão liberados mas algumas das atualização podem não ter sido execuadas.
• Você também pode usar funções para atualizar registros em uma única operação. Você pode conseguir uma aplicação muito efi-
ciente usando as seguintes técnicas:
Por exemplo, quando fazemos atualizações em alguma informação de cliente, atualizamoa apenas os dados do clientes que alte-
34
Informações Gerais
raram e testamos apenas aqueles com dados alterados ou dados que dependem dos dados alterados, mudaram em comparação
com o registro original. O teste dos dados alterados é feito com a cláusula WHERE na instrução UPDATE. Se o registro não foi
atualizado, mandamos ao cliente uma mensagem: ''Some of the data you have changed has been changed by another user.'' En-
tão mostramos o 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, usan-
do 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 úni-
cos 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(). See Secção 12.1.3.32,
“mysql_insert_id()”.
Geralmente você pode codificar evitando lock de registro. Algumas situações realmente precisam disto, e tabelas InnoDB su-
portam 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 origi-
nal.
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;
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, es-
tamoas 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 perfor-
mance 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 nível conceitual tendo bibliotecas de funções no servidor. No entanto, stored
procedures aumentam a carga no servidor de banco de dados, já que grande parte do trabalho é feito do lado do servidor e menos do
lado do cliente (aplicação).
Triggers estão programados para serem implementados no MySQL versão 5.1. Um trigger é um tipo de stored procedure que é cha-
mado quando um evento em particular ocorre. Por exemplo, você poderia configurar uma stored procedure que é disparada toda
vez que um registro for apagado de uma tabela transacional que automaticamente apaga o cliente correspondente de uma tabela de
clientes quando todas as transações forem removidas.
Para outros tipos de tabela, o MySQL Server atualmente apenas analisa a sintaxe de FOREIGN KEY no comando CREATE TA-
BLE, mas não usa/armazena esta informação. Em um futuro próximo esta implementação será estendida para que assim a informa-
ção seja armazenada num arquivo de especificação de tabela e possa ser recuperado por mysqldump e ODBC. Em um estágio
posterior, restrições de chaves estrangeiras serão implementadas para tabelas MyISAM.
35
Informações Gerais
Note que as chaves estrangeiras no SQL não são usadas para ligar tabelas, mas são usadas para verificar a integridade referencial.
Se você deseja obter resultados de múltiplas tabelas de uma instrução SELECT, você pode fazer isto ligando tabelas:
SELECT * FROM table1,table2 WHERE table1.id = table2.id;
See Secção 6.4.1.1, “Sintaxe JOIN”. See Secção 3.6.6, “Utilizando Chaves Estrangeiras”.
Quando usada como uma restrição, FOREIGN KEYs não precisa ser usado se a aplicação insere duas linhas em tabelas MyISAM na
ordem apropriada.
Para tabelas MyISAM, você pode contornar a falta de ON DELETE adicionando a instrução DELETE apropriada a uma aplicação
quando você deletar registros de uma tabela que tem uma chave estrangeira. Na prática isto é mais rápido e muito mais portável que
utilizar chaves estrangeiras.
No MySQL Server 4.0 você pode utilizar deleções multi-tabela para apagar linha de muitas tabelas com um comando. See Sec-
ção 6.4.5, “Sintaxe DELETE”.
A sintaxe FOREIGN KEY sem ON DELETE ... é usada geralmente por aplicacões ODBC para produzir cláusulas WHERE auto-
máticas.
Note que chaves estrangeiras são mal usadas com frequência, o que pode causar graves problemas. Mesmo quando usado apropria-
damente, o suporte a chaves estrangeiras não é uma solução mágica para o problema de integridade referêncial, embora possa aju-
dar.
• Assumindo o projeto apropriado das relações, as restrições de chaves estrangeiras tornarão mais difícil para um programador
introduzir uma inconsistência no banco de dados.
• Regras de chaves estrangeiras projetados apropriadamente ajudam ao documentar a relação entre as tabelas.
Desvantagens:
• Erros, que são facéis de se ter ao projetar a relação das chaves, podem causar graves problemas¯por exemplo, regras circulares
ou a combinação errada de uma deleção em cascata.
• Verificação adicional no banco de dados afeta o desempenho, por esta razão algumas das principais aplicações comerciais codi-
ficam sua lógica no nível da aplicação.
• Não é incomum para um DBA fazer uma topologia complexa de relações que torna muito difícl, e em alguns casos impossível,
fazer backup ou restaurar tabelas individuais.
1.8.4.6. Views
Views estão senda implementadas atualmente e aparecerão na versão 5.0 e 5.1 do MySQL 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úme-
ros 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 ta-
bela 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. See Secção 4.3, “Detalhes Gerais de Segurança e o Sistema de Privilégio de Acesso do MySQL”.
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 relacionais: todos os views que são teoricamente atualizáveis, devem se atuali-
zados também na prática.
36
Informações Gerais
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 co-
mentário no estilo C /*isto é um comentário*/ com o MySQL Server. See Secção 6.1.6, “Sintaxe de Comentários”.
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 caracte-
re de espaço (ou por um caracter de controle como uma nova linha). Isto ocorre porque este estilo de comentário causou muitos
problemas com queries SQL geradas automaticamente que usavam algo como o código seguinte, onde automaticamente erá inseri-
do 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
Temos que tratar o caso quando você atualiza diversos registros com uma tabela não transacional 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. See Sec-
ção 1.6.4, “Novos Recursos Planejados Para a Versão em um Futuro Próximo”.
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.
Para tornar a vida mais fácil o MySQL adicionou suporte a diretiva IGNORE para a maioria dos comandos que podem causar uma
violação de chave (como INSERT IGNORE ...). Neste caso o MySQL irá ignorar qualquer violação de chave e continuará com
o processamento do próximo registro. Você pode obter informação sobre o que o MySQL fez com a função da API
mysql_info() API function e em versões posteriores do MySQL 4.1 com o comando SHOW WARNINGS. See Sec-
ção 12.1.3.30, “mysql_info()”. See Secção 4.6.8.9, “SHOW WARNINGS | ERRORS”.
Note que no momento apenas as tabelas InnoDB suportam chaves estrangeiras. See Secção 7.5.5.2, “Restrições FOREIGN KEY”.
37
Informações Gerais
O suporte a chaves estrangeiras nas tabelas MyISAM está programado para ser incluída na arvoré de fonte do MySQL 5.0.
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 compi-
lação -DDONT_USE_DEFAULT_FIELDS.) See Secção 2.3.3, “Opções típicas do configure”. 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.
Se você inserir um valor errado em um campo ENUM, ele será configurado com uma string vazia em um contexto string. See Sec-
ção 6.2.3.3, “O Tipo ENUM”.
Se você inserir uma opção errada em um campo SET, o valor errado será ignorado. See Secção 6.2.3.4, “O Tipo SET”.
• 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 bloquear a tabela. Pode-se no entanto fazer um KILL em qualquer uma das thre-
ads 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.
• 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
38
Informações Gerais
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.
• Não execute ALTER TABLE em uma tabela BDB em que você estiver executando transações multi-instruções não completa-
das. (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 pa-
ra 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 au-
to_increment.
• DELETE se você estiver apagando registros de uma tabela que tem chaves estrangeiras com a propriedade ON DELETE
CASCADE.
• REPLACE ... SELECT, INSERT IGNORE ... SELECT se você tiver valores de chaves duplicados nos dados inse-
ridos.
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 retornar registros em uma ordem di-
ferente (no qual resultará em um registro tendo diferentes posições, obtendo um número diferente na coluna au-
to_increment), dependendo da escolhe feita pelo otimizador no master e slave. Uma consulta será otimizada deiferente-
mente 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 master 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 possu-
ir 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.
Este problema também pode afetar a restauração de um banco de dados usando mysqlbinlog|mysql.
O modo mais fácil de evitar este problema em todos os casos é adicionar uma cláusula ORDER BY para tal consulta não deter-
minística assegure que os registros são sempre armazenados/modificados na mesma ordem. Nas versões futuras do MySQL adi-
cionaremos automaticamente uma cláusula ORDER BY quando necessário.
• Ao usar funções RPAD, ou qualquer outra função string que termina adicionando espaços em branco a direita, em uma consulta
que preisa usar tabelas temporárias para ser rsolvida, todas as strings resultantes serão cortadas a direita (como em RTRIM). Es-
te é um exemplo de uma consulta:
SELECT RPAD(t1.field1, 50, ' ') AS f2, RPAD(t2.field2, 50, ' ') AS f1 FROM table1 as
t1 LEFT JOIN table2 AS t2 ON t1.record=t2.joinID ORDER BY t2.record;
O resultado final deste erro é que o usuário não conseguira espaços em branco do lado direito do campo resultante.
39
Informações Gerais
A razão disto é devido ao fato de tabelas HEAP, que são usadas primeiro para tabelas temporárias, não são capazes de tratar co-
lunas VARCHAR.
• Devido ao modo como os arquvos de definições de tabelas são armazenados não se pode usar 255 caracteres (CHAR(255)) em
nomes de tabelas, nomes de colunas e enum. Isto está programado para ser corrigido na versão 5.1 quando temos novos arqui-
vos de formatos de definição de tabelas.
• Quando estiver usando SET CHARACTER SET, não é permitido usar caracteres especias no nome do banco de dados, tabelas
ou campos.
• se você tiver uma coluna DECIMAL com um número armazenado em diferentes formatos (+01.00, 1.00, 01.00), GROUP BY
pode considerar cada valor como um valor diferente.
• DELETE FROM merge_table usado sem WHERE irá apenas apagar o mapeamento para a tabela, não apagando tudo nas ta-
belas mapeadas.
• Você não pode construir em outro diretório quando estiver utilizando MIT-pthreads. Como isto necessitaria de alterações na
MIT-pthreads, nós não estamos aptos a corrigí-la.
• BLOB valores não podem ser usados com confiança em GROUP BY, ORDER BY ou DISTINCT. Somente os primeiros bytes
(padrão 1024) max_sort_length são usados quando estiver comparando BLOBs nestes casos. Isto pode ser alterado com a
opção -0 max_sort_lenght para mysqld. Uma forma de contornar este problema para a maioria dos casos é usar a subs-
tring: SELECT DISTINCT LEFT(blob,2048) FROM nome_tabela.
• Cálculos são feitos com BIGINT ou DOUBLE (normalmente, ambos tem o tamanho de 64 bits). Depende da precisão utilizada
na função. A regra geral é que funções binárias são feitas com precisão BIGINT, IF e ELT() com precisão BIGINT ou DOU-
BLE e o resto 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 su-
as 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 problema com isto é que se você execu-
tar 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 'host-
name'.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;
• 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 colunas '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 provavelmente iremos alterar isto no futu-
ro para nunca comparar as colunas escondidas quando executando DISTINCT.
um exemplo disto é:
40
Informações Gerais
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).
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 va-
lores 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 pos-
sí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 dou-
ble 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.
• Você pode pendurar um processo se você fizer um DROP TABLE em uma tabela entre outras que esteja travada com LOCK
TABLES.
• No caso seguinte você pode obter um descarrego de memória para o arquivo core:
41
Informações Gerais
• 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 por-
que 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;
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. See Secção 2.3, “Instalando uma distribui-
ção com fontes do MySQL”. See Apêndice E, Portando para Outros Sistemas.
42
Capítulo 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 Secção 2.2.1, “Como obter o MySQL”.
• Para saber quais são as plataformas suportadas, veja em Secção 2.2.3, “Sistemas Operacionais suportados pelo MySQL”. Por
favor perceba que nem todas as plataformas suportadas são igualmente boas para executar o MySQL. Algumas são mais robus-
tas e eficientes que outras - ver Secção 2.2.3, “Sistemas Operacionais suportados pelo MySQL” 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. Pa-
ra determinar que versão e tipo da distribuição você deve usar, veja Secção 2.2.4, “Qual versão do MySQL deve ser usada”. 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 Secção 2.2.9, “Instalando uma Distribuição Binária
do MySQL” e Secção 2.3, “Instalando uma distribuição com fontes do MySQL”. 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 Secção 2.4, “Configurações e Testes Pós-instalação”. Estes procedimentos podem ser
aplicados caso você use uma distribuição binária ou fonte do MySQL.
Veja Secção 2.2, “Detalhes Gerais de Instalação” para mais informações sobre quais outras distribuições binárias estão disponíveis
e como obtê-las.
1. Instale a distribuição.
4. Inicie o servidor.
• A distribuição binária contém um programa de instalação que instala que você precisa e assim possa iniciar o servidor imediata-
mente.
• A distribuição fonte contém todo o código e os arquivos suportados para construir o executável usando o compilador VC++ 6.0.
See Secção 2.3.7, “Instalando o MySQL a partir do Fonte no Windows”.
Geralmente, a melhor opção é a distribuição binária. É mais simples e você não precisa de nenhuma ferramenta adicional para ter o
MySQL em execução.
• Um sistema operacional Windows de 32 bits como 9x, ME, NT, 2000 ou XP. A família NT (Windows NT, 2000 e XP) lhe per-
mite executar o servidor MySQL como um serviço. See Secção 2.1.1.7, “Iniciando o MySQL no Windows NT, 2000, ou XP”.
43
Instalação do MySQL
• Um cópia da distribuição binária do MySQL para Windows, o qual pode ser feito download em
http://www.mysql.com/downloads/.
Nota: A distribuição de arquivos são fornecidas no formato zip e recomendamos o uso de um cliente FTP com opção de resumo
para evitar corrompimento de arquivos durante o processo de download.
• Espaço suficiente em disco para descompactar, instalar e criar o banco de dados de acordo com suas exigências.
• Se você planeja se conectar ao servidor MySQL via ODBC, você também precisará do dirver MyODBC. See Secção 12.2,
“Suporte ODBC ao MySQL”.
• Se você precisa de tabelas com tamanho maior que 4GB, instale o MySQL em um sistema de arquivos NTFS ou mais novo.
Não se esqueça de usar MAX_ROWS e AVG_ROW_LENGTH quando criar tabelas. See Secção 6.5.3, “Sintaxe CREATE
TABLE”.
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áqui-
nas 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
Se você não estiver executando o servidor MySQL como um serviço, pare desta forma:
C:\mysql\bin> mysqladmin -u root shutdown
6. Execute o programa setup.exe para iniciar o processo de instalação. Se você quiser instalar em um diretório diferente do
padrão (c:\mysql), use o botão Browse para especificar seu diretório preferido. Se você não instalar o MySQL no local
padrão, você precisará epecificar o local onde você inicia o servidor. O modo mais fácil de se fazer isto é usar um arquivo de
opção, como descrito em Secção 2.1.1.3, “Preparando o Ambiente MySQL do Windows”.
• 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 exem-
plo, c:\ibdata e c:\iblogs. Você também poderá adicionar algumas linhas extras ao arquivo de opção, como descrito
44
Instalação do MySQL
em Secção 7.5.3, “Opções de Inicialização do InnoDB”. (A partir do MySQL 4.0, o InnoDB cria os seus arquivos de log e da-
dos no diretório de dados 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 vo-
cê 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:
• 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 Win-
dows 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%
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ção
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 inverti-
da. 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 WinMySQLAd-
min no diretório bin de sua instalação MySQL, assim como um arquivo de ajuda contendo instruções para usá-lo. O WinMySQ-
LAdmin tem a capacidade de editar os seus arquivos de opção, mas note o seguinte:
• Se o WinMySQLAdmin encontra o arquivo C:\my.cnf, ele o renomeará para C:\my_cnf.bak para disabilitá-lo.
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á habilitado. 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 funcionar em qualquer processador Intel i386
ou melhor.
45
Instalação do MySQL
Os servidores mysqld-nt e mysqld-max-nt suportam conexões named pipe. Se você usar um destes servidores, o uso de na-
med pipes está sujeito a estas condições:
• 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.
Para informações sobre qual servidor binário executar, veja Secção 2.1.1.3, “Preparando o Ambiente MySQL do Windows”.
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
011024 10:58:25 InnoDB: Started
Quando o servidor finaliza sua sequência de inicialização, você deve ver algo como abaixo, que indica que o servidor está pronto
para o conexão com o cliente:
mysqld: ready for connections
Version: '4.0.14-log' socket: '' port: 3306
O servidor continuará a gravar no console qualquer saída de diagnóstico adicional que ele produza. Você pode abrir uma nova jane-
la de console na qual se executará os programas clientes.
Se você omitir a opção --console, o servidor grava a saída do diagnóstico no log de erro no diretório de dados. O log de erro é o
arquivo com a extensão .err.
46
Instalação do MySQL
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 Win-
dows 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.)
Isto chama o utilitário administrativo do MySQL mysqladmin para conectar ao servidor e manda-lo finalizar. O comando conec-
ta como root que é a conta administrativa padrão no sistema de permissões do MySQL. Por favor, note que o sistema de permis-
sõ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. See Secção E.1.2, “Criando Arquivos Trace
(Rastreamento)”.
Use mysqld --help para mostrar todas as opções que o mysqld entende!
O utilitário Serviços (o Service Control Manager do Windows) pode ser encontrado no Painel de Controle do
Windows (em Ferramentas Administrativas no Windows 2000). É recomendado que se feche o utilitário Serviços
enquanto realiza a operações de instalação ou remoção do servidor a partir desta linha de comando. Isto evita alguns erros estra-
nhos.
Para ter o MySQL funcionando com TCP/IP no Windows NT 4, você deve instalar o service pack 3 (ou mais novo)!
Antes de instalar o MySQL como um serviço, você deve primeiro parar o servidor atual em execução usando o seguinte comman-
do:
shell> C:\mysql\bin\mysqladmin -u root shutdown
Isto chama o utilitário administrativo do MySQL mysqladmin para conectar ao servidor e mandá-lo parar. O comando conecta
com 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 você não definir um nome para o serviço, ele é instalado com o nome MySQL. Uma vez instalado, ele pode ser imediatamente
iniciado a partir do utilitário Serviços, ou usando o comando NET START MySQL. (Este comando é caso insensitivo).
Uma vez em execução, o mysqld pode ser parado usando o utilitário de Serviços ou usando o comando NET STOP MySQL, ou o
comando mysqladmin shutdown.
Se você tiver problemas instalando o mysqld como um servico usando apenas o nome do servidor, tente instalá-lo usando seu ca-
minho compelto:
shell> C:\mysql\bin\mysqld --install
47
Instalação do MySQL
A partir do MySQL 4.0.2, você pode especificaro nome do serviço depois da opção --install. A partir do MySQL 4.0.3, você
pode especificar uma opção --defaults-file depois do nome do serviço para indicar onde o servidor deve obter opções ao
iniciar. A regras que determinam o nome do serviço e os arquivos de opção que o servidor usa são as seguintes:
• Se você não especificar um nome de serviço, o servidor usa o nome padrão do MySQL e o servidor lê as opções do grupo
[mysqld] no arquivo de opções padrão.
• Se você especificar um nome de serviço depois da opção --install, o servidor ignora o grupo de opção [mysqld] em vez
de ler opções do grupo que tem o mesmo nome que o serviço. O servidor le opções do arquivo de opções padrão.
• Se você especificar uma opção --defaults-file depois do nome de serviço, o servidor ignora o arquivo de opções padrão
e lê opções apenas a partir do grupo [mysqld] do arquivo indicado.
Nota: Antes do MySQL 4.0.17, um servidor instalado como um serviço do Windows tinha problema na inicialização se o seu ca-
minho ou nome do serviço possuisse espaços. Por esta razão, evite instalar o MySQL em um diretório como C:\Program Fi-
les 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.
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 aque-
le 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âmetros de inicialização'' no utilitário de Serviços do Win-
dows 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 proble-
ma. 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 automaticamente.
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 durante 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 es-
parava apenas por alguns segundos para o desligamento 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 armazenamento InnoDB deverá fa-
zer 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 fina-
lização do MySQL Server esteja completa. Se você notar que ainda não é o suficiente para a sua instalação, 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
48
Instalação do MySQL
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 Secção 2.1.1.6, “Iniciando o MySQL no Windows 95, 98,
ou Me”.
• Named pipes é atualmente mais lento que TCP/IP em muitas configurações do Windows.
• Alguns usuários encontraram problemas ao finalizar o servidor MySQL quando era usado named pipes.
A partir da versão 3.23.50, named pipes só está habilitado para o mysqld-nt e mysql-max-nt se eles forem iniciados com a
opção --enable-named-pipe.
Você pode forçar que um cliente MySQL use named pipes especificando a opção --pipe ou especificando . como nome de má-
quina. Use a opção --socket para especificar o nome do pipe. No MySQL 4.1, você deve usar a opção --protocol=PIPE.
Você pode testar se o MySQL está funcionando executando qualquer dos seguintes comandos:
C:\> C:\mysql\bin\mysqlshow
C:\> C:\mysql\bin\mysqlshow -u root mysql
C:\> C:\mysql\bin\mysqladmin version status proc
C:\> C:\mysql\bin\mysql test
Se o mysqld está lento para responder a suas conexões no Win95/Win98, provavelmente existe um problema com seu DNS. Nes-
te caso, inicie o mysqld com a opção --skip-name-resolve e use somente localhost e números IP na coluna Host das
tabelas de permissões do MySQL.
Binario Descrição
mysql Compilado em Windows nativo, oferecendo capacidades de edição de texto muito limitadas.
mysqlc Compilado com o compilador Cygnus GNU, que oferece edição readline.
Se você desejar usar o mysqlc, deve ter uma cópia da biblioteca cygwinb19.dll em algum lugar que o mysqlc possa encon-
trá-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 pareci-
do).
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 confi-
gurar 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. See Secção 4.4.1, “A Sintaxe de GRANT e REVOKE”.
49
Instalação do MySQL
Se você tiver problemas com um arquivo RPM (por exemplo, se você receber o erro ``Sorry, the host 'xxxx' could
not be looked up''), veja Secção 2.6.2.1, “Notas Linux para distribuições binárias”.
Na maioria dos casos, você só precisa instalar os pacotes servidor MySQL e o cliente MySQL para ter uma instalação fun-
cional do MySQL. Os outros pacotes não são exigidos para uma instalação padrão. Se você quiser executar um servidor MySQL
Max que tenha capacidades adicionais, você deve instalar o RPM MySQL-Max depois de instalar o RPM MySQL-server. See
Secção 4.8.5, “mysqld-max, om servidor mysqld extendido”.
Se você tiver um dependência de falha ao tentar instalar os pacotes do MySQL 4.0 (ex.: ``error: removing these packa-
ges would break dependencies: libmysqlclient.so.10 is needed by ...''), você também deve instalar
o pacote MySQL-shared-compat, o qual inclui ambas as bibliotecas para compatibilidade com versões anteriores
(libmysqlclient.so.12 para MySQL 4.0 e libmysqlclient.so.10 para MySQL 3.23).
Muitas distribuições Linux ainda vêm com o MySQL 3.23 a elas normalmente ligam as aplicações dinamicamente para economizar
espaço em disco. Se estas bibliotecas compartilhadas estão em pacotes separados (ex.; MySQL-shared), é suficiente simplesmen-
te deixar estes pacotes instalados e apenas atualizar os pacotes do servidor e cliente MySQL (que são estaticamente ligados e não
dependem de bibliotecas compartilhadas). Para distribuições que incluem as bibliotecas compartilhadas no mesmo pacote que o
servidor MySQL (ex.: Red Hat Linux), você também pode instalar nosso RPM MySQL-shares 3.23 ou usar o pacote compatível
com MySQL-shared.
• MySQL-server-VERSION.i386.rpm
O servidor MySQL. Você ira precisar dele a não ser que você apenas queira se conectar a um servidor MySQL executando em
outra máquina. Note que este pacote era chamado MySQL-VERSION.i386.rpm antes do MySQL 4.0.10.
• MySQL-Max-VERSION.i386.rpm
O servidor MySQL Max. Este seridor tem capacidades adicionais que o servidor no ROM MySQL-server não tem. Você de-
ve instalar o RPM MySQL-server primeiro, porque o RPM MySQL-Max depende dele.
• MySQL-client-VERSION.i386.rpm
Os programas clientes padrões do MySQL. Provavelmente você sempre instalará este pacote.
• MySQL-bench-VERSION.i386.rpm
• MySQL-devel-VERSION.i386.rpm
As bibliotecas e arquivos include necessários se você precisa para compilar outros clientes MySQL, como nos módulos Perl.
• MySQL-shared-VERSION.i386.rpm
Este pacote contém as bibliotecas compartilhadas (libmysqlclient.so*) que certas linguagens e aplicações nencessárias
para carregar dinâmicamente e usar o MySQL.
• MySQL-shared-compat-VERSION.i386.rpm
Este pacote inclui o biblioteca compartilhada para MySQL 3.23 e MySQL 4.0. Instale este pacote em vez do MySQL-shared,
se você tiver aplicações instaladas que são dinâmicamente ligadas ao MySQL 3.23 mas você quer atualizar para o MySQL 4.0
sem quebrar as dependências da biblioteca. Este pacote esta disponível desde o MySQL 4.0.13.
• MySQL-embedded-VERSION.i386.rpm
• MySQL-VERSION.src.rpm
Este contém o código fonte para todos os pacotes acima. Ele também pode ser usado para tentar construir RPMs para outras ar-
quiteturas (por exemplo, Alpha ou SPARC).
Para ver todos os arquivo em um pacote RPM, (por exemplo, um RPM MySQL-server), execute:
50
Instalação do MySQL
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 Secção 2.2.2, “Verificando a Integridade do Pacote Usando MD5 Checksums ou GnuPG”.
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 Sec-
ção 2.4.3, “Inicializando e parando o MySQL automaticamente.” 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 an-
tes 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. See Secção 2.4, “Configurações e Testes Pós-instalação”.
Se alguma coisa der errado, você encontrar maiores informações no capítulo de instalação. See Secção 2.2.9, “Instalando uma Dis-
tribuição Binária do MySQL”.
Este pacote está localizado dentro de um arquivo de imagem de disco (.dmg). que você primeiro precisa montar com um duplo cli-
que 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.
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á re-
nomeado 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. See Secção 2.2.5, “Layouts de
Instalação”.
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:
51
Instalação do MySQL
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 simples-
mente 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 segu-
rança foram adicionados. See Secção 2.5.6, “Atualizando a Tabela de Permissões”.
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. Simples-
mente 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 ins-
tall this software on this disk. (null) no diálogo de seleção do disco de destino. Se este erro ocorrer, simples-
mente 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.
O Startup Item será instalado em /Library/StartupItems/MySQL. Ele adiciona uma variável MYSQLCOM=-YES- ao ar-
quivo de configuração do sistema (/etc/hostconfig). Se você desejasse diasbilitar a inicialização automática do MySQL,
simplesmente altere o valor desta variável para MYSQLCOM=-NO-.
No Mac OS X Server, o script de instalação do Startup Item disabilitará automaticamente a inicialização da instalação padrão do
MySQL alterando a variável MYSQL em /etc/hostconfig para MYSQL=-NO-. Isto é para evitar conflitos na inicialização. No
entanto, ele não desliga um servidor MySQL ajá em execução.
Depois da instalação, você pode iniciar o MySQL executando os seguintes comandos em um janela de terminal. Note qye você pre-
ceisa ter privilégios de administrador para realizar esta tarefa.
Se você não tiver instalado o Startup Item, digite a seguinte sequência de comandos:
shell> cd /usr/local/mysql
shell> sudo ./bin/mysqld_safe
(Enter your password, if necessary)
(Press Control-Z)
shell> bg
(Press Control-D or enter "exit" to exit the shell)
Agora você deve conseguir se conectar ao servidor MySQL, ex.: executando /usr/local/mysql/bin/mysql
Se você instalar o MySQL pela primeira vez, lembre-se de consigurar uma senha para o usuário root do MySQL!
Por favor, tenha certeza que o comando hostname na segunda linha está entre crases (`), assim a shell pode substituí-la com a sa-
ída deste comando (o nome da máquina deste sistema)!
Você também pode querer adicionar aliases ao seu arquivo de resursos do sheel para acessar mysql e mysqladmin da linha de
comando:
alias mysql '/usr/local/mysql/bin/mysql'
alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
52
Instalação do MySQL
De forma alternativa, você pode simplesmente adicionar /usr/local/mysql/bin a sua variável de ambiente PATH, ex.: adi-
cionando o seguinte ao arquivo $HOME/.tcshrc:
setenv PATH ${PATH}:/usr/local/mysql/bin
Note que instalar um novo MySQL PKG não remove o diretório de uma instalação mais antiga. Infelizmente o Mac OS X Installer
ainda não oferece a funcionalidade exigida para atualizar apropriadamente pacotes instalados anteriormente.
Depois de copiar os arquivos de banco de dados do MySQL sobre os da versão anterior e inicializar o nova versão com sucesso,
você deve remover os arquivos da instalação antiga para economizar espaço em disco. Adicionalmente você também deve remover
versões mais antigas do diretório do Package Receipt localizados em /Library/Receipts/mysql-<version>.pkg.
• 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 execu-
tar a respectiva versão do NetWare.
• Os dados do MySQL, assim com os seus binários, devem ser instalados em um volume NSS; volumes tradicionais não são su-
portados.
Se você estiver executando o MySL no NetWare 6.0, sugerimos que você utilize a opção --skip-external-locking na li-
nha de comando. Também será necessário utilizar CHECK TABLE e REPAIR TABLE em vez de myisamchk, porque myi-
samchk faz uso de lock externo. Lock externo possui problemas com NetWare 6.0; o problema foi eliminado no NetWare 6.5.
1. Se você estiver atualizando de um instaação anterior, para o servidor MySQL. Isto é feito a partir do console do servidor,
usando:
SERVER: mysqladmin -u root shutdown
2. Conecte-se no servidor alvo a partir de uma máquina cliente com acesso ao local onde você instalará o MySQL.
3. Extraia o pacote zip binário em seu servidor. Tenha certeza de permitir que os caminhos no arquivo zip sejam usados. É segu-
ro simplesmente extrair os arquivos para SYS:\.
Se você estiver atualizando de uma instalando anterior, você pode precisar copiar os diretórios de dados (ex.:
SYS:MYSQL\DATA) agora, assim como my.cnf se você o tiver costumizado. Você pode então deletar a cópia antiga do
MySQL.
4. Você pode desejar renomear o diretório para algo mais consistente e fácil de usar. Recomendamos usar o SYS:MYSQL; exem-
plos no manual o usarão para se referir ao diretório de instalação em geral.
5. No console do servidor, adicione um caminho de busca no diretório contendo os NLMs do MySQL. Por exemplo:
SERVER: SEARCH ADD SYS:MYSQL\BIN
8. Para finalizar a instalação, você também deve adicionar os seguintes comandos ao autoexec.ncf. Por exemplo, se sua ins-
talação do MySQL está em SYS:MYSQL e você quiser que o MySQL inicie automaticamente, você pode adicionar estas li-
nhas:
#Starts the MySQL 4.0.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE
53
Instalação do MySQL
Se você estiver usando NetWare 6.0, você deve adicionar o parâmetro --skip-external-locking:
#Starts the MySQL 4.0.x database server
SEARCH ADD SYS:MYSQL\BIN
MYSQLD_SAFE --skip-external-locking
Se houver uma instalação existente do MySQL no servidor, verifique a existencia de comandos de inicialização do MySQL em
autoexec.ncf, e edite ou delete-os se necessário.
Para uma lista atualizada completa dos mirrors de download da MySQL, veja http://www.mysql.com/downloads/mirrors.html. Vo-
cê também encontrará informação sobre como se tornar um mirror do MySQL e como relatar um mirror ruim ou desatualizado.
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 platafor-
mas. Você pode fazer o download do código fonte em http://www.gnu.org/software/textutils/. Se você tiver o OpenSSL instalado,
você também pode usar o comando openssl md5 <pacote>. Uma implementação do comando md5 para DOS/Windows está
disponível em http://www.fourmilab.ch/md5/.
Exemplo:
shell> md5sum mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
155836a7ed8c93aee6728a827a6aa153
mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
Você deve verificar se o resultado do checksum corresponde a aquele impresso no página de download logo abaixo do respectivo
pacote.
A maioria do sites mirrors também oferecem um arquivo chamado MD5SUMS, que também inclui o MD5 checksums para todos os
arquivos incluídos no diretório Downloads. Note no entanto que é muito fácil de modificar este arquivo e ele não é um método
muito confiável. Caso esteja em dúvida, você deve consultar diferentes sites mirroers e comparar os resultados.
Um método de verificação de integridade de um pacote mais confiável é o uso de assinaturas criptografadas. A MySQL AB usa o
GNU Privacy Guard (GnuPG), uma alternativa Open Source para o bem conhecido Pretty Good Privacy (PGP) de
Phil Zimmermann. Veja http://www.gnupg.org/ and http://www.openpgp.org/ para mais informações sobre OpenPGP/GnuPG e
como obter e instalar o GnuPG em seus sistema. A maioria das distribuições de Linux já vêm com o GnuPG instalado por padrão.
A partir do MySQL 4.0.10 (Fevereiro de 2003), a MySQL AB começou a assinar o seus pacotes de download com GnuPG. Assina-
turas criptografadas são um método bem mais confiável de verificação da integridade e autenticidade de um arquivo.
Para verificar a assinatura de um pacote específico, você primeiro precisa obtter uma cópia da chave pública GPG da MySQL AB
(<[email protected]>). Você também pode cortá-la e colá-la diretamente daqui ou obtê-la em http://www.keyserver.net/.
54
Instalação do MySQL
Key ID:
pub 1024D/5072E1F5 2003-02-03
MySQL Package signing key (www.mysql.com) <[email protected]>
Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
Public Key (ASCII-armored):
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
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 corres-
pondente, 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-stan-
dard-4.0.10-gamma-pc-linux-i686.tar.gz.asc. Tenha certeza que ambos os arquivos estão armazenados no mes-
mo diretório e então execute o seguinte comando para verificar a assinatura para este arquivo:
shell> gpg --verify <package>.asc
Exemplo:
shell> gpg --verify mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz.asc
gpg: Warning: using insecure memory!
gpg: Signature made Mon 03 Feb 2003 08:50:39 PM MET using DSA key ID 5072E1F5
gpg: Good signature from
"MySQL Package signing key (www.mysql.com) <[email protected]>"
Para pacotes RPM, não há assinaturas separadas - pacotes RPM atualmente têm uma assinatura GPG incluída e MD5 checksum.
Você pode verificá-los executando o seguinte comando:
shell> rpm --checksig <package>.rpm
Exemplo:
shell> rpm --checksig MySQL-server-4.0.10-0.i386.rpm
MySQL-server-4.0.10-0.i386.rpm: md5 gpg OK
Nota: Se você estiver usando RPM 4.1 e ele reclamar sobre (GPG) NOT OK (MISSING KEYS: GPG#5072e1f5) (mesmo
se você a importou para detro de sua pasta de chaves publicas GPG), você precisa importá-las para dentro de sua pasta de chaves
RPM primeiro. RPM 4.1 não utiliza mais ias suas pastas de chaves GPG (e o próprio GPG), mas mantém sua própria pasta de cha-
ves (porque ele é um aplicativo do sistema e a pasta de chaves públicas do GPG é um arquivo específico do usuário). Para importar
a chave pública do MySQL em uma pasta de chaves RPM, use os seguintes comandos:
shell> rpm --import <pubkey>
Exemplo:
55
Instalação do MySQL
Caso você note que as assinaturas MD5 checksum ou GPG não coincidem, tente primeiro fazer o download do pacote respectivo
mais uma vez, talvez de outro site mirror. Se você não obter sucesso na verificação da integridade do pacote repetidas vezes, notifi-
que-nos sobre tais incidentes incluindo o nome completo do pacote e o site que você tem utilizado para fazer o download pelos
emails <[email protected]> ou <[email protected]>.
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. See Secção 2.6.6.4, “Notas IBM-AIX”.
• Amiga.
• BSDI 2.x com o pacote incluído MIT-pthreads. See Secção 2.6.4.5, “Notas BSDI Versão 2.x”.
• BSDI 3.0, 3.1 e 4.x com threads nativas. See Secção 2.6.4.5, “Notas BSDI Versão 2.x”.
• SCO OpenServer with a recent port of the FSU Pthreads package. See Secção 2.6.6.9, “Notas SCO”.
• SCO UnixWare 7.0.1. See Secção 2.6.6.10, “Notas SCO Unixware Version 7.0”.
• DEC Unix 4.x com threads nativas. See Secção 2.6.6.6, “Notas Alpha-DEC-UNIX (Tru64)”.
• FreeBSD 2.x com o pacote incluído MIT-pthreads. See Secção 2.6.4.1, “Notas FreeBSD”.
• FreeBSD 3.x e 4.x com threads nativas. See Secção 2.6.4.1, “Notas FreeBSD”.
• HP-UX 10.20 com o pacote incluído MIT-pthreads ou DCE threads. See Secção 2.6.6.2, “Notas HP-UX Versão 10.20”.
• HP-UX 11.x com as threads nativas. See Secção 2.6.6.3, “Notas HP-UX Versão 11.x”.
• Linux 2.0+ com LinuxThreads 0.7.1+ ou glibc 2.0.7+. See Secção 2.6.2, “Notas Linux (Todas as versões)”.
• NetBSD 1.3/1.4 Intel e NetBSD 1.3 Alpha (Necessita GNU make). See Secção 2.6.4.2, “Notas NetBSD”.
• OpenBSD > 2.5 com threads nativas. OpenBSD < 2.5 com o pacote incluído MIT-pthreads . See Secção 2.6.4.3, “Notas
OpenBSD”.
• OS/2 Warp 3, FixPack 29 e OS/2 Warp 4, FixPack 4. See Secção 2.6.7, “Notas OS/2”.
• SGI Irix 6.x com threads nativas. See Secção 2.6.6.8, “Notas SGI Irix”.
• Solaris 2.5 e superior com threads nativas nas plataformas SPARC e x86. See Secção 2.6.3, “Notas Solaris”.
• SunOS 4.x com o pacote incluído MIT-pthreads. See Secção 2.6.3, “Notas Solaris”.
• Tru64 Unix
• Windows 9x, Me, NT, 2000 e XP. See Secção 2.6.1, “Notas Windows”.
Perceba que nem todas as plataformas são apropriadas para executar o MySQL. Os seguintes fatores determinam se uma certa pla-
taforma é 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 th-
56
Instalação do MySQL
read.
• 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 ori-
ginal.
• A habilidade do kernel e/ou a biblioteca thread executar várias threads que adiquire/libera um bloqueio mutex sobre uma pe-
quena região crítica frequentemente sem trocas de contexto excessivos. Em outras palavras, se a implementação de pthre-
ad_mutex_lock() requisitar a CPU muito rapidamente, isto irá afetar o MySQL tremendamente. Se esse detalhe não esti-
ver sendo cuidado, adicionar CPUs extras podem deixar o MySQL mais lento.
• Habilidade do sistema de arquivos em lidar com arquivos grandes de forma eficiente, se suas tabelas forem grandes.
• Nosso nível de experiência aqui na MySQL AB com a plataforma. Se nós conhecemos bem uma plataforma, introduzimos oti-
mizações/correçoes específicas para ela habilitadas na hora da compilação. Nós também podemos fornecer conselhos sobre co-
mo configurar seu sistema otimizadamente para o MySQL.
• O número de usuários que tem executado o MySQL com sucesso naquela plataforma em configurações similares. Se esse nú-
mero for alto, as chances de se ter alguma surpresa específica da plataforma fica muito menor.
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 real-
mente temos esperanças que ele irá se unir ao clube dos tops uma vez que a biblioteca thread está melhorando. Nós também acredi-
tamos 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 ins-
truçõ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. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”.
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 falan-
do sobre a escolha de um SO para um propósito dedicado: executar o MySQL, e comparamos as plataformas levando isto em con-
sideraçã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 plata-
forma em particular. Estamos apenas colocando nossas observações para ajudá-lo na decisão de qual plataforma usar o MySQL na
sua configuração.
• 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.6-beta). 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çamen-
to.
• 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 no-
vo que o seu). Nós temos tentado corrigir somente erros fatais e torná-los menores, com alterações relativamente seguras para
aquela versão.
A segunda decisão a ser feita é se você deseja usar uma distribuição fonte ou binária. Na maioria dos casos provavelmente você de-
verá usar a distribuição binária, se alguma existir para sua plataforma, será normalmente muito mais fácil para instalar do que a dis-
tribuiçã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 distribuiçõ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
57
Instalação do MySQL
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. See
Secção 4.8.5, “mysqld-max, om servidor mysqld extendido”.
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 distribuições binárias. Segue abaixo a lista
das opções extras mais comuns que você pode querer usar:
• --with-innodb
• --with-libwrap
• --with-debug[=full]
• A distribuição binária padrão é normalmente compilada com suporte para todos conjuntos 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:
• 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 mes-
mo formato de arquivo.
• O terceiro número (0 é o número da versão do nível de distribuição. Este é incrementado para cada nova distribuição. Normal-
mente você desejará a última versão para o nível de publicação que tiver escolhido.
• 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 documentados na seção News. See Apêndice D, Histórico de Alterações do
MySQL. Existem também novos comandos e extensões na maioria das publicações alpha. Desenvolvimento ativo que po-
dem 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
58
Instalação do MySQL
• 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.
Todas as versões do MySQL funcionam sobre nossos testes padrões e comparativos para garantir que eles são relativamente segu-
ros para o uso. Como os testes padrões são extendidos ao longo do tempo para conferir por todos os bugs antigos encontrados, o pa-
cote de testes continua melhorando.
Perceba que todas publicações de versões foram testadas pelo menos com:
Faz parte de um sistema de produção para um cliente. Ela tem diversas tabelas com centenas de megabytes de dados.
O diretório mysql-test contém um conjunto extensivo de casos de teste. Nós executamos estes testes para cada servidor bi-
nário.
Este executa uma série de consultas comuns. É também um teste para ver se o último conjunto de otimizações fez o código
mais rápido. See Secção 5.1.4, “O Pacote de Benchmark do MySQL”.
• O teste crash-me
Este tenta determinar quais recursos o banco de dados suporta e quais são suas capacidades e limitações. See Secção 5.1.4, “O
Pacote de Benchmark do MySQL”.
Outro teste é que nós usamos a versão do MySQL mais nova em nosso ambiente de produção interna, em pelo menos uma máqui-
na. Nós temos mais de 100 gigabytes de dados com que trabalhar.
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:
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:
59
Instalação do MySQL
Dentro de um diretório de instalação, o layout de uma instalação baseada em fontes diferencia de uma instalação binária nas segu-
intes formas:
• The mysqld server is installed in the libexec directory rather than in the bin directory.
• The header file and library directories are include/mysql and lib/mysql rather than include and lib.
You can create your own binary installation from a compiled source distribution by executing the script scripts/ma-
ke_binary_distribution.
Também tentamos ajudar usuários que solicitam recursos que são de fácil implementação. Tomamos notas do que nossos usuários
licenciados gostariam de ter,especialmente do que nossos clientes com suporte extendido desejam e tentamos ajudá-los.
Não existe uma real necessidade para baixar uma nova release. A seção News irá dizer se a nova versão tem alguma coisa que você
precisa. See Apêndice D, Histórico de Alterações do MySQL.
• Para cada pequena atualização, o último número na versão é incrementado. Quando tiver um maior número de novos recursos
ou menor incompatibilidade com versões antigas, o segundo número na versão é incrementado. Quando o formato de arquivo
altera, o primeiro número é aumentado.
• Versões estáveis testadas aparecem na média de uma a duas vezes por ano, mas se pequenos bugs são encontrados, uma versão
será lançada apenas com as correções dos erros.
• Distribuições binárias para algumas plataformas será feita por nós somente para releases mais importantes. Outras pessoas po-
dem fazer distribuições binárias para outros sistemas mas provavelmente com menos frequencia.
• Nós normalmente disponibilizamos os patches logo que localizamos e corrigimos pequenos bugs. Eles normalmente são imedi-
atamente disponibilizados em nosso repositório publico do BitKeeper. Eles serão incluídos na próxima distribuição.
• Para bugs não críticos, mas irritantes, disponibilizamos patches se eles são enviados para nós. De qualquer forma, iremos com-
binar vários deles em um patch maior.
• Se existitr, por algum motivo, um bug fatal numa versão criaremos uma nova release o mais cedo possível. Gostaríamos que
outras empresas fizessem isto também.
A versão estável atual é a 3.23; nós já mudamos o desenvolvimento em atividade para a versão 4.0. Bugs contiuarão a ser corrigi-
dos na versão estável. Não acreditamos em um congelamento completo, pois isto abandona a correções de bugs e coisas que
``devem ser feitas.'' ``Alguma coisa congelada'' significa que talvez possamos adicionar pequenas coisas que ``com certeza não afe-
tará nada que já esteja funcionando.''
O MySQL usa um esquema de nomes um pouco diferente da maioria dos outros produtos. Em geral é relativamente seguro utilizar
qualquer versão que tenha sido lançado a algumas semanas e que não tenham sido sustituída por uma nova versão. See Sec-
ção 2.2.4, “Qual versão do MySQL deve ser usada”.
60
Instalação do MySQL
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 dependentes das decisões de projeto. See Sec-
ção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no MySQL”.
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.
• 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 assegu-
rar 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 corrigidos. Se algo for impossível de corrigir (devido a alguma decisão de projeto
interno no MySQL), documentaremos isto no manual. See Secção 1.8.6, “Erros Conhecidos e Deficiências de Projetos no
MySQL”.
• Nós fazemos uma construção para todas as plataformas para as quais suportamos binários (mais de 15 plataformas) e executa-
mos 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 contruçõ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. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”. A mensagem de anúncio contém uma lista de todas as
alterações da distribuiçã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.)
• 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 (depois 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 encontrados 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.
Em adição aos binários forncedios em formatos de pacotes específicos da plataforma (veja Secção 2.1, “Instalação rápida padrão do
MySQL”), oferecemos distribuições binários para outras plataformas através de arquivos tar compactados (.tar.gz).
Estas distribuições são geradas usando o script Build-tools/Do-compile que compila o código fonte e cria o arquivo biná-
rio em tar.gz usando scripts/make_binary_distribution. Estes binários são configurados e construídos com os se-
guintes compiladores e opções.
61
Instalação do MySQL
• Linux 2.4.xx Intel Itanium 2 com ecc (Intel C++ Itanium Compiler 7.0)
CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2 -tpp2 -ip -no-
lib_inline" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex -
-enable-thread-safe-client --enable-local-infile
• Linux 2.4.xx Intel Itanium com ecc (Intel C++ Itanium Compiler 7.0)
• Linux 2.4.xx alpha com ccc (Compaq C V6.2-505 / Compaq C++ V6.3-006)
62
Instalação do MySQL
• IBM AIX 4.3.3 ppc com xlC_r (IBM Visual Age C/C++ 6.0)
• HP-UX 11.11 pa-risc2.0 64 bit com aCC (HP ANSI C++ B3910B A.03.33)
• HP-UX 11.11 pa-risc2.0 32bit com aCC (HP ANSI C++ B3910B A.03.33)
63
Instalação do MySQL
Os seguintes binários são contruídos em sistemas de terceiros gentilmente cedidos para a MySQL AB pou outros usuários. Pou fa-
vor, note que eles só são fornecidos como cortesia. Uma vez que a MySQL AB não tem total controle sobre estes sistemas, nós po-
demos fornecer apenas suporte limitado para os binários construídos nestes sistemas.
• Compaq Tru64 OSF/1 V5.1 732 alpha com cc/cxx (Compaq C V6.3-029i / DIGITAL C++ V6.1-027)
As seguintes opções de compilação foram usadas nos pacotes binários que a MySQL AB costumava fornecer no passado. Estes bi-
nários não são mais atualizados, mas as opções de compilação são mantidas aqui com o propósito de referência.
• SunOS 5.5.1 (e acima) sun4u com egcs 1.0.3a ou 2.90.27 ou gcc 2.95.2 e mais novo
64
Instalação do MySQL
Qualquer que tenha mais opções otimizadas para qualquer das configurações listadas acima pode sempre enviá-los para a lista de
email ``internals'' do MySQL. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”.
Distribuições RPM que anteceda o MySQL versão 3.22 são contribuições dos usuários. Os RPMs gerados por nós da MySQL AB
só começaram a ser fornecidos a partir da versão 3.22 do MySQL.
Se você deseja compilar uma versão para depuração do MySQL, você deve adicionar --with-debug ou -
-with-debug=full para as linhas de configuração acima e remover qualquer opção -fomit-frame-pointer.
Para distribuições do Windows, por favor, veja Secção 2.1.1, “Instalando o MySQL no Windows”.
Em adição a estes pacotes genéricos, também oferecemos binários em formatos de pacote específicos da plataforma para platafor-
mas selecionadas. Veja Secção 2.1, “Instalação rápida padrão do MySQL” para mais informações sobre como\ intalá-los.
As distribuições genéricas do MySQL estão empacotados com arquivos GNU tar com compactação gzip (.tar.gz). Você precisa
das seguintes ferramentas para instalar um distribuição binária do MySQL:
• 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 exem-
plo) 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 de-
pois de descompactar a distribuição. See Secção 1.7.1.3, “Como relatar erros ou problemas”.
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
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
65
Instalação do MySQL
DBD-mysql.
Para instalar uma distribuição binária, siga estes passos, então proceda com a Secção 2.4, “Configurações e Testes Pós-instalação”,
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, des-
compactamos 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 Secção 2.2.1, “Como obter o MySQL”.
As distribuições binárias do MySQL são fornecidas como arquivos tar compactados e tem nomes como mysql-VER-
SÃO-SO.tar.gz, onde VERSÃO é um número (por exemplo, 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 transacio-
nais e outros recursos. See Secção 4.8.5, “mysqld-max, om servidor mysqld extendido”. Note que todos os binários são
contruídos a partir da mesma distribuição fonte do 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 gru-
po e usuário com outro nome, diferente de mysql.
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ÃO-SO.tar.gz | tar xvf -
shell> ln -s full-path-to-mysql-VERSÃO-SO mysql
O primeiro comando cria um diretório chamado mysql-VERSÃO-SO. O segundo comando cria um link simbólico para o di-
retório. Isto torna a referência ao diretório de instalação mais fácil, chamado como /usr/local/mysql.
Você encontrará diversos arquivos e subdiretórios no diretório mysql. O mais importante para propósitos de instalação são os
subdiretórios bin e scripts.
• bin
Este diretório contém o programa cliente e o servidor. Você deve adicionar o caminho completo deste diretório a sua vari-
ável de ambiente PATH e assim a sua shell encontrará o programa MySQL de forma apropriada. See Apêndice F, Variá-
veis de Ambientes do MySQL.
• scripts
Este diretório contém o script mysql_install_db usado para inicializar o banco de dados mysql contendo a tabela
de permissões que armazenam o servidor de permissões de acesso.
8. Caso você desejasse usar o mysqlaccess e a distribuição do MySQL está em um local diferente do padrão, você deve alte-
rar a localização para onde o mysqlaccess espera encontrar o cliente mysql. Edite o script bin/mysqlaccess aproxi-
madamente na linha 18. Procure pela linha que se parece com a apresentada abaixo:
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
Altere o caminho para o local onde o mysql atualmente está armazaenado em seu sistema. Se você não fizer isto receberá
uma mensagem de erro Broken pipe quando executar o mysqlaccess.
66
Instalação do MySQL
9. Crie as tabelas de permissão do MySQL (necessário apenas se você não tiver instalado o MySQL anteriormente):
shell> scripts/mysql_install_db
Note que as versões mais antigas que a 3.22.10 iniciam o servidor MySQL quando você executa o mysql_install_db. Is-
to não ocorre mais.
10. Altere o proprietário dos binários para o root e o proprietário do diretório de dados para o usuário com o quel você executará
o mysqld:
shell> chown -R root /usr/local/mysql/.
shell> chown -R mysql /usr/local/mysql/data
shell> chgrp -R mysql /usr/local/mysql/.
O primeiro comando altera o atributo owner dos arquivos para o usuário root, o segundo altera o atributo owner do diretó-
rio de dados para o usuário mysql e o terceiro altera o atributo group para o grupo mysql.
11. Se você quiser instalar o suporte para a interface Perl DBI/DBD, veja Secção 2.7, “Comentários de Instalação do Perl”.
12. Se você desejasse que o MySQL seja iniciado automaticamente quando você iniciar a sua máquina, você pode copiar sup-
port-files/mysql.server para o local onde o seu sistema tem os arquivos de inicialização. Mais informações podem
ser encontradas no script support-files/mysql.server e em Secção 2.4.3, “Inicializando e parando o MySQL auto-
maticamente.”.
Depois de tudo estar descompactado e instalado, você deve inicializar e testar a sua distribuição.
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 Secção 4.8.2, “mysqld-safe, o wrapper do mysqld” e See Secção 2.4, “Configurações e Testes Pós-
instalação”.
Você precisa das seguintes ferramentas para contruir e instalar o MySQL a partir do código fonte:
• 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 exem-
plo) 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 al-
guns 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 proble-
mas em algumas plataformas portanto ele deve ser evitado se existir um novo compilador para a plataforma.
• Um bom programa make. GNU make é sempre recomendado e é algumas vezes necessário. Se você tiver problemas, reco-
mendamos 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 IM-
PORTANTE que você a use. De outra forma, você pode compilar um binário que quebra randomicamente. Nós também recomen-
damos que você use -felide-constructors e -fno-rtti juntas com -fno-exception. Se estiver com dúvidas, faça o
seguinte:
67
Instalação do MySQL
--with-mysqld-ldflags=-all-static
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 proble-
ma 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 diretório scripts depois
de desempacotar a distribuição. See Secção 1.7.1.3, “Como relatar erros ou problemas”.
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_.... See Secção 4.1.2, “Arquivo de Opções my.cnf”. See Secção 7.5.3, “Opções de Iniciali-
zação do InnoDB”.
Você pode adicionar novos usuários utilizando o script bin/mysql_setpermission se você instalar os módulos Perl DBI e
DBD-mysql.
Para instalar uma distribuição fonte, siga os passos a seguir, então prossiga para Secção 2.4, “Configurações e Testes Pós-
instalação”, 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 Secção 2.2.1, “Como obter o MySQL”.
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. See Secção 7.6, “Tabelas BDB
ou BerkeleyDB”.
Distribuições fontes do MySQL são fornecidas como arquivos tar compactados e tem nomes como mysql-VERSI-
ON.tar.gz, onde VERSION é um número como 5.0.6-beta.
Estes comandos adicionam o grupo mysql e o usuário mysql. A sintaxe para useradd e groupadd podem mudar um
pouco em diferentes versões de Unix. Elas podem também ser chamadas adduser e addgroup. Você pode escolher outros
nomes para o usuário e grupo em vez de mysql.
68
Instalação do MySQL
Note que agora você deve configurar e construir o MySQL a partir deste diretório raiz da distribuição. Você não pode cons-
truí-lo em um diretório diferente.
Quando você executar configure, você pode desejar especificar algumas opções. Execute ./configure --help para
uma lista das opções. Secção 2.3.3, “Opções típicas do configure”, discute algumas das opções mais usadas.
Se o configure falhar, e você for enviar uma mensagem para lista de email do MySQL para pedir ajuda, por favor, inclua
qualquer linhas de config.log que você acha que pode ajudar a resolver o problema. Também inclua as últimas linhas da
saída de configure se o configure abortar. Envie o relatório de erros usando o script mysqlbug. See Secção 1.7.1.3,
“Como relatar erros ou problemas”.
Se a compilação falhar, veja Secção 2.3.5, “Lidando com Problemas de Compilação”, para uma ajuda com um varios proble-
mas comuns.
8. Instalar tudo:
shell> make install
9. Crie as tabelas de permissões do MySQL (necessárias só se você não tiver instalado o MySQL anteriormente):
shell> scripts/mysql_install_db
Note que as versões do MySQL anteriores à versão 3.22.10 iniciam o servidor MySQL quando você executa
mysql_install_db. Isto não acontece mais!
10. Altere o dono dos binários para root e do diretório dados para o usuário que irá executar o mysqld:
shell> chown -R root /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql
O primeiro comando altera o atributo de proriedade dos arquivos para o usuário root, o segundo altera o atributo de
propriedade do diretório de dados para o usuário mysql, e o terceiro altera o atributo de grupo para o grupo mysql.
11. Se você deseja instalar suporte para a interface Perl DBI/DBD, veja Secção 2.7, “Comentários de Instalação do Perl”.
12. Se você deseja que o MySQL inicie automaticamente quando você ligar sua máquina, você pode copiar support-fi-
les/mysql.server para o local onde seu sistema tem seus arquivos de incialização. Mais informações podem ser encon-
tradas no próprio script support-files/mysql.server e em Secção 2.4.3, “Inicializando e parando o MySQL automa-
ticamente.”.
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 alguma informação no arquivo di-
retório-dados-mysql/'nome_maquina'.err. A razão pode ser que você já possua outro servidor mysqld sendo exe-
cutado. See Secção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.
69
Instalação do MySQL
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 es-
tiver em execução.
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
bancos 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. See Secção 4.1.2, “Arquivo de Opções my.cnf”.
• 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. See Secção A.4.5, “Como Proteger ou AlterarHow to Protect or
70
Instalação do MySQL
• Se você deseja compilar programas linkeditados estaticamente (por exemplo, para criar uma distribuição binária, obter mais ve-
locidade, 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
• 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 proble-
mas estranhos para usuários do MySQL no passado.
Segue algumas configurações de variáveis de ambiente comuns, dependendo do compilador que você estiver usando:
Na maioria dos casos você pode obter um binário MySQL razoavelmente otimizado usando as opções acima e adicionar as se-
guintes 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 todos compilados com otimização plena e de-
ve ser perfeito para a maioria dos usuários. See Secção 2.2.8, “Binários MySQL compilados pela MySQL AB”. Existem algu-
mas 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. See Secção 5.5.3, “Como a Compilação e a Ligação Afetam a Velocidade do MySQL”.
Se a construção falhar e produzir erros sobre seu compilador ou linkeditor não estarem aptos para criarem a biblioteca compar-
tilhada 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). See Secção 1.8.5.2, “Restrições de NOT NULL”.
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:
shell> ./configure --with-charset=CHARSET
CHARSET pode ser um de big5, cp1251, cp1257, czech, danish, dec8, dos, euc_kr, gb2312, gbk, german1,
hebrew, hp8, hungarian, koi8_ru, koi8_ukr, latin1, latin2, sjis, swe7, tis620, ujis, usa7, ou
win1251ukr. See Secção 4.7.1, “O Conjunto de Caracteres Utilizado para Dados e Ordenação”.
Se você desja converter os caracteres entre o servidor e o cliente, você deve dar uma olhada no comando SET OPTION CHA-
RACTER SET. See Secção 5.5.6, “Sintaxe de SET”.
71
Instalação do MySQL
Cuidado: Se você alterar o conjunto de caracteres depois de ter criado qualquer tabela, você deve executar myisamchk -r
-q --set-character--set=charset em cada tabela. Seus índices podem ser ordenados incorretamente. (Isto pode
acontecer se você instalar o MySQL, criar algumas tabelas, depois reconfigurar o MySQL para usar um conjunto diferente de
caracteres e reinstalá-lo).
Com a opção --with-extra-charset=LISTA você pode definir qual conjunto de caracteres adicionais deve ser compila-
do no servidor.
Aqui LISTA é uma lista de conjuntos de caracteres separados por espaços, complex para incluir todos caracteres que não po-
dem ser carregados dinamicamente ou all para incluir todos os conjuntos nos binários.
• Para configurar o MySQL com código para depuração, use a opção --with-debug:
shell> ./configure --with-debug
Isto inclui uma alocação segura de memória que pode encontrar alguns erros e fornecer saída sobre o que está acontecendo. See
Secção E.1, “Depurando um Servidor MySQL”.
• Se seus programas clientes usam threads, você precisará também compilar uma versão thread-safe da biblioteca cliente do
MySQL com as opções do configure --enable-thread-safe-client. Isto irá criar uma biblioteca libmysqlcli-
ent_r com o qual você deverá ligar suas aplicações que fazem uso de threads. See Secção 12.1.14, “Como Fazer um Cliente
em Threads”.
• Opções que pertençam a sistemas particulares podem ser encontrados na seção com detalhes específicos de sistemas neste ma-
nual. See Secção 2.6, “Notas específicas para os Sistemas Operacionais”.
Para obter noss mais nova árvore de desenvolvimento, use estas instruções:
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:
Nos exemplos anteriores a árvore binária será configurada no subdiretório mysql-3.23/, mysql-4.0/, mysql-4.1/,
ou mysql-5.0/ do diretório atual.
Se você está atrás de um firewall e só pode iniciar conexões HTTP, você também pode o BitKeeper via HTTP.
Se vocÊ precisa usar um servidor proxy, simplesmente configure a variável de ambiente http_proxy para apontar para o
seu proxy:
shell> export http_proxy="http://seu.servidor.proxy:8080/"
72
Instalação do MySQL
O download inicial da árvore fonte pode demorar um pouco, dependendo da velocidade de sua conexão; seja paciente.
4. Você precisará do GNU make, autoconf 2.53 (ou posterior), automake 1.5, libtool 1.4 e m4 para exe-
cutar o próximo conjunto de comandos. Embora muitos sistemas operacionais já venham com suas próprias implementações
do make, as chances de que a sua compilação falhe com mensagens de erros estranhas são altas. Consequentemente é alta-
mente recomendado usar o GNU make (algumas vezes também chamado gmake).
Felizmente, um grande número de sistemas operacionais já vem com a ferramente GNU pré instalada ou são fornecidos paco-
tes de instalação da mesma. De qualquer forma, elas podem ser encontradas nos seguintes locais:
• http://www.gnu.org/software/autoconf/
• http://www.gnu.org/software/automake/
• http://www.gnu.org/software/libtool/
• http://www.gnu.org/software/make/
Se você estiver tentando configurar o MySQL 4.1 você também precisará do bison 1.75. Versões mais antigas do bison
podem exiobir este erro: sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded.
Nota: o tamanho máximo da tabela não é realmente excedido, o erro é causado por um bug nas versões mais novas do bison.
Versões do MySQL anteriores a 4.1 podem também compilar com outras implementações yacc (e.g. BSD yacc 91.7.30).
Para versões posteriores, GNU bison é uma exigência.
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 co-
mando pode sobrescrever sua versão atual instalada. 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. See Sec-
ção 14.1.2, “Pacotes de Teste do MySQL”.
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 confi-
guração, por favor 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 correta-
mente 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. See Secção 1.7.1.1, “As Listas de Discussão do MySQL”. 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.
73
Instalação do MySQL
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:
shell> bk clone bk://mysql.bkbits.net/mysqldoc mysqldoc
Existe também um árvore pública do BitKeeper para o MySQL Control Center e Connector/ODBC. Eles podem ser clonados da se-
guintes forma, respectivamente:
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 ante-
rior. Esta informação é armazenada no arquivo 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 conjetura é inválida quando você reconfi-
gurar.
• Cada vez que você executa configure, você deve executar make de novo para recompilar. Entretanto, você pode desejar re-
mover primeiro antigos arquivos objeto de construções anteriores, porque eles foram compilados usando diferentes opções de
configuraçã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
A lista abaixo descreve alguns dos problemas compilando o MySQL que tem sido encontrados com mais frequencia:
• Se você obtêm erros quando sql_yacc.cc como os mostrados abaixo, você provavelmente 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:
shell> ./configure --with-low-memory
Esta opção adiciona -fno-inline na a linha de compilação se você estiver usando gcc e -O0 se você estiver usando outro
74
Instalação do MySQL
programa. Você deve tentar a opção --with-low-memory mesmo se você tiver muita memória e espaço de swap que você
ache ser suficieente para não ocorrer erros. Este problema tem ocorrido mesmo em sistemas com boas configurações de hard-
ware e a opção --with-low-memory geralmente corrige isto.
• Por padrão, configure escolhe c++ como o nome do compilador e GNU c++ liga com -lg++. Se você estiver usando
gcc, este comportamento pode causar problemas durante a compilação, como o seguinte:
configure: error: installation or configuration problem:
C++ compiler cannot create executables.
Você podem também ter problemas durante a compilação relacionados à g++, libg++ ou libstdc++.
Uma causa destes problemas é que você pode não ter g++ ou você pode ter g++ mas não ter o libg++ ou o libstdc++. De
uma olhada no arquivo config.log. Ele deve conter a razão exata do porque seu compilador C++ não funciona! Para traba-
lhar evitando estes problemas, você pode usar gcc como seu compilador C++. Tente configurar a variável de ambiente CXX
para "gcc -O3". Por exemplo:
shell> CXX="gcc -O3" ./configure
Isto funciona porque gcc compila código fonte C++ tão bem quanto g++ faz, mas não ifaz a ligação em libg++ ou
libstdc++ por padrão.
Outra forma de corrigir estes problemas, com certeza, é instalando g++, libg++ e libstdc++. No entanto gostariamos de
lhe recomendar a não usar libg++ ou libstdc++ com o MySQL já que isto irá aumentar o tamanho do binário do mysqld
sem lhe trazer nenhum benefício. Algumas versões destas bibliotecas também tem causado problemas estranhos para os usuári-
os MySQL no passado.
Usar gcc como compilador C++ também é exigido, se você quiser compilar o MySQL com a funcionalidade RAID (veja Sec-
ção 6.5.3, “Sintaxe CREATE TABLE” para mais informações sobre tipos de tabela RAID) e você estiver usando o GNU gcc
versão 3 e acima. Se você obter erros como estes abaixo durante o estágio de ligação quando você configurar o MySQL para
compilar com a opção --with-raid, tente usar o gcc como o seu compilador C++ definindo a variável de ambiente CXX
mencionada acima:
gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk.o sort.o libnisam.a
../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a -lpthread
-lz -lcrypt -lnsl -lm -lpthread
../mysys/libmysys.a(raid.o)(.text+0x79): In function `my_raid_create':
: undefined reference to `operator new(unsigned)'
../mysys/libmysys.a(raid.o)(.text+0xdd): In function `my_raid_create':
: undefined reference to `operator delete(void*)'
../mysys/libmysys.a(raid.o)(.text+0x129): In function `my_raid_open':
: undefined reference to `operator new(unsigned)'
../mysys/libmysys.a(raid.o)(.text+0x189): In function `my_raid_open':
: undefined reference to `operator delete(void*)'
../mysys/libmysys.a(raid.o)(.text+0x64b): In function `my_raid_close':
: undefined reference to `operator delete(void*)'
collect2: ld returned 1 exit status
• Se sua compilação falhar com erros, como um dos seguintes, você deve atualizar sua versão de make para GNU make:
making all in mit-pthreads
make: Fatal error in reader: Makefile, line 18:
Badly formed macro assignment
or
make: file `Makefile' line 18: Must be a separator (:
or
pthread.h: No such file or directory
O Solaris e o FreeBSD são conhecidos por terem alguns problemas com o make.
• Se você deseja definir algumas opções que devem ser usadas pelo seu compilador C ou C++, adicione as opções para as variá-
veis de ambiente CFLAGS e CXXFLAGS. Você pode também especificar os nomes do compilador a ser usado da mesma forma
utilizando CC e CXX. Exemplo:
shell> CC=gcc
shell> CFLAGS=-O3
shell> CXX=gcc
shell> CXXFLAGS=-O3
shell> export CC CFLAGS CXX CXXFLAGS
Olhe em Secção 2.2.8, “Binários MySQL compilados pela MySQL AB” para uma lista de definição de opções que tenham sido
úteis em vários sistemas.
75
Instalação do MySQL
• Se você recebeu uma mensagem de erro como esta, é necessário atualizar o compilador gcc:
O gcc 2.8.1 funciona, mas recomendamos o uso do gcc 2.95.2 ou egcs 1.0.3a em seu lugar.
• Se você obtem erros como estes vistos abaixo enquanto estiver compilando o mysqld, o configure não detectou correta-
mente o tipo do último argumento para accept(), getsockname() ou getpeername():
cxx: Error: mysqld.cc, line 645: In this statement, the referenced
type of the pointer value "&length" is "unsigned long", which
is not compatible with "int".
new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
Para corrigir isto, edite o arquivo config.h (que é gerado pelo configure). Procure por estas linhas:
/* Define as the base type of the last arg to accept */
#define SOCKET_SIZE_TYPE XXX
Altere XXX para size_t ou int, dependendo de seu sistema operacional. (Perceba que você deverá fazer isto cada vez que
você executar configure, porque configure regenera config.h.)
• O arquivo sql_yacc.cc é gerado pelo sql_yacc.yy. Normalmente o processo de construção não necessita criar
sql_yacc.cc, porque o MySQL já vem com uma cópia pré-gerada. Entretanto, se você necessita recriá-lo você pode encon-
trar este erro:
"sql_yacc.yy", line xxx fatal: default action causes potential...
Isto é um indício de que sua versão do yacc é deficiente. Provavelmente você precisará instalar o bison (a versão GNU de
yacc) e usá-lo no lugar do yacc.
• Se você necessita depurar mysqld ou um cliente MySQL, execute configure com a opção --with-debug, então recom-
pile e ligue seus clientes com a nova biblioteca cliente. See Secção E.2, “Depurando um cliente MySQL.”.
• Se você tem um erro de compilação no Linux (ex. SuSE Linux 8.1 ou Red Hat Linux 7.3) parecido com o seguinte:
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from incompatible pointer type
libmysql.c:1329: too few arguments to function `gethostbyname_r'
libmysql.c:1329: warning: assignment makes pointer from integer without a cast
make[2]: *** [libmysql.lo] Error 1
Por padrão, o script configure tenta determinar o número correto de argumentos usando o compilador GNU C++ g++. Ele
testa os resultados errados permitidos, se o g++ não está instalado. Existem dois modos de contornar este problema:
• Certifique-se de que o GNU C++ g++ está instalado. Em algumas distribuições Linux, o pacote exigido é chamado gpp,
em outro ele é chamado gcc-c++.
• Use o gcc como o seu compilador C++ configurando a variáavel de ambiente CXX para gcc:
export CXX="gcc"
Note que no Linux você NÃO deve usar MIT-pthreads mas instalar LinuxThreads! See Secção 2.6.2, “Notas Linux (Todas as ver-
sões)”.
Se seu sistema não fornece suporte nativo a thread, você precisará construir o MySQL usando o pacote MIT-pthreads. Isto inclui
antigos sistemas FreeBSD, SunOS 4.X, Solaris 2.4 e anteriores entre outros. See Secção 2.2.3, “Sistemas Operacionais suportados
pelo MySQL”.
Note que a partir do MySQL 4.0.2, MIT-pthreads não fazem mais parte da distribuição fonte. Se você precisar deste pacote, você
precisa fazer o download dele separadamente em http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
Depois do download, extraia este arquivo fonte no nível mais alto do diretório de fontes do MySQL. Ele criará um novo subdiretó-
rio mit-pthreads.
76
Instalação do MySQL
• Na maioria dos sitemas, você pode forçar o uso de MIT-pthreads executando o configure com a opção -
-with-mit-threads:
shell> ./configure --with-mit-threads
Construção em um diretório não fonte não é suportado com o uso de MIT-pthreads, porque nós queremos minimizar nossas al-
terações para este código.
• As verificações que determinam se MIT-pthreads será usado ou não, ocorrerá somente durante a parte do processo de configu-
ração que trata com o código do servidor. Se você configurou a distribuição usando --without-server para construir so-
mente o código cliente, clientes não irão saber se o MIT-pthreads está sendo usado e irá usar conexões socket Unix por padrão.
Como os sockets Unix não funcionam sob MIT-pthreads, isto significa que você precisará usar -h ou --host quando execu-
tar programas clientes.
• Quando o MySQL é compilado usando MIT-pthreads, travas de sistema são desabilitadas por padrão por razões de performan-
ce. Você pode dizer ao servidor para usar travas de sistema com a opção --external-locking. Isto só é necessário se vo-
cê quiser executar dois servidores MySQL no mesmo diretório de dados (no que não é recomendado)
• Algumas vezes o comando pthread bind() falha ao ligar a um socket sem nenhuma mensagem de erro (pelo menos no Sola-
ris). O resultado é que todas conexões ao servidor falham. Por exemplo:
shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
A solução para isto é matar o servidor mysqld e reiniciá-lo. Isto só aconteceu conosco quando forçamos uma queda do servi-
dor e fizemos uma reinicialização imediata.
• Com MIT-pthreads, a chamada de sistema sleep() não é interrompível com SIGINT (break). Isto só é percebido quando vo-
cê executa mysqladmin --sleep. Você deve esperar pela chamada sleep() para terminar, antes da interrução ser servi-
da e o processo parar.
• Na ligação, você pode receber mensagens de alerta como estes (pelo menos no Solaris); elas podem ser ignoradas:
ld: warning: symbol `_iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol `__iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
• Não colocamos readline para funcionar com MIT-pthreads. (Isto não é necessário, mas pode ser interessante para alguns.)
Nota: As instruções neste documento estão restritas aos usuários que queiram testar o MySQL no Windows a partir da última dis-
tribuiçã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 distribuição binária precompilada do
MySQL que é construída especificamente para desempenho otimizado no Windows pela MySQL AB. Instruções para instalar uma
distribuição binária está disponível em Secção 2.1.1, “Instalando o MySQL no Windows”.
Para construir o MySQL no Windows a partir do fonte, você precisa dos seguintes compiladores e recursos disoníveis em seu siste-
ma Windows:
• Compilador VC++ 6.0 (atualizado com o SP 4 ou 5 e pacote Pre-processador) O pacote Pre-processador é necessário para a ma-
cro assembler. Mais detalhes em: http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/faq.aspx.
77
Instalação do MySQL
• 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 inte-
ressado. 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 abor-
dagem do BitKeeper, exige:
• 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 Secção 2.3.7.1, “Construindo o MySQL
Usando VC++”. Para contruir a partir da árvore do BitKeeper, vá para Secção 2.3.7.2, “Criando um Pacote Fonte do Windows a
partir da Última Fonte de Desenvolvimento”.
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. See Secção 1.7.1.1, “As Listas de Discussão
do MySQL”.
2. Descompacte a distribuição fonte no diretório mencionado acima usando Winzip ou outra ferramenta que possa ler arquivos
.zip.
8. Pressione F7 para iniciar a construção da depuração do servidor, bibliotecas e alguns aplicativos clientes.
10. Versões depuradas dos programas e bibliotecas são colocados nos diretórios client_debug e lib_debug. Versões libe-
radas dos programas e bibliotecas são colocados nos diretórios client_release e lib_release. Note que se você qui-
ser construir tanto versões liberadas quanto depuradas você pode selecionar a opção ``build all'' do menu Build.
11. Teste o servidor. O servidor construído usando as instruções anteriores irá esperar que o diretório base e de dados do MySQL
seja C:\mysql e C:\mysql\data por padrão. Se você quiser testar o seu servidor usando o diretório raiz de uma árvore
fonte e seu diretório de dados como o diretório base e o diretório de dados, você precisará dizer ao servidor os seus caminhos.
Você também pode fazer into na linha de comando com as opções --basedir e --datadir, ou colocar opções apropria-
das no arquivo de opções (o arquivo C:\my.cnf ou my.ini no diretório do Windows). Se você tiver um diretório de dados
existente em qualquer lugar que você queira usar, você pode especificá-lo no se caminho.
12. Inicie o ser servidor a partir do diretório client_release ou client_debug, dependendo de qual servidor você queira
usar. O instruções gerais de inicializaão do servidor estão em Secção 2.1.1, “Instalando o MySQL no Windows”. Você preci-
sará adaptar as instruções de forma apropriada se você quiser usar um diretório base ou diretório de dados diferente.
78
Instalação do MySQL
13. Quando o servidor está em execução de modo independente ou como um serviço daseado em sua configuração, tente se co-
nectar a ele pelo utilitário interativo mysql de linha de comando que existe em seu diretório client_release ou cli-
ent_debug.
Quando você estiver certo de que os programas que você construiu estão funcionando corretamente, pare o servidor. Então instale o
MySQL da seguinte forma:
1. Crie o diretório para instalar os arquivos do MySQL. Por exemplo, para instalar dentro de C:\mysql), use estes comandos:
C:
mkdir \mysql
mkdir \mysql\bin
mkdir \mysql\data
mkdir \mysql\share
mkdir \mysql\scripts
Se você quiser compilar outros clientes e ligá-los ao MySQL, você também deve criar diversos diretórios adicionais:
mkdir \mysql\include
mkdir \mysql\lib
mkdir \mysql\lib\debug
mkdir \mysql\lib\opt
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. See Secção 2.1.1.3, “Preparando o Ambiente
MySQL do Windows”.
1. Clone a árvore fonte do BitKeeper para o MySQL (versão 4.1 ou acima, como desejado). Para mais informações sobre como
clonar a árvore fonte veja as instruções em Secção 2.3.4, “Instalando pela árvore de fontes do desenvolvimento”.
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
79
Instalação do MySQL
Este script cria um pacote fonte Windows. para ser usado em seu sistema Windows. Você pode fornecer diferentes opções pa-
ra o script baseado em suas necessidades. Ele aceita as seguintes opções:
--debug Depura, sem criar o pacote
--tmp Especifica a localização temporária
--suffix Nome de sufixo para o pacote
--dirname Nome do diretório onde os arquivos são copiados (intermediario)
--silent Não apresenta uma lista dos arquivos processados
--tar Cria um pacote tar.gz em vez de .zip
--help Mostra esta mensagem de ajuda
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 Secção 2.3.7.1, “Construindo o MySQL Usando VC++”.
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ção_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ção_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 dire-
tório de instalação (normalmente algo como /usr/local/mysql). Para uma distrubuição fonte, este é o diretório principal da
sua árvore fonte do MySQL.
Nos comandos mostrados abaixo nesta seção e nas seguintes subseções, BINDIR é o caminho para a localização na qual os progra-
mas como mysqladmin e mysqld_safe estão instalados. Para uma distribuição binária este é o diretório bin. Para uma distri-
buição fonte, BINDIR é provavelmente /usr/local/bin, a menos que você especifique um diretório de instalação diferente de
/usr/local quando você executa configure. EXECDIR é a localização na qual o servidor mysqld está instalado. Para uma
distribuição binária, isto é o mesmo que BINDIR. Para uma distribuição fonte, EXECDIR é provavelmente /
usr/local/libexec.
1. Se necessário, inicie o servidor mysqld e configure as tabelas de concessões iniciais contendo os privilégios que determinam
como os usuários estão permitidos a conectar ao servidor. Isto é feito normalmente com o script mysql_install_db:
shell> scripts/mysql_install_db
Normalmente, mysql_install_db precisa ser executado somente na primeira vez que você instala o MySQL. Portanto, se
você estiver atualizando uma instalação existente, você pode pular este passo. (entretanto, mysql_install_db é realmente
seguro de usar e não irá atualizar nenhuma tabela que já exista, então se você não tem certeza do que fazer, você pode sempre
80
Instalação do MySQL
executar mysql_install_db.)
mysql_install_db cria seis tabelas (user, db, host, tables_priv, columns_priv e func) no banco de dados
mysql. Uma descrição dos privilégios iniciais é fornecido em Secção 4.4.4, “Configurando os Privilégios Iniciais do
MySQL”. De forma resumidao, estes privilégios permitem que o usuário root faça qualquer coisa no MySQL, e permitem a
qualquer um a criar ou usar bancos de dados com o nome de 'test' ou iniciando com 'test_' .
Se você não configurar as tabelas de concessões, o seguinte erro irá aparecer no arquivo log quando você não iniciar o servi-
dor:
mysqld: Can't find file: 'host.frm'
O erro acima pode também ocorrer com uma distribuição binária do MySQL se você não iniciar o MySQL executando o
./bin/mysqld_safe! See Secção 4.8.2, “mysqld-safe, o wrapper do mysqld”.
Você deve precisar executar mysql_install_db como root. Entretanto, se você preferir, pode executar o servidor
MySQL como um usuário (não-root) sem privilégios, desde que o usuário possa ler e escrever arquivos no diretório de ban-
co de dados. Instruções para executar o MySQL como um usuário sem privilégios é detalhado em Secção A.3.2, “Como Exe-
cutar o MySQL Como Um Usuário Normal”
Se você tiver problemas com o mysql_install_db, veja Secção 2.4.1, “Problemas Executando o
mysql_install_db”.
Existem algumas alternativas para executar o script mysql_install_db como ele é fornecido na distribuição MySQL:
• Você pode querer editar o mysql_install_db antes de executá-lo, para alterar os privilégios iniciais que são instala-
dos nas tabelas de concessões. Isto é útil se você deseja instalar o MySQL em várias máquinas com os mesmos privilégios.
Neste caso, é provável que você só precise adicionar algumas instruções INSERT extras para as tabelas mysql.user e
mysql.db.
• Se você deseja alterar o conteúdo da tabelas de concessões depois de instalá-las, você pode executar
mysql_install_db, então usar mysql -u root mysql para conectar às tabelas de concessões como o usuário
root e usar instruções SQL para modificá-las diretamente.
• É possível recriar as tabelas de permissões completamente depois delas já terem sido criadas. Você pode querer fazer isto
se você já instalou as tabelas mas deseja recriá-las depois das edições mysql_install_db.
Para maiores informações sobre estas alternativas, veja Secção 4.4.4, “Configurando os Privilégios Iniciais do MySQL”.
Se a sua versão do MySQL for mais antiga do que 4.0, substitua bin/safe_mysqld por bin/mysqld_safe no coman-
do:
Se você tiver problemas iniciando o servidor, veja Secção 2.4.2, “Problemas Inicializando o Servidor MySQL”.
3. Use mysqladmin para verificar se o servidor está em execução. Os seguintes comandos fornecem um teste simples para
conferir se o servidor está em funcionamento e respondendo às conexões:
shell> BINDIR/mysqladmin version
shell> BINDIR/mysqladmin variables
A saída de mysqladmin version varia muito pouco dependendo de sua plataforma e versão do MySQL, mas deve ser si-
milar a esta mostrada abaixo:
shell> BINDIR/mysqladmin version
mysqladmin Ver 8.14 Distrib 3.23.32, for linux on i586
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license.
Server version 3.23.32-debug
Protocol version 10
Connection Localhost via Unix socket
TCP port 3306
UNIX socket /tmp/mysql.sock
Uptime: 16 sec
Threads: 1 Questions: 9 Slow queries: 0
Opens: 7 Flush tables: 2 Open tables: 0
Queries per second avg: 0.000
Memory in use: 132K Max memory used: 16773K
81
Instalação do MySQL
Para ter uma idéia do que você pode fazer com BINDIR/mysqladmin, invoque-o com a opção --help.
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 funcio-
nar, veja Secção 2.4.2, “Problemas Inicializando o Servidor MySQL”.
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 |
+-----------+
shell> BINDIR/mysqlshow mysql
Database: mysql
+--------------+
| Tables |
+--------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+--------------+
shell> BINDIR/mysql -e "SELECT host,db,user FROM db" mysql
+------+--------+------+
| host | db | user |
+------+--------+------+
| % | test | |
| % | test_% | |
+------+--------+------+
Também existe uma suite de benchmark no diretório sql-bench (sob o diretório de instalação do MySQL) que você pode
usar para comparar como o MySQL se comporta em diferentes plataformas. O diretório sql-bench/Results contém os
resultados de várias execuções em diferentes bancos de dados e plataformas. Os seguintes módulos Perl adicionais são neces-
sários para executar o pacote de benchamrk:
DBI
DBD-mysql
Data-Dumper
Data-ShowTable
Estes módulos podem ser obtidos em CPAN http://www.cpan.org/. See Secção 2.7.1, “Instalando Perl no Unix”.
O diretório sql-bench/Results contém os resultados de várias execuções em diferentes bancos de dados e plataformas.
Para executar todos testes, execute estes comandos:
shell> cd sql-bench
shell> run-all-tests
Se você não possui o diretório sql-bench, você provavelmente está usando uma distribuição binária RPM. (Distribuições
fontes RPMs incluem o diretório com os benchmarks.) Neste caso, você deve primeiramente instalar a suite de benchmark an-
tes de poder usá-lo. A partir da versão 3.22 do MySQL, começaram a existir arquivos RPMs de benchmark chamados
mysql-bench-VERSION-i386.rpm que contém código ie dados de benchmark.
Se você tem uma distribuição fonte, você também pode executar os testes no subdiretório tests. Por exemplo, para executar
auto_increment.tst, faça isto:
shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
82
Instalação do MySQL
Se você deseja refazer suas tabelas de privilégios, você deve desligar o servidor mysqld, se ele já está executando, então faça as-
sim:
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:
Você pode descobrir que o mysql_install_db falha ao instalar as tabelas de permissões e termina depois de mostrar as se-
guintes mensagens:
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 quan-
do você postar um relato de erro usando mysqlbug! See Secção 1.7.1.3, “Como relatar erros ou problemas”.
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ê instalar o MySQL da primeira vez.
estiver em execução.
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). Ge-
ralmente 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.... See Secção 4.2, “Executando Múlti-
plos MySQL Servers na Mesma Máquina”.
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.
shell> TMPDIR=/algum_dir_tmp/
shell> MYSQL_UNIX_PORT=/algum_dir_tmp/mysqld.sock
shell> export TMPDIR MYSQL_UNIX_PORT
See Secção A.4.5, “Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock”.
algum_dir_tmp deve ser o caminho para o mesmo diretório no qual você tem permissão de escrita. See Apêndice F, Variá-
veis de Ambientes do MySQL.
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 &
Se você estiver executando RedHat Versão 5.0 com uma versão de glibc anterior 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 mensagens do MySQL.
Links para os arquivos de correio estão disponíveis online em http://lists.mysql.com/. Veja também Secção 2.6.2, “Notas Linux
83
Instalação do MySQL
(Todas as versões)”.
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:
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.
• Invocando mysql.server. Este script é usado primariamente na inicialização e finalização do sistema, e é descrito de forma
mais completa em Secção 2.4.3, “Inicializando e parando o MySQL automaticamente.”.
• Invocando mysqld_safe, que tenta determinar as opções apropriadas para mysqld e então executá-lo com estas opções. See
Secção 4.8.2, “mysqld-safe, o wrapper do mysqld”.
• Para o Windows NT/2000/XP, veja Secção 2.1.1.7, “Iniciando o MySQL no Windows NT, 2000, ou XP”.
Quando o daemon mysqld inicia, ele altera o diretório para o diretório de dados. É neste diretório que ele espera gravar arquivos
de log e o arquivo pid (com o ID do processo) e onde ele espera encontrar os bancos de dados.
A localização do diretório de dados é especificada quando a distribuição é compilada. Entretanto, se o mysqld espera encontrar o
diretório de dados em lugar diferente de onde ele realmente está no seu sistema, ele não funcionará corretamente. Se você tiver pro-
blemas com caminhos incorretos você pode encontrar quais opções o mysqld permite e quais são as configurações do caminho
padrão chamando o mysqld com a opção --help. Você pode sobrescrever os padrões especificando os caminhos corretos como
argumentos de linha de comando ao mysqld. (Estas opções também podem ser usadas com o mysqld_safe).
Normalmente você precisaria indicar ao mysqld somente o diretório base sob o qual o MySQL é instalado. Você pode fazer isso
usando a opção --basedir. Você pode também usar --help para conferir o efeito das opeções para se alterar o caminho
(perceba que --help deve ser a opção final do comando mysqld. Por exemplo:
shell> EXECDIR/mysqld --basedir=/usr/local --help
Uma vez que você determina as configurações de caminho que você deseja, inicie o servidor sem a opção --help.
Qualquer que tenha sido o método utilizado para iniciar o servidor, se houver falha na inicialização, confira o arquivo de log para
ver se você pode entender o porquê. Arquivos log estão localizados no diretório dados (normalmente /
usr/local/mysql/data para uma distribuição binária, /usr/local/var para uma distribuição fonte,
\mysql\data\mysql.err no Windows.) Procure no diretório de dados por arquivos com nomes no formato no-
me_maquina.err e nome_maquina.log onde nome_maquina é o nome do servidor. Então confira as últimas linhas destes
arquivos:
shell> tail nome_maquina.err
shell> tail nome_maquina.log
Significa que você não inicializou o mysqld com --bdb-no-recover e o Berkeley DB encontrou algo errado com seus arqui-
vos log quando ele tentou recuperar seus bancos de dados. Para poder continuar, você deve mover o antigo arquivo log Berkeley
DB do diretório do banco de dados para outro lugar, onde poderá examiná-los posteriormente. Os arquivos log são nomeados
log.0000000001, onde o número irá incrementar com o tempo.
84
Instalação do MySQL
Se você estiver executando o mysqld com suporte a tabelas BDB e o mysqld falhar no início, pode ser devido a alguns proble-
mas com o arquivo de recuperação BDB. Neste caso você pode tentar iniciar o mysqld com --bdb-no-recover. Se isto aju-
dar, 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, al-
go está usando a mesma porta TCP/IP que o mysqld está tentando usar. Veja Secção 2.4.1, “Problemas Executando o
mysql_install_db” e Secção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.
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 arqui-
vo /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 configu-
rado para usar MIT-pthreads.
Se você não consegue iniciar o mysqld você pode tentar criar um arquivo para rastreamento de erros (trace) para encontrar o pro-
blema. See Secção E.1.2, “Criando Arquivos Trace (Rastreamento)”.
Se você estiver utilizando tabelas InnoDB, procure pelas opções especificas de inicialização do InnoDB. See Secção 7.5.3, “Opções
de Inicialização do InnoDB”.
Se você estiver usando tabelas BDB (Berkeley DB), você deve se familiarizar com as diferentes opções especificas de inicialização
do BDB. Secção 7.6.3, “Opções de Inicialização do BDB”.
O script mysql.server pode ser usado para inicializar ou parar o servidor utilizando-o com os argumentos start ou stop:
shell> mysql.server start
shell> mysql.server stop
mysql.server pode ser encontrado no diretório share/mysql sob o diretório de instalação do MySQL ou no diretório sup-
port-files da árvore fonte do MySQL.
Note que se você usa o pacote RPM do Linux (MySQL-server-VERSÃO.rpm), o script mysql.server já estará instalada
como /etc/init.d/mysql - você não precisa instalá-lo manualmente. Veja Secção 2.1.2, “Instalando o MySQL no Linux” pa-
ra mais informações sobre pacotes RPM Linux.
No Mac OS X, você pode instalar um pacote do MySQL Startup Item separado para habilitar a inicialização automática do MySQL
no boot so sistema. Veja Secção 2.1.3, “Instalando o MySQL no Mac OS X” para maiores detalhes.
Antes do mysql.server iniciar o servidor, ele vai para o diretório de instalação do MySQL, e então chama o mysqld_safe.
Você pode precisar editar o mysql.server se tiver uma distribuição binária instalada em um local não-padrão. Modifique-o pa-
ra chamar o diretório (cd) apropriado antes de executar o safe_mysql. Se você deseja que o servidor seja executado com um
85
Instalação do MySQL
usuário específico, adicione uma linha user apropriada para o arquivo /etc/my.cnf, como será visto posteriormente nesta se-
ção.
mysql.server stop desliga o servidor MySQL enviando um sinal para ele. Você pode desligar o servidor manualmente exe-
cutando mysqladmin shutdown.
Você precisa adicionar estes comandos start e stop nos lugares apropriados de seus arquivos /etc/rc.* quando você quiser ini-
ciar o MySQL automaticamente no seu servidor.
On most current Linux distributions, it is sufficient to copy the file mysql.server into the /etc/init.d directory (or /
etc/rc.d/init.d on older Red Hat systems). Afterwards, run the following command to enable the startup of MySQL on sys-
tem bootup:
shell> chkconfig --add mysql.server
No FreeBSD o script de inicialização normalmente deve ir no diretório /usr/local/etc/rc.d/. A página do manual rc(8)
também diz que os scripts neste diretório só são executados, se o seu nome de base corresponder padrão global da sheel *.sh.
Qualquer outro arquivo ou diretório presente dentro do diretório são silenciosamente ignorados. Em outra palavras, no FreeBSD
você deve instalar o arquivo mysql.server como /usr/local/etc/rc.d/mysql.server.sh para habilitar a iniciali-
zação automática.
Como uma alternativa para o exposto acima, alguns sistemas operacionais também usam /etc/rc.local ou /
etc/init.d/boot.local para inicializar serviços adicionais durante o boot. Para iniciar o MySQL usando este método, você
poderia poderia adicionar algo como o seguinte a ele:
/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
Você também pode adicionar opções para mysql.server em um arquivo global /etc/my.cnf. Um típico arquivo /
etc/my.cnf pode parecer com isto:
[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
basedir=/usr/local/mysql
A seguinte tabela mostra quais grupos de opções cada script de inicialização lê dos arquivos de opções:
Para compatibilidade com versões anteriores, o mysql.server também lê o grupo [mysql_server] e mysqld_safe tam-
bém lê o grupo [safe_mysqld]. No entanto, você deve atualizar os seus arquivos de opções para usar os grupos
[mysql.server] e [mysqld_safe].
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, vo-
cê 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 pro-
86
Instalação do MySQL
gramas. 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, con-
fira 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.
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 comportamen-
tos 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á as-
segurar 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 TIMES-
TAMP(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 al-
teração adicional será feita (compatível com versões anteriores com esta mudaça), permitindo que o tamanho do timestamp in-
dique 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 ca-
racteres 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.)
• 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'
87
Instalação do MySQL
• 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 SE-
RIALIZABLE. 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. See Capítulo 9, Conjunto de Caracteres Nacionais e Unico-
de. 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. See Secção 4.9.7, “mysqldump, Descarregando a Estrutura de Tabe-
las e Dados”.
• 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. See Secção D.2,
“Alterações na distribuição 4.1.x (Alpha)”.
• Se você estiver executando o MySQL Server no Windows, veja também Secção 2.5.8, “Atualizando o MySQL no Windows”.
• Após o upgrade, atualize a tabela de permissões para gerar uma nova coluna Password maior que é necessária para tratamen-
to seguro de senhas. O procedimento usa mysql_fix_privilege_tables e está descrito em Secção 2.5.6, “Atualizando
a Tabela de Permissões”. Estratégias alternativas para tratamento de senhas depois de uma atualização estão descritos posterior-
mente 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 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 compa-
tibilidade 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 exten-
dido que oferece tais recursos como instruções preparadas e conjuntos de múltiplos resultados.) See Secção 12.1.4, “Instruções
Preparadas da API C”.
• Atualizar para a versão 4.1 e executar o script mysql_fix_privilege_tables para aumentar a coluna Password na ta-
bela user e assim poder guardar hashes de senhas longos. Mas execute o servidor com a opção --old-passwords para
fornecer compatibilidade 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 aumentar a coluna Password na ta-
bela 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.
88
Instalação do MySQL
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 Secção 4.3.11, “Hashing de Senhas no MySQL 4.1”.
• 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 Secção 2.5.6, “Atualizando a Tabela de Permissões”.
• Edite qualquer script de inicialização ou arquivo de configuração para não utilizar nenhuma das opções obsoletas listadas poste-
riormente nesta seção.
• Converta seua arquivos ISAM antigos para arquivos MyISAM com o comando: mysql_convert_table_format data-
base. (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 de-
pois do nome do banco de dados na linha de comando. Você também pode executar uma instrução ALTER TABLE ta-
ble_name TYPE=MyISAM para cada tabela ISAM para convertê-la para MyISAM.
• Certifique-se de que você não tem nenhum cliente MySQL que utiliza bibliotecas compartilhadas (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. See Secção 4.4.1, “A Sintaxe de GRANT e REVOKE”.
Para fazer estes novos privilégios funcionarem, deve se atualizar a tabela de permissões. O procedimento está descrito em Sec-
ção 2.5.6, “Atualizando a Tabela de Permissões”. 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 va-
lor 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 modi-
ficar 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). See Secção 4.3.3, “Opções
de Inicialização para o mysqld em Relação a Segurança.”.
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á
89
Instalação do MySQL
configurado por padrão, Se você não usar o InnoDB e quiser economizar memória ao executar o servidor que possui suorte a
InnoDB habilitado, use a opção de inicialização do servidor. Para compilar o MySQL sem suporte ao InnoDB, execute con-
figure com a opção --without-innodb.
O lock de sistema externo dos arquivos MyISAM/ISAM agora está desligado por padrão. Pode se ligá-los fazendo -
-external-locking. (Para a maioria dos usuários isto nunca é necessário).
As opções de inicialização record_buffer, sort_buffer e warnings ainda funcionarão no MySQL 4.0 mas estãp ob-
soletas.
• SHOW MASTER STATUS agora retorna um conjunto vazio se o log binário não estiver habilitado.
• SHOW SLAVE STATUS agora retorna um conjunto vazio se o slave não está inicializado.
• O mysqld agora tem a opção --temp-pool habilitada por padrão já que isto da melhor rendimento com alguns SO
(Principalmente no Linux).
• Colunas DOUBLE e FLOAT agora respeitam o parâmetro UNSIGNED no armazenamento (antes, UNSIGNED era ignortado por
estas colunas).
• ORDER BY coluna DESC ordena valores NULL por último, como no MySQL 4.0.11. Na versão 3.23 e anteriores da versão
4.0, isto nem sempre era consistente.
• SHOW INDEX tem duas colunas a mais (Null e Index_type) que ele tinha nas versões 3.23.
• 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. See Secção 6.3.5, “Funções de Conversão”.
• Nota: quando você usa subtração entre valores inteiros onde um deles é do tipo UNSIGNED, o resultado será sem sinal. Em oy-
ras 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 subtraindo um valor sem sinal de uma coluna
do tipo inteiro. Você pode disabilitar este comportamento usando a opção --sql-mode=NO_UNSIGNED_SUBTRACTION
90
Instalação do MySQL
• 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-in-
sensitivo.
• 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 tem-
po incluiremos em nossa distribuição binária o mysqld_safe como um link simbólico para mysqld_safe.
• 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 con-
tagen 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 DA-
TABASE.
• 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.
• Clientes multi-thread devem usar mysql_thread_init() e mysql_thread_end(). See Secção 12.1.14, “Como Fazer
um Cliente em Threads”.
• Se você quiser recompilar o módulo Perl DBD::mysql, você deve conseguir o DBD-mysql versão 1.2218 ou mais novo por-
que os módulos DBD mais antigos usam a chamada obsoleta mysql_drop_db(). A versão 2.1022 ou mais nova é recomen-
dada.
• 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 Secção 2.5.8, “Atualizando o MySQL no Windows”. Se você esti-
ver usando replicação, veja Secção 4.11.2, “Visão Geral da Implementação da Replicação”.
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.
91
Instalação do MySQL
• 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 TA-
BLE 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ã 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 nega-
tivos causam problemas quando o -1 passa para 0. 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. AU-
TO_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.
• Quando for necessário dar manutenção ou reparar tabelas MyISAM .MYI deve ser usado a instrução CHECK TABLE ou o co-
mando 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.
92
Instalação do MySQL
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ê precisará 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 procedimento para atualizar a tabela de permissões está descrito em Secção 2.5.6, “Atualizando a Tabela de Per-
missões”.
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ápi-
das). 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 manipulador 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.
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 no-
vo 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 vo-
cê 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.
O novo código cliente trabalha com um servidor mysqld 3.20.x, portanto se houver problemas 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 segu-
inte 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 feita se você usa
o mysqlperl é alterar os argumentos para a função connect(). Os novos argumentos são: host, database, user, pass-
word (note que os argumentos user e password foram alterados de lugar). See Secção 12.5.2, “A interface DBI”.
• Agora existem algumas palavras reservadasi novas. As mais notáveis são DATE TIME e TIMESTAMP.
93
Instalação do MySQL
shell> mysql_fix_privilege_tables
Você deve executar este script enquanto o servidor está em execução. Ele tenta se conectar ao servidor na máquina local como ro-
ot. Se sua conta root exige uma senha, indique a senha na linha de comando. Para o MySQL 4.1 e acima, especifique a senha as-
sim:
shell> mysql_fix_privilege_tables --password=senha_root
O script realiza mysql_fix_privilege_tables qualquer ação necessária para converter sua tabela de permissões para o for-
mato atual. Você pode ver alguns avisos Duplicate column name, durante a execução, eles podem ser ignorados.
No Windows, não existe uma modo fácil de se atualizar a tabela de permissões até o MySQL 4.0.15. A partir desta versão, as distri-
buições do MySQL incluem um script SQL mysql_fix_privilege_tables.sql que você pode executar usando o cliente
mysql. Se sua instalação do MySQL está localizada em C:\mysql, o comando se parecerá com este:
C:\mysql\bin> mysql -u root -p mysql
mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables.sql
Se sua instalação está localizada em algum outro diretório, ajuste o caminha apropriadamente.
Como no procedimento com o Unix, você pode ver alguns avisos Duplicate column name enquanto o mysql processa as
instruções no script mysql_fix_privilege_tables.sql; eles podem ser ignorados.
Os arquivos ISAM de dados e índices (*.ISD e *.ISM respectivamente) são dependentes da arquitetura e em alguns casos depen-
dentees do Sistema Operacional. Se você deseja mover suas aplicações para outra máquina que tem uma arquitetura ou SO diferen-
tes da sua máquina atual, você não deve tentar mover um banco de dados simplesmente copiando os arquivos para a outra máquina.
Use o mysqldump.
Por padrão, o mysqldump irá criar um arquivo contendo declarações SQL. Você pode então transferir o arquivo para a outra má-
quina e alimentá-la como uma entrada para o cliente mysql.
Utilize mysqldump --help para ver quais opções estão disponíveis. Se você está movendo os dados para uma versão mais no-
va do MySQL, você deve usar mysqldump --opt com a nova versão para obter uma descarga rápida e compacta.
A mais fácil (mas não a mais rápida) forma para mover um banco de dados entre duas máquinas é executar os seguintes comandos
na máquina em que o banco de dados se encontra:
shell> mysqladmin -h 'nome da outra maquina' create nome_bd
shell> mysqldump --opt nome_bd \
| mysql -h 'nome da outra maquina' nome_bd
Se você deseja copiar um banco de dados de um máquina remota sobre uma rede lenta, pode ser usado:
shell> mysqladmin create nome_bd
shell> mysqldump -h 'nome de outra maquina' --opt --compress nome_bd \
| mysql nome_bd
O resultado pode também ser armazenado em um arquivo, depois transfira o arquivo para a máquina destino e carregue o arquivo
no banco de dados. Por exemplo você pode descarregar um banco de dados para um arquivo na máquina origem desta forma:
shell> mysqldump --quick nome_bd | gzip > nome_bd.contents.gz
94
Instalação do MySQL
(O arquivo criado neste exemplo está compactado.) Transfria o arquivo contendo o conteúdo do banco de dados para a máquina
destino e execute estes comandos:
shell> mysqladmin create nome_bd
shell> gunzip < nome_bd.contents.gz | mysql nome_bd
Também pode ser usado mysqldump e mysqlimport para ajudar na transferência do banco de dados. Para grandes tabelas, isto
é muito mais rápido do que usar simplesmente mysqldump. Nos comandos abaixo, DUMPDIR representa o caminho completo do
diretório que você utiliza para armazenar a saída de mysqldump.
Depois transfira os arquivo no diretório DUMPDIR para algum diretório correspondente na máquina destino e carregue os arquivos
no MySQL assim:
shell> mysqladmin create nome_bd # cria o banco de dados
shell> cat DUMPDIR/*.sql | mysql nome_bd # cria tabelas no banco de dados
shell> mysqlimport nome_bd DUMPDIR/*.txt # carrega dados nas tabelas
Não se esqueça de copiar o banco de dados mysql também, porque é nele que as tabelas de permissões (user, db e host) são
armazenadas. Você pode ter que executar comandos como o usuário root do MySQL na nova máquina até que você tenha o ban-
co de dados mysql no lugar.
Depois de importar o banco de dados mysql para a nova máquina, execute mysqladmin flush-privileges para que o
servidor recarregue as informações das tabelas de permissões.
2. Escolha uma hora do dia com pouco uso, onde a parada para manutenção é aceitável.
3. Alerte os usuários que ainda estão ativos para sua parada de manutenção.
4. Pare o Servidor MySQL em execução (por exemplo, com NET STOP mysql ou com o utilitário de Serviços se você esti-
ver exeutando MySQL como um serviço, ou com mysqladmin shutdown).
6. Execute o script de instalação do arquivo de distribuição do Windows, clicando no botão "Install" no WinZip e seguindo os
passos da instalação do script.
7. Você pode sobrescrever a sua instalação antiga do MySQL (normalmente em C:\mysql), ou instalá-la em um diretório dife-
rente, como C:\mysql4. Sobrescrever a instalação antiga é o recomendado.
8. Reinicie o serviço MySQL Server (por exemplo, com NET START mysql se você executar o MySQL como um serviço, ou
chamado o mysqld diretamente).
9. Atualize a tabela de permissões. O procedimento está descrito em Secção 2.5.6, “Atualizando a Tabela de Permissões”.
Este erro significa que seu arquivo my.cnf (por padrão C:\my.cnf) contém uma opção que não pode ser reconhecido pela
MySQL. Você pode verificar que este é o caso tentando reiniciar o MySQL com o arquivo my.cnf renomeado, por exemplo, para
my_cnf.old para prevenirt o servidor de usá-lo. Uma vez verificado isto, você precisa identificar qual parâmetro é o culpado.
Crie um novo arquivo my.cnf e mova as partes do arquivo antigo para ele (reiniciando o servidor depois de mover cada parte) até
que você determine qual opção está fazendo a inicialização do servidor falhar.
1. Instale um cliente SSH na sua máquina Windows. Como um usuário, o melhor opção paga que encontrei é o SecureCRT da
http://www.vandyke.com/. Outra opção é o f-secure da http://www.f-secure.com/. Você também pode encontrar algumas
versões livres no Google em
http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows/.
2. Inicie seu cliente SSH Windows. Configure Host_Name = IP_ou_Nome_servidormysql. Configure use-
rid=seu_userid para logar no seu servidor. Este valor userid não pode ser o mesmo do nome do usuário se sua conta
MySQL.
3. Configure a porta de acesso. E também faça um acesso remoto (Configure local_port: 3306, remote_host:
ip_ou_nomeservidormysql, remote_port: 3306 ) ou um acesso local (configure port: 3306, host: loca-
lhost, remote port: 3306).
4. Salve tudo, senão você terá que refazer tudo da próxima vez.
5. Logue ao seu servidor com a sessão SSH que acabou de ser criada.
7. Crie um novo arquivo no Windows e ligue ao MySQL usando o driver ODBC da mesma forma que você normalmente faz,
EXCETO pelo fato de digitar localhost para a máquina servidora MySQL --- não nomeservidormysql.
Você agora deve ter uma conexão ODBC ao MySQL, criptografada com SSH.
my_global.h inclui qualquer outro arquivo necessário para compatibilidade de Windows (como o windows.h) se o arquivo é
compilado no Windows.
Você também pode ligar seu código coma biblioteca dinâmica libmysq.lib, que é apenas um wrapper para carregar em
libmysql.dll sobre demanda, ou ligar com a biblioteca estática mysqlclient.lib.
Perceba que como as bibliotecas clientes do MySQL são compiladas como bibliotecas threaded, você também deve compilar seu
código para ser multi-threaded!
• Win95 e threads
O Win95 perde aproximadamente 200 bytes de memória principal para cada thread criada. Cada conexão no MySQL cria uma
nova thread, portanto você não deve executar o mysqld por um longo tempo no Win95 se seu servidor lida com várias cone-
xões! WinNT e Win98 não sofrem deste bug.
• Leituras simultâneas
O MySQL depende das chamadas pread() e pwrite() para estar apto a misturar INSERT e SELECT. Atualmente nós usa-
mos mutexes para emular pread()/pwrite(). Nós iremos, a longo prazo, trocar o nível da interface de arquivos com uma
interface virtual para que nós possamos usar a interface readfile()/writefile() no NT/2000/XP para obter mais velo-
cidade. A implementação atual limita o número de arquivos abertos que o MySQL pode usar para 1024, o que significa que vo-
cê não conseguirá executar tantas threads simultâneas no NT/2000/XP como no Unix.
96
Instalação do MySQL
• Leitura de blocos
O MySQL usa uma leitura de blocos para cada conexão, que tem as seguintes implicações:
• Uma conexão não irá ser disconectada automaticamente depois de 8 horas, como acontece com a versão Unix do MySQL.
Planejamos corrigir este problema quando nossos desenvolvedores Windows tiverem conseguido um boa solução.
• DROP DATABASE
Você não pode remover um banco de dados que está em uso por alguma thread.
Você não pode matar o MySQL do gerenciador de tarefas ou com o utilitário shutdown no Win95. Você deve desligá-lo com
mysqladmin shutdown.
• Nomes case-insensitivo
Nomes de arquivos não são caso sensitivo no Windows, portanto, nomes de bancos de dados e tabelas do MySQL também não
são caso sensitivo no Windows. A única restrição é que os nomes de bancos de dados e tabelas devem usar o mesmo caso em
uma sentença fornecida. See Secção 6.1.3, “Caso Sensitivo nos Nomes”.
Componentes de nomes de caminho no Win95 são separados pelo caracter ‘\’ o qual também é o caractere de escape no
MySQL. Se você estiver usando LOAD DATA INFILE ou SELECT ... INTO OUTFILE, use nomes de arquivo no estilo
Unix com caracteres ‘/’:
Pipes não funcionam com confiança na linha de comando do Windows. Se o pipe incluir o caracter ^Z / CHAR(24), o Win-
dows achará que ele encontrou o fim de um arquivo e abortará o programa.
Isto é um problma principalmente quando se tenta aplicar um log binário como a seguir:
Se você obter um problema aplicando o log e suspeitar que seja devido a um caracter ^Z/CHAR(24) você pode usar a seguinte
alternativa:
O último comando pode também ser usado para leitura em qualquer arquivo sql que contenha dados binários.
Se você utiliza um servidor MySQL versão 3.22 no NT com o os programas clientes MySQL mais novos, será apresentado o
seguinte erro:
97
Instalação do MySQL
Isto ocorre porque a versão do MySQL usa named pipes no NT por padrão. Você pode evitar este erro usando a opção -
-host=localhost para os novos clientes MySQL ou criar um arquivo de opções c:\my.cnf que contenha a seguinte in-
formação:
[client]
host = localhost
A partir da versão 3.23.50, named pipes são habilitados somente se o mysqld-nt ou mysqld-nt-max for iniciado com a
opção --enable-name-pipe.
Se você tenta executar um programa cliente MySQL para conectar a um servidor em execução na mesma máquina, nas obtem o
erro Access denied for user: 'some-user@unknown' to database 'mysql' quando acessar um servidor
MySQL na mesma máquina, signifca que o MySQL não pode resolver seu nome de máquina corretamente.
Para corrigir isto, você deve criar um arquivo \Windows\hosts com a seguinte informação:
127.0.0.1 localhost
• ALTER TABLE
Enquanto você está executando uma instrução ALTER TABLE, a tabela está bloqueada para ser usado por outras threads. Isto
ocorre devido ao fato de que no Windows, você não pode deletar um aruivo que está em uso por outra threads. No futuro, pode-
mos encontrar algum modo de contornarmos este problema.
• DROP TABLE
DROP TABLE em uma tabela que está em uso por uma tabela MERGE não funcionará no Windows porque o manipulador do
MERGE faz o mapeamento da tabela escondido da camada superior do MySQL. Como o Windows não permite que você delete
arquivos que estão abertos, você primeiro deve descarregar todas as tabelas MERGE (com FLUSH TABLES) ou apagar a tabela
MERGE antes de deletar a tabela. Corrigiremos isto assim que introduzirmos views.
As opções DATA DIRECTORY e INDEX DIRECTORY para CREATE TABLE são ignoradas no Windows, porque ele não su-
porta links simbólicos.
Aqui estão alguns assuntos em aberto para qualquer um que queira melhorar o MySQL no Windows:
• Seria muito interessante conseguir matar o mysqld do gerenciador de tarefas. Para o momento, deve ser usado o mysqlad-
min shutdown.
• Portar o readline para Windows para uso na ferramenta de linha de comando mysql.
• Versões GUI dos clientes MySQL padrões (mysql, mysqlshow, mysqladmin e mysqldump) seria ótimo.
• Seria muito bom se as funções de leitura e escrita no socket em net.c fosse interrompíveis. Isto tornaria possível matar thre-
ads abertas com mysqladmin kill no Windows.
• Adicionar macros para usar os métodos mais rápidos de incremento/decremento de threads seguras fornecidos pelo Windows.
98
Instalação do MySQL
cupe-se com uma construção própria apenas se você descobrir que nosso binário não é bom o suficiente para você. Neste caso, iría-
mos apreciar se fosse feito uma observação sobre isto, para que possamos fazer uma melhor versão bináris da próxima vez.
O MySQL usa LinuxThreads no Linux. Se você usa uma versão do Linux que não tenha a glibc2, você deve instalar LinuxThre-
ads antes de tentar compilar o MySQL. Você pode obter o LinuxThreads em http://www.mysql.com/downloads/os-linux.html.
NOTA: Temos visto alguns problemas estranhos com o Linux 2.2.14 e MySQL em sistemas SMP; Se você tem um sistema SMP,
recomendamos a atualização para o Linux 2.4! Seu sistema ficará mais rápido e mais estável.
Perceba que as versões da glibc iguais ou anteriores à Versão 2.1.1 tem um bug fatal no tratamento do pthre-
ad_mutex_timedwait, que é usado quando você executar instruções INSERT DELAYED. Recomendamos não usar INSERT
DELAYED antes de atualizar a glibc.
Se você planeja ter mais de 1000 conexões simultâneas, será necessário fazer algumas alterações na LinuxThreads, recompile-a e