i

Sum´rio a
1 Informa¸˜es Gerais . . . . . . . . . . . . . . . . . . . . . . . . 1 co
1.1 1.2 Sobre Este Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Conven¸˜es Usadas Neste Manual . . . . . . . . . . . . . . . . 2 co Vis˜o Geral do Sistema de Gerenciamento de Banco de Dados a MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Hist´ria do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 o 1.2.2 As Principais Caracter´ isticas do MySQL . . . . . . . . . . 5 1.2.3 Estabilidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.4 Qual o Tamanho Que as Tabelas do MySQL Podem Ter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.5 Compatibilidade Com o Ano 2000 (Y2K) . . . . . . . . 11 Vis˜o Geral da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 a 1.3.1 O Modelo de Neg´cio e Servi¸os da MySQL AB . . 13 o c 1.3.1.1 Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.1.2 Treinamento e Certifica¸˜o. . . . . . . . . . . . . 13 ca 1.3.1.3 Consultoria . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3.1.4 Licen¸as Comerciais . . . . . . . . . . . . . . . . . . . 14 c 1.3.1.5 Parcerias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3.2 Informa¸˜es para Contato . . . . . . . . . . . . . . . . . . . . . . 15 co Suporte e Licenciamento do MySQL . . . . . . . . . . . . . . . . . . . . . 16 1.4.1 Suporte Oferecido pela MySQL AB . . . . . . . . . . . . . 16 1.4.2 Copyrights e Licen¸as Usadas pelo MySQL . . . . . . 17 c 1.4.3 Licen¸as do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 c 1.4.3.1 Usando o Programa MySQL Sob uma Licen¸a Comercial . . . . . . . . . . . . . . . . . . . . . . . . 18 c 1.4.3.2 Usando o Programa MySQL Sem Custo Sob GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.4 Logomarcas e Marcas Registradas da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.4.1 O Logo Original do MySQL. . . . . . . . . . . . 20 1.4.4.2 Logomarcas da MySQL que Podem Ser Usadas Sem Permiss˜o de Altera¸˜o . . . . . . . . 20 a ca 1.4.4.3 Quando Vocˆ Precisa de Permiss˜o de e a Altera¸˜o para Usar as Logomarcas do MySQL? ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.4.4.4 Logomarcas dos Parceiros da MySQL AB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.4.4.5 Usando a Palavra MySQL em Texto Impresso ou Apresenta¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ca 1.4.4.6 Usando a Palavra MySQL em Nomes de Companhias e Produtos . . . . . . . . . . . . . . . . . . . 21 Mapa de Desenvolvimento do MySQL. . . . . . . . . . . . . . . . . . . . 21 1.5.1 MySQL 4.0 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 22

1.3

1.4

1.5

ii 1.5.1.1 Recursos Dispon´ iveis no MySQL 4.0 . . . . 22 1.5.1.2 Servidor Embutido MySQL . . . . . . . . . . . . 23 1.5.2 MySQL 4.1 in a Nutshell . . . . . . . . . . . . . . . . . . . . . . . 24 1.5.2.1 Recursos Dispon´ iveis no MySQL 4.1 . . . . 24 1.5.2.2 Stepwise Rollout . . . . . . . . . . . . . . . . . . . . . . 26 1.5.2.3 Pronto para Uso em Desenvolvimento Imediato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.5.3 MySQL 5.0, A Pr´xima Distribui¸˜o de o ca Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6 MySQL e o Futuro (o TODO). . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.6.1 Novos Recursos Planejados Para a Vers˜o 4.1 . . . . 26 a 1.6.2 Novos Recursos Planejados Para a Vers˜o 5.0 . . . . 27 a 1.6.3 Novos Recursos Planejados Para a Vers˜o 5.1 . . . . 28 a 1.6.4 Novos Recursos Planejados Para a Vers˜o em um a Futuro Pr´ximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 o 1.6.5 Novos Recursos Planejados Para a Vers˜o em um a Futuro a M´dio Prazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 e 1.6.6 Novos Recursos que N˜o Planejamos Fazer . . . . . . 32 a 1.7 Fontes de Informa¸˜es do MySQL . . . . . . . . . . . . . . . . . . . . . . . 33 co 1.7.1 Listas de Discuss˜o MySQL . . . . . . . . . . . . . . . . . . . . 33 a 1.7.1.1 As Listas de Discuss˜o do MySQL . . . . . . 33 a 1.7.1.2 Fazendo perguntas ou relatando erros . . . 35 1.7.1.3 Como relatar erros ou problemas . . . . . . . 36 1.7.1.4 Guia para responder quest˜es na lista de o discuss˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 a 1.7.2 Suporte a Comunidade MySQL Atrv´s do IRC e (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 1.8 Qual compatibilidade aos padr˜es o MySQL oferece ? . . . . . 41 o 1.8.1 Qual Padr˜o o MySQL Segue? . . . . . . . . . . . . . . . . . . 42 a 1.8.2 Executando o MySQL no modo ANSI . . . . . . . . . . . 42 1.8.3 Extens˜es do MySQL para o Padr˜o SQL-92. . . . . 43 o a 1.8.4 Diferen¸as do MySQL em Compara¸˜o com o c ca SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 1.8.4.1 Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1.8.4.2 SELECT INTO TABLE . . . . . . . . . . . . . . . . . . . 46 1.8.4.3 Transa¸˜es e Opera¸˜es Atˆmicas . . . . . . 46 co co o 1.8.4.4 Stored Procedures e Triggers . . . . . . . . . . . 49 1.8.4.5 Chaves Estrangeiras . . . . . . . . . . . . . . . . . . . 49 1.8.4.6 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 1.8.4.7 ‘--’ como In´ de Coment´rio . . . . . . . . 51 icio a 1.8.5 Como o MySQL Lida com Restri¸˜es . . . . . . . . . . . . 52 co 1.8.5.1 Restri¸˜es de PRIMARY KEY / UNIQUE co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 1.8.5.2 Restri¸˜es de NOT NULL . . . . . . . . . . . . . . . . 53 co 1.8.5.3 Restri¸˜es de ENUM e SET. . . . . . . . . . . . . . . 53 co 1.8.6 Erros Conhecidos e Deficiˆncias de Projetos no e MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

iii 1.8.6.1 Erros da Vers˜o 3.23 Corrigidos em Vers˜es a o Posteriores do MySQL . . . . . . . . . . . . . . . . . . . . 53 1.8.6.2 Open Bugs / Deficiˆncias de Projeto no e MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2

Instala¸˜o do MySQL . . . . . . . . . . . . . . . . . . . . . 60 ca
2.1 Instala¸˜o r´pida padr˜o do MySQL . . . . . . . . . . . . . . . . . . . . . 60 ca a a 2.1.1 Instalando o MySQL no Windows . . . . . . . . . . . . . . . 60 2.1.1.1 Exigˆncias do Sistema Windows . . . . . . . . 61 e 2.1.1.2 Instalando uma Distribui¸˜o Bin´ria do ca a Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.1.1.3 Preparando o Ambiente MySQL do Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.1.1.4 Selecionando um Servidor Windows . . . . 63 2.1.1.5 Iniciando o Servidor pela Primeira Vez . . 64 2.1.1.6 Iniciando o MySQL no Windows 95, 98, ou Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.1.1.7 Iniciando o MySQL no Windows NT, 2000, ou XP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 2.1.1.8 Executando o MySQL no Windows . . . . . 68 2.1.2 Instalando o MySQL no Linux . . . . . . . . . . . . . . . . . . 69 2.1.3 Instalando o MySQL no Mac OS X . . . . . . . . . . . . . 71 2.1.4 Instalando o MySQL no NetWare . . . . . . . . . . . . . . . 73 2.1.4.1 Instalando o MySQL para Bin´rios do a NetWare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.2 Detalhes Gerais de Instala¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ca 2.2.1 Como obter o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2.2 Verificando a Integridade do Pacote Usando MD5 Checksums ou GnuPG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 2.2.3 Sistemas Operacionais suportados pelo MySQL . . 78 2.2.4 Qual vers˜o do MySQL deve ser usada . . . . . . . . . . 80 a 2.2.5 Layouts de Instala¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . 83 ca 2.2.6 Como e quando as atualiza¸˜es s˜o lan¸adas? . . . . 84 co a c 2.2.7 Filosofia das Distribui¸˜es - Nenhum Bug co Conhecidos nas Distribui¸˜es . . . . . . . . . . . . . . . . . . . . . 84 co 2.2.8 Bin´rios MySQL compilados pela MySQL AB . . . 86 a 2.2.9 Instalando uma Distribui¸˜o Bin´ria do MySQL . . 91 ca a 2.3 Instalando uma distribui¸˜o com fontes do MySQL . . . . . . . 93 ca 2.3.1 Vis˜o geral da instala¸˜o r´pida . . . . . . . . . . . . . . . . 94 a ca a 2.3.2 Aplicando patches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 2.3.3 Op¸˜es t´ co ipicas do configure . . . . . . . . . . . . . . . . . . . 97 2.3.4 Instalando pela ´rvore de fontes do desenvolvimento a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 2.3.5 Lidando com Problemas de Compila¸˜o . . . . . . . . 103 ca 2.3.6 Notas MIT-pthreads . . . . . . . . . . . . . . . . . . . . . . . . . . 106 2.3.7 Instalando o MySQL a partir do Fonte no Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 2.3.7.1 Construindo o MySQL Usando VC++ . . 108

iv 2.3.7.2 Criando um Pacote Fonte do Windows a ´ partir da Ultima Fonte de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 2.4 Configura¸˜es e Testes P´s-instala¸˜o . . . . . . . . . . . . . . . . . . . 111 co o ca 2.4.1 Problemas Executando o mysql_install_db. . . . 115 2.4.2 Problemas Inicializando o Servidor MySQL . . . . . 116 2.4.3 Inicializando e parando o MySQL automaticamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 2.5 Atualizando/Desatualizando o MySQL . . . . . . . . . . . . . . . . . . 120 2.5.1 Atualizando da Vers˜o 4.0 para 4.1 . . . . . . . . . . . . 120 a 2.5.2 Atualizando da Vers˜o 3.23 para 4.0 . . . . . . . . . . . 123 a 2.5.3 Atualizando da vers˜o 3.22 para 3.23 . . . . . . . . . . . 126 a 2.5.4 Atualizando da vers˜o 3.21 para 3.22 . . . . . . . . . . . 128 a 2.5.5 Atualizando da vers˜o 3.20 para 3.21 . . . . . . . . . . . 129 a 2.5.6 Atualizando a Tabela de Permiss˜es . . . . . . . . . . . . 130 o 2.5.7 Atualizando para outra arquitetura . . . . . . . . . . . . 130 2.5.8 Atualizando o MySQL no Windows . . . . . . . . . . . . 132 2.6 Notas espec´ ificas para os Sistemas Operacionais . . . . . . . . . 132 2.6.1 Notas Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 2.6.1.1 Conectando em um MySQL Rematamente a Windows Utilizando SSH . . . . . . . . . . . . . . . 133 2.6.1.2 Distribuindo Dados Entre Diferentes Discos no Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 2.6.1.3 Compilando clientes MySQL no Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 2.6.1.4 MySQL para Windows Comparado com o MySQL para Unix . . . . . . . . . . . . . . . . . . . . . . . 134 2.6.2 Notas Linux (Todas as vers˜es) . . . . . . . . . . . . . . . . 137 o 2.6.2.1 Notas Linux para distribui¸˜es bin´rias co a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 2.6.2.2 Notas Linux x86 . . . . . . . . . . . . . . . . . . . . . 142 2.6.2.3 Notas Linux SPARC . . . . . . . . . . . . . . . . . 143 2.6.2.4 Notas Linux Alpha . . . . . . . . . . . . . . . . . . . 143 2.6.2.5 Notas Linux PowerPC . . . . . . . . . . . . . . . . 144 2.6.2.6 Notas Linux MIPS . . . . . . . . . . . . . . . . . . . 144 2.6.2.7 Notas Linux IA-64 . . . . . . . . . . . . . . . . . . . 144 2.6.3 Notas Solaris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 2.6.3.1 Notas Solaris 2.7/2.8 . . . . . . . . . . . . . . . . . 147 2.6.3.2 Notas Solaris x86 . . . . . . . . . . . . . . . . . . . . 148 2.6.4 Notas BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 2.6.4.1 Notas FreeBSD . . . . . . . . . . . . . . . . . . . . . . 149 2.6.4.2 Notas NetBSD . . . . . . . . . . . . . . . . . . . . . . . 150 2.6.4.3 Notas OpenBSD . . . . . . . . . . . . . . . . . . . . . 150 2.6.4.4 Notas OpenBSD 2.8 . . . . . . . . . . . . . . . . . . 151 2.6.4.5 Notas BSDI Vers˜o 2.x . . . . . . . . . . . . . . . 151 a 2.6.4.6 Notas BSD/OS Vers˜o 3.x . . . . . . . . . . . . 151 a 2.6.4.7 Notas BSD/OS Vers˜o 4.x . . . . . . . . . . . . 152 a 2.6.5 Notas Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

v 2.6.5.1 Mac OS X 10.x . . . . . . . . . . . . . . . . . . . . . . 152 2.6.5.2 Mac OS X Server 1.2 (Rhapsody) . . . . . 153 2.6.6 Notas de Outros Unix . . . . . . . . . . . . . . . . . . . . . . . . . 153 2.6.6.1 Notas HP-UX para distribui¸˜es bin´rias co a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 2.6.6.2 Notas HP-UX Vers˜o 10.20 . . . . . . . . . . . 154 a 2.6.6.3 Notas HP-UX Vers˜o 11.x . . . . . . . . . . . . 154 a 2.6.6.4 Notas IBM-AIX. . . . . . . . . . . . . . . . . . . . . . 155 2.6.6.5 Notas SunOS 4 . . . . . . . . . . . . . . . . . . . . . . 157 2.6.6.6 Notas Alpha-DEC-UNIX (Tru64) . . . . . 157 2.6.6.7 Notas Alpha-DEC-OSF1. . . . . . . . . . . . . . 159 2.6.6.8 Notas SGI Irix . . . . . . . . . . . . . . . . . . . . . . . 160 2.6.6.9 Notas SCO . . . . . . . . . . . . . . . . . . . . . . . . . . 161 2.6.6.10 Notas SCO Unixware Version 7.0. . . . . 163 2.6.7 Notas OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 2.6.8 Notas Novell NetWare . . . . . . . . . . . . . . . . . . . . . . . . 164 2.6.9 Notas BeOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Coment´rios de Instala¸˜o do Perl . . . . . . . . . . . . . . . . . . . . . . 165 a ca 2.7.1 Instalando Perl no Unix . . . . . . . . . . . . . . . . . . . . . . . 165 2.7.2 Instalaando ActiveState Perl no Windows . . . . . . 166 2.7.3 Problemas Usando a Interface Perl DBI/DBD . . . . 166

2.7

3

Tutorial de Introdu¸˜o Do MySQL . . . . . . . 169 ca
3.1 Conectando e Desconectando do Servidor . . . . . . . . . . . . . . . 169 3.2 Fazendo Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 3.3 Cria¸˜o e Utiliza¸˜o de um Banco de Dados . . . . . . . . . . . . . 173 ca ca 3.3.1 Criando e Selecionando um Banco de Dados . . . . 174 3.3.2 Criando uma Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . 175 3.3.3 Carregando dados em uma tabela . . . . . . . . . . . . . . 176 3.3.4 Recuperando Informa¸˜es de uma Tabela . . . . . . . 178 co 3.3.4.1 Selecionando Todos os Dados . . . . . . . . . 178 3.3.4.2 Selecionando Registros Espec´ ificos . . . . . 179 ´ 3.3.4.3 Selecionando Colunas Especificas . . . . . . 180 3.3.4.4 Ordenando Registros . . . . . . . . . . . . . . . . . 181 3.3.4.5 C´lculo de Datas. . . . . . . . . . . . . . . . . . . . . 183 a 3.3.4.6 Trabalhando com Valores Nulos (NULL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 3.3.4.7 Combina¸˜o de padr˜es. . . . . . . . . . . . . . . 186 ca o 3.3.4.8 Contando Registros . . . . . . . . . . . . . . . . . . 189 3.3.4.9 Utilizando M´ltiplas Tabelas . . . . . . . . . . 191 u 3.4 Obtendo Informa¸˜es Sobre Bancos de Dados e Tabelas . . 193 co 3.5 Utilizando mysql em Modo Batch . . . . . . . . . . . . . . . . . . . . . . 194 3.6 Exemplos de Consultas Comuns . . . . . . . . . . . . . . . . . . . . . . . . 196 3.6.1 O Valor M´ximo para uma Coluna . . . . . . . . . . . . . 196 a 3.6.2 O Registro que Armazena o Valor M´ximo para uma a Coluna Determinada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 3.6.3 M´ximo da Coluna por Grupo . . . . . . . . . . . . . . . . . 197 a

vi 3.6.4 As Linhas Armazenando o Group-wise M´ximo de a um Certo Campo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 3.6.5 Utilizando Vari´veis de Usu´rio . . . . . . . . . . . . . . . . 199 a a 3.6.6 Utilizando Chaves Estrangeiras . . . . . . . . . . . . . . . . 199 3.6.7 Pesquisando em Duas Chaves . . . . . . . . . . . . . . . . . . 201 3.6.8 Calculando Visitas Di´rias . . . . . . . . . . . . . . . . . . . . 201 a 3.6.9 Usando AUTO_INCREMENT . . . . . . . . . . . . . . . . . . . . . . 202 3.7 Consultas de Projetos Gˆmeos . . . . . . . . . . . . . . . . . . . . . . . . . 203 e 3.7.1 Encontrando Todos Gˆmeos N˜o-distribu´ e a idos . . . 204 3.7.2 Mostrando uma Tabela sobre a Situa¸˜o dos Pares ca Gˆmeos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 e 3.8 Utilizando MySQL com Apache . . . . . . . . . . . . . . . . . . . . . . . . 207

4

Administra¸˜o do Bancos de Dados MySQL ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
4.1 Configurando o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 4.1.1 Op¸˜es de Linha de Comando do mysqld . . . . . . . 208 co 4.1.2 Arquivo de Op¸˜es ‘my.cnf’ . . . . . . . . . . . . . . . . . . . 217 co 4.2 Executando M´ltiplos MySQL Servers na Mesma M´quina u a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 4.2.1 Executando M´ltiplos Servidores no Windows . . 221 u 4.2.1.1 Iniciando M´ltiplos Servidores na Linha de u Comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 4.2.1.2 Iniciando M´ltiplos Servidores Como u Servi¸os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 c 4.2.2 Executando M´ltiplos Servidores no Unix . . . . . . 225 u 4.2.3 Usando Programas Clientes em um Ambiente Multi-Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 4.3 Detalhes Gerais de Seguran¸a e o Sistema de Privil´gio de c e Acesso do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 4.3.1 Seguran¸a Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 c 4.3.2 Como Tornar o MySQL Seguro contra Crackers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 4.3.3 Op¸˜es de Inicializa¸˜o para o mysqld em Rela¸˜o a co ca ca Seguran¸a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 c 4.3.4 Detalhes de Seguran¸a com LOAD DATA LOCAL . . . 232 c 4.3.5 O Que o Sistema de Privil´gios Faz . . . . . . . . . . . . 233 e 4.3.6 Como o Sistema de Privil´gios Funciona . . . . . . . . 233 e 4.3.7 Privil´gios Fornecidos pelo MySQL . . . . . . . . . . . . 237 e 4.3.8 Conectando ao Servidor MySQL . . . . . . . . . . . . . . . 239 4.3.9 Controle de Acesso, Est´gio 1: Verifica¸˜o da a ca Conex˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 a 4.3.10 Controle de Acesso, Est´gio 2: Verifica¸˜o da a ca Requisi¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 ca 4.3.11 Hashing de Senhas no MySQL 4.1 . . . . . . . . . . . . 246 4.3.12 Causas dos Erros de Accesso Negado . . . . . . . . . 250 4.4 Gerenciamento das Contas dos Usu´rios no MySQL . . . . . . 255 a 4.4.1 A Sintaxe de GRANT e REVOKE . . . . . . . . . . . . . . . . . . 255

vii 4.4.2 Nomes de Usu´rios e Senhas do MySQL . . . . . . . . 260 a 4.4.3 Quando as Altera¸˜es nos Privil´gios tem Efeito co e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 4.4.4 Configurando os Privil´gios Iniciais do MySQL . . 261 e 4.4.5 Adicionando Novos Usu´rios ao MySQL . . . . . . . . 262 a 4.4.6 Deletando Usu´rios do MySQL . . . . . . . . . . . . . . . . 265 a 4.4.7 Limitando os Recursos dos Usu´rios. . . . . . . . . . . . 266 a 4.4.8 Configurando Senhas . . . . . . . . . . . . . . . . . . . . . . . . . 267 4.4.9 Mantendo Sua Senha Segura . . . . . . . . . . . . . . . . . . 268 4.4.10 Usando Conex˜es Seguras . . . . . . . . . . . . . . . . . . . . 269 o 4.4.10.1 Conceitos Basicos . . . . . . . . . . . . . . . . . . . 269 4.4.10.2 Exigˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . 269 e 4.4.10.3 Configurando Certificados SSL para o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 4.4.10.4 Op¸˜es SSL do GRANT . . . . . . . . . . . . . . . 274 co 4.4.10.5 Op¸˜es SSL de Linha de Comando . . . 275 co 4.5 Preven¸˜o de Disastres e Recupera¸˜o . . . . . . . . . . . . . . . . . . 276 ca ca 4.5.1 Backups dos Bancos de Dados . . . . . . . . . . . . . . . . . 276 4.5.2 Sintaxe de BACKUP TABLE . . . . . . . . . . . . . . . . . . . . . . 278 4.5.3 Sintaxe de RESTORE TABLE . . . . . . . . . . . . . . . . . . . . . 278 4.5.4 Sintaxe de CHECK TABLE . . . . . . . . . . . . . . . . . . . . . . . 279 4.5.5 Sintaxe do REPAIR TABLE . . . . . . . . . . . . . . . . . . . . . . 280 4.5.6 Utilizando myisamchk para Manuten¸˜o de Tabelas e ca Recupera¸˜o em Caso de Falhas. . . . . . . . . . . . . . . . . . 281 ca 4.5.6.1 Sintaxe do myisamchk . . . . . . . . . . . . . . . . 282 4.5.6.2 Op¸˜es Gerais do myisamchk . . . . . . . . . . 283 co 4.5.6.3 Op¸˜es de Verifica¸˜o do myisamchk . . . 284 co ca 4.5.6.4 Op¸˜es de Reparos do myisamchk . . . . . 285 co 4.5.6.5 Outras Op¸˜es do myisamchk . . . . . . . . . 287 co 4.5.6.6 Uso de Mem´ria do myisamchk . . . . . . . . 287 o 4.5.6.7 Uso do myisamchk para Recupera¸˜o em ca Caso de Falhas . . . . . . . . . . . . . . . . . . . . . . . . . . 288 4.5.6.8 Como Verificar Erros em Tabelas . . . . . . 289 4.5.6.9 Como Reparar Tabelas . . . . . . . . . . . . . . . 290 4.5.6.10 Otimiza¸˜o de Tabelas . . . . . . . . . . . . . . 292 ca 4.5.7 Configurando um Regime de Manuten¸˜o das ca Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 4.5.8 Obtendo Informa¸˜es sobre as Tabelas . . . . . . . . . 293 co 4.6 Adiministra¸˜o do Banco de Dados e Referˆncia de Linguagem ca e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 4.6.1 Sintaxe de OPTIMIZE TABLE. . . . . . . . . . . . . . . . . . . . 299 4.6.2 Sintaxe de ANALYZE TABLE . . . . . . . . . . . . . . . . . . . . . 299 4.6.3 Sintaxe de CHECKSUM TABLE. . . . . . . . . . . . . . . . . . . . 300 4.6.4 Sintaxe de FLUSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 4.6.5 Sintaxe de RESET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 4.6.6 Sintaxe de PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 302 4.6.7 Sintaxe de KILL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 4.6.8 Sintaxe de SHOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

viii 4.6.8.1 Recuperando Informa¸˜es sobre Bancos de co Dados, Tabelas, Colunas e ´ Indices . . . . . . . . . 304 4.6.8.2 SHOW TABLE STATUS . . . . . . . . . . . . . . . . . . 305 4.6.8.3 SHOW STATUS . . . . . . . . . . . . . . . . . . . . . . . . . 306 4.6.8.4 SHOW VARIABLES . . . . . . . . . . . . . . . . . . . . . 309 4.6.8.5 SHOW [BDB] LOGS . . . . . . . . . . . . . . . . . . . . . 321 4.6.8.6 SHOW PROCESSLIST . . . . . . . . . . . . . . . . . . . 321 4.6.8.7 SHOW GRANTS . . . . . . . . . . . . . . . . . . . . . . . . . 323 4.6.8.8 SHOW CREATE TABLE . . . . . . . . . . . . . . . . . . 323 4.6.8.9 SHOW WARNINGS | ERRORS . . . . . . . . . . . . . 323 4.6.8.10 SHOW TABLE TYPES . . . . . . . . . . . . . . . . . . 325 4.6.8.11 SHOW PRIVILEGES . . . . . . . . . . . . . . . . . . . 326 4.7 Localiza¸˜o do MySQL e Utiliza¸˜o Internacional . . . . . . . . 326 ca ca 4.7.1 O Conjunto de Caracteres Utilizado para Dados e Ordena¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 ca 4.7.1.1 German character set . . . . . . . . . . . . . . . . 327 4.7.2 Mensagens de Erros em Outras L´ inguas . . . . . . . . 328 4.7.3 Adicionando um Novo Conjunto de Caracteres . . 328 4.7.4 Os Vetores de Defini¸˜es de Caracteres . . . . . . . . . 330 co 4.7.5 Suporte ` Ordena¸˜o de Strings . . . . . . . . . . . . . . . 330 a ca 4.7.6 Suporte ` Caracteres Multi-byte . . . . . . . . . . . . . . . 331 a 4.7.7 Problemas com Conjuntos de Caracteres . . . . . . . 331 4.8 Utilit´rios e Scripts do Lado do Servidor MySQL . . . . . . . . 331 a 4.8.1 Vis˜o Geral dos Scripts e Utilit´rios do Lado a a Servidor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 4.8.2 mysqld-safe, o wrapper do mysqld . . . . . . . . . . . . 332 4.8.3 mysqld_multi, programa para gerenciar m´ltiplos u servidores MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 4.8.4 myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL . . . . . . . . . . . . . . . . . . . . . 337 4.8.5 mysqld-max, om servidor mysqld extendido . . . . . 344 4.9 Utilit´rios e Scripts do Lado do Cliente MySQL . . . . . . . . . 346 a 4.9.1 Vis˜o Geral dos Utilit´rios e Scripts do Lado do a a Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 4.9.2 mysql, A Ferramenta de Linha de Comando . . . . 347 4.9.3 mysqlcc, The MySQL Control Center . . . . . . . . . . 355 4.9.4 mysqladmin, Administrando um Servidor MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 4.9.5 mysqlbinlog, Executando as Consultas a Partir de um Log Bin´rio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 a 4.9.6 Usando mysqlcheck para Manuten¸˜o de Tabelas e ca Recupera¸˜o em Caso de Falhas. . . . . . . . . . . . . . . . . . 360 ca 4.9.7 mysqldump, Descarregando a Estrutura de Tabelas e Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 4.9.8 mysqlhotcopy, Copiando Bancos de Dados e Tabelas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 4.9.9 mysqlimport, Importando Dados de Arquivos Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

ix 4.9.10 mysqlshow, Exibindo Bancos de Dados, Tabelas e Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 4.9.11 mysql_config, Op¸˜es para compila¸˜o do cliente co ca MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 4.9.12 perror, Explicando C´digos de Erros . . . . . . . . . 372 o 4.9.13 Como Executar Comandos SQL a Partir de um Arquivo Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 4.10 Os Arquivos de Log do MySQL . . . . . . . . . . . . . . . . . . . . . . . 372 4.10.1 O Log de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 4.10.2 O Log de Consultas. . . . . . . . . . . . . . . . . . . . . . . . . . 373 4.10.3 O Log de Atualiza¸˜es . . . . . . . . . . . . . . . . . . . . . . . 374 co 4.10.4 O Log Bin´rio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 a 4.10.5 O Log para Consultas Lentas . . . . . . . . . . . . . . . . . 378 4.10.6 Manuten¸˜o do Log de Arquivo . . . . . . . . . . . . . . . 378 ca 4.11 Replica¸˜o no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 ca 4.11.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 ca 4.11.2 Vis˜o Geral da Implementa¸˜o da Replica¸˜o . . 380 a ca ca 4.11.3 Detalhes de Implementa¸˜o da Replica¸˜o . . . . . 381 ca ca 4.11.4 Como Configurar a Replica¸˜o . . . . . . . . . . . . . . . . 386 ca 4.11.5 Recursos de Replica¸˜o e Problemas Conhecidos ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 4.11.6 Op¸˜es de Inicializa¸˜o da Replica¸˜o . . . . . . . . . 392 co ca ca 4.11.7 Instru¸˜es SQL para Controle do Servidor Master co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 4.11.7.1 PURGE MASTER LOGS . . . . . . . . . . . . . . . . . 401 4.11.7.2 RESET MASTER . . . . . . . . . . . . . . . . . . . . . . 401 4.11.7.3 SET SQL_LOG_BIN . . . . . . . . . . . . . . . . . . . 401 4.11.7.4 SHOW BINLOG EVENTS . . . . . . . . . . . . . . . . 401 4.11.7.5 SHOW MASTER STATUS . . . . . . . . . . . . . . . . 402 4.11.7.6 SHOW MASTER LOGS . . . . . . . . . . . . . . . . . . 402 4.11.7.7 SHOW SLAVE HOSTS . . . . . . . . . . . . . . . . . . 402 4.11.8 Instru¸˜es SQL para Controle do Servidor Slave co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 4.11.8.1 CHANGE MASTER TO . . . . . . . . . . . . . . . . . . 402 4.11.8.2 LOAD DATA FROM MASTER . . . . . . . . . . . . . 405 4.11.8.3 LOAD TABLE tbl_name FROM MASTER. . . 405 4.11.8.4 MASTER_POS_WAIT() . . . . . . . . . . . . . . . . 405 4.11.8.5 RESET SLAVE. . . . . . . . . . . . . . . . . . . . . . . . 406 4.11.8.6 SET GLOBAL SQL_SLAVE_SKIP_COUNTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 4.11.8.7 SHOW SLAVE STATUS . . . . . . . . . . . . . . . . . 406 4.11.8.8 START SLAVE. . . . . . . . . . . . . . . . . . . . . . . . 409 4.11.8.9 STOP SLAVE . . . . . . . . . . . . . . . . . . . . . . . . . 410 4.11.9 FAQ da Replica¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . 411 ca 4.11.10 Problemas com Replica¸˜o . . . . . . . . . . . . . . . . . . 416 ca 4.11.11 Relatando Problemas de Replica¸˜o . . . . . . . . . . 417 ca

x

5

Otimiza¸˜o do MySQL . . . . . . . . . . . . . . . . . . . 419 ca
5.1 Vis˜o Geral da Otimiza¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 a ca 5.1.1 Limita¸˜es do Projeto MySQL/Trocas . . . . . . . . . 419 co 5.1.2 Portabilidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 5.1.3 Para que Utilizamos o MySQL?. . . . . . . . . . . . . . . . 421 5.1.4 O Pacote de Benchmark do MySQL . . . . . . . . . . . . 422 5.1.5 Utilizando seus Pr´prios Benchmarks . . . . . . . . . . 423 o Otimizando SELECTs e Outras Consultas . . . . . . . . . . . . . . . . 424 5.2.1 Sintaxe de EXPLAIN (Obter informa¸˜es sobre uma co SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 5.2.2 Estimando o Desempenho de uma Consulta. . . . . 432 5.2.3 Velocidade das Consultas que Utilizam SELECT . . 432 5.2.4 Como o MySQL Otimiza Cl´usulas WHERE . . . . . . 433 a 5.2.5 Como o MySQL Otimiza IS NULL . . . . . . . . . . . . . . 434 5.2.6 Como o MySQL Otimiza Cl´usulas DISTINCT . . . 435 a 5.2.7 Como o MySQL Otimiza LEFT JOIN e RIGHT JOIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 5.2.8 Como o MySQL Otimiza Cl´usulas ORDER BY . . . 437 a 5.2.9 Como o MySQL Otimiza Cl´usulas LIMIT . . . . . . 438 a 5.2.10 Performance das Consultas que Utilizam INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 5.2.11 Performance das Consultas que Utilizam UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 5.2.12 Performance das Consultas que Utilizam DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 5.2.13 Mais Dicas sobre Otimiza¸˜es . . . . . . . . . . . . . . . . 441 co Detalhes sobre Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 5.3.1 Como o MySQL Trava as Tabelas . . . . . . . . . . . . . . 444 5.3.2 Detalhes sobre Lock de Tabelas . . . . . . . . . . . . . . . . 445 Otimizando a Estrutura de Banco de Dados . . . . . . . . . . . . . 447 5.4.1 Op¸˜es do Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 co 5.4.2 Deixando os Dados com o Menor Tamanho Poss´ ivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 5.4.3 Como o MySQL Utiliza ´ Indices . . . . . . . . . . . . . . . . 448 ´ 5.4.4 Indices de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 5.4.5 ´ Indices de M´ltiplas Colunas . . . . . . . . . . . . . . . . . . 451 u 5.4.6 Como o MySQL Conta as Tabelas Abertas . . . . . 452 5.4.7 Como o MySQL Abre e Fecha as Tabelas . . . . . . . 452 5.4.8 Desvantagem em Criar um N´mero Grande de u Tabelas no Mesmo Banco de Dados . . . . . . . . . . . . . . 453 Otimizando o Servidor MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 454 5.5.1 Sintonia dos Parˆmetros em Tempo de a Sistema/Compila¸˜o e na Inicializa¸˜o. . . . . . . . . . . . 454 ca ca 5.5.2 Parˆmetros de Sintonia do Servidor . . . . . . . . . . . . 454 a 5.5.3 Como a Compila¸˜o e a Liga¸˜o Afetam a ca ca Velocidade do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 457 5.5.4 Como o MySQL Utiliza a Mem´ria . . . . . . . . . . . . 458 o 5.5.5 Como o MySQL Utiliza o DNS . . . . . . . . . . . . . . . . 460

5.2

5.3

5.4

5.5

xi 5.6 5.5.6 Sintaxe de SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Detalhes de Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 5.6.1 Utilizando Links Simb´licos . . . . . . . . . . . . . . . . . . . 466 o 5.6.1.1 Utilizando Links Simb´licos para Bancos de o Dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 5.6.1.2 Utilizando Links Simb´licos para Tabelas o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

6

Referˆncia de Linguagem do MySQL . . . . . . 469 e
6.1 Estrutura da Linguagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 6.1.1 Literais: Como Gravar Strings e Numerais . . . . . . 469 6.1.1.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 6.1.1.2 N´meros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 u 6.1.1.3 Valores Hexadecimais . . . . . . . . . . . . . . . . 471 6.1.1.4 Valores NULL. . . . . . . . . . . . . . . . . . . . . . . . . 471 6.1.2 Nomes de Banco de dados, Tabela, ´ Indice, Coluna e Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 6.1.3 Caso Sensitivo nos Nomes . . . . . . . . . . . . . . . . . . . . . 473 6.1.4 Vari´veis de Usu´rio . . . . . . . . . . . . . . . . . . . . . . . . . . 474 a a 6.1.5 Vari´veis de Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 475 a 6.1.6 Sintaxe de Coment´rios . . . . . . . . . . . . . . . . . . . . . . . 478 a 6.1.7 Tratamento de Palavras Reservadas no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 6.2 Tipos de Campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 6.2.1 Tipos Num´ricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 e 6.2.2 Tipos de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . . . 489 6.2.2.1 Assuntos referentes ao ano 2000 (Y2K) e Tipos de Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 6.2.2.2 Os Tipos DATETIME, DATE e TIMESTAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 6.2.2.3 O Tipo TIME. . . . . . . . . . . . . . . . . . . . . . . . . 495 6.2.2.4 O Tipo YEAR. . . . . . . . . . . . . . . . . . . . . . . . . 496 6.2.3 Tipos String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 6.2.3.1 Os Tipos CHAR e VARCHAR . . . . . . . . . . . . . 497 6.2.3.2 Os Tipos BLOB e TEXT . . . . . . . . . . . . . . . . 497 6.2.3.3 O Tipo ENUM. . . . . . . . . . . . . . . . . . . . . . . . . 499 6.2.3.4 O Tipo SET . . . . . . . . . . . . . . . . . . . . . . . . . . 500 6.2.4 Escolhendo o Tipo Correto para uma Coluna . . . 501 6.2.5 Usando Tipos de Colunas de Outros Mecanismos de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 6.2.6 Exigˆncias de Armazenamento dos Tipos de Coluna e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 6.3 Fun¸˜es para Uso em Cl´usulas SELECT e WHERE . . . . . . . . . 503 co a 6.3.1 Operadores e Fun¸˜es de Tipos n˜o Especificados co a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 6.3.1.1 Parenteses . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 6.3.1.2 Operadores de Compara¸˜o . . . . . . . . . . . 504 ca 6.3.1.3 Operadores Logicos . . . . . . . . . . . . . . . . . . 508

xii 6.3.1.4 Fun¸˜es de Fluxo de Controle . . . . . . . . . 510 co 6.3.2 Fun¸˜es String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 co 6.3.2.1 Fun¸˜es de Compara¸˜o de Strings . . . . 519 co ca 6.3.2.2 Caso Sensitivo . . . . . . . . . . . . . . . . . . . . . . . 522 6.3.3 Fun¸˜es Num´ricas . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 co e 6.3.3.1 Opera¸˜es Aritim´ticas . . . . . . . . . . . . . . . 522 co e 6.3.3.2 Fun¸˜es Matematicas. . . . . . . . . . . . . . . . . 523 co 6.3.4 Fun¸˜es de Data e Hora . . . . . . . . . . . . . . . . . . . . . . . 529 co 6.3.5 Fun¸˜es de Convers˜o . . . . . . . . . . . . . . . . . . . . . . . . . 543 co a 6.3.6 Outras Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 co 6.3.6.1 Fun¸˜es Bin´rias . . . . . . . . . . . . . . . . . . . . . 545 co a 6.3.6.2 Fun¸˜es Diversas . . . . . . . . . . . . . . . . . . . . . 546 co 6.3.7 Fun¸˜es e Modificadores para Usar com Cl´usulas co a GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 6.3.7.1 Fun¸˜es GROUP BY . . . . . . . . . . . . . . . . . . . . 555 co 6.3.7.2 Modificadores GROUP BY . . . . . . . . . . . . . . 558 6.3.7.3 GROUP BY com Campos Escondidos . . . . 561 6.4 Manipula¸˜o de Dados: SELECT, INSERT, UPDATE e DELETE ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 6.4.1 Sintaxe SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 6.4.1.1 Sintaxe JOIN . . . . . . . . . . . . . . . . . . . . . . . . 567 6.4.1.2 Sintaxe UNION . . . . . . . . . . . . . . . . . . . . . . . 569 6.4.2 Sintaxe de Subquery . . . . . . . . . . . . . . . . . . . . . . . . . . 569 6.4.2.1 A Subquery como um Operandop Escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 6.4.2.2 Compara¸˜es Usando Subquery . . . . . . . 571 co 6.4.2.3 Subqueries with ANY, IN, and SOME . . . . 571 6.4.2.4 Subqueries with ALL. . . . . . . . . . . . . . . . . . 572 6.4.2.5 Correlated Subqueries . . . . . . . . . . . . . . . . 572 6.4.2.6 EXISTS and NOT EXISTS . . . . . . . . . . . . . . 573 6.4.2.7 Row Subqueries . . . . . . . . . . . . . . . . . . . . . . 573 6.4.2.8 Subqueries in the FROM clause . . . . . . . . . 574 6.4.2.9 Subquery Errors . . . . . . . . . . . . . . . . . . . . . 575 6.4.2.10 Optimizing Subqueries . . . . . . . . . . . . . . 576 6.4.2.11 Rewriting Subqueries for Earlier MySQL Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 6.4.3 Sintaxe INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 6.4.3.1 Sintaxe INSERT ... SELECT . . . . . . . . . . . 581 6.4.3.2 Sintaxe INSERT DELAYED . . . . . . . . . . . . . . 581 6.4.4 Sintaxe UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 6.4.5 Sintaxe DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 6.4.6 Sintaxe TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 6.4.7 Sintaxe REPLACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 6.4.8 Sintaxe LOAD DATA INFILE. . . . . . . . . . . . . . . . . . . . . 587 6.4.9 Sintaxe HANDLER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 6.4.10 Sintaxe DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 6.5 Defini¸˜o de Dados: CREATE, DROP e ALTER . . . . . . . . . . . . . . 596 ca 6.5.1 Sintaxe CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . 596

xiii 6.5.2 Sintaxe DROP DATABASE . . . . . . . . . . . . . . . . . . . . . . . 596 6.5.3 Sintaxe CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 597 6.5.3.1 Altera¸˜o de Especifica¸˜es de Colunas ca co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 6.5.4 Sintaxe ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . 607 6.5.5 Sintaxe RENAME TABLE . . . . . . . . . . . . . . . . . . . . . . . . . 611 6.5.6 Sintaxe DROP TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 6.5.7 Sintaxe CREATE INDEX . . . . . . . . . . . . . . . . . . . . . . . . . 612 6.5.8 Sintaxe DROP INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Comandos Utilit´rios B´sicos do Usu´rio MySQL . . . . . . . . 613 a a a 6.6.1 Sintaxe USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 6.6.2 Sintaxe DESCRIBE (Obtem Informa¸˜es Sobre co Colunas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Comandos Transacionais e de Lock do MySQL . . . . . . . . . . 614 6.7.1 Sintaxe de START TRANSACTION, COMMIT e ROLLBACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 6.7.2 Instru¸˜es que N˜o Podem Ser Desfeitas . . . . . . . . 615 co a 6.7.3 Instru¸˜es que Fazem um Commit Implicito . . . . 615 co 6.7.4 Sintaxe de SAVEPOINT e ROLLBACK TO SAVEPOINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 6.7.5 Sintaxe LOCK TABLES e UNLOCK TABLES . . . . . . . . . 616 6.7.6 Sintaxe SET TRANSACTION . . . . . . . . . . . . . . . . . . . . . 618 Pesquisa Full-text no MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 618 6.8.1 Restri¸˜es Full-text . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 co 6.8.2 Ajuste Fino de Pesquisas Full-text no MySQL . . 623 6.8.3 TODO de Pesquisas Full-text . . . . . . . . . . . . . . . . . . 624 Cache de Consultas do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . 624 6.9.1 Como a Cache de Consultas Opera. . . . . . . . . . . . . 625 6.9.2 Configura¸˜o da Cache de Consultas . . . . . . . . . . . 626 ca 6.9.3 Op¸˜es da Cache de Consultas na SELECT . . . . . . 627 co 6.9.4 Estado e Manuten¸˜o da Cache de Consultas . . . 627 ca

6.6

6.7

6.8

6.9

7

Tipos de Tabela do MySQL . . . . . . . . . . . . . . 629
7.1 Tabelas MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 7.1.1 Espa¸o Necess´rio para Chaves . . . . . . . . . . . . . . . . 632 c a 7.1.2 Formatos de Tabelas MyISAM . . . . . . . . . . . . . . . . . . 633 7.1.2.1 Caracter´ isticas de Tabelas Est´ticas a (Tamanho Fixo) . . . . . . . . . . . . . . . . . . . . . . . . . 633 7.1.2.2 Caracter´ isticas de Tabelas Dinˆmicas . . 633 a ´ 7.1.2.3 Caracteristicas de Tabelas Compactadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 7.1.3 Problemas com Tabelas MyISAM . . . . . . . . . . . . . . . . 635 7.1.3.1 Tabelas MyISAM Corrompidas . . . . . . . . . 635 7.1.3.2 O Cliente est´ usando a tabela ou n˜o a a a fechou de forma apropriada . . . . . . . . . . . . . . . 636 Tabelas MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636 7.2.1 Problemas com Tabelas MERGE . . . . . . . . . . . . . . . . . 639 Tabelas ISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640

7.2 7.3

xiv 7.4 7.5 Tabelas Tabelas 7.5.1 7.5.2 7.5.3 7.5.4 HEAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642 Vis˜o Geral de Tabelas InnoDB. . . . . . . . . . . . . . . . 642 a InnoDB no MySQL Vers˜o 3.23 . . . . . . . . . . . . . . . . 642 a Op¸˜es de Inicializa¸˜o do InnoDB . . . . . . . . . . . . . 643 co ca Criando Tablespaces no InnoDB . . . . . . . . . . . . . . . 650 7.5.4.1 Se Alguma Coisa Der Errado Na Cria¸˜o ca Do Banco de Dados . . . . . . . . . . . . . . . . . . . . . . 651 7.5.5 Criando Tabelas InnoDB . . . . . . . . . . . . . . . . . . . . . . 651 7.5.5.1 Convertendo Tabelas MyISAM para InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652 7.5.5.2 Restri¸˜es FOREIGN KEY . . . . . . . . . . . . . . . 652 co 7.5.6 Adicionando e Removendo Arquivos de Dados e Log do InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 7.5.7 Fazendo Backup e Recuperando um Banco de Dados InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655 7.5.7.1 For¸ando a recupera¸˜o . . . . . . . . . . . . . . 657 c ca 7.5.7.2 Ponto de Verifica¸˜o . . . . . . . . . . . . . . . . . 658 ca 7.5.8 Movendo um Banco de Dados InnoDB para Outra M´quina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658 a 7.5.9 Modelo Transacional do InnoDB . . . . . . . . . . . . . . . 659 7.5.9.1 InnoDB e SET ... TRANSACTION ISOLATION LEVEL ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 7.5.9.2 Leitura Consistente sem Lock . . . . . . . . . 661 7.5.9.3 Lock de Leitura SELECT ... FOR UPDATE e SELECT ... LOCK IN SHARE MODE . . . . . . . . . . 661 7.5.9.4 Lock da Chave Seguinte: Evitando Problemas com Fantasmas . . . . . . . . . . . . . . . . 662 7.5.9.5 Locks Definidos por Diferentes Instru¸˜es co SQL no InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . 662 7.5.9.6 Detec¸˜o de Deadlock e Rollback . . . . . . 663 ca 7.5.9.7 Um Exemplo de Como a Leitura Consistente Funciona no InnoDB . . . . . . . . . . 664 7.5.9.8 Como lidar com deadlocks? . . . . . . . . . . . 665 7.5.10 Dicas de Ajuste de Desempenho . . . . . . . . . . . . . . 666 7.5.10.1 SHOW INNODB STATUS e o Monitor InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 7.5.11 Implementa¸˜o de Multi-versioning . . . . . . . . . . . 669 ca 7.5.12 Estrutura de Tabelas e ´ Indices . . . . . . . . . . . . . . . . 670 7.5.12.1 Estrutura F´ isica do ´ Indice . . . . . . . . . . . 671 7.5.12.2 Buffer de Inser¸˜o. . . . . . . . . . . . . . . . . . . 671 ca 7.5.12.3 ´ Indices Hash Adaptativos . . . . . . . . . . . . 672 7.5.12.4 Estrutura dos Registros F´ isicos . . . . . . 672 7.5.12.5 Como Funciona uma Coluna AUTO_INCREMENT no InnoDB . . . . . . . . . . . . . . 672 7.5.13 Gerenciamento do Espa¸o de Arquivos e E/S de c Disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 7.5.13.1 E/S de Disco . . . . . . . . . . . . . . . . . . . . . . . 673

xv 7.5.13.2 Gerenciamento do Espa¸o de Arquivo c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 7.5.13.3 Desfragmentando uma Tabela . . . . . . . . 675 7.5.14 Tratando Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 7.5.15 Restri¸˜es em Tabelas InnoDB . . . . . . . . . . . . . . . 675 co 7.5.16 Hist´rico de Altera¸˜es do InnoDB . . . . . . . . . . . . 677 o co 7.5.16.1 MySQL/InnoDB-4.1.1, December 4, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 7.5.16.2 MySQL/InnoDB-4.0.16, October 22, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 7.5.16.3 MySQL/InnoDB-3.23.58, September 15, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 7.5.16.4 MySQL/InnoDB-4.0.15, September 10, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 7.5.16.5 MySQL/InnoDB-4.0.14, Junho de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 7.5.16.6 MySQL/InnoDB-3.23.57, June 20, 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 7.5.16.7 MySQL/InnoDB-4.0.13, 20 de Maio de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 7.5.16.8 MySQL/InnoDB-4.1.0, 03 de Abril de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 7.5.16.9 MySQL/InnoDB-3.23.56, 17 de Mar¸o de c 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 7.5.16.10 MySQL/InnoDB-4.0.12, 18 Mar¸o de c 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.11 MySQL/InnoDB-4.0.11, 25 de Fevereiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.12 MySQL/InnoDB-4.0.10, 04 de Fevereiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 7.5.16.13 MySQL/InnoDB-3.23.55, 24 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 7.5.16.14 MySQL/InnoDB-4.0.9, 14 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 7.5.16.15 MySQL/InnoDB-4.0.8, 07 de Janeiro de 2003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.16 MySQL/InnoDB-4.0.7, 26 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.17 MySQL/InnoDB-4.0.6, 19 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 7.5.16.18 MySQL/InnoDB-3.23.54, 12 de Dezembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . 684 7.5.16.19 MySQL/InnoDB-4.0.5, 18 de Novembro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 7.5.16.20 MySQL/InnoDB-3.23.53, 09 de Outubro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 7.5.16.21 MySQL/InnoDB-4.0.4, 02 de Outubro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

xvi 7.5.16.22 MySQL/InnoDB-4.0.3, 28 de Agosto de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 7.5.16.23 MySQL/InnoDB-3.23.52, 16 de Agosto de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 7.5.16.24 MySQL/InnoDB-4.0.2, 10 de Julho de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.25 MySQL/InnoDB-3.23.51, 12 de Junho de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.26 MySQL/InnoDB-3.23.50, 23 de Abril de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 7.5.16.27 MySQL/InnoDB-3.23.49, 17 de Fevereiro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 7.5.16.28 MySQL/InnoDB-3.23.48, 09 de Fevereiro de 2002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 7.5.16.29 MySQL/InnoDB-3.23.47, 28 de Dezembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 691 7.5.16.30 MySQL/InnoDB-4.0.1, 23 de Dezembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.31 MySQL/InnoDB-3.23.46, 30 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.32 MySQL/InnoDB-3.23.45, 23 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 692 7.5.16.33 MySQL/InnoDB-3.23.44, 02 de Novembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . 693 7.5.16.34 MySQL/InnoDB-3.23.43, 04 de Outubro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 7.5.16.35 MySQL/InnoDB-3.23.42, 09 de Setembro de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.36 MySQL/InnoDB-3.23.41, 13 de Agosto de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.37 MySQL/InnoDB-3.23.40, 16 de Julho de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.38 MySQL/InnoDB-3.23.39, 13 de Junho de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.16.39 MySQL/InnoDB-3.23.38, 12 de Maio de 2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 7.5.17 Informa¸˜es de Contato do InnoDB . . . . . . . . . . . . 694 co Tabelas BDB ou BerkeleyDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 7.6.1 Vis˜o Geral de Tabelas BDB. . . . . . . . . . . . . . . . . . . . 695 a 7.6.2 Instalando BDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 7.6.3 Op¸˜es de Inicializa¸˜o do BDB . . . . . . . . . . . . . . . . . 696 co ca 7.6.4 Caracter´ isticas de Tabelas BDB: . . . . . . . . . . . . . . . . 697 7.6.5 Itens a serem corrigidos no BDB num futuro pr´ximo: o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698 7.6.6 Sistemas operacionais suportados pelo BDB . . . . . . 698 7.6.7 Restri¸˜es em Tabelas BDB . . . . . . . . . . . . . . . . . . . . 699 co 7.6.8 Erros Que Podem Ocorrer Usando Tabelas BDB . . 699

7.6

xvii

8

Introdu¸˜o ao MaxDB . . . . . . . . . . . . . . . . . . . 701 ca
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Historia do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Licenciamento e Suporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conceitos B´sicos do MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . a Diferen¸as de Recursos entre o MaxDB e o MySQL . . . . . . c Interoperability Features between MaxDB and MySQL . . . MaxDB-related Links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reserved Words in MaxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co Tipos de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 701 701 701 702 702 703 705 705

9

Conjunto de Caracteres Nacionais e Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Conjuntos de Caracteres e Collations em Geral . . . . . . . . . . 707 Conjunto de Caracteres e Collations no MySQL . . . . . . . . . 708 Determinando o Conjunto de Caracteres e Collation Padr˜es o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 9.3.1 Conjunto de Caracteres e Collations do Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 9.3.2 Conjunto de Caracteres e Collation de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709 9.3.3 O Conjunto de Caracteres e Collations de Tabela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 9.3.4 Conjunto de Caracteres e Collation de Colunas . . 710 9.3.5 Exemplos de Atribui¸˜es de Conjuntos de Caracteres co e Collation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711 9.3.6 Conjunto de Caracteres e Collation de Conex˜o a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 9.3.7 Conjunto de Caracteres e Collation de Caracter de String Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 9.3.8 Cl´usula COLLATE em V´rias Partes de uma Consulta a a SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714 9.3.9 Precedˆncia da Cl´usula COLLATE . . . . . . . . . . . . . . 714 e a 9.3.10 Operador BINARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 9.3.11 Alguns Casos Especiais Onde a Determina¸˜o da ca Collation e Trabalhosa . . . . . . . . . . . . . . . . . . . . . . . . . . 715 9.3.12 Collations Devem Ser para o Conjunto de Caracteres Certo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 9.3.13 Um exemplo do Efeito da Collation . . . . . . . . . . . 716 9.4 Opera¸˜es Afetadas pelo Suporte a Conjunto de Caracteres co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 9.4.1 Strings de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.2 CONVERT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.3 CAST() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 9.4.4 SHOW CHARACTER SET . . . . . . . . . . . . . . . . . . . . . . . . . . 718 9.4.5 SHOW COLLATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 9.4.6 SHOW CREATE DATABASE . . . . . . . . . . . . . . . . . . . . . . . . 719 9.4.7 SHOW FULL COLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 9.1 9.2 9.3

xviii 9.5 Suporte Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 9.6 UTF8 para Metdados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 9.7 Compatibilidade com Outros SGBDs . . . . . . . . . . . . . . . . . . . 721 9.8 Novo Formato do Arquivo de Configura¸˜o do Conjunto de ca Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 9.9 Conjunto de Caracteres Nacional . . . . . . . . . . . . . . . . . . . . . . . 721 9.10 Atualizando para o MySQL 4.0. . . . . . . . . . . . . . . . . . . . . . . . 722 9.10.1 Conjunto de Caracteres do MySQL e o Par/Conjunto de Caracter/Collation Correspondente do MySQL 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 9.11 Os conjuntos de Caracteres e Collations que o MySQL Suporta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 9.11.1 O Conjunto de Caracteres Unicode. . . . . . . . . . . . 725 9.11.2 Conjunto de Caracteres para Plataformas Espec´ ificas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 9.11.3 Conjunto de Caracteres do Sul da Europa e Oriente M´dio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 e 9.11.4 Os Conjuntos de Caracteres Asi´ticos . . . . . . . . . 725 a 9.11.5 Os Conjuntos de Caracteres B´lticos . . . . . . . . . . 726 a 9.11.6 Os Conjuntos de Caracteres Cir´ ilicos . . . . . . . . . . 726 9.11.7 O Conjunto de Caracteres da Europa Central . . 727 9.11.8 Os Conjuntos de Caracteres da Europa Ocidental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728

10

Extens˜es Espacias em MySQL . . . . . . . . . . 730 o
10.1 Introdu¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 10.2 O Modelo Geom´trico OpenGIS . . . . . . . . . . . . . . . . . . . . . . . a 10.2.1 A Hierarquia da Classe Geometry . . . . . . . . . . . . . 10.2.2 Classe Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.3 Classe Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.4 Classe Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.5 Classe LineString . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.6 Classe Surface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.7 Classe Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.8 Classe GeometryCollection . . . . . . . . . . . . . . . . . 10.2.9 Classe MultiPoint . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.10 Classe MultiCurve . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.11 Classe MultiLineString (Multi Linhas) . . . . . 10.2.12 Classe MultiSurface (Multi Superf´ icies) . . . . . ´ 10.2.13 Classe MultiPolygon (Multi Poligonos) . . . . . . 10.3 Formatos de Dados Espaciais Suportados . . . . . . . . . . . . . . 10.3.1 Formato Well-Known Text (WKT). . . . . . . . . . . . 10.3.2 Formato Well-Known Binary (WKB). . . . . . . . . . 10.4 Criando um Banco de Dados MySQL Habilitado Espacialmente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.1 Tipos de Dados Espaciais do MySQL . . . . . . . . . 10.4.2 Criando Valores Espaciais . . . . . . . . . . . . . . . . . . . . 730 730 731 732 733 733 734 734 734 735 735 735 736 736 736 737 737 738 738 739 739

xix 10.4.2.1 Criando Valores Geometry Usando Fun¸˜es WKT . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 co 10.4.2.2 Criando Valores Geometry Usando Fun¸˜es WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . 740 co 10.4.2.3 Criando uma Valor de Geometira Usando Fun¸˜es Espec´ co ificas do MySQL . . . . . . . . . . . 741 10.4.3 Criando Colunas Espaciais . . . . . . . . . . . . . . . . . . . 742 10.4.4 Entrando com Dados em Colunas Espaciais . . . . 743 10.4.5 Buscando Dados Espaciais . . . . . . . . . . . . . . . . . . . 744 10.4.5.1 Buscando Dados Espaciais em um Formato Interno . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.4.5.2 Buscando Dados Espaciais no Formato WKT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.4.5.3 Buscando Dados Espaciais no Formato WKB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 10.5 Analisando Informa¸˜o Espacial . . . . . . . . . . . . . . . . . . . . . . . 744 ca 10.5.1 Fun¸˜es Para Converter Geometrias Entre Formatos co Diferentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 10.5.2 Fun¸˜es de An´lise das Propriedades de Geometry co a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 10.5.2.1 Fun¸˜es de An´lise das Propriedades de co a Geometry em Geral . . . . . . . . . . . . . . . . . . . . . . 746 10.5.2.2 Fun¸˜es de An´lise das Propriedades de co a Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 10.5.2.3 Fun¸˜es de An´lise das Propriedades de co a LineString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 10.5.2.4 Fun¸˜es de An´lise das Propriedades de co a MultiLineString . . . . . . . . . . . . . . . . . . . . . . . . 749 10.5.2.5 Fun¸˜es de An´lise das Propriedades de co a Polygon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 10.5.2.6 Fun¸˜es de An´lise das Propriedades de co a MultiPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 10.5.2.7 Fun¸˜es de An´lise das Propriedades de co a GeometryCollection . . . . . . . . . . . . . . . . . . . . 751 10.5.3 Fun¸˜es Que Criam Novas Geometrias de Outras co Existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 10.5.3.1 Fun¸˜es de Geometria Que Produzem co Novas Geometrias . . . . . . . . . . . . . . . . . . . . . . . . 752 10.5.3.2 Operadores Espaciais . . . . . . . . . . . . . . . . 752 10.5.4 Fun¸˜es Para Testar Rela¸˜es Espaciais Entre co co Objetos Geom´tricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 e 10.5.5 Rela¸˜es de Retˆngulo de Limite M´ co a inimo (Minimal Bounding Rectangles - MBR) em Geometrias . . . . . 753 10.5.6 Fun¸˜es que Testam Relacionamentos Espaciais co Entre Geometrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 10.6 Otimizando An´lises Espaciais . . . . . . . . . . . . . . . . . . . . . . . . 755 a 10.6.1 Criando ´ Indices Espaciais . . . . . . . . . . . . . . . . . . . . 755 ´ 10.6.2 Usando Indice Espacial . . . . . . . . . . . . . . . . . . . . . . 756

xx 10.7 Compatibilidade e Conformidade com o MySQL . . . . . . . . 758 10.7.1 Recursos GIS Que Ainda N˜o Est˜o Implementados a a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

11

Stored Procedures e Fun¸˜es . . . . . . . . . . . . 760 co
11.1 Sintaxe de Stored Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . 760 11.1.1 Maintaining Stored Procedures . . . . . . . . . . . . . . . 761 11.1.1.1 CREATE PROCEDURE and CREATE FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 11.1.1.2 ALTER PROCEDURE and ALTER FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 11.1.1.3 DROP PROCEDURE and DROP FUNCTION . . 763 11.1.1.4 SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 11.1.2 SHOW PROCEDURE STATUS and SHOW FUNCTION STATUS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.3 CALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.4 BEGIN ... END Compound Statement . . . . . . . . . 764 11.1.5 DECLARE Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 764 11.1.6 Variables in Stored Procedures . . . . . . . . . . . . . . . 764 11.1.6.1 DECLARE Local Variables . . . . . . . . . . . . . 765 11.1.6.2 Variable SET Statement. . . . . . . . . . . . . . 765 11.1.6.3 SELECT ... INTO Statement . . . . . . . . . 765 11.1.7 Conditions and Handlers . . . . . . . . . . . . . . . . . . . . . 765 11.1.7.1 DECLARE Conditions . . . . . . . . . . . . . . . . . 765 11.1.7.2 DECLARE Handlers . . . . . . . . . . . . . . . . . . . 765 11.1.8 Cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 11.1.8.1 Declaring Cursors . . . . . . . . . . . . . . . . . . . 768 11.1.8.2 Cursor OPEN Statement . . . . . . . . . . . . . . 768 11.1.8.3 Cursor FETCH Statement . . . . . . . . . . . . . 768 11.1.8.4 Cursor CLOSE Statement . . . . . . . . . . . . . 768 11.1.9 Flow Control Constructs . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.1 IF Statement . . . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.2 CASE Statement . . . . . . . . . . . . . . . . . . . . . 768 11.1.9.3 LOOP Statement . . . . . . . . . . . . . . . . . . . . . 769 11.1.9.4 LEAVE Statement . . . . . . . . . . . . . . . . . . . . 769 11.1.9.5 ITERATE Statement . . . . . . . . . . . . . . . . . 769 11.1.9.6 REPEAT Statement. . . . . . . . . . . . . . . . . . . 770 11.1.9.7 WHILE Statement . . . . . . . . . . . . . . . . . . . . 770

xxi

12

Ferramentas de Clientes e APIs do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
12.1 API C do MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1 Tipos de Dados da API C . . . . . . . . . . . . . . . . . . . . 12.1.2 Vis˜o Geral das Fun¸˜o da API C . . . . . . . . . . . . a ca 12.1.3 Descri¸˜o das Fun¸˜es da API C . . . . . . . . . . . . . . ca co 12.1.3.1 mysql_affected_rows() . . . . . . . . . . . . 12.1.3.2 mysql_change_user() . . . . . . . . . . . . . . 12.1.3.3 mysql_character_set_name(). . . . . . . 12.1.3.4 mysql_close() . . . . . . . . . . . . . . . . . . . . . 12.1.3.5 mysql_connect() . . . . . . . . . . . . . . . . . . . 12.1.3.6 mysql_create_db() . . . . . . . . . . . . . . . . 12.1.3.7 mysql_data_seek() . . . . . . . . . . . . . . . . 12.1.3.8 mysql_debug() . . . . . . . . . . . . . . . . . . . . . 12.1.3.9 mysql_drop_db() . . . . . . . . . . . . . . . . . . . 12.1.3.10 mysql_dump_debug_info() . . . . . . . . . 12.1.3.11 mysql_eof() . . . . . . . . . . . . . . . . . . . . . . 12.1.3.12 mysql_errno() . . . . . . . . . . . . . . . . . . . . 12.1.3.13 mysql_error() . . . . . . . . . . . . . . . . . . . . 12.1.3.14 mysql_escape_string() . . . . . . . . . . . 12.1.3.15 mysql_fetch_field() . . . . . . . . . . . . . 12.1.3.16 mysql_fetch_fields() . . . . . . . . . . . . 12.1.3.17 mysql_fetch_field_direct() . . . . . 12.1.3.18 mysql_fetch_lengths() . . . . . . . . . . . 12.1.3.19 mysql_fetch_row() . . . . . . . . . . . . . . . 12.1.3.20 mysql_field_count() . . . . . . . . . . . . . 12.1.3.21 mysql_field_seek() . . . . . . . . . . . . . . 12.1.3.22 mysql_field_tell() . . . . . . . . . . . . . . 12.1.3.23 mysql_free_result() . . . . . . . . . . . . . 12.1.3.24 mysql_get_client_info() . . . . . . . . . 12.1.3.25 mysql_get_host_info() . . . . . . . . . . . 12.1.3.26 mysql_get_proto_info() . . . . . . . . . . 12.1.3.27 mysql_get_server_info() . . . . . . . . . 12.1.3.28 mysql_get_server_version() . . . . . 12.1.3.29 mysql_info() . . . . . . . . . . . . . . . . . . . . . 12.1.3.30 mysql_init() . . . . . . . . . . . . . . . . . . . . . 12.1.3.31 mysql_insert_id() . . . . . . . . . . . . . . . 12.1.3.32 mysql_kill() . . . . . . . . . . . . . . . . . . . . . 12.1.3.33 mysql_list_dbs(). . . . . . . . . . . . . . . . . 12.1.3.34 mysql_list_fields() . . . . . . . . . . . . . 12.1.3.35 mysql_list_processes() . . . . . . . . . . 12.1.3.36 mysql_list_tables() . . . . . . . . . . . . . 12.1.3.37 mysql_num_fields() . . . . . . . . . . . . . . 12.1.3.38 mysql_num_rows(). . . . . . . . . . . . . . . . . 12.1.3.39 mysql_options() . . . . . . . . . . . . . . . . . . 12.1.3.40 mysql_ping() . . . . . . . . . . . . . . . . . . . . . 12.1.3.41 mysql_query() . . . . . . . . . . . . . . . . . . . . 12.1.3.42 mysql_real_connect() . . . . . . . . . . . . 772 772 775 779 780 781 782 782 783 783 784 785 785 786 786 788 788 789 789 790 791 792 792 794 795 795 796 796 796 797 797 798 798 799 799 800 801 801 802 802 803 805 805 807 808 809

xxii 12.1.3.43 mysql_real_escape_string() . . . . . 811 12.1.3.44 mysql_real_query() . . . . . . . . . . . . . . 813 12.1.3.45 mysql_reload() . . . . . . . . . . . . . . . . . . . 813 12.1.3.46 mysql_row_seek(). . . . . . . . . . . . . . . . . 814 12.1.3.47 mysql_row_tell(). . . . . . . . . . . . . . . . . 814 12.1.3.48 mysql_select_db() . . . . . . . . . . . . . . . 815 12.1.3.49 mysql_set_server_option(). . . . . . . 815 12.1.3.50 mysql_shutdown(). . . . . . . . . . . . . . . . . 816 12.1.3.51 mysql_sqlstate(). . . . . . . . . . . . . . . . . 817 12.1.3.52 mysql_ssl_set() . . . . . . . . . . . . . . . . . . 817 12.1.3.53 mysql_stat() . . . . . . . . . . . . . . . . . . . . . 818 12.1.3.54 mysql_store_result() . . . . . . . . . . . . 818 12.1.3.55 mysql_thread_id() . . . . . . . . . . . . . . . 820 12.1.3.56 mysql_use_result() . . . . . . . . . . . . . . 820 12.1.3.57 mysql_commit() . . . . . . . . . . . . . . . . . . . 821 12.1.3.58 mysql_rollback(). . . . . . . . . . . . . . . . . 822 12.1.3.59 mysql_autocommit() . . . . . . . . . . . . . . 822 12.1.3.60 mysql_more_results() . . . . . . . . . . . . 822 12.1.3.61 mysql_next_result() . . . . . . . . . . . . . 823 12.1.4 Instru¸˜es Preparadas da API C . . . . . . . . . . . . . . 824 co 12.1.5 Tipos de Dados de Instru¸˜es Preparadas da API C co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 12.1.6 Vis˜o Geral das Fun¸˜es de Instru¸˜es Preparadas a co co da API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827 12.1.7 Descri¸˜o das Fun¸˜es de Instru¸˜o Preparada da ca co ca API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 12.1.7.1 mysql_prepare() . . . . . . . . . . . . . . . . . . . 829 12.1.7.2 mysql_param_count() . . . . . . . . . . . . . . 831 12.1.7.3 mysql_get_metadata() . . . . . . . . . . . . . 831 12.1.7.4 mysql_bind_param() . . . . . . . . . . . . . . . 832 12.1.7.5 mysql_execute() . . . . . . . . . . . . . . . . . . . 833 12.1.7.6 mysql_stmt_affected_rows(). . . . . . . 837 12.1.7.7 mysql_bind_result() . . . . . . . . . . . . . . 838 12.1.7.8 mysql_stmt_store_result() . . . . . . . . 839 12.1.7.9 mysql_stmt_data_seek() . . . . . . . . . . . 840 12.1.7.10 mysql_stmt_row_seek() . . . . . . . . . . . 840 12.1.7.11 mysql_stmt_row_tell() . . . . . . . . . . . 841 12.1.7.12 mysql_stmt_num_rows() . . . . . . . . . . . 841 12.1.7.13 mysql_fetch() . . . . . . . . . . . . . . . . . . . . 842 12.1.7.14 mysql_send_long_data() . . . . . . . . . . 847 12.1.7.15 mysql_stmt_close() . . . . . . . . . . . . . . 849 12.1.7.16 mysql_stmt_errno() . . . . . . . . . . . . . . 850 12.1.7.17 mysql_stmt_error() . . . . . . . . . . . . . . 850 12.1.7.18 mysql_stmt_sqlstate() . . . . . . . . . . . 851 12.1.8 Tratando a Execu¸˜o de M´ltiplas Consultas na ca u API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851 12.1.9 Manipulando Valores de Data e Hora na API C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852

. . . .1.1 Porque Algumas Vezes mysql_store_result() Retorna NULL Ap´s o mysql_query() Returnar com Sucesso? . . .1 my_init() .3 Como Posso Obter a ID Unica para a ´ Ultima Linha Inserida? . . . . . 868 a a 12. . . . . 874 12. .1. . . . . . . . . . . . . . . . .2. .15. . . . . . . . .2 Suporte ODBC ao MySQL . . . . . .1. . 862 12.1. . . . . . . .14 Como Fazer um Cliente em Threads . . . . . . . . .5 Itens a Fazer no Servidor Embutido (TODO) . 857 ´ 12.1. . . . . . .15. . . . . . . . . . .1. . .6 Como Obter o Valor de uma Coluna AUTO_INCREMENT no ODBC . . . 867 ca 12. . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . .6 Um Exemplo Simples de Servidor Embutido . . . . . .4 API PHP do MySQL . . . . . . . . . . . . . . . . . .1.1. . 857 12.1. 866 12. . . . . .1.15. . .2. .2 Compilando Programas com libmysqld . . . . . .12 D´vidas e problemas comuns ao utilzar a API C u . . . . . .1. . 858 12.2. 854 ca co 12. . . . . . 854 12. .7 Licensiando o Servidor Embutido . . . . . . . . . . . . . . . 866 12.12. . . 876 12. 869 12. . . . . . . . . . . 860 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7 Relatando Problemas com MyODBC . . . .15. . . . . . . .10 Descri¸˜o das Fun¸˜es de Threads da API C . . . . . . . . . . . .1. . 857 12.2. . . . . . . . .15. . . . 860 12. 854 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 mysql_thread_init() . . . . .1. . . . . . . . . . . . . . . . .13 Construindo Programas Clientes . . . . . . . . . .1. . . . . . .15 libmysqld. . . . . . . .1 Vis˜o Geral da Biblioteca do Servidor a MySQL Embutido . .1. .1. . .3 Restri¸˜es no Uso de um Servidor co MySQL Embutido . . . . . . . . . . . .2. . .1.2 Que Resultados Posso Onbetr de uma Consulta? . .4 mysql_thread_safe() . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876 . . . . . . . . . . . . . . . . . . . 875 12. .4 Usando Arquivo de Op¸˜es com o co Servidor Embutido .10. . 855 12. . . . . . . .10. . . . . . . . . . . 861 12. . . . . .3 mysql_thread_end() . . . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . .1. . . . . . . . . . .15. . . . . . . 858 ca 12. . . . . . .4 Problemas com Liga¸˜o na API C . 857 12. . 862 12. . . .10.1. . . . . .15. . . . a Biblioteca do Servidor Embutido MySQL . . . . . . . . . 856 12. .4 Como Relatar Problemas com o MyODBC .1. . . .11. . . . . . . .2 Como Preencher os V´rios Campos no Programa de a Administra¸˜o do ODBC . . . . . . . . . 870 12. . . . . . . . .12. . . . . . . . . .12. . . .1 mysql_server_init() . . . . .12.5 Programas que Funcionam com MyODBC . . . . . . .11. . . . . . . . . . 861 12. . . . .10. . . . . . . . .3 Parˆmetros de Conex˜o do MyODBC .11 Descri¸˜o das Fun¸˜es do Servidor Embutido da ca co API C . . . . . . . . . . . . 855 12. . . . . 866 12. . . 855 12. . . . . . .1 Como Instalar o MyODBC . . . . . . . . . . . . . 854 12. . 861 12. 859 12. . .3 Conectividade Java (JDBC) ao MySQL .1. . . . . . .2 mysql_server_end() . . . . .2. . . . . . . . .xxiii 12. .

. 876 876 877 877 883 883 883 884 884 884 13 14 Tratamento de Erros no MySQL . 12. . . . . . . . . . . . . . . . . . .2. . . . . . . . . . 892 14. . . . . . . .2. . . . . . . . . .3 Mais Informa¸˜es DBI/DBD . . . . . . . . . . . . . . . 885 Estendendo o MySQL . . . . . . . . . . . . 893 14. . 12. . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . .1 Borland C++ . . . . . . . . . . .3. . . . . . 904 ca 14. . . . . . .3 Adicionando uma Nova Fun¸˜o Nativa .2. .1. . . . . . 896 14. . . . . . . .xxiv 12. .2 Sequˆncia de Chamadas UDF para e Fun¸˜es Agregadas . . . . . . . . 902 a 14. . . . . . . . . .1. . . . . . . . . . . 12. . . . . . . . . . . . . . . . . . . . . .1 An´lise de Procedimento . . . . . . . . . . .2 Escrevendo um Procedimento. . . . . . 893 14. . . .2 Pacotes de Teste do MySQL . . . . . . . .9 Eiffel Wrapper do MySQL . . . . . .1 MySQL Internals. . . . . . . . . . . . . . . . . . .1 Executando o Pacote de Testes do MySQL . . . . . . . . . . . . . . . . . . . 12. . . . . . . . . . . . . . . . . . 898 co 14. . . . . . . . . . . . . . . . . 885 13. . .3 Processando Argumentos . . . . . . . . . . . . . . . . . 12. . . . . . . . .8 API Tcl do MySQL . 900 14. . . .2. . . .1. . . . . . . . . . . .2. . . . . . . . . . . . . . . .2 Adicionando Novas Fun¸˜es ao MySQL . 892 14. . . . . . . . . . . . . .1 DBI com DBD::mysql . . . . . . . . . . . . . . . . 12. . . . 895 co 14. . . . . . . .2. . . . . . 12. . . . .5 API Perl do MySQL . . . . . . . . .6 API C++ do MySQL . . . . . 906 . . . . . .2 A interface DBI . . . . . .1 Threads MySQL. . . . . . . . .1 Sintaxe CREATE FUNCTION/DROP FUNCTION . . . . . . . . . . . . . . .2. . . . . . . . . . . . . .3. . .3 Adicionado Novos Procedimentos ao MySQL . .5. . . . .2. . . . . . . . . . .2. . . . 896 14. . . . . . .1 Sequˆncia de Chamadas UDF para e Fun¸˜es Simples . . . . . . . . . . . . . . . . . 899 co 14. . . . . . . . . . . . co 12. . . . . . . . . . . . . . . . . . . . . . . . . . . 902 14. . . . .3 Relatando Bugs no Pacote de Teste do MySQL . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . .5 Compilando e Instalando Fun¸˜es co Definidas Por Usu´rio . 892 14. . . . . . . . . .2. .6. . . . . . . . . . . . . . . 905 a 14. . . . . . . . . . . . . . . . .7 API Python do MySQL . . . . . . . . . . . . . . . . . . . . . . . . 894 14. .2.2. . . . . . . . . . . . . . . . . . . . . .1. .1 Erros Retornados . . . . . . .2. . . . . . . . .1. . . . . . . . . . . .2. . . . 12. . . . . . . . . 892 14. . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . 905 14. . . . . . . . . .2. . . . . . . .5. .2 Extendendo o Pacote de Teste do MySQL . . . . . .1 Problemas Comuns com MySQL e PHP . . . .2 Adicionando Novas Fun¸˜es Definidas Por Usu´rio co a . . . .4 Valor de Retorno e Tartamento de Erros . . . . . . .

2. . 924 A. . . . . . . . . . .10 Erros de Comunica¸˜o / Comunica¸˜o Abortada ca ca . . . . .5 Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File ‘/tmp/mysql. . .3 Assuntos Relacionados a Instala¸˜o . . . . . . . . . . . . . . . . . . . . . . .2. . . . . .. . .6 Problemas Com Fuso Hor´rio . . . . . . . . . .1 Caso-Sensitivito em Pesquisas . . . . . . . . 913 A. . . . . .5. . . . . . . . . . . . . . . . .4 Erro: Client does not support authentication protocol . . . . . . . . . .5 Deletando Linhas de Tabelas Relacionadas . . 909 A. . . 917 a A. . . . . . . .4. . . .2. . . . . . . . . . 908 A. . . . . . . 912 A. . . . . . . . . . . . . 915 A. . . . . . . 929 A.2. .2 Como Recuperar uma Senha de Root Esquecida . . . . . . . . . . 914 A. . . . . . . . . . . .4 Assuntos Relacionados a Administra¸˜o . . . . . . . . . . . . . . . . .4. . . . .2. . . .2 Erro: MySQL server has gone away. . . . . . .1 A. . . . .2. 924 c A. . . . .3 Problemas com Permiss˜es de Arquivos . . . 916 A. . . . . . 916 A. . . . . . . . . . .2. . . . . . . . . . 916 A. . . 920 ca A. . . . . . . . . . . .6 Erro: Too many connections . . . 908 A. . . . . . . . . . . . . . . . . . . . . .5. . .2. . . . . . . . . . . . . . .2 Como Determinar o Que Est´ Causando Problemas . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . .14 Erro: Ignoring user .sock’ . . . . . . .3 Problemas com Valores NULL . 918 ca A. . . . . . . .4 Problemas com alias . . . . .3 Erro: Can’t connect to [local] MySQL server .11 Erro: The table is full . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 Erro: Can’t create/write to file . . .2. . . . . . . . . 913 A. . . . . . . . . . . 907 a Erros Comuns Usando o MySQL . 920 o A. . . . 918 A. . . . . . . . . . . . . . . . .9 Erro: Packet too large . 928 A. . . . . . 926 A. . . . . .5 Erro: Host ’. . 925 A. 923 A. .1 Problemas de Liga¸˜o com a Biblioteca do Cliente ca MySQL . .8 Erro: Out of memory . . . . . . . . . . . .2 Problemas Usando Colunas DATE . . . . . . . . . . . .5. . . . . . .3. . . . . . .6 Resolvendo Problemas Com Registros N˜o a Encontrados . . .2. . . . . . . . 908 A. . . . . . . . . . . . . . . . .2. . . . 907 e A. . . . 930 . . . . . . . 912 A. . . . . . . . . . . . . . . . 929 A. . . . . . .3.xxv Apˆndice A Problemas e Erros Comuns . . . . . . . . . . . .4.4.15 Erro: Table ’xxx’ doesn’t exist . . 915 A. .3.5. . . . . . . . . . . . 911 A. . . .2 Como Executar o MySQL Como Um Usu´rio a Normal . . . . . .3 Como o MySQL Trata de Discos Sem Espa¸o . . . . . . . . .. . . . . . . . . . . . . . . . . 917 A. . .2. . . . . . . . . 912 A. . . . . . . . . . . . . . . . . . . . . . . . . . . . 921 A. . . . . . . .5. . . . . . .2. . .17 Arquivo N˜o Encontrado .7 Erro: Some non-transactional changed tables couldn’t be rolled back . . . . . . . . . . . . . . .2. . . . . . .1 O Que Fazer Se o MySQL Continua Falhando . . . . . .4 Onde o MySQL Armazena Arquivos Tempor´rios a . .2. . . . . . . . 926 a A. . . . . 926 A. . . .5 Assuntos Relacionados a Consultas. .2.16 Erro: Can’t initialize character set xxx .13 Erro no Cliente: Commands out of sync . . . . . . . . . . . . . . . .4. . . . . . 926 A. . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Erro: Access Denied . . . . . . .’ is blocked . . .4. . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . . . 919 A. . . . . . . .

. .1 B. . . . . . . . . . . . . . .3. . . .5. . . . . . . . .7. . .. . . . . . . . . . . . . . . . . . 957 C. . . . . . . . . . . . . 959 C. . . . . . . . . .0. . . . . . . . . . . . . . . . .7 Problemas com Compara¸˜o de Ponto Flutuante ca . . . . . . . . . . . . . . . . . . . 932 A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Problemas com ALTER TABLE. .6. . . . . . . . . . .0. . 969 C. . . . . . . . . . . . . . . . . . . . 961 C. 972 C. . . .6 Altera¸˜es na distribui¸˜o 4. . . . . 954 C. . . . . . . . . . . . . . . . . .3. . . . . . . . . . .0. . . . . . . . .0. .1 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . .1. . . . . . . . . . . . .13 (16 May 2003) co ca . . . . . .1 C. . .4 B. 950 C.9 Altera¸˜es na distribui¸˜o 4. . .5 Altera¸˜es na distribui¸˜o 4. . . .7 Apˆndice B Colaboradores do MySQL . . . 933 co A. . . . . . . . . . 956 co ca C. . . . . . . 934 A. . . . . . . Respons´veis pela Documenta¸˜o e Tradu¸˜o . .3 Altera¸˜es na distribui¸˜o 4. . . . . . . .. . . . . . . . . . . . .3 Altera¸˜es na distribui¸˜o 4. . . . . . . . . .0 (Development) . . . .2. . .11 (20 Feb 2003) co ca . . . .3 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . .0. . . . . . . . .12 (15 Mar 2003: co ca Production) . . . . . . . . . . . . . . .0. . . .0. . . . . . . . . . . . . . . . 936 e B. . . .1 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . .2 B. 949 C. . . . . . . . . . . . . . . . . . .3 B. . . . . .3. . . . . . . . .2 Altera¸˜es na distribui¸˜o 5. . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Camo evitar o varredura da tabela. . .2 Como Alterar a Ordem das Colunas em Uma Tabela . . . . . . . . . . .16 (17 Out 2003) co ca . . . . . . a Respons´veis pelo Suporte do MySQL . . . . . . . . . . . . . .x (Production) . . .7. . . . . . . . . . . . . . .7 Altera¸˜es na distribui¸˜o 4. . . . . . .0. . . . . . . . . . Coolaboradores do MySQL . . Pacotes que suportam o MySQL . . .5 B. . . . . . . . . . . . . . . . . . . 948 C. . . . . . . . . . . .14 (18 Jul 2003) . 934 A. . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . Ferramentas que s˜o usadas para criar o MySQL . . . . . . . . . . . . . . . . . . . . . . . .3. . .15 (03 Sep 2003) co ca .3. . . . . . . . . . . .2 (not released yet) co ca . . . . . . . . .3. . . . . . . . . .2. . . . . . . . . .4 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . . . 965 co ca C. . 976 co ca .1 (01 de Dez de 2003) co ca .2 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . .2 Altera¸˜es na distribui¸˜o 4. .3. . . .x (Alpha) . . 933 Assuntos Relacionados a Defini¸˜es de Tabelas . . . . . . .6 B. .. 930 Assuntos Relacionados ao Otimizador . .3 Problemas com TEMPORARY TABLE . . .10 (29 Jan 2003) co ca . . . .17 (not released yet) co ca . . . .2. . . . . . . . . . . .0. . a 936 939 943 944 945 946 946 Apˆndice C Hist´rico de Altera¸oes do MySQL e o c˜ .9 (09 Jan 2003) . . . . . . .8 Altera¸˜es na distribui¸˜o 4. . . . . . . 948 co ca Altera¸˜es na distribui¸˜o 4. . . .xxvi A. .0. 933 A. . . . .6 A. . . . . . 974 C. . . . . . . . .0 (03 Apr 2003: co ca Alpha) . . . . . . .1. .1. . . . . . . . . 948 co ca C. . . . . . . . . .7. a ca ca Bibliotecas usadas e incluidas com o MySQL . . . . . . . . .0. .1. . . . . . . . . . . . .7 Desenvolvedores do MySQL . . . . . . . . . . . . . . . 975 C. . . . . . . . . .

. . . 981 C. . . .51 (31 May 2002) co ca . . . . . . . . . . .0. . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . .16 Altera¸˜es na distribui¸˜o 4. 979 C. . . 989 C. . .56 (13 Mar 2003) co ca . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . .3. . . . . . . . . .4. . . . . . . .59 (not released yet) co ca . . . . . .8 Altera¸˜es na distribui¸˜o 3. . . . . . . . .7 (20 Dec 2002) co ca . . .3 (26 Aug 2002: co ca Beta) . . . . . . . . . . 1000 C. . . . . . . . . .4. . . . . . . .50 (21 Apr 2002) co ca . . . . . . 985 co ca C. . . . . 999 C. . . . . . . . . . . . . .5 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . 977 C. 992 C. . . . . . . . . . . . . . . . . . . .13 Altera¸˜es na distribui¸˜o 3. .3. . . . 978 C. . . . . . . . . . .23.4. . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . .15 Altera¸˜es na distribui¸˜o 4. . . . .2 Altera¸˜es na distribui¸˜o 3. .3. . . . . . . . . .53 (09 Oct 2002) co ca . . . . . . 996 C. . 983 C. . 997 C. . 995 C. . . . .23. . . . . . .23. . . .7 Altera¸˜es na distribui¸˜o 3.4 Altera¸˜es na distribui¸˜o 3.2 (01 Jul 2002) . . . . .0. . . . .15 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . .23.23. . . . . . . . . . . . 992 C. . . . . . . .11 Altera¸˜es na distribui¸˜o 4. . .10 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 (22 Nov 2001) co ca . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . .10 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . . . .55 (23 Jan 2003) co ca . . . .23. . . . . . . . .4. . . . . . . . . . .4 (29 Sep 2002) co ca . . . . .23. . . . . . 991 C.23.4. . . .14 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . .0. . . . . . .47 (27 Dec 2001) co ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . .48 (07 Feb 2002) co ca .x (Recent. . . . . . . . . . . .4. . . 993 C. . . . 999 co ca C. .12 Altera¸˜es na distribui¸˜o 4. . .46 (29 Nov 2001) co ca . . . . . .23. . . . . . . . .4. . . . .4. . . . . . . . . . .3. . . . . . . . . . . . . . . .23. . . . . . .6 (14 Dec 2002: co ca Gamma) . . still supported) co ca . . . . . . . . . . . 1001 . . . .13 Altera¸˜es na distribui¸˜o 4. . . .0 (Oct 2001: Alpha) co ca . . . . . . . . .12 Altera¸˜es na distribui¸˜o 3. . . . . .4. . . . . . . . . . . .14 Altera¸˜es na distribui¸˜o 4. . . . . . . .23. . . . . . 1000 C.xxvii C. . . . . . . . . . . .23. . . . . . . . .18 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . . . . . .4 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . .0.23. . . . . .4. . . . . . . . . . . . . .23. . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 C. . . . . . . . . . . . . . . . . . . . . . . . . .9 Altera¸˜es na distribui¸˜o 3. . . . .17 Altera¸˜es na distribui¸˜o 4. . . . . . . . . . . . . . .0. . . . . . .1 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . . . . .23. . . . . . .0. . . . .58 (11 Sep 2003) co ca . . . . . . . . . . . . . . . . . . . .3. . . . . . . 994 C. . . . . . . . . . . 977 C. . . . . . . . . . . . .1 (23 Dec 2001) co ca . . . . . . . . . . . . . . . . . . . .0. . . . . . . . . 988 C.5 (13 Nov 2002) co ca . .49 . . . .54 (05 Dec 2002) co ca . . . .8 (07 Jan 2003) co ca . . . . . . . . . . . . . . .11 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . .0. . . . . . . . . . . . . . . .57 (06 Jun 2003) co ca . . . . . . . . . .4. . . . . . . . . .6 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . .0. .52 (14 Aug 2002) co ca . . . . 998 C. . . . . . . . . . . 997 C. . . . . .23. . . . . . . . . . . .4. . . . . . .3. . . . . .

1002 C. . . . . . . . . . . 1010 C. . 1011 C. 1017 C.4. .4. . . .4. . . . 1012 C. . . . . . . . . .32 (22 Jan 2001: co ca Production) . . . . . . . . . .30 Altera¸˜es na distribui¸˜o 3. . . . .23. .19 Altera¸˜es na distribui¸˜o 3. . . . . . .43 (04 Oct 2001) co ca . . . . . . . .35 Altera¸˜es na distribui¸˜o 3. . . . . . . . .4. . . . . . . . . . . . 1003 C. . . . .16 Altera¸˜es na distribui¸˜o 3. . . . . . . . .xxviii C. . .23.21 . . .24 (08 Sep 2000) co ca . .4. . . . . . . . 1008 co ca C. . .39 Altera¸˜es na distribui¸˜o 3. . . . . .23. . . . . .23. . . . . . . . . . . . . . . . . . . .34 Altera¸˜es na distribui¸˜o 3. . . . . . . . . .33 (09 Feb 2001) co ca . . .26 (18 Oct 2000) co ca . . . . . . .23. . . . .4. . . . . . . . . . . . . .4. . . . . . . . . . . .23. . .4. . . . . . . . . . .4. . . . . . . . . . . . . . .23. . . . . . . . . . . . . . . . . . .34a . . . . .20 . . . .23. . . . . . . . . .4. .22 Altera¸˜es na distribui¸˜o 3. . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . .23. . . . . . .4. . . . . 1004 C.34 (10 Mar 2001) co ca . . . .30 (04 Jan 2001) co ca . . . . . . . . . . .23. . . . . . . . . . . . . . . . . . . . . . . .39 (12 Jun 2001) co ca . . . . . . . . . . . . . . . . .21 Altera¸˜es na distribui¸˜o 3.32 Altera¸˜es na distribui¸˜o 3.23 (01 Sep 2000) co ca . . . . .23. . . . . . . . . . . . . . . . . . .23. . . . . . . . . 1004 co ca C. . . . . . . . .40 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . . . . . . . .40 . . . .4. . . . . . . . . .23. .36 Altera¸˜es na distribui¸˜o 3.4. . . . . . . . . . . . . . . .23. . . . . . . . . . . .17 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . .38 Altera¸˜es na distribui¸˜o 3. . . . . . . 1015 C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . .4. . . . . . .4. . . . . . . . .23. . . . . . . . . . . . . .33 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . .4. . . 1013 C. . . . . . . .27 Altera¸˜es na distribui¸˜o 3. . . .28 Altera¸˜es na distribui¸˜o 3. . . . .4. . . . . . .23. . . . . . . . . . .4. . . . . . . . . . .35 (15 Mar 2001) co ca . . . . . . . .4.37 Altera¸˜es na distribui¸˜o 3. . . . . . . .28 (22 Nov 2000: co ca Gamma) . . . . . . . . . . . . . . . 1015 C.38 (09 May 2001) co ca . . . . . . . . 1001 C. . . . .23. . . . . . . . . . . . . . . . . . .18 Altera¸˜es na distribui¸˜o 3. . . .31 (17 Jan 2001) co ca . . . . . .23 Altera¸˜es na distribui¸˜o 3. 1018 C. . . . . . . . . . . . . . . . . . . . . . . . 1020 co ca .27 (24 Oct 2000) co ca . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 C. . . . . .44 (31 Oct 2001) co ca . . . . . . . . . . . . 1019 C. . . . . .26 Altera¸˜es na distribui¸˜o 3. . . . 1010 C. . . .24 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . .37 (17 Apr 2001) co ca . . . . . . . . . 1007 C. . . . . . . . . . . .4. .23. . . . . . . . . . . . . . .29 (16 Dec 2000) co ca . . . . . . . . . . . . . . . . 1009 C. . . . .4. . . . . . . . .4.23.41 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . 1007 C. . . . . . . . . . 1019 co ca C. .41 (11 Aug 2001) co ca . . . 1008 C. . . . . . . . . . . . . . . . . . .23. . . . . . . . . . . 1016 C. . . . . . . . . . . .25 (29 Sep 2000) co ca . . . . . . . . . . . . . . . . . . . . . . .20 Altera¸˜es na distribui¸˜o 3. . . .23. . . . . . . .23. . . . . . . . . .42 (08 Sep 2001) co ca . . . . 1005 C. . . . . . . . . . . . . . . . . .22 (31 Jul 2000) co ca . . .31 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . .25 Altera¸˜es na distribui¸˜o 3. .23.23. . . . .23. . . . . . . . . . . . . . . . . . .36 (27 Mar 2001) co ca .4. . .23.29 Altera¸˜es na distribui¸˜o 3. . . . . 1005 C. . . . . . . . . .

. .23. . .54 Altera¸˜es na distribui¸˜o 3. . . . . .22. .32 (14 Feb 2000) co ca .11 Altera¸˜es na distribui¸˜o 3. . . . .12 (07 Mar 2000) co ca .26 (16 Sep 1999) co ca . .5. . . . . . .4. .49 Altera¸˜es na distribui¸˜o 3. . 1025 co ca C. . .22. . . . . . . . . . .23. .17 . . . .10 Altera¸˜es na distribui¸˜o 3.22. . . . .23.1 . . . . . . . . . . . .60 Altera¸˜es na distribui¸˜o 3. . 1023 co ca C. . . . . . . . . . . . .53 Altera¸˜es na distribui¸˜o 3. . .18 . . . . . . . . . . . . . . . . .5. .4.7 (10 Dec 1999) co ca . . . .24 (05 Jul 1999) co ca .5 (20 Oct 1999) co ca . . 1033 co ca C. . . . .4. . .5. . . . . . .23. . . . . . . .51 Altera¸˜es na distribui¸˜o 3. .22. . . . . . . 1029 C. . . . . . . . . . . . . . . .4. . . . . . .4.5.4. . . . .3 Altera¸˜es na distribui¸˜o 3. . . . . . . .50 Altera¸˜es na distribui¸˜o 3.22. .3 . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . .28 (20 Oct 1999) co ca . . . . . . . 1024 co ca C. .30 . . . . . . . .16 . . . 1035 C. . . . . . . . . . . . . 1033 co ca C. . .23. . . . 1020 co ca C. . . .11 . . .52 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . .23. . . . . . . . . . . . . . . . . . . . . . .10 . . . . .33 . .22. . . . . . . . . 1031 co ca C. . .22. . . . .5 . . . . . . .55 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . .22. . . . . . 1035 C. . . . . .x (Old.5. . . . . . . . . .4 Altera¸˜es na distribui¸˜o 3. . .44 Altera¸˜es na distribui¸˜o 3. . . . .4. . . . . .22. . . . . . . . . . . 1034 co ca C. . . . . . . . . . . . . . . .23. . . . . .19 . . . . . . . . .23.34 . . . . . 1025 co ca C. . . . . . . . . . .4. .4 (28 Sep 1999) co ca . . . . . . . . 1034 C. .59 Altera¸˜es na distribui¸˜o 3. . . . . . . . . .23 (08 Jun 1999) co ca . . 1035 C. . 1027 C. . . . . . .8 (02 Jan 2000) co ca . . . . . 1033 co ca C. . . .4. .13 Altera¸˜es na distribui¸˜o 3. . 1029 co ca C. . . . . . . . . . . . . . .0 (05 Aug 1999: co ca Alpha) . . .47 Altera¸˜es na distribui¸˜o 3. . .43 Altera¸˜es na distribui¸˜o 3. . . . .2 (09 Aug 1999) co ca . . .12 Altera¸˜es na distribui¸˜o 3. . . . .4. . . . . .4. . . . . . . . . . . . . . .42 Altera¸˜es na distribui¸˜o 3. . . .31 . . .23. . . . . .1 Altera¸˜es na distribui¸˜o 3. . . . . . . .2 Altera¸˜es na distribui¸˜o 3. . . . . . . . 1030 C. . . . .4. . . . . . . . . . . 1033 co ca C. . . .4.23. . . . . .5 Altera¸˜es na distribui¸˜o 3. . . . . .23. 1033 C. . . . . . .25 . . . . . . . . . . . . . . . 1031 Altera¸˜es na distribui¸˜o 3. . . . 1025 co ca C. . . 1022 C. . . .5. .5.23. . . .15 (May 2000: co ca Beta) . .23.4. . . . . . . . . .13 . .4. . . . . 1024 C. . . . . . . . . . . . . . 1035 co ca C. . . .23. . . . . . . . . . 1022 co ca C. . . . . . .4. .48 Altera¸˜es na distribui¸˜o 3. . . . .xxix C. . . . . . .22. . . . . . . . . . . .9 Altera¸˜es na distribui¸˜o 3. . . . . . . .22. . . . . . . . . .58 Altera¸˜es na distribui¸˜o 3.29 (02 Jan 2000) co ca . 1034 C. .4. . . . . . . . . .6 Altera¸˜es na distribui¸˜o 3. . . .8 Altera¸˜es na distribui¸˜o 3. . .27 .4.23. . . .5. . . . . .7 Altera¸˜es na distribui¸˜o 3. . . . . . . . .23. . . . . . . . . . . . . . . . . . . . . . .61 Altera¸˜es na distribui¸˜o 3. .22. .57 Altera¸˜es na distribui¸˜o 3. . . . . . . . . . . . . . . . . . . . . . . . . 1034 co ca C. . . . .9 . . . . . . . . . . . . . . . . . discontinued) . . . . . 1028 C. . .6 . 1034 co ca C.56 Altera¸˜es na distribui¸˜o 3. . . . .5. . . . .23. . .4. . .5. . . . .4. .45 Altera¸˜es na distribui¸˜o 3. . . . 1027 co ca C. . . . . . . . . . . . . . . . .46 Altera¸˜es na distribui¸˜o 3. .23. . . . . .22.35 . . . . . . .14 . . . . . . . . . . . . . . . . . . . . . . 1026 C.5. . .23. . . . . . . . . . . 1021 co ca C. . . . . 1021 co ca C. . .22. . . . .23. .5. . . . .

.26 . . . . . .24 Altera¸˜es na distribui¸˜o 3. . .33 Altera¸˜es na distribui¸˜o 3. . . . .10 . . 1036 C. . . . . .22. . .5. .25 . . . . . . . . . . . 1047 co ca C. . . . 1042 co ca C. . . .21. . .6. . . . . .20 (18 Mar 1999) co ca . . . . . . . . . . . . .6. . 1039 co ca C. . . . .22. . . . . . . . .36 Altera¸˜es na distribui¸˜o 3. . . .5. . . . . . .5. .5. .5. . .32 . . .24 . .23 Altera¸˜es na distribui¸˜o 3. . . . 1045 co ca Altera¸˜es na distribui¸˜o 3. .8 . . . . . . .21. . . . . . . . . . . . . . .13 .21.21.6. .17 . . . .21. .6. .33 . . . . . . .6. . .22.21. . . 1047 co ca C. . . .17 Altera¸˜es na distribui¸˜o 3. .18 Altera¸˜es na distribui¸˜o 3. . . .5. . . .35 Altera¸˜es na distribui¸˜o 3. . .15 Altera¸˜es na distribui¸˜o 3.28 . . . . . . . . .22.21. . . .21 .5.6 . . . . .27 Altera¸˜es na distribui¸˜o 3. . . .21. .15 Altera¸˜es na distribui¸˜o 3. . . . . . . . .6 .22.22. .22.22 (30 Apr 1999) co ca .5.22 . . . . .5. . . . . . 1044 co ca C. . . .34 Altera¸˜es na distribui¸˜o 3. . . . .6.3 Altera¸˜es na distribui¸˜o 3. . . . .21. . . . . . . . . . . .21.19 Altera¸˜es na distribui¸˜o 3. . .11 Altera¸˜es na distribui¸˜o 3. 1041 co ca C. . . .31 . . . .21. . . . . . .18 .19 . . .22. . . . . . . . . . . . . . . . .5.8 Altera¸˜es na distribui¸˜o 3. .17 Altera¸˜es na distribui¸˜o 3. . .22.7 (Sep 1998: Beta) co ca . . . . . . . . . . . . .6. . . . .16 Altera¸˜es na distribui¸˜o 3. .4 Altera¸˜es na distribui¸˜o 3. . 1036 C.11 . .16 (Feb 1999: co ca Gamma) . . 1037 co ca C. . . . .15 .10 Altera¸˜es na distribui¸˜o 3. . . . . . . . . 1039 co ca C. .6 Altera¸˜es na distribui¸˜o 3. . .29 Altera¸˜es na distribui¸˜o 3. . .13 Altera¸˜es na distribui¸˜o 3. . .5. .9 . . 1048 co ca C. . . . . . . . . . . . . . . . . . . . 1037 C. .21. . .6. . .20 Altera¸˜es na distribui¸˜o 3.5. 1036 C. . . . . . 1038 co ca C. . . . . . . . . . .25 Altera¸˜es na distribui¸˜o 3. . . . .28 Altera¸˜es na distribui¸˜o 3. . 1040 co ca C. . . . . . . .21. . . . .23 . . . . . 1050 co ca C. . . . . . . . . . 1036 co ca C. .22. . 1047 co ca C. . . . . . 1037 co ca C. . . .22. 1049 co ca C. 1049 co ca C. . . . .21.21. . .22. . .22. . . . . . .22.5 . . . . . . . .5. . 1047 co ca C.22.5. .6. .31 Altera¸˜es na distribui¸˜o 3.4 . . . . . . . . .16 Altera¸˜es na distribui¸˜o 3.5. . 1041 C. .30 Altera¸˜es na distribui¸˜o 3. . . . 1043 co ca C. . . .6. .0 . . .xxx C. . . . . . . . .21. . .22 Altera¸˜es na distribui¸˜o 3.5. . . . 1050 co ca C.5. . . .22. . . . 1048 co ca C. . . . . . . . .6. . . . . . . . 1036 co ca C. .22. . . . . 1051 co ca C. .5. . . . . .1 (Jun 1998: Alpha) co ca . . 1052 co ca C.3 . . . . . . . . . . 1052 co ca C. . . . . . . . .22. . . . . .6. . . . . . . . . . . . . . . . .6.21a . . .17 . .5. . . 1051 co ca C.5. . .9 Altera¸˜es na distribui¸˜o 3. . .12 . . . . . . . . . . . . .2 . . . 1044 co ca C. . .14 .7 Altera¸˜es na distribui¸˜o 3.12 Altera¸˜es na distribui¸˜o 3. . . . . . . 1048 co ca C. . .29 . . .21 .18 Altera¸˜es na distribui¸˜o 3. . . 1050 co ca C. . . . .27 . . . .32 Altera¸˜es na distribui¸˜o 3. . . . .21. . . .5. . . . 1049 co ca C.5. 1051 co ca C. . . . . . . .26 Altera¸˜es na distribui¸˜o 3. . 1040 co ca C.1 Altera¸˜es na distribui¸˜o 3.22. . . . . . . .20 . . . . . .22. . . . . . 1038 co ca C. . . . . . . . . . .18 . .22. .6. . .x . .21 Altera¸˜es na distribui¸˜o 3. . . . 1045 C. . . . . . .30 .5 Altera¸˜es na distribui¸˜o 3. .14 Altera¸˜es na distribui¸˜o 3.5. .22. . . . . . . . . . . .21. . .21. . . . .19 (Mar 1999: co ca Production) .6.22. . . . . . . . . . . .6. . .6. . . . .2 Altera¸˜es na distribui¸˜o 3. . . 1052 co ca C. . .6. . . 1038 co ca C. . . . . . . . .14 Altera¸˜es na distribui¸˜o 3. . . . . . . . .

. . . .7 C.7. . co ca C. .1 Altera¸˜es na distribui¸˜o 3. co ca C. co ca 1053 1053 1054 1054 1054 1055 1055 1056 1056 1056 1057 1057 1057 1058 1058 1059 1059 1060 1060 1061 1062 1062 1062 1063 1063 1064 1064 1064 1064 1065 1066 1067 1067 1067 1068 1068 C. . .6. .6.11 .23 Altera¸˜es na distribui¸˜o 3. . . . .14 . .10 . . . .6. . . . . . .31 Altera¸˜es na distribui¸˜o 3. . . . . . . . . .21. . . . . .30 Altera¸˜es na distribui¸˜o 3.0 .2 Altera¸˜es na distribui¸˜o 3.2 Altera¸˜es na distribui¸˜o 3. .7. .33 Altera¸˜es na distribui¸˜o 3. . . .6. .6 . .21. . . . . . .21. . co ca C. co ca C. . co ca C. . . . . . . . .16 . .11 Altera¸˜es na distribui¸˜o 3. . . .15 .6. . .7. . . . . . co ca C.7. co ca C. .6.20. .21. . . . .19.6.6.20. .26 Altera¸˜es na distribui¸˜o 3.19. . . . .3 Altera¸˜es na distribui¸˜o 3. . . . . co ca C.11 . co ca C. . .29 Altera¸˜es na distribui¸˜o 3. . . co ca C. . . . . . . . . . .15 . co ca C. . .6.8. . .7. . . . . . . . . . .17 . co ca C. . . . . . . . . .20.20. .20. co ca C.12 .3 . . . .21. . .28 Altera¸˜es na distribui¸˜o 3. . . . .7.12 Altera¸˜es na distribui¸˜o 3. . co ca C. . . . . .x . . . . .6.7 . . . . . . . . . . .20. . . . . .7. . . . . . . co ca C. co ca C. .8. co ca C. . .1 Altera¸˜es na distribui¸˜o 3. . . co ca C. . . . . .19 Altera¸˜es na distribui¸˜o 3. . .21. .21. . . . .14a . . . .8.0 . . co ca C. . . . .20. . co ca C.6.8 . . . .5 Altera¸˜es na distribui¸˜o 3. .20. . . .19.8 . . . . . . . . .4 .14 Altera¸˜es na distribui¸˜o 3. co ca C.xxxi C.3 Altera¸˜es na distribui¸˜o 3. . . . . .6. . . . . .6.27 Altera¸˜es na distribui¸˜o 3. . . . . . . . . .7. . . . .20.4 Altera¸˜es na distribui¸˜o 3.9 Altera¸˜es na distribui¸˜o 3. . . . . . . . . co ca C. . . . . . . . . .21. .20. . co ca C.20.10 . . . . . . co ca C. . . . . . . .8 . co ca C. .6. . . .21.21. . . . .7. . . . .21.13 Altera¸˜es na distribui¸˜o 3. . . . . . .21. co ca C. .21 Altera¸˜es na distribui¸˜o 3. .10 Altera¸˜es na distribui¸˜o 3. . .5 . .7 Altera¸˜es na distribui¸˜o 3. .20 Altera¸˜es na distribui¸˜o 3. .20. . .21.34 Altera¸˜es na distribui¸˜o 3.7. . .20. . . . . .18 . . . . . .9 .24 Altera¸˜es na distribui¸˜o 3.7. . .3 . . . .7. . .14b . . . . . . . . .8 Altera¸˜es na distribui¸˜o 3. .5 . .13 .6. . . .16 . . .7. . . . . .13 . .22 Altera¸˜es na distribui¸˜o 3. co ca C. . . co ca Altera¸˜es na distribui¸˜o 3.21. .21. . . . . . . co ca Altera¸˜es na distribui¸˜o 3. . . . . . . .6.6. . co ca C. . co ca C. . . co ca C. .3 . . . . co ca C. . . . .20. . . . . . . . . . . . . . . .20.6 Altera¸˜es na distribui¸˜o 3. . . . . . . . .x . .21. . . . . .32 Altera¸˜es na distribui¸˜o 3. co ca C.21. . . . . .25 Altera¸˜es na distribui¸˜o 3. . .6 . . . . .7 . . . .2 . . . . . . . . . co ca C.4 . . . .35 Altera¸˜es na distribui¸˜o 3.19. . .9 .7.

. . . . . . . . 1076 M´todos de Lock . . . . . . . . . . . . . . . . . . . . . . . . .xxxii Apˆndice D Portando para Outros Sistemas e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081 c D. .1 Depurando um Servidor MySQL . . . . . . . . . . . . . . . . . 1072 D. . . . . . .1. . . .1. . . . . . . . . . . . 1075 Depurando um cliente MySQL. .5 D. . . .3 Depurando o mysqld no gdb . . 1076 O Pacote DBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070 ca D. . . . . . . . . . 1078 e Coment´rios Sobre Threads RTS. . . . . . . . . 1084 Apˆndice G GPL . 1069 D. . . . . . . . . .1. .1. . . . . . . . . .1 Compilando o MYSQL para Depura¸˜o . . . . . . . . . . . .3 D. . . . . . 1071 D. . . . . . . . . . . . . . . . . . . . . . . .4 Usando Stack Trace . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Usando Arquivos de Log para Encontrar a Causa dos Erros no mysqld . . . . . . 1093 Concept Index .6 Fazendo um Caso de Teste Se Ocorre um Corrompimento de Tabela . . .1. . . . . . . . . . . . . . . 1087 ´ Indices dos Comandos. . . . . . 1083 Apˆndice F Sintaxe de Express˜es Regulares do e o MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073 D. . . . . . . . . . . .2 D. . 1102 . . 1070 D. . . . . . . . . . . . . Tipos e Fun¸oes SQL c˜ . . . . . . . . . . . . . . . .6 Apˆndice E Vari´veis de Ambientes do MySQL e a .Licen¸a P´ blica Geral do e c u GNU . . . . . . . . . . . . .4 D. . . . . . . . . . . . . . . . .2 Criando Arquivos Trace (Rastreamento) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074 D. 1079 a Diferen¸a en Entre Alguns Pacotes de Threads . . . . . . . . . . . .

2 [Upgrading-fromco ca a ca 3.2. P´gina 26. ca a • Para discuss˜es das capacidades do Servidor do Banco de Dados MySQL. veja Se¸˜o 2.1.22].7. devem ser o e u a enviados para a lista de email geral do MySQL. P´gina 127. a • Para dicas sobre a portabilidade do Servidor do Banco de Dados MySQL para novas arquiteturas ou sistemas operacionais. veja o Se¸˜o 1. veja Apˆndice B [Credits]. P´gina 60. P´gina 53. a • Para exemplos de SQL e informa¸˜es sobre benchmarks. O Servidor MySQL pode ser usado em sistemas de produ¸˜o com alta carga e a ca ´ miss˜o critica bem como pode ser embutido em programa de uso em massa. e P´gina 936. bem como d´vidas e coment´rios. P´gina 33. Veja Se¸˜o 1. O programa MySQL ´ de Licen¸a Dupla. veja Apˆndice D [Porting].com/) disp˜e das ultimas informa¸˜es sobre o o ´ co programa MySQL.5. MySQL ´ uma a e marca registrada da MySQL AB. a • Para informa¸˜es sobre a atualiza¸˜o da vers˜o 3. ca a • Para ver a lista de todos os colaboradores deste projeto. veja Cap´ co ca “ptexi tulo 2 [Installing].fsf.23].6 [TODO]. e a • Para informa¸˜es sobre a atualiza¸˜o da vers˜o 4.7.org/licenses/) ou podem comprar uma licen¸a comc ercial padr˜o da MySQL AB.3 [What is MySQL AB]. veja Se¸˜o 2. a • Para uma lista de erros atualmente conhecidos e mal-funcionamento. ca • Para o hist´rico de novos recursos e corre¸˜es de erros. multi-tarefa e multia usu´rio. Os usu´rios podem escolher entre usar o proe c a grama MySQL como um produto Open Source/Free Software sob os termos da GNU General Public License (http://www.5.23.0]. P´gina 6. veja Se¸˜o 1. P´gina 1069.4 [Licensing and Support]. o co e P´gina 948. a • Para informa¸˜es sobre a atualiza¸˜o da vers˜o 3. veja o diret´rio de benchmarks co o (‘sql-bench’ na distribui¸˜o). A seguinte lista descreve algumas se¸˜es de particular interesse neste manual: co • Para informa¸˜es sobre a empresa por tr´s do Servidor do Banco de Dados MySQL.3 [Bug reports]. a Importante: Relat´rios de erros (tamb´m chamados bugs). a • Para projetos futuros. P´gina 123. veja Apˆndice C [News].1 [Mailing-list]. a ´ • Para um tutorial de introdu¸˜o ao Servidor do Banco de Dados MySQL.22. veja Cap“ptexi ca tulo 3 [Tutorial].8. ca a • Para instru¸˜es de instala¸˜o.5. veja Se¸˜o 2.1.Cap´ ıtulo 1: Informa¸˜es Gerais co 1 1 Informa¸˜es Gerais co O programa MySQL R ´ um servidor robusto de bancos de dados SQL (Structured Query e Language .6 ca [Bugs]. Veja Se¸˜o 1. P´gina 16. ca a Veja Se¸˜o 1. P´gina 12.Linguagem Estruturada para Pesquisas) muito r´pido. P´gina 36. co a veja Se¸˜o 1.2 [Features]. P´gina 169.1 [Upgrading-fromco ca a ca 4. a ca a O site web do MySQL (http://www.mysql. veja Se¸˜o 1.3 [Upgrading-fromco ca a ca 3. ca a . P´gina 120.0.

Exemplo: “Para ver como o mysqladmin funciona.mysql.com. P´gina 17. e P´gina 936. incluindo HTML. (A distribui¸˜o ca do Windows cont´m um arquivo ‘mysqlbug. Atualmente ´ mantido pela Equipe de Documenta¸˜o da MySQL. vocˆ deve enviar um email e c e para security@mysql. o mysqlbug pode ser encontrado no diret´rio ‘bin’ (‘/usr/bin’ para co a o o pacote RMP do servidor MySQL. e vari´veis o a de ambiente. execute-o com a op¸˜o --help. A vers˜o texto e Info s˜o produzidas a a a com makeinfo.txt’ no diret´rio base que pode ser usado como e o um template para um relat´rio de erro. A vers˜o mais recente deste manual est´ dispon´ e e u a a ivel em http://www.0. A vers˜o HTML ´ produzida automaticae a e mente usando uma vers˜o modificada do texi2html. que conta com Arjen e ca Lentz. Como o Programa da Banco de Dados MySQL est´ sob constante desenvolvimento.com. ca Este manual foi inicialmente escrito por David Axmark e Michael (Monty) Widenius. instru¸˜es e co co SQL. ca e e a Sendo um manual de referˆncia. PDF. veja Apˆndice B [Credits]. e e e a Mudan¸as funcionais s˜o sempre indicadas com referˆncia a vers˜o. e vers˜es HLP do Windows. o manual a tamb´m ´ atualizado freq¨entemente. Para co o distribui¸˜es bin´rias. A vers˜o PDF a e a ´ produzida com pdftex. Se vocˆ encontrou um erro de seguran¸a no Servidor MySQL. Para outros colaboradores. a Os direitos autorais (2003) deste manual pertence a compania Sueca MySQL AB. 1.mysql. A vers˜o PostScript ´ produzida usando texi2dvi e dvips. vocˆ pode tentar nossa e co e vers˜o com busca em http://www.com/doc/.1. assim este manual c a e a tamb´m pode ser utiliado caso vocˆ esteja utilizando uma vers˜o mais antiga do MySQL e e a (como 3.2 [Direitos Autorais].0-alpha O script mysqlbug deve ser usado para gerar comunicados de erros no Unix.4. e Se vocˆ tiver dificuldades de encontrar informa¸˜es no manual. ele documenta o MySQL at´ a vers˜o 5.” ca .1 Sobre Este Manual Este ´ o manual de referˆncia MySQL. o O documento original ´ uma arquivo Texinfo. nomes de bancos de dados.1 Conven¸˜es Usadas Neste Manual co Este manual utiliza algumas conven¸˜es tipogr´ficas: co a constant Fonte de largura fixa ´ usada para nomes de comandos e op¸˜es. por favor e a co co envie-os para a equipe de documenta¸˜o em docs@mysql. Se¸˜o 1. o Em distribui¸˜es fonte.com/documentation/ em diferentes formatos. a Se vocˆ tiver qualquer sugest˜o a respeito de adi¸˜es e corre¸˜es neste manual. Paul DuBois e Stefan Hinz. o script mysqlbug pode ser encontrado no diret´rio ‘scripts’. c´digo C e Perl.0-produ¸˜o). Tamb´m a referˆncias a vers˜o 5.23 ou 4. ele n˜o fornece instru¸˜es gerais sobre SQL ou conceitos de e a co banco de dados relacionais. tabelas e colunas.0-alpha.0. ca a Veja 1.2 MySQL Technical Reference for Version 5.0 (desenvolvimento).

e Exemplo: “A distribui¸˜o ´ instalada sobre o diret´rio ‘/usr/local’.lista_autor.com ou cmd. Por exemplo. use o caractere ‘%’. e shell> digite um comando shell aqui mysql> digite um comando mysql aqui A “shell” ´ seu interpretador de comando. Se vocˆ usa um shell do a e estilo csh. na seguinte instru¸˜o. co a a nome_tbl e nome_col.nome_tbl. colchetes (‘[’ e ‘]’) s˜o usados para indicar palavras ou cl´usulas co a a opcionais. Por exemplo. a sequˆncia a e para configurar uma vari´vel de ambiente e executar um comando se parece com o listado a abaixo na sintaxe Bourne Shell: shell> NOMEVAR=valor algum_comando Para csh ou tcsh. talvez assim: mysql> SELECT nome_autor FROM biblio_bd. execute a sequˆncia desta forma: e shell> setenv NOMEVAR valor shell> algum_comando Frequentemente.Cap´ ıtulo 1: Informa¸˜es Gerais co 3 ‘filename’ Fonte de largura fixa com aspas ´ usada para nomes e caminhos de arquivos. como aqui. No Windows. vocˆ pode encontrar uma express˜o assim: e a mysql> SELECT nome_col FROM nome_bd. Isso significa que se vocˆ estiver trabalhando numa express˜o similar. Quando um menbro de um conjunto de op¸˜es pode ser escolhido.” Fonte It´lica ´ usada para dar ˆnfase. SQL keywords n˜o caso sensitivas e podem ser escritas em mai´scula ou min´scula. pode ser necess´rio alterar algum de seus comandos. Exemplo: “Para especificar um meta caracter. as co alternativas s˜o listadas em colchetes (‘[’ e ‘]’): a TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) Quando um membro de um conjunto de op¸˜es deve ser selecionado. forneceria seu pr´prio e a o nome de banco de dados. IF EXISTS ´ opcional: ca e DROP TABLE [IF EXISTS] nome_tbl Quando elementos da sintaxe possuem mais de uma alternativa. ele ´ indicado por um prompt e antes do comando. No Unix. tabela e colunas. a e e Fonte em negrito ´ usada em cabe¸alhos de tabela e indicar ˆnfase especial. as alternativas s˜o co a listadas dentro de chaves (‘{’ e ‘}’): {DESCRIBE | DESC} nome_tbl {nome_col | metacar} . u Em descri¸˜es de sintaxe. Este a u u manual utiliza letras mai´sculas. ele ´ normalmente um programa e e como sh ou csh.exe. Por exemplo. Para indicar que as substitui¸˜es s˜o necess´rias. shell> indica um comando que ´ executado do seu shell e atual e mysql> indica um comando que ´ executado no programa cliente mysql. e c e italic boldface Quando um comando deve ser executado por um programa. nomes de bancos de dados. normalmente e executado como um console do Windows. o equivalente ´ o command. tabelas e colunas devem ser substitu´ idos nos comandos.” ca e o ‘c’ Fonte de largura constante com aspas ´ tamb´m usada para indicar sequˆncias e e e de caracteres. elas s˜o separados por a barras verticais (‘|’). este manual usa nome_db. Por exemplo. Comandos Shell s˜o mostrados usando a sintaxe do Shell Bourne.

(O e a padr˜o SQL est´ vem evoluindo desde 1986 e existem diversas vers˜es. vocˆ pode estudar o c´digo fonte e alter´-lo e e o a para adequ´-lo `s suas necessidades. ”SQL-99” se refere ao a padr˜o liberado em 1999.4 MySQL Technical Reference for Version 5. N´s usamos o termo ”o padr~o SQL” indicando o a a vers˜o atual do Padr˜o SQL em qualquer momento). Veja Se¸˜o 1. o mais popular sistema de gerenciamento de banco de dados SQL Open Source. A parte SQL do “MySQL” atenda pela “Structured Query Language Linguagem Estrutural de Consultas”. e ”SQL:2003” se refere a vers˜o do que esperamos que a a seja liberado no meio de 2003. ido e fundada pelos desenvolvedores do MySQL.4. ca acessar. Se isto ´ o que vocˆ est´ procurando. o gerenciamento de bancos de dados funciona como a engrenagem central na computa¸˜o. confi´vel. e Um banco de dados ´ uma cole¸˜o de dados estruturados. Neste a a o manual. distribu´ e tem suporte da MySQL AB. O MySQL ´ um sistema de gerenciamento de bancos de dados. Como os computadores s˜o muito bons em lidar com a grandes quantidades de dados. P´gina 18. Se vocˆ quiser. O MySQL usa a GPL (GNU General Public a a License .fsf.3 [Licen¸as MySQL]. Qualquer pessoa pode fazer download do MySQL pela Internet e us´-lo a sem pagar nada. Vocˆ pode encontrar comparaca a e .com/) fornece informa¸˜es mais recentes sobre e co programa MySQL e a MySQL AB.2 Vis˜o Geral do Sistema de Gerenciamento de Banco de a Dados MySQL MySQL. Veja Se¸˜o 1. ´ e desenvolvido.3 [What is MySQL ca AB]. a a O ´ MySQL um software Open Source.Licen¸a P´blica Geral GNU) c u http://www. vocˆ deveria experiment´-lo. cujos neg´cios ´ fornecer servi¸os relacionados o e c ao sistema de gerenciamento de banco de dados MySQL. Para adicionar. ”SQL-92” se refere ao padr˜o liberado em 1992. SQL ´ linguagem padr˜o mais comum e a usada para acessar banco de dados e ´ definida pelo Padr˜o ANSI/ISO SQL. e processar dados armazenados em um banco de dados de um computador. seja como utilit´rios independentes ca a ou como partes de outras aplica¸˜es. Se vocˆ sentir desconforto com a GPL ou precisar embutir o MySQL co e em uma aplica¸˜o comercial vocˆ pode adquirir a vers˜o comercial licenciada ca e a conosco. A MySQL AB ´ uma empresa comercial. P´gina 12. a O web site do MySQL (http://www. Ele pode ser quale ca quer coisa desde uma simples lista de compras a uma galeria de imagens ou a grande quantidade de informa¸˜o da sua rede coorporativa.0. vocˆ necessita de um sistema de gerenciamento de bancos de dados e como o Servidor MySQL. e Um banco de dados relacional armazena dados em tabelas separadas em vez de colocar todos os dados um s´ local.mysql. ca c a Por que usar o Banco de Dados MySQL? O servidor de banco de dados MySQL ´ extremamente r´pido.0-alpha 1. e f´cil e a a a de usar. para definir o que vocˆ pode e n˜o pode fazer com o software em diferentes e a situa¸˜es. Isso proporciona velocidade e flexibilo idade. e Open Source significa que ´ poss´ para qualquer um usar e modificar o proe ivel grama. co O MySQL ´ um sistema de gerenciamento de bancos de dados relacional.org/licenses. O e e a e a Servidor MySQL tamb´m tem um conjunto de recursos muito pr´ticos desene a volvidos com a coopera¸˜o de nossos usu´rios.

P´gina 469. a O Servidor MySQL foi desenvolvido originalmente para lidar com bancos de dados muito grandes de maneira muito mais r´pida que as solu¸˜es existentes a co e tem sido usado em ambientes de produ¸˜o de alta demanda por diversos ca anos de maneira bem sucedida. utilizando nossas r´pidas rotinas de baixo nivel a chegamos a conclus˜o que o mSQL n˜o era r´pido e nem flex´ a a a ivel o suficiente para nossas necessidades. um desenvolvedor de programas open source de Swaziland. a l´ izes ingua local de Swaziland. ´ E bem prov´vel que sua aplica¸˜o ou linguagem favorita j´ suporte o Servidor a ca a de Banco de Dados MySQL.Cap´ ıtulo 1: Informa¸˜es Gerais co 5 tivos de performance do Servidor MySQL com outros gerenciadores de bancos de dados na nossa p´gina de benchmark Veja Se¸˜o 5. A pron´ncia oficial do MySQL ´ “Mai Ess Que Ell” (e n˜o MAI-SEQUEL).2. Isto resultou em uma nova interface SQL para nosso banco de dados. A deriva¸˜o do nome MySQL n˜o ´ bem definida. Tanzania. Apesar de estar em constante desenvolvimento. mesmo para n´s.1 Hist´ria do MySQL o Quando come¸amos. e o O nome do golfinho do MySQL (nosso logo) ´ Sakila. t´ c inhamos a inten¸˜o de usar o mSQL para conectar `s nossas tabelas ca a ´ (ISAM). A filha de Monty tamb´m ganhou o nome My. diversos programas clientes e bibliotecas. velocidade. Esta API foi escolhida para facilitar a portabilidade para c´digos de terceiros que era escrito para uso com mSQL para ser portado o facilmente para uso com o MySQL. Sakila foi escolhido pelos fune dadores da MySQL AB de uma enorme lista de nomes sugeridos pelos usu´rios em nosso a concurso "Name the Dolphin". e 1. ca Tamb´m concedemos o Servidor MySQL como uma biblioteca multi-tarefa que e vocˆ pode ligar ` sua aplica¸˜o para chegar a um produto mais r´pido. a a MySQL tem muitos softwares de colaboradores dispon´ ivel. Mas n´s n˜o u e a o a ligamos se vocˆ pronunciar MAI-SEQUEL ou de outra forma qualquer. veja Cap´ co e c “ptexi tulo 6 [Reference]. ferramentas administrativas e diversas interfaces de programa¸˜o (API’s). a ca P´gina 422. depois de alguns testes. De acordo com Ambrose. Africa. A co conectividade. Nosso diret´rio base e um grande n´mero ca a e o u de nossas bibliotecas e ferramentas sempre tiveram o prefixo “my” por pelo menos 10 anos. o nome Sakila tem as suas ra´ em SiSwati. a O Programa de Banco de Dados MySQL ´ um sistema e cliente/servidor que consiste de um servidor SQL multi-tarefa que suporta acessos diferentes. e seguran¸a fazem com que o MySQL seja altamente c adapt´vel para acessar bancos de dados na Internet. a As caracter´ isticas t´cnicas do MySQL e Para informa¸˜es t´cnicas avan¸adas.1. menor e a ca a e mais f´cilmente gerenci´vel. Uganda. O nome vencedor foi enviado por Ambrose Twebaze. Qual das duas originou o nome do MySQL e continua sendo um mist´rio. . mas com praticamente a mesma Interface API do mSQL. pr´xima ao pais o igem de Ambrose. Entretanto.4 [MySQL Benchmarks]. o Servidor MySQL oferece hoje um rico e proveitoso conjunto de fun¸˜es. Sakila ´ tamb´m o e e ´ de or´ nome de uma cidade em Arusha.

CHAR. P´gina 22.6 MySQL Technical Reference for Version 5.org/~sewardj/). Python. uma ferramenta GPL o e (http://developer. ca a Utiliza o GNU Automake. a Isto ´ util se vocˆ quiser adicionar uma interface SQL a um banco de e ´ e dados caseiro. Perl.0 Nutshell]. 3. ivel a • • • • • • Tipos de Coluna • Aceita diversos tipos de campos: tipos inteiros de 1. Veja Cap´ “ptexi tulo 12 [Clients]. FLOAT. a Comandos e Fun¸˜es co • Completo suporte a operadores e fun¸˜es nas partes SELECT e WHERE das co consultas. P´gina 78. Testado com um amplo faixa de compiladores diferentes. a ´ Tabelas hash em mem´ria que s˜o usadas como tabelas tempor´rias. " ". BLOB. Ruby e Tcl est˜o a dispon´ iveis. TEXT. APIs para C. Dispon´ como vers˜o cliente/servidor ou embutida(ligada). 2. C++. SET e ENUM. a Tabelas em disco (MyISAM) baseadas em ´rvores-B extremamente r´pidas a a com compress˜o de ´ a indices. YEAR. P´gina 772.5. Java. se dispon´ u ivel. . Geralmente n˜o h´ a a a nenhuma aloca¸˜o de mem´ria depois da inicializa¸˜o da pesquisa. DATETIME. Veja Se¸˜o 2. Autoconf. Funciona em diversas plataformas. Um sistema de aloca¸˜o de mem´ria muito r´pido e baseado em proca o a cesso(thread). PHP. Isto significa que se pode facilmente usar m´ltiplas CPUs. ´ E relativamente f´cil se adicionar outro mecanismo de armazenamento. last_name) -> FROM nome_tbl -> WHERE income/dependents > 10000 AND age > 30. TIMESTAMP. a Suporte total a multi-threads usando threads diretamente no kernel.0. Fornece mecanismos de armazenamento transacional e n˜o transacional. a • Registros de tamanhos fixos ou vari´veis.1 [MySQL 4. Veja Se¸˜o 1. ca o ca O c´digo do MySQL foi testado com Purify (um detector comercial de o falhas de mem´ria) e tamb´m com o Valgrind.0-alpha 1. VARCHAR.2. ca a Portabilidade e • • • • • • • • • Escrito em C e C++. Joins muito r´pidas usando uma multi-join de leitura unica otimizada. DATE.kde. Por exemplo: mysql> SELECT CONCAT(first_name. e Libtool para portabilidade. o a a Fun¸˜es SQL s˜o implementadas por meio de uma biblioteca de classes co a altamente otimizada e com o m´ximo de performance.3 [Quais SO].2 [Tipos de Coluna]. Eiffel. TIME.2 As Principais Caracter´ isticas do MySQL A seguinte lista descreve algumas das caracter´ isticas mais importantes do Progrma de Banco de Dados MySQL. Veja Se¸˜o 6. ca P´gina 482.2. 4 e 8 bytes com e sem sinal. DOUBLE.

• O comando espec´ ifico do MySQL SHOW pode ser usado para devolver informa¸˜es sobre bancos de dados. a Seguran¸a c • Um sistema de privil´gios e senhas que ´ muito flex´ e e ivel.000 de linhas. O fonte do Connector/ODBC est´ dispon´ a ivel. STD(). A unica restri¸˜o ´ que para uma e a ´ ca e chamada de fun¸˜o. ca a . Senhas s˜o seguras porque ca co a a todo o tr´fico de senhas ´ criptografado quando vocˆ se conecta ao servidor. COUNT(DISTINCT . INSERT.000. os clientes podem se conectar usando named pipes. a • DELETE. P´gina 479. Um indice ca pode usar o prefixo de campo com um tipo CHAR ou VARCHAR. MAX() e MIN()). tabelas e ´ co indices. No sistema Unix. O tamanho m´ximo do ´ a indice ´ e ´ de 500 bytes (isto pode ser alterado na compila¸˜o do MySQL). No sistema Windows na fam´ NT (NT. • Alias em tabelas e colunas s˜o dispon´ a iveis como definidos no padr˜o SQL92.000. ca a • Vocˆ pode misturar tabelas de bancos de dados diferentes na mesma e pesquisa (como na vers˜o 3.2 [ODBC]. assim co a como muitas outras.22). Por exemplo.000. Suporte para fun¸˜es a a co de agrupamento (COUNT(). seguro e que permite verifica¸˜o baseada em esta¸˜es/m´quinas. a vocˆ pode usar o MS Access para conectar ao seu servidor MySQL. P´gina 866. SUM().). Todas as fun¸˜es ODBC s˜o suportadas. Veja Se¸˜o 12. ABS ´ um nome de campo v´lido.. os clientes podem se conectar usando arquivos sockets. • S˜o permitidos at´ 32 ´ a e indices por tabela. REPLACE. O comando EXPLAIN pode ser usado para determinar como o otimizador resolve a consulta.000 registros e sabemos de usu´rios que usam e a o Servidor MySQL com 60. E poss´ ivel retornar o n´mero de linhas com u padr˜o coincidentes configurando um parˆmetro quando estiver conectando a a ao servidor.Cap´ ıtulo 1: Informa¸˜es Gerais co 7 • Suporte pleno `s cl´usulas SQL GROUP BY e ORDER BY. Usamos o Servidor MySQL com bancos de dados que cont´m 50. • A interface Connector/ODBC fornece ao MySQL suporte a progras clientes que usam conex˜o ODBC (Open-DataBase-Connectivity). Cada ´ indice pode ser composto de 1 a 16 colunas ou partes de colunas. AVG(). • Nomes de fun¸˜es n˜o conflitam com nomes de tabelas ou colunas. 2000 ilia ou XP). Os e clientes podem ser executados no Windows ou Unix. Conectividade • Os clientes podem se conectar ao servidor MySQL usando sockets TCP/IP. Veja Se¸˜o 6. e UPDATE retornam o n´mero de linhas que u ´ foram alteradas (afetadas). Por co a exemplo.1. espa¸os n˜o s˜o permitidos entre o nome da fun¸˜o e ca c a a ca o ‘(’ que o segue.7 [Palavras reservadas]. • Suporte para LEFT OUTER JOIN e RIGHT OUTER JOIN com as sintaxes SQL e ODBC. a e e Escalabilidade e limites • Lida com bancos de dados enormes..000 tabelas e aproximadamente 5. em qualquer plataforma.

fornecendo um c´digo est´vel e o formato o icio o a ´ com vers˜es anteriores. Veja Cap“ptexi tulo 4 [MySQL Database co Administration].2. P´gina 328. Na TcX. a • Todos os programas MySQL podem ser chamados com as op¸˜es --help ou co -? para obter ajuda online. os caracteres Escandinavos ‘^’. cada distribui¸˜o nova teve menos problemas de portabilidade (mesmo com a ca os novos recursos implementados em cada uma destas vers˜es) o Cada distribui¸˜o do Servidor MySQL foi sendo usado. Estas instru¸˜es est˜o dispon´ co a iveis a partir da linha de comando por meio do cliente myisamcheck.0. os quais s˜o relacionados ao desenho. Por exemplo.2 [Languages].8 MySQL Technical Reference for Version 5. E poss´ alterar isso quando o servidor MySQL a ivel ´ iniciado. com a exce¸˜o dos a ´ a ca bugs listados na se¸˜o de erros. ujis e mais. P´gina 53.23 e 4. Quando o Programa de Banco de Dados MySQL foi disponibilizado para um p´blico maior. esta se¸˜o tenta indicar aquelas que s˜o a a a a ca a conhecidas atualmente. Tentaremos deixar claro estes assuntos e responder algumas das quest˜es o mais importantes que dizem respeito a muito de nossos usu´rios. ca Clientes e Ferramentas • O servidor MySQL foi constru´ com suporte para instru¸˜es SQL que ido co verificam. ca a • Suporte total para v´rios conjuntos de caracteres.8. Toa das as compara¸˜es em colunas de seq¨ˆncias caso-insensitivo. As descri¸˜es lidam com a Vers˜o 3. O MySQL inclui tamb´m o myisamchk. big5. otimizam e reparam tabelas. 1. O Servidor MySQL suporta diversos cono ca juntos de caracteres que podem ser especificados em tempo de compila¸˜o ca e execu¸˜o. co ue • A ordena¸˜o ´ feita de acordo com o conjunto de caracteres escolhido (o ca e ´ modo sueco por padr˜o).3 Estabilidade do MySQL Esta se¸˜o discute as quest˜es “Qu˜o est´vel ´ o MySQL?” e “Posso depender do MySQL ca o a a e neste projeto?”. Veja Se¸˜o 1.0 do Servidor MySQL. a o a • Todos os dados s˜o armazenados no conjunto de caracteres escolhido. e os problemas tem ocorrido somente ca quando os usu´rios come¸am a usar o c´digo das “´reas cinzentas. a .6 ca a ca [Bugs]. ‘¨’ s˜o permitidos em nomes de tabelas e colunas. Para ver um exemplo de v´rias ordena¸˜es avan¸adas. a predecessora da de tabelas ISAM permanece compativel o MySQLAB. Veja Se¸˜o 4. Originalmente. A informa¸˜o nesta se¸˜o a ca ca ´ baseada em dados colhidos da lista de discuss˜o. que ´ muito ativa na identifica¸˜o de e a e ca problemas e assim como nos relatos de tipos de uso. procure e a co c pelo c´digo de ordena¸˜o Tcheca. u nossos novos usu´rios rapidamente encontraram algumas partes de “c´digo sem testes”. o MySQL vem trabalhando sem problemas em nossos projetos desde o meio de 1996. co a Todos os erros conhecidos e relatados s˜o corrigidos na ultima vers˜o. que incluem ISO-8859-1 a (Latin1). a ‘¨’. novos a c o a usu´rios n˜o sabem o que s˜o as ´reas cinzentas. P´gina 208.” Naturalmente.7.0-alpha Localiza¸˜o ca • O servidor pode apresentar mensagem de erros aos clientes em v´rias a l´ inguas. um utilit´rio muito r´pido para realizar estas e a a ´ opera¸˜es em tabelas MyISAM. o c´digo vem do in´ dos anos 80. a o Desde ent˜o.

49. O trabalho no aprimoramento dos recursos de replica¸˜o continua no ca MySQL 4. Clientes que pagam recebem suporte direto e de alta qualidade da MySQL AB. Bulk-insert — Alpha Novo recurso nas tabelas MyISAM no MySQL 4. Em alguns sistemas existem certos o e problemas por utilizar o locking padr˜o do SO (fcntl(). Alguns e u o dos novos m´dulos est˜o listados abaixo com indica¸˜es de qu˜o bem-testado foi cada um o a co a deles. Pesquisas Full-text — Beta Pesquisa full-text funcionam mas ainda n˜o s˜o largamente usadas. InnoDB tem sido usado em a sistema de produ¸˜o grandes e com carga pesada. Nestes casos. A MySQL AB tamb´m fornece uma lista de discuss˜o como um recurso da comunidade onde qualquer e a pessoa pode tirar suas d´vidas. normalmente ´ lan¸ada a e e c uma nova distribui¸˜o. ca .23. na inicializa¸˜o. Tabelas InnoDB — Est´vel (na 3. para erros s´rios.23. MyODBC 3. se a tabela foi fechada corca retamente e executa uma conferˆncia/reparo autom´tico da tabela em caso e a negativo. S˜o a a conhecidos alguns problemas ocorridos em alguns sistemas Linux e no SunOS quando utiliza-se sistemas de arquivos montados em NFS. u Erros s˜o normalmente corrigidos com um patch.Cap´ ıtulo 1: Informa¸˜es Gerais co 9 O Servidor MySQL ´ escrito em m´ltiplas camadas com m´dulos independentes. mas ainda estamos melhorando a o e a interface do mecanismo de armazenamento transacional do BDB no Servidor MySQL.23.49) a O mecanismo de armazenamento transacional InnoDB foi declarado est´vel na a a ´rvore do MySQL 3.51 (usa ODBC SDK 3. assim levar´ algum tempo at´ que ele esteja t˜o bem testado quanto os a e a outro tipos de tabela. Melhoraa a mentos importantes forma implementados no MySQL 4. Replica¸˜o — Gamma ca Grandes grupos de servidores usando replica¸˜o est˜o em uso.23. Alguns problemas apresentados parecem ser relaca cionados a aplica¸˜o e independente do driver ODBC ou do servidor de banco ca de dados.51) — Est´vel a Em grande uso na produ¸˜o. Recupera¸˜o autom´tica de tabelas MyISAM — Gamma ca a Este status se aplica apenas ao novo c´digo que confere no mecanismo de aro mazenamento MyISAM que verifica. a Locking — Gamma Esse m´dulo ´ muito dependente do sistema. ca Tabelas BDB — Gamma O c´digo do Berkeley DB ´ muito est´vel. vocˆ a e deve executar o mysqld com o parˆmetro --skip-external-locking.0 para inser¸˜es mais r´pidas de co a v´rios registros.0. 3.x. com bom resulca a tados. a partir da vers˜o 3.

8 ca [SHOW].23 o tamanho m´ximo foi expandido at´ 8 milh˜es de a a e o terabytes (2 ^ 63 bytes). ca a Outros modos se contornar o limite do tamanho do arquivo das tabelas MyISAM s˜o os a seguintes: • Se sua tabela grande ser´ somente leitura. Para um vis˜o mais detalhada sobre LFS no Linux.suse. ca ca P´gina 597.5.de/~aj/linux_lfs. P´gina 637.4 j´ existem patches para o sistema de arquivos ReiserFS para a ter suporte a arquivos maiores.7 Intel 4G Solaris 2. Veja a e e Se¸˜o 6.5. P´gina 607.0.4 [ALTER TABLE]. a • O MySQL inclu´ uma biblioteca MERGE que permite acessar uma cole¸˜o de tabelas i ca idˆnticas como se fosse apenas uma. Veja Se¸˜o 6.2.7 ULTRA-SPARC 8T (?) No Linux 2. sendo um deles o sistema de arquivos usado para armazenar as tabelas MySQL.6. Veja e Se¸˜o 4.5. Com este tamanho de tabela maior permitido. Por padr˜o. Veja Se¸˜o 6.0-alpha 1. Com a e o novo MyISAM no MySQL vers˜o 3. com isso. a instru¸˜o CREATE TABLE permite as op¸˜es AVG_ROW_LENGHT e MAX_ROWS. dˆ uma olha na p´gina Andreas Jaeger’s a e a "Large File Support in Linux" em http://www. P´gina 597.22 do MySQL tem suporte para tabelas com limite de tamanho at´ 4G. No Linux 2. o tamanho m´ximo dispon´ a ivel ainda depende de diversos fatores. a Se vocˆ precisa de tabelas maiores que 4G (e seu sistema operacional suporta arquivos e grandes). portanto vocˆ pode obter.6 4G (pode ser alterado com parˆmetro) a Solaris 2. ca a • Outra op¸˜o para contornar o limite de tamanho de arquivos do sistema operacional ca para arquivos de dados MyISAM usando a op¸˜o RAID. Vocˆ pode verificar o tamanho m´ximo da tabela com a e a o comando SHOW TABLE STATUS ou com o myisamchk -dv nome_tabela Veja Se¸˜o 4. e ca a . o tamanho m´ximo a efetivo das tabelas para o banco de dados MySQL ´ normalmente limitado pelas restri¸˜es e co do sistema operacional quanto ao tamanho dos arquivos.5.8. Veja Se¸˜o 7. Use ca co estas op¸˜es para criar uma tabela que possa ter mais de 4GB.html. tabelas muito maiores. P´gina 303.2 [MERGE].3 [CREATE co ca TABLE].LFS) a exigidos.4 [myisampack].4 e j´ incluem todos os patches Suporte a Arquivos Grandes (Large File Support .2 vocˆ pode ter tabelas maiores que 2 GB usando o patch LFS para o sistema e de arquivos ext2.4 Qual o Tamanho Que as Tabelas do MySQL Podem Ter? A Vers˜o 3. vocˆ poder´ usar o myisampack para unir a e a e comprimir v´rias tabelas em uma. A maioria das distribui¸˜es atuais s˜o baseadas no kernel co a 2.10 MySQL Technical Reference for Version 5. A seguinte tabela lista alguns exemplos do limite do tamanho de arquivos do sistema operacional: Sistema Operacional Limite do tamanho do arquivo Linux-Intel 32 bit 2G. muito mais usando LFS Linux-Alpha 8T (?) ´ Solaris 2. mysisampack normalmente comprime uma tabela a em pelo menos 50%. Vocˆ pode tamb´m alterar isso mais tarde com ALTER TABLE.1 2G (E poss´ 4GB com patch) ivel Solaris 2. P´gina 337. No entanto. n˜o mais por limites internos do a MySQL. o MySQL cria tabelas MyISAM com uma estrutura interna que permite um a tamanho m´ximo em torno de 4G.3 [CREATE TABLE].

2."2000-03-01 00:00:00". Query OK. -> ("2001-01-01". -> date_time DATETIME."2050-01-01 00:00:00"."2005-01-01 00:00:00".5 Compatibilidade Com o Ano 2000 (Y2K) O Servidor MySQL n˜o apresenta nenhum problema com o ano 2000 (Y2K compat´ a ivel) • O Servidor MySQL usa fun¸˜es de tempo Unix que tratam datas at´ o ano 2037 para co e valores TIMESTAMP. e a • Todas as fun¸˜es de data do MySQL est˜o no arquivo ‘sql/time. Todos os anos de 2 d´ igitos s˜o considerados estar na faixa de 1970 at´ 2069. -> ("2000-02-28".19981231235959). o novo tipo de campo YEAR pode armazenar anos 0 e a 1901 at´ 2155 em 1 byte e mostr´-lo usando 2 ou 4 d´ e a igitos.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM y2k. -> ("2030-01-01".19990909235959)."2000-02-28 00:00:00".22 e posterior.20000101000000). +------------+---------------------+----------------+ | 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 | . -> ("2004-12-31". datas at´ o ano 9999 s˜o aceitas. -> ("2000-02-29".00 sec) mysql> INSERT INTO y2k VALUES -> ("1998-12-31".20010101000000). 0 rows affected (0. para valores DATE e DATETIME.01 sec) mysql> CREATE TABLE y2k (date DATE.20001231235959). 13 rows affected (0. ivel • No MySQL vers˜o 3.19990101000000).20000228000000).cc’ e codificadas com co a muito cuidado para ser compat´ com o ano 2000.20500101000000). -> ("2005-01-01".Cap´ ıtulo 1: Informa¸˜es Gerais co 11 1. -> ("1999-01-01". -> ("2050-01-01".20000301000000). -> ("1999-09-09"."2000-12-31 23:59:59"."1998-12-31 23:59:59".20050101000000)."1999-01-01 00:00:00". -> time_stamp TIMESTAMP). o que significa que se vocˆ armazenar a e e 01 em uma coluna YEAR."2004-12-31 23:59:59". -> ("2000-01-01"."1999-09-09 23:59:59".20041231235959).20300101000000). a O seguinte demonstra¸˜o simples ilustra que o MySQL Server n˜o tem nenhum problema ca a com datas at´ depois do ano 2030: e mysql> DROP TABLE IF EXISTS y2k."2000-01-01 00:00:00". -> ("2000-12-31". -> ("2000-03-01"."2000-02-29 00:00:00"."2001-01-01 00:00:00".20000229000000). O Servidor MySQL o tratar´ como 2001."2030-01-01 00:00:00". Query OK. 0 rows affected (0. Query OK.

´ de responsabilidade a e de sua aplica¸˜o fornecer datas que n˜o sejam amb´ ca a iguas.1 [Y2K issues]. Nos comunicamos extensivamente na internet todos os dias uns com os outros e com nossos usu´rios. que ´ usado para armazenar a hora atual.0-alpha | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0. O tipo de dados TIMESTAMP.A MySQL AB det´m os direitos autorais do c´digo fonte do MySQL. Este problema pode ser aumentado por aplica¸˜es que usam valores como co 00 ou 99 como indicadores de valores “perdidos”.2.12 MySQL Technical Reference for Version 5. agentes de a suporte e parceiros. N´s nos dedicamos a desenvolver o programa MySQL e propagar nosso banco de dados a o novos usu´rios. Veja Se¸˜o 6.0. P´gina 4. vocˆ pode ter problemas se vocˆ ca e e us´-lo com aplica¸˜es que n˜o s˜o seguras com o ano 2000. muitas aplica¸˜es a co a a co antigas armazenam ou manipulam anos usando valores de 2 digitos (que s˜o amb´ a iguos) em ´ vez de 4 digitos. Infelizmente. Em m´quinas de 64 bits. a e Embora o MySQL Server seja seguro em rela¸˜o ao ano 2000. Veja Se¸˜o 1. ny N´s somo a o uma organiza¸˜o virtual com pessoas em uma d´zia de pa´ ca u ises. suporta e valores na faixa de 19700101000000 a 20300101000000 em m´quinas 32 bits (valor com a sinal). apesar do Servidor MySQL n˜o ter problemas com o ano 2000. a e O exemplo mostra que os tipos DATE e DATETIME n˜o tem problemas com as datas usadas.2 [What-is].2.00 sec) O valor da coluna TIMESTAMP final ´ zero porque o ano final (2050) excede o TIMESTAMP e maximo. ca a A ideologia do MySQL mostra nossa dedica¸˜o ao MySQL e ao Open Source.3 Vis˜o Geral da MySQL AB a MySQL AB ´ a companhia dos fundadores e principais desenvolvedores do MySQL. A MySQL e AB foi estabelecida originalmente na Su´cia por David Axmark. estes problemas pode ser dif´ iceis de corrigir. Por exemplo. ca P´gina 490 para as regras do Servidor MySQL para lidar com entrada de datas amb´ a iguas que contenham valores de ano com 2 d´ igitos. ca N´s desejamos que o Programa de Banco de Dados MySQL seja: o . Os desenvolvedores do servidor MySQL s˜o todos empregados pela companhia. a Eles ir˜o conseguir trabalhar com datas at´ o ano 9999. cada um deles pode usar um conjunto diferente de conven¸˜es e fun¸˜es co co de tratamento de datas. TIMESTAMP trata valores at´ 2106 (valores sem sinal). Allan Larsson e Michael e “Monty” Widenius. Assim. 1. do logo e a e o da marca MySQL e deste manual.

com/) fornece as ultimas informa¸˜es sobre o MySQL ´ co e a MySQL AB. a 1. respectivamente. permanecendo r´pido e seguro. Os desenvolvedores tem o compromisso de dar suporte aos clientes e outros usu´rios a com objetivo de manterem contato com as suas necessiades e problemas. Elas est˜o a a a localizadas nos EUA e Alemanha. a • Trabalha contra patentes de sistemas.” Ela ´ traduzida para “MySQL.1 [Suporte]. a • S˜o uma empresa virtual. a Divertido de se usar e aprimorar. ca P´gina 17.3.mysql.3. Acess´ e dispon´ para todos. Veja Se¸˜o 1. veja http://www. e MySQL GmbH s˜o exemplos de subsidi´rias da MySQL AB.mysql.com/support/ ou contate nossos vendedores em sales@mysql.1 Suporte A MySQL AB ´ gerenciada pelos fundadores e principais desenvolvedores do banco de dados e MySQL. ivel ivel F´cil de usar. principal autor do MySQL Server.1. e e • Respondem e-mails e d˜o suporte. a • Tem como objetivo serem bons cidad˜os. a Melhorado continuamente. ou “sociedade anˆnima. 1. a Para maiores informa¸˜es e pedido de suporte de diversos n´ co iveis.4.com. A MySQL AB ganha dinheiro com suporte.” De fato. Em Outubro de 2001. a parte “AB” do nome da companhia ´ o acrˆnimo para a palavra su´ca o e o e “aktiebolag”. conectada com outras. o A compania tem sido luccrativa desde de sua cria¸˜o. O site do MySQL (http://www. Inc. licen¸as comerciais e royalties. A prop´sito. A MySQL AB e sua equipe: • Promovem a filosofia Open Source e suporte ` comunidade Open Source. o Este investimento ´ usado para solidificarmos nosso modelo de neg´cio e construir um base e o para o crescimento sustent´vel. . o e MySQL Inc. a • Tem preferˆncia por parceiros que compartilhem nossos valores e id´ias. Usc c amos estes rendimentos para patrocinar o desenvolvimento de produtos e para expandir os neg´cios da MySQL. Todo o nosso suporte ´ dado por desenvolvedores qualificado. aceitamos um ca financiamento de risco de investidores Escandinavos e um pounhado de pessoas de neg´cio.1 O Modelo de Neg´cio e Servi¸os da MySQL AB o c Uma das d´vidas mais comuns que encontramos ´: “Como vocˆ pode viver de algo que vocˆ u e e e ´ disponibiliza sem custo? ” E assim que fazemos.Cap´ ıtulo 1: Informa¸˜es Gerais co 13 • • • • • O melhor e o mais usado banco de dados no mundo. servi¸os. D´vidas mais complicadas s˜o respondidas e u a por Michael Monty Widenius. Livre de erros (bugs).

0-alpha 1.1. O Treinamento do MySQL tamb´m est´ dispon´ por meio de seus parceiros. Tamb´m ca ca co e ajudamos os nossos clientes com o Servidor MySQL embutido em seus produtos e aplica¸˜es co para desenvolvimento em larga-escala. Os servi¸os de consultoria e c c varia de sess˜es de 2 dias a projetos que gastam semanas e meses. os Centros de e a ivel Treinamento Autorizados do MySQL.com/consulting/ ca ou contate nossa equipe de consultoria em consulting@mysql.0.1. e mais. ca 1. Melhorar a seguran¸a.com.2 Treinamento e Certifica¸˜o ca A MySQL AB distribui o MySQL e treinamentos relacionados mundialmente. Isto tamb´m assegura que nenhuma quest˜o surgida durante o curso fique e a sem resposta. veja http://www. viste a se¸˜o de treinamento em ca http://www. ca Preparar-se para Certifica¸~o MySQL.3 Consultoria A MySQL AB e seus Parceiros Autorizados oferecem servi¸os de consultoria para usu´rios c a do Servidor MySQL e `queles que utilizam o Servisdor MySQL embutido em seus programas. ajustar sua plataforma para uma melhor performance.com/training/ ou contate nos em: training@mysql. resolver quest˜es o de migra¸˜o. criar a consultas eficientes.com/certification/. Se estiver interessado em nossos servi¸os de consultoria ou quiser se tornar nosso parceiro. Reduzir ou eliminar a necessidade de hardware adicional. Nossos consultores trabalham em colabora¸˜o com a nossa equipe de desenvolvimento. configurar replica¸˜o. Nossos consultores podem ajud´-lo projetando e ajustando o seu banco de dados. Nossos instrutores s˜o apoiados por nossa equipe de desenvolvi´ a a mento para garantir a qualidade do treinamento e o desenvolvimento cont´ inuo do material de nossos cursos. o ca que assegura a qualidade t´cnica de nossos servi¸os profissionais. Melhorar o desempenho de seus aplicativos. c Aumentar a satisfa¸˜o dos clientes e colabloradores.3. criar aplica¸˜es transacionais robustas. .mysql. Nosso material de treinamento usa os mesmos bancos de dados exemplos usados em nossa documenta¸˜o e nossos exemplos de aplicativos. Oferecemos tanto cursos abertos quanto fechados voltado para a necessidade espec´ ifica da sua empresa.mysql. a em qualquer parte do mundo. Perl e mais. Para detalhes sobre o Programa de Certifica¸~o MySQL. Ele est´ sempre atualizado de acordo com ca a a ultima vers˜o do MySQL. Nosso peritos n˜o apenas o a cobrem o Servidor MySQLeles tamb´m conhecem sobre linguagens de programa¸˜o e scripts e ca tais como PHP.com.3. baixando o custo. vocˆ tamb´m ir´: e e a • • • • • • Economizar tempo.14 MySQL Technical Reference for Version 5. ca Se vocˆ estiber interessado em nosso treinamento como um participante em pore tencial ou como um parceiro de treinamento. Fazendo nossos cursos de treinamento permitir´ que vocˆ alcance os objetivos de seu aplicaa e tivo MySQL. c visite a se¸˜o sobre consultaria em nosso web site em http://www.mysql.

com. o e Para mais informa¸˜es. ´ o 1. obtivemos mais de 10 milh˜es e views.com/) ´ popular entre desenvolvedores e usu´rios.1. Para servi¸os de imprensa e quest˜es n˜o cobertas por nossas releases de nott´ c o a icias (http://www.mysql. vocˆ pode comprar uma licen¸a comercial para o mesmo produto da MySQL AB.com/support/.com/training/. envie-nos um email para press@mysql. Se vocˆ n˜o deseja estar e a limitado pelos termos da GPL (tais como a exigˆncia de que a sua aplica¸˜o tamb´m deva ser e ca e GPL).com.mysql.1. c e ca a 1. P´gina 18. consultaria e suporte.com/) fornece as ultimas informa¸˜es sobre MySQL ´ co e MySQL AB. P´gina 17. A palavra MySQL e o logomarca do golfinho da MySQL s˜o marcas registradas da MySQL AB.com/products/pricing. vocˆ receber´ em tempo. visite a se¸˜o de treinamento em co ca http://www. Os Parceiros da MySQL AB ganham visibilidade no nosso web site (http://www. que o significa que o mesmo produto est´ dispon´ sob a GPL e sob uma licen¸a comercial. ou envie um e-mail para sales@mysql. o Se vocˆ est´ interessado em se tornar um Parceiro da MySQL AB.4 [MySQL AB Logos and Trademarks]. estamos aptos a empregar o Licenciamento Dual. Em nosso site na web.4.com. e a e a respostas precisas para as suas quest˜es t´cnicas sobre o programa MySQL.Cap´ ıtulo 1: Informa¸˜es Gerais co 15 1.html. a Veja Se¸˜o 1. Mais de 65% fizeram uma ou mais compras a a a online no ultimo semaster e 70% planejam fazer uma compra nos pr´ximos meses.3 [MySQL licenses].mysql. Para informa¸˜es sobre treinamento MySQL. Desde de que a MySQL AB ´ dona dos e direitos do c´digo fonte do MySQL. veja Se¸˜o 1. publica¸˜es. o co Vinte por cento de nossos vistantes autorizam decis˜es de compra e apenas nove por cento o n˜o est˜o envolvidos com a ´rea de compras. Para detalhes a sobre quando uma licen¸a comercial ´ exigida. Isto a ivel c n˜o afeta o nosso comprometimento com o Open Source de forma alguma.4 Licen¸as Comerciais c O banco de dados MySQL ´ liberado sob a licen¸a GNU General Public License (GPL). conte a e a . e a Em Outubro de 2001. P´gina 20.5 Parcerias A MySQL AB tem um programa de parceria mundial que cobre cursos de treinamento.mysql.mysql.mysql. veja Se¸˜o 1. envie-nos um email para e a partner@mysql. Se vocˆ tiver um contrato de suporte v´lido com a MySQL AB. O web site do MySQL (http://www.3.mysql.com/) e o direito de usarem vers˜es especiais da marca MySQL para o identificar seus produtos e promoverem os seus neg´cios.2 Informa¸oes para Contato c˜ O web site do MySQL (http://www.com/news/).1 [Support]. Isto e c significa que o programa MySQL pode ser usado sem custos sob a GPL. Estas marcas registradas ca a representam um valor significante que os fundadores do MySQL construiram ao longo dos anos. veja co ca a http://www. Se vocˆ tiver acesso restrito ` Internet. mais a revenda e distribiui¸˜o do MySQL e produtos co ca relacionados. veja e c http://www. Nossos visitantes representam o um grupo que tomam decis˜es de compra e fazem recomend¸˜es de software e hardware.4.3.4.3.

Mais informa¸˜es sobre licen¸as podem ser encontradas em co c http://www. Caso vocˆ encontre um bug de seguran¸a importante no MySQL Server.0-alpha equipe de treinamento da MySQL AB via e-mail em training@mysql.com.7.16 MySQL Technical Reference for Version 5.mysql.ht ou envie um e-mail para trademark@mysql. visite a se¸˜o de consultorias de nosso web e ca site em http://www. preencha o ca c formul´rio de contato em nosso site web (http://www.com. P´gina 14. Se vocˆ tiver sugest˜es a respeito de adi¸˜es ou conex˜es para este manual.com. Veja Se¸˜o 1. a Se vocˆ est´ interessado em qualquer um dos trabalhos da MySQL AB lista na se¸˜o de trae a ca balhos (http://www. P´gina 20.com.2 ca [Business Services Training].com/company/privac Para qualquer quest˜es a respeito desta pol´ o itica. a Para discuss˜es gerais entre nosso muitos usu´rios.1. 1. P´gina 33.com/certification/.com/products/pricing. Veja Se¸˜o 1.4. envie-os para a e o co o equipe do manual via e-mail em docs@mysql.1.mysql. Para quest˜es ou coment´rios sobre o funcionamento ou cote´do do web site da MySQL o a u (http://www.3 [Business Services Consulting].com/company/trademark. envie-nos a e c um e-mail para security@mysql. deo o a vem ser enviados para a lista de email geral do MySQL. envie um e-mail para jobs@mysql. Veja Se¸˜o 1.4.3.3 [Licen¸as MySQL].com/. P´gina 14. contate-nos via e-mail em e benchmarks@mysql.com.0. a ca u a Relat´rios de erros (geralmente chamados bugs).4 [MySQL AB Logos and ca Trademarks]. P´gina 36. envie um e-mail para info@mysql. P´gina 18. direcione a sua aten¸˜o para a lista de o a ca discuss˜o apropriada.com.html. c L´ vocˆ tamb´m encontrar´ informa¸˜es de como enviar um fax da sua ordem de a e e a co compra para a MySQL AB. envie um e-mail para e a partner@mysql. assim como quest˜es e coment´rios.mysql. envie um e-mail para webmaster@mysql. ca a Se vocˆ tiver resultados de benchmarks que podemos publicar.2 [Business Services Training]. ca a Se vocˆ estiver interessado em consultoria.com/) ou envie um email a para licensing@mysql. Veja Se¸˜o 1.5 [Business Services Partnering].1. ca a ´ Para mais detalhes sobre a politica da marca MySQL.1 [Mailing-list]. veja http://www.com/).mysql.3 [Bug reports]. visite http://www.com/company/jobs/). ca a Licen¸as comerciais podem ser compradas online em https://order.1 [D´vidas]. mas como texto no final de sua mensagem de email. Se vocˆ tiver restri¸˜es acesso a internet. ca .com.3. P´gina 14. Veja Se¸˜o 1.4 Suporte e Licenciamento do MySQL Esta se¸˜o descreve os contratos de licenciamento e suporte do MySQL. Veja Se¸˜o 1.mysql. A MySQL AB tem uma pol´ itica de privacidade que pode ser lida em http://www. e co contate a equipe de consultores da MySQL AB via e-mail em consulting@mysql.com. ca P´gina 33.com.3.3.1.mysql. Veja Se¸˜o 1.7. N˜o nos envie o seu CV em anexo.com/consulting/.com. co c Veja Se¸˜o 1.com (para quest˜es sobre licenciamento) ou para sales@mysql. ca c a Se vocˆ est´ interessado em fazer parceira com a MySQL AB. a Para informa¸˜es sobre o Progrma de Certifica¸o MySQL.mysql. Se vocˆ tiver duvidas em rela¸˜o a e ca licenciamento ou quiser cota para negocia¸˜o de um alto volume de licen¸as.7. envie um e-mail para privacy@mysql.com o (para pedidos de compra).com.mysql. Veja Se¸˜o 1. P´gina 15.1. Para todos os outros assunto.1.mysql.

restaurar sistemas com falhas. • Vocˆ pode criar uma c´pia impressa para seu pr´prio uso pessoal.com/products/mypl. ´ necess´rios um acordo com a MySQL AB previamente ca e a escrito.3 [What is MySQL AB]. P´gina 12. assim como a biblioteca GNU readline ´ coberta pela GNU General Public License. Todo o c´digo espec´ o ifico do MySQL no servidor.4. Diversas ca a licen¸as s˜o relevantes a distribui¸˜o do MySQL: c a ca 1. 4. contratados pela MySQL AB. mas j´ ´ muito tarde para adquir´ e a ae ilo.1 Suporte Oferecido pela MySQL AB O suporte t´cnico do MySQL AB significa respostas individualizadas as seus problemas pare ticulares diretamente dos engenheiros de software que codificaram o MySQL. Vers˜es mais antiga do MySQL (3.2 Copyrights e Licen¸as Usadas pelo MySQL c MySQL AB possui os direitos sobre o c´digo fonte do MySQL. remover gargalos de a desempenhos.fsf. Vocˆ pode e e precisar de acesso imediato aos respons´veis pela solu¸˜o de problemas do MySQL dsipon´ a ca iveis. Normalmente os clientes e o e procuram ajuda em como comandos e utilit´rios diferentes funcionam. Se vocˆ utiliza o MySQL Server para aplica¸˜es importantes e encontrar dificuldades e co repentinas. e o a n˜o produtos de terceirosque acessam o servidor MySQL.mysql. 3.22 e anteriror) est˜o sujeitos a uma licen¸a estrita o a c (http://www. 1. mas o conte´do atual n˜o pode ser a e u a alterado ou editado de modo algum. Tentamos ter uma vis˜o ampla e inclusiva de suporte t´cnico. as logomarcas e marcas rego istradas do MySQL e este manual. Veja a documenta¸˜o da vers˜o esca a pec´ ifica para mais informa¸˜o. mas e e e quando sua hora chegar ele ´ de grande importˆncia. Qualquer problema envola e vendo o MySQL ´ importante par n´s se for importante para vocˆ. .html). Veja e http://www. Nosso suporte cobre apenar o servidor MySQL e nossos pr´prios utilit´rios. O texto desta licen¸a podee ser encone a c trado no arquivo ‘COPYING’ na distribui¸˜o. utiluizaar APIs. como venda de c´pias impressas ou uso (de partes) do o manual em outra publica¸˜o. A biblioteca GNU getopt ´ coberta pela GNU Lesser General Public License. e assim a ca por diante. Algumas partes da fonte (a biblioteca regexp) ´ coberta por um copyright no estilo e Berkeley. embora tentamos ajudar com eles a quando podemos. entender impactos do sistema operacional e rede no MySQL. ca 2. O manual de referˆncia do MySQL atualmente n˜o ´ distribu´ sob uma licecn¸a no e a e ido c estilo da GPL. Vocˆ pode viver felizsem ele durante anos. a biblioteca mysqlclient e o cliente.Cap´ ıtulo 1: Informa¸˜es Gerais co 17 1. O uso deste manual est´ sujeito aos seguintes termos: a • A convers˜o para outros formatos ´ permitido. P´gina 1087. Veja Se¸˜o 1.org/licenses/. configurar melhor pr´ticas de backup e restaura¸˜o. e o o • Para todos os outros usos. e Veja Apˆndice G [GPL license]. Informa¸˜es detalhadas sobre nossas v´rias op¸˜es de suporte ´ dado em co a co e Suporte t´cnico ´ como seguro de vida. vocˆ pode gastar horas tentando resolver os problemas sozinho. ca 5.4.

4. Veja Se¸˜o 1.html e http://www.gnu.html).html para mais informa¸˜es.3 Licen¸as do MySQL c O programa MySQL ´ distribu´ e ido sob a GNU General Public License (GPL).com/.1 Usando o Programa MySQL Sob uma Licen¸a Comercial c A licen¸a GPL ´ contagiosa no sentido de que quando um programa ´ ligado a um programa c e e GPL. a 1. que ´ provavelmente a melhor licen¸a Open Source conhecida. Comprar e a c o suporte diretamente da MySQL AB ´ outro bom modo de contribuir com o desene volvimento do programa MySQL. mas e ido c para certos usos vocˆ pode querer ou precisar comprar lincen¸as comerciais da MySQL AB em e c https://order.org/licenses/.com/products/licensing. • Quando vocˆ distribui c´pias do programa MySQL sem fornecer o c´digo fonte como e o o exigido sob a licen¸a GPL. vocˆ quebra os termos da e a e e licen¸a e perde o seu direito de usar o programa GPL inclu´ c ido.18 MySQL Technical Reference for Version 5.4. vocˆ n˜o est´ usando o programa MySQL sob GPL c e a a embora o c´digo seja o mesmo. o • Quando vocˆ distribui uma aplica¸˜o n˜o GPL que s´ funciona com o programa MySQL e ca a o e a entrega com o programa MySQL. ele pode ser usa geralmente de gra¸a.4. Veja tamb´m c e http://www.4.3.htm Como o programa MySQL ´ distribu´ sob a GPL.4. P´gina 20.mysql. e c Os termos formais da licen¸a GPL pode ser encontrado em http://www.4 [MySQL AB Logos and Trademarks]. Este tipo de solu¸˜o ´ considerada mesmo se feita ca e em uma rede.0-alpha Envie-nos email para docs@mysql.4 [MySQL AB Logos ca a e ca and Trademarks].3 [MySQL licenses].com para maiores informa¸˜es ou se vocˆ estiver co e interessado em fazer a tradu¸˜o.0. com vantagens imediatas para vocˆ.org/licenses/gpl-faq. Veja a documenta¸˜o da vers˜o espec´ ca a ifica para mais informa¸˜o.4.1 e ca [Support]. a . todo o c´digo fonte para todas as partes do produto resultante tamb´m devem ser o e distribu´ idas sob a GPL. talvez porque vocˆ queira criar um e produto comercial ou manter fechado o c´digo n˜o GPL adicionado por outras raz˜es.org/philosophy/enforcing-gpl. e e Vocˆ precisar´ de uma licen¸a comercial: e a c • Quando vocˆ liga um programa com qualquer c´digo GPL do programa MySQL e n˜o que e o a que o produto resultante seja licenciado sob a GPL. GPL ou a antiga licen¸a do c c MySQL n˜o d´ automaticamente o direito de usar as marcas registradas da MySQL AB. co Vers˜es mais antigas do MySQL (3. Veja a a Se¸˜o 1. Se vocˆ n˜o seguir esta exigˆncia do GPL. P´gina 20. ca Para informa¸˜es sobre como as licen¸as do MySQL funcionam na pr´tica.fsf. de uma olhada co c a em Se¸˜o 1. Veja http://www.fsf.mysql. c • Quando vocˆ quiser dar suporte adional ao desenvolvimento do banco de dados do e MySQL mesmo se vocˆ n˜o precisar formalmente de uma licen¸a comercial. ca Note que o uso do programa MySQL sob uma licen¸a comercial. o a o Ao comprar a lincen¸a comercial.mysql.com/products/mypl. P´gina 17. Vocˆ tamb´m corre riscos.22 e anteriores) est˜o sujeitos a uma licen¸a mais estrita o a c (http://www. Veja tamb´m Se¸˜o 1. ca a 1. P´gina 18.

• Quando vocˆ usa o banco de dados MySQL em conjunto com um servidor web.mysql. • Quando vocˆ distribui o c´digo fonte do MySQL junto com outros programas que n˜o e o a s˜o ligados ou dependentes do sistema do MySQL para suas funcionalidades mesmo se a vocˆ vender a distribui¸˜o comercialmente. Encorajamos as pessoas a usarem provedroes que possuem suporte ao MySQL. No e a a entanto. j´ que isto lhes dar´ a a a confian¸a qie seus provedores ter˜o.3. Sentimos que se banco de dados MySQL ajudou os seus neg´cios. Mesmo se um provedor n˜o ca a tiver uma licen¸a comercial ara o MySQL Server. vocˆ n˜o e e a ´ por precisa de uma licen¸a comercial (uma vez que este n˜o ´ um produto distribuido c a e vocˆ). ´ razo´vel o e a pedirmos que vocˆ ajude a MySQL AB.com.org/licenses/gpl-faq. veja o FAQ gencio da Free Software Foundation em http://www. a Se vocˆ utiliza o bancdo de dados MySQL em um contexto comercial e obtem lucro com e o seu uso. e c oferecendo hospedagem web com serviodres MySQL para seus clientes. Usos comuns da GPL incluem: • Quando vocˆ distribui sua pr´pria aplica¸˜o e o c´digo fonte da MySQL com o seu e o ca o produto. c Para contrato de suporte.html. os recursos para resolver qualquer problema c a que eles possam experimentar com a instala¸˜o do MySQL.1 [Support]. (De outra forma. lhe encorajamos a c a adquirir um suporte da MySQL AB de qualquer forma. neste caso n´s gostariamos que vocˆ adquirisse o suporte ao MySQL pois o o e MySQL est´ ajudandoa sua empresa. Deste modo vocˆ contribui com o e desenvolvimento do MySQL e tamb´m ganha vantegens imediatas. se vocˆ nos pedir suporte. e ca P´gina 17.visite o nosso site web em http://www. Ela cobre qualquer n´mero de CPUs na m´quina. de fato. contate a nossa quipe de vendas via email em sales@mysql. vocˆ precisar´ de uma para cada instala¸˜o do programa e c e a ca MySQL. vocˆ n˜o e e e a s´ estar´ usando de gra¸a algo em que colocamos muito trabalhom mas tamb´m pedindo o a c e que lhe forne¸amos suporte de gra¸a tamb´m).4. veja http://www. . pedimos que vocˆ ajude no desenvolvimento do MySQL adquirindo algum n´ e ivel de suporte.mysql. Isto ´ verdade mesmo se vocˆ executar um servidor web comercial que utilize e e e MySQL Server.2 Usando o Programa MySQL Sem Custo Sob GPL Vocˆ pode utilizar o programa MySQL sem custo sob a GPL se vocˆ concordar as condi¸˜es do e e co GPL. seus clientes devem ter acesso de c leitura ao fonte da instala¸˜o do MySQL para que seus clientes verifiquem que ela est´ ca a correta.fsf.ISP). e n˜p h´ nenhum limite artificial u a a a no n´mero de clientes que conectam aom servidor de qualquer modo.com/products/licensing. u Para licen¸as comercias. Veja Se¸˜o 1.com/support/. Isto ´ chamado agrega¸˜o na licen¸a GPL.4. incluindo respostas a duvidas comuns sobre a GPL. Se vocˆ tiver necessie dades especiais ou tiver acesso restrito a Internet. vocˆ pode e a a e us´-lo de gra¸a. a c • Quando vocˆ for um Provedos de Servi¸os de Internet (Internet Service Provider . Para detalhes adicionais. pois vocˆ n˜o est´ distribuindo qualquer parte do sistema MySQL. 1. c c e . a Se o seu uso do banco de dados MySQL n˜o exige uma licen¸a comercial.Cap´ ıtulo 1: Informa¸˜es Gerais co 19 Se vocˆ requisita uma licecn¸a.html. e ca e ca c • Quando vocˆ n˜o est´ distribuindo qualquer parte do sistema do MySQL.

fa¸a com que ele contenha um link para e c http://www. Isto ´ bem vindo. se esfor´ndo em navegar pelos oceanos de dados. O golfinho foi escolhido como um s´ imbolo para o baco de dados MySQL j´ que ele a ´ esperto.com/press/logos. e n˜o a MySQL AB.livros ou produtos fechados.4 Logomarcas e Marcas Registradas da MySQL AB Muitos usu´rios do banco de dados MySQL deseja mostar o logo do golfinho da MySQL AB a em seus web sites. Nos reservamos o direito de revogar o diretiro de uso da marcas registradas da MySQL AB. como o nome indica.4.mysql. r´pido e um animal ´gil.4.com/. .mysql.0.0-alpha 1. e 1.mysql.com/. mas n˜o pode alterar e a cores ou o desenho. • Se vocˆ utilizar as maracas em um site da web.1 O Logo Original do MySQL O logo do golfinho do MySQL foi desenhado pela Finnish advertising agency Priority em 2001. mas deve haver anota¸˜es e co indicando que a palavra MySQL e o logo do golfinho da MySQL s˜o marcas registradas da a MySQL AB e s´ podem ser usadas como indicado na nossa pol´ o itica de marcas registradas em http://www. ´ o criado e propriet´rio do site que mostra e a e a a logomarca do MySQL.20 MySQL Technical Reference for Version 5. O uso destas logomarcas n˜o o a ´ s˜o totalmente irrestritas mas. e Vocˆ pode mudar sua escala para servir as suas necessidades.2 Logomarcas da MySQL que Podem Ser Usadas Sem Permiss˜o de Altera¸˜o a ca Projetamos um conjunto de logos especiais de Uso Condicionale que podem se encontrados em nosso site web em http://www.4. As exigˆncias s˜o basicamente as apresentadas aqui: a e a • Use a logomarca que vocˆ preciisa como mostrado no site http://www.html.mysql. ou alterar os graficos de forma alguma.com/company/trademark.4.html e usado em sites web de terceiros sem permiss˜es de escrita da MySQL AB. e O logo original MySQL s´ podem ser usados pr representates da MySQL AB e aqueles que o possuem um acordo escrito permitndo-os de fazˆ-lo. sua aplica¸˜o deve e ca ca ser Open Source deve estar apta a conectar a um servidor MySQL. • N˜o use a logomarca em detrimento ` MySQL AB ou ao valor das marcas registradas da a a MySQL AB. N´s e a a a o tamb´m gostamos de golfinos. Vocˆ deve ler a pol´ e itica de marcas registradas se plabeja us´-las. • Se vocˆ utilizar o banco de dados MySQL sob GPL em uma aplica¸˜o.4. sujeitos a nossa politica de marcas a registradasque tamb´m est´ dispon´ e a ivel em nosso site. Contate-nos via e-mail em trademark@mysql.com para saber sobre os nosso acordos especiais que sirvam as suas necessidades. • Deixe evidente que vocˆ. 1.

Se¸˜o 1. A seguinte se¸˜o fornece informa¸˜o para cada distribui¸˜o. Para mais informa¸˜es. onde apropriadom indicar que MySQL ´ uma marca rege istrada da MySQL AB.4. Devido a raz˜es comerciais e legais monitoramos o so das marcas registradas do MySQL o em proutos. 5.4. O planejamento para alguns dos recursos ca ca ca mais requisitados est˜o listada na tabela a seguir. a e a 1. Por isto.1.4. j´ que achamos razo´vel que parte dos a a rendimentos seja retornado para financiar o desenvolvimento do banco de dados MySQL. 1.mysql.4. co ca P´gina 15.5 [Partnering].1. Parceiras incluem certifica¸˜o ca com treinador ou consultor do MySQL.6 Usando a Palavra MySQL em Nomes de Companhias e Produtos O uso da palavra MySQL em nomes de produtos ou companias ou em dominios de Internet n˜o ´ permitida sem permiss˜o escrita da MySQL AB.4. incluindo princa cipais recursos imlementados ou planejados para o MySQL 4.html. vocˆ deve e e adicionar o simbolo de marca registrada (TM) ao primeiro ou mais proeminente uso da palavra MySQL em um texto e.3 Quando Vocˆ Precisa de Permiss˜o de Altera¸˜o para Usar e a ca as Logomarcas do MySQL? Vocˆ precisa de permiss˜o escrita da MySQL AB antes de usar as logomarcas do MySQL nos e a seguintes casos: • Quando exibir qualquer logomarca da MySQL AB em qualquer lugar diferente so seu site.0 e 5. Normalmente exigimos um valor para a exibi¸˜o das ca logomarcas da MySQL AB em produtos comerciais.0 4. 4. Para mais informa¸˜es.1.5 Mapa de Desenvolvimento do MySQL Esta se¸˜o fornece uma amostra do mapa de desenvolvimento do MySQL.1 .4 Logomarcas dos Parceiros da MySQL AB As logomarcas de parceria do MySQL podem ser usados apenas por companhias e pessoas que possuem um acordo de parceria por escrito com a MySQL AB.4. • Quando exibir qualquer logomarca da MySQL AB exceta as de Uso Condicional mencionadas anteiormente em sites ou outro lugar.5 Usando a Palavra MySQL em Texto Impresso ou Apresenta¸˜o ca A MySQL AB considera bem vindas as referˆncias ao banco de dados MySQL mas deve ser e indicado que a palavra MySQL ´ uma marca registrada da MySQL AB.4.3. a 1. livros e outros itens.com/company/trademark.Cap´ ıtulo 1: Informa¸˜es Gerais co 21 1. 1.4.0. veja nossa pol´ co itica de marcas registradas em http://www. a Feature Unions Subqueries MySQL version 4.

9 co ca [Query Cache].0 Aumento da velocidade • O MySQL 4. Veja Se¸˜o 6.0 5. disponivel a ca a 1.com/ e nossos sites mirrors. P´gina 24. e COUNT(DISTINCT).5.23 com InnoDB) 5. ca a Mecanismo de armazenamento InnoDB como padr˜o a • O mecanismo de armazenamento InnoDB ´ oferecido como um recurso e padr˜o do servidor MySQL. buscas em indices empacotados. O servidor embutido fornce uma co alternativa para o uso do MySQL em um ambiente cliente/servidor.0 5.0 in a Nutshell Muito aguardado por nossos usu´rios.0 tem uma cache de consultas que pode dar uma grande aumento na velocidade de aplica¸˜es com consutas repetitivas.0.1 Recursos Dispon´ iveis no MySQL 4. P´gina 624.0 est´ dispon´ a ivel para download em http://www. Veja Se¸˜o 1. P´gina 123.5.1 1. Os principais novos recursos do MySQL Server 4.1 5.1. cria¸˜o a ca de ´ indices FULLTEXT.0 agora est´ dispon´ a a ivel em sua vers˜o de produ¸˜o.1 MySQL 4. Isto significa suporte a transa¸˜es ACID.2 [Nutshell Embedded MySQL]. no futuro. o MySQL Server 4.5. Veja Se¸˜o 2.1 (para tabelas MyISAM) 5. Outros novos recursos visam os usu´rios de bancos de dados embutidos. Introdu¸˜o ao Servidor MySQL Embutido ca • A nova biblioteca do Servidor Ebutido pode ser facilmente usada em aplica¸˜es standalone e embarcadas. ca a Novos recursos para o MySQL est´ sendo adicionado ao MySQL 4.23].mysql. apenas corre¸˜o de erros ser˜o feitas para a c ca a distribui¸˜o da s´rie 4.2 [MySQL 4.0-alpha R-trees Stored procedures Views Cursors Foreign keys Triggers Full outer join Constraints 4.0 foi declarado est´vel para uso em produ¸˜o a partir da vers˜o 4.5.22 MySQL Technical Reference for Version 5.2 [Upgrading-from-3.5.1 5. Isto significa que.23. melhorando o programa de banco de dados MySQL a como uma solu¸˜o para miss˜es cr´ ca o iticas e sistemas de bancos de dados de alta carga. O MySQL tem sido testado por um grande n´mero de usu´rios e est´ em uso em u a a mutios sites. a ca O MySQL 4. a O MySQL 4.12 em a ca a Mar¸o de 2003.1. chaves a co .1 Nutshell].1 5. P´gina 24.1 que tamb´m est´ a e a ´ (vers˜o alfa). a • A vers˜o 4.0 ou 5. Veja Se¸˜o 1.1 (3.0.0 aumenta a velocidade do MySQL Server em um n´mero e a u ´ ´reas tais como INSERTs em bloco.0 s˜o trabalhados em conjunto com os a usu´rios corporativos e da comunidade.0 e apenas corre¸˜o de erros cr´ ca e ca iticos ser˜o feitas para a antiga s´rie a e 3.

co • Foi adicionado suporte ao mecanismo de armazenamento MyISAM para link simb´lico no n´ de tabela (e n˜o apenas a n´ de banco de dados como o ivel a ivel antes) e para habilitar o tratamento de links simb´licos no Windows por o padr˜o. a • A maioria dos parˆmetros mysqld (op¸˜es de inicializa¸˜o) agora podem a co ca ser definidas se finalizar o servidor.0. portabilidade e migra¸˜o o ca • Recursos para simplificar a migra¸˜o de outros sistemas de banco de dados ca para o MySQL Server incluem TRUNCATE TABLE (como no Oracle) • Muitos usu´rios tamb´m ficar˜o satisfeitos ao perceber que o MySQL a e a Server agora suporta a instru¸˜o UNION.8 [Novell NetWare]. Isto ´ um recurso conveniente para e Administradores de Bancos de Dados (DBAs). P´gina 642.Cap´ ıtulo 1: Informa¸˜es Gerais co 23 estrangeiras com UPDATE/DELETE em cacata e lock de registro agora s˜o recursos padr˜es.0 habilita indexa¸˜o FULLTEXT de grandes partes de texto com linguagem ca natural e bin´ria de l´gica de busca.5 [InnoDB]. ca a Internacionaliza¸˜o ca • Nossos usu´rios alem˜es. a o ca a Novas fncionalidades • A melhora das propriedades de busca FULLTEXT do MySQL Server 4. a • SQL_CALC_FOUND_ROWS e FOUND_ROWS() s˜o novas fun¸˜es que tornaram a co poss´ encontrar o n´meros de linhas que uma consulta SELECT que inclui ivel u uma cl´usula LIMIT teria retornado se a cl´usula n˜o fosse utilizada. Veja Se¸˜o 2. Veja Se¸˜o 5. a a a A se¸˜o de novidades deste manual inclui uma lista mais aprofundada dos recursos.8 [Fulltext Search]. o a Aprimoramento da Usabilidade No porcesso de constru¸˜o de recursos para novos usu´rios. austr´ a a iacos e sui¸os notar˜o que o MySQL agora c a suporta um novo conjunto de caracteres.x]. a • Instru¸˜es DELETE e UPDATE multi-tabelas foram adicionadas. P´gina 164. Veja Se¸˜o 6. P´gina 957. P´gina 461. ca P´gina 618. Veja ca Se¸˜o C.0. • O MySQL agora pode ser executado nativamente na plataforma Novell NetWare 6. Veja Se¸˜o 7.3 [News-4. ca a . a Compatibilidade com os padr˜es. um recurso padr˜o SQL muito ca a esperado. Vocˆ pode personalizar o tamanho a o e m´ inimo de palavras e definir a sua pr´pria lista de palavras de parasa em o qualquer linguagem humana.6 [SET OPca TION]. habilitando um novo conjunto de aplica¸˜es co ´ a serem construidas no MySQL Server. que assegura que a Ordena¸~o em alem~o classificar´ palavras com umlauts na mesma ordem ca a a das agendas telefˆnicas alem˜s. latin1_de. n˜o esquecemos os ca a a pedidos de nossa leal comunidade de usu´rios.6.5.

0-alpha 1.1 in a Nutshell MySQL Server 4.0. J´ conhecido e a por sua estabilidadem velocidade e facilidade de uso.4.1. co ca a Aumento na velocidade • Protocols bin´rios mais r´pidos com instru¸˜es preparadas e parˆmetros a a co a de liga¸˜o.0].2 Servidor Embutido MySQL libmysqld faz o MySQL Server adequado para uma grande ´rea de aplica¸˜es.5. Veja Se¸˜o 12.2 [TODO MySQL 5. a a ca P´gina 860.1]. aumentando de forma ca e significante o tempo de resposta para busca que n˜o s˜o exatas. onde o usu´rio final n˜o tˆm conhecimento de possuir um o a a e banco de dados b´sico.6.1 [TODO MySQL 4. Veja Se¸˜o 1.1. banco de dados de auto-conten¸˜o ca distribu´ idos em CDROM. Uma tabela dericada (unnamed view) ´ uma subquery na cl´usula co e a FROM de outras instru¸˜es. P´gina 27. servidores Internet de alta performance. ca a Suporte a subqueries e tabelas derivadas • Uma subquery ´ uma instru¸˜o SELECT aninhada dentro de outras ine ca stru¸˜es.2 MySQL 4.24 MySQL Technical Reference for Version 5. P´gina 27. quiosques p´blicos. P´gina 824. a a . Veja Se¸˜o 6.0 prepara a cria¸˜o de novos recursos como subqueries e Unicode (impleca mentado na vers˜o 4.2 [Subqueries].15 [libmysqld].1) e o funcionamento de stored procedures do SQL-99 est´ sendo feito a a para a vers˜o 5. a ca a A maioria dos novos recursos em codifica¸˜o.4 [C API Prepared statements]. estar˜o dispon´ ca a iveis no MySQL 5. A biblioteca embutida do MySQL tamb´m usa a mesma interface que a biblioteca e do cliente normal. a 1.0. os cr´ co iticos do MySQL Database Server devem ser mais imaginativos que nunca para apontar as deficiˆncias do MySQL Database Management System. como stored procedures.5. Veja Se¸˜o 1. Usando a a co biblioteca do servidor MySQL embutido. Outros poucos recurca a sos est˜o planejados para o MySQL 4. respons´vel por unidades de combina¸˜o hardco u a ca ware/software.1. Para aqueles a a c que n˜o desejam ser limitar pela GPL. Estes recursos est˜o no topo da lista de recursos desejados de muitos de a a nossos clientes. o MySQL Server estar´ apto a atender a as necessidades de v´rios compradores exigentes.0.6. O servidor MySQL embutido ´ ideal para uso nos bastidores em a e aplica¸˜es de Internet.2. e assim por diante Muitos usu´rios da libmysqld se benficiar˜o da iLicen¸a Dual do MySQL. P´gina 569. o software ´ tambem est´ dispon´ sob uma licen¸a a e a ivel c comercial. sendo ent˜o conveniente e f´cil de usar.1. a 1. Veja Se¸˜o 12.1 Os recursos listados nesta se¸˜o est˜o implementados no MySQL 4. Com estas adi¸˜es.1 Recursos Dispon´ iveis no MySQL 4.5. ca ca a • Indexa¸˜o BTREE agora ´ suportado por tabelas HEAP. pode embarcar o MySQL Server em v´rios aplicaa tivos e dispositivos eletrˆnicos.1.

ca veja Cap´ “ptexi tulo 9 [Charset]. tabelas e banco de dados. Isto permite um alto grau de flexibilidade no desenho das aplica¸˜es. Por exe a a emplo. v´rias instru¸˜es podem ser feitas a co com uma unica chamada. ON DUPLICATE KEY UPDATE .3 [INSERT].8 [C API multiple queries]. o cliente mysql de linha de comando foi modificado para ter esta capacidade. ca a • Projetamos uma nova fun¸˜o de agrupamento GROUP_CONCAT(). • No novo protocolo cliente/servidor. o programa MySQL agora oferece suporte Unicode co extensivo por meio dos conjunto de caracteres utf8 e ucs2. no lugar se um unico resultado. a • A replica¸˜o pode ser feita sobre conex˜o SSL.6. ca a Internacionaliza¸˜o ca • Para suportar nossa base de usu´rio sempre em expans˜o usando linguagens a a locais nas aplica¸˜es. a Aprimoramento da usabilidade • Em resposta a demanda popular. a • O novo protocolo cliente/servidor tamb´m suporta retorno de v´rios resule a tados. Isto pode ocorrer como resultado de enviar v´rias instru¸˜es. Veja ´ Se¸˜o 4. adicioca nando a capacidade de concatenar colunas de registros agrupados em uma . Isto lhe permite executar um UPDATE em um registro existente se o um INSERT criasse uma chave (´ indice) prim´ria (PRIMARY) ou unica a ´ (UNIQUE) (index) duplicada. particularmente para sites-web multi-linguagens. Veja Cap´ a “ptexi tulo 10 [Spatial extensions in MySQL]. P´gina 730.9 [SHOW WARNINGS]. SHOW WARNINGS exibe avisos para o ultimo comando..4. ´ ca P´gina 851..1. Isto faz com u ´ que o trabalho como uma grande carga de dados seja muito mais f´cil a de rastrear.8.. portabilidade e migra¸˜o o ca • O novo protocolo cliente/servidor adiciona a possibilidade de se passar m´ltiplos avisos ao cliente. P´gina 707. adicionamos um comando HELP com base no servidor que pode ser usado para conseguir ajuda para comandos MySQL. usando um unico comando.Cap´ ıtulo 1: Informa¸˜es Gerais co 25 Nova funcionalidade • CREATE TABLE tabela1 LIKE tabela2 lhe permite criar uma nova tabela com a estrutura exatamente igual a de uma tabela existente. A vantagem de se ter esta informa¸˜o no lado do servidor ´ ca e que a informa¸˜o ´ sempre aplic´vel para aquela vers˜o do servidor em parca e a a ticular. co • Para documenta¸˜o sobre este suporte a conjunto de caracters aprimorados. outros clientes tamb´m poder˜o ser escritos para acess´-la.. • Uma nova sintaxe INSERT . tem sido implementada. ´ • Suporte aos tipos espaciais OpenGIS (dados geogr´ficos). ca a Compatibilidade aos padr˜es. Como esta informa¸˜o est´ dispon´ executando uma instru¸˜o ca a ivel ca SQL. por a co exemplo (Veja o item anterior). P´gina 578. Veja Se¸˜o 6. P´gina 323. Veja Se¸˜o 12. • Os conjuntos de caracteres agora podem ser definidos por colunas.

1 se tornar´ o nova distribui¸˜o de produ¸˜o).2. ca a a 1. e ca .1 a a a passam pelos passos de Alfa (tempo no qual os novos recursos ainda podem ser adionados/alterados). a ca ca 1. na maioria. o que ´ extremamente util.3 MySQL 5. Veja Se¸˜o 6.0.1.4 [Instalando a ´rvore fonte]. P´gina 26. As listas s˜o ca a apresentadas por vers˜o. Todas as distribui¸˜es bin´rias co a passaram por nossos extensivos teste sem nenhum erro na plataforma em que testamos. Desenvolvimento adicional j´ est´ em andamento na vers˜o 5. Veja Se¸˜o 2. deixamos o nosso reposit´rioo do BitKeeper para o MySQL vers˜o 5.5.3.0].1 est˜o. a 1. comrecursos como a ca Stored Procedures entre outros.0. contate sales@mysql. Veja Se¸˜o C. Um exemplo de um recurso patrocinado no passado ´ a replica¸˜o.1.2 [Novidades na vers˜o 4. P´gina 555.6. cora a a rigidos. P´gina 100. a A se¸˜o de novidades neste manual incluem uma lista mais completa de recursos. ca a a Para aqueles que desejam usar o fonte mais recente do desenvolvimento do MySQL 4. P´gina 948. deixamos nosso reposit´rio do BitKeeper publicamente dispon´ o ivel.1 est´ atualmente no est´gio alfa e os bin´rios est˜o dispon´ a a a a iveis para download em http://www.7 ´ e ´ ca [Group by functions and modifiers].6 MySQL e o Futuro (o TODO) Esta se¸˜o lista os recursos que planejamos impementar no MySQL Server.0 dispon´ publicamente.com para conversarmos sobre patroc´ inio. ca a O conjunto de recursos que est˜o sendo adicionados a vers˜o 4.2 [Novidades na vers˜o 4.1].3 Pronto para Uso em Desenvolvimento Imediato O MySQL 4. Veja o a ivel Se¸˜o 2. Veja Se¸˜o 1. P´gina 100.com/downloads/mysql-4.mysql. por favor.4 [Installing ca source tree]. A Pr´xima Distribui¸˜o de Desenvolvimento o ca O novo desenvolvimento para o MySQL est´ focado na distribui¸˜o 5.3. Veja ca Se¸˜o C.3 [Nutshell Ready for Immediate Use].2 [TODO MySQL 5.x].0.0-alpha unica string de resultado. Veja Se¸˜o 1.5.26 MySQL Technical Reference for Version 5. ca a Para aqueles que desejam dar uma olhada no desenvolvimento do MySQL.5.0.html.5. A vers˜o Alfa j´ st´ dispon´ para a a a a ivel download. Beta (quando j´ implementamos todos os recursos e apenas corre¸˜es de a co erros s˜o realizados0) e Gamma (indicando que ima distribui¸˜o de produ¸˜o est´ quase a ca ca a pronta). P´gina 27.1. a a a Nota: Se vocˆ ´ um usu´rio corporativo com uma necessidade urgente de um recurso paree a ticular. No fim deste processo.2.3. e os itens est˜o aproximadamente na ordem em que ser˜o feitos. o MySQL 4.2 Stepwise Rollout Novos recursos est˜o sendo adicionados ao MySQL 4.2. O MySQL 4. P´gina 948. ca a a 1. Financiamento feito por uma ou mais companhias nos permite alocar recursos adicionais para aquele prop´sito espec´ o ifico.1.

1. ISto exigir´ menos mem´ria e ser´ muito mais r´pido.ex.4 [Instalando a ´rvore fonte]. deixamos nosso reposit´rio BitKeeper para o MySQL vers˜o 5. P´gina 24. (J´ existe suporte para isto nos c a mecanismos de armazenamento do MyISAM.1 a Os recursos abaixo ainda n˜o est˜o implementados no MySQL 4. u 1.1. Para uma lista do que j´ est´ feito no MySQL a a 4. portabilidade e migra¸˜o a ca • Adiciona suporte real a VARCHAR (tamanho de colunas maiores que 255. a • Registros de tamanhos dinˆmicas para tabelas HEAP. • Mais teste de instru¸˜es preparadas co • Mais testes de m´ltiplos conjunto de caracteres para uma tabela.1. • A habilidade de especificar explicitamente para tabelas MyISAM que um ´ indice deve ser criado como um ´ indice RTREE.5.3. ca a Para aqueles que desejam dar uma olhada nas novidades do desenvolvimento do MySQL. mass est˜o planejados a a a para implementa¸˜o antes que o MySQL 4. Note que como posa a suimos diversos desenvolvedores que est˜o trabalhando em diferentes projetos. veja Se¸˜o 1. ´ a indices RTREE s˜o usados internamente para dados geom´tricos (tipos de dados GIS). H´ tamb´m um pequena chance qie alguns destes e a e recursos sejam adicionados ao MySQL 4. apenas o arquivo o a de defini¸˜o. ca a o a a .2. PL/SQL e T-SQL.1 Novos Recursos Planejados Para a Vers˜o 4. N´s tamb´m implementaremos o framework do SQL-99 o e para enganchar em linguagens externas e (onde poss´ ivel) compatibilidade com p.1. haver˜o a a tamb´m muitos recursos adicionais. veja Se¸˜o 1.0. Nova funcionalidade • Suporte a cursores elementares.0 tem suporte rudimentar ao OpenSSL. mas ainda n˜o est´ dispon´ a a ivel ´ de usu´rio). a Compatibilidade com o padr˜o. P´gina 24.1 [Nutshell 4. a nivel a Aumento na velocidade • SHOW COLUMNS FROM nome_tabela (usado pelo cliente mysql para permitir expans˜es de nomes de colunas) n˜o deve abrir a tabela.1 [Nutshell 4.Cap´ ıtulo 1: Informa¸˜es Gerais co 27 1. mas a e n˜o podem ser criados no pedido.6.1 features].2 Novos Recursos Planejados Para a Vers˜o 5. e sem corte de espa¸os em branco extras). Este esfor¸o ´ a c e baseado no SQL-99.1 features].0 publicamente dispon´ o a ivel.2. n˜o a a testado 100%).0 a Os seguintes recursos est˜o planejados para inclus˜o no MySQL 5.6.1 v´ para a fase beta.5. Veja Se¸˜o 2. o que tem m sintaxe b´sica similar (mas n˜o idˆntica) a a a e do Oracle PL/SQL. Para uma lista do que j´ ca a a est´ feito no MySQL 4. Na vers˜o 4. P´gina 100.1. a ca a • Suporte OpenSSL est´vel (o MySQL 4. ca a a Stored Procedures • Stored procedures est˜o sendo implementadas atualmente.

1 a Novas funcionalidades • Suporte FOREIGN KEY para todos os tipos de tabelas. 1. co ivel • Replica¸˜o seguro a falhas. o qual fazemos com o comando RENAME. Isto far´ todos os manipca a uladores de arquivos mais gerais e tornar´ mais f´cil adicionar extens˜es a a o tipo RAID. Para fazer isto. • Para cada tabelas. • Apagar o banco de dados antigo. a o Internacionaliza¸˜o ca • Ap usar SET CHARACTER SET devemos traduzir toda a consulta de uma vez e n˜o apenas as strings.6. Para tornar isto seguro para todos os mecanismos de armazenamento. renomeie-a para outro banco de dados.) o Aprimoramento da usabilidade • Adicionar op¸˜es ao protocolo cliente/servidor para obter notas de proco gresso para longos comandos em execu¸˜o. ca • Implementar RENAME DATABASE.28 MySQL Technical Reference for Version 5. • Otimizar o tipo BIT para gastar 1 bit (agora BIT gasta 1 byte. Isto nos ca permitir´ fazer consultas mais r´pidas da estruturas de tabela e dar um a a suporte a chaves estrangeiras mais eficiente. Aprimoramento da usabilidade • Resolver a quest˜o de RENAME TABLE em uma tabela usada em uma tabela a MERGE ativa. a • Tratamento de registro mais r´pido (menos c´pia). a ca Aumento de velocidade • Novo formato dos arquivos de defini¸˜o e tabelas baseados em texto (arca quivos ‘. O backup online tornar´ a mais f´cil adicionar um novo slave de replica¸˜o sem desligar o master.0.0-alpha • Permite que o DELETE em tabelas MyISAM usem a cache de registros. ca • Backup online com baixa queda de desempenho. precisamos atualizar a thread da cache de registro quando atualizarmos os arquivos ‘.frm’) e uma cache de tabelas para a defini¸˜o de tabelas. o que possivelmente corrompe a tabela.3 Novos Recursos Planejados Para a Vers˜o 5. tabelas e colunas. Isto permitir´ que os usu´rios usem caracteres a a a traduzidos nos nomes de banco de dados. . • Nova altera¸˜o da interface de arquivo interno.MYD’. • Restri¸˜es a n´ de colunas. ele deve funcionar como a seguir: • Cria um novo banco de dados. • Melhores tabes em mem´ria (HEAP): o • Registro de tamanhos dinˆmoicos. e ´ tratado e como um sinˆnimo para TINYINT.

. deve a ca ser feita um tentativa de detec¸˜o deste problema no servidor. Por exemplo: ca a co UPDATE TABLE foo SET @a=a+b. • Adicionar a sintaxe LOAD DATA INFILE . UPDATE que funciona assim: • Para tabelas com chaves prim´rias..conjunto) • Se vocˆ abortar o mysql no meio de uma consulta.a=@a. ca • Permitir a atualiza¸˜o de vari´veis nas instru¸˜es UPDATE.txt’ INTO TABLE tbl_name TEXT_FIELDS (text_field1.. b=@a+c. colunas faltosas na inser¸˜o dos registros de entradas n˜o ca a s˜o alteradas. • Alterar quando as vari´veis de usu´rios s˜o atualizadas e assim pode se us´a a a a las com GROUP BY.conjunto) • REMOVE_FROM_SET(valor. linhas existentes correspondendo `s chaves a a prim´rias s˜o atualizadas para o restante das colunas de entrada.. e co .6. se o registro de entrada cont´m um a e valor de chave prim´ria. ou atualizar colunas baseadas nas express˜es dos dados lidos. No a a entanto. • Fazer com que LOAD DATA INFILE entenda a sintaxe do tipo: LOAD DATA INFILE ’file_name. vocˆ deve abrir outra e e conex˜o e matar a consulta antiga em execu¸˜o. como no exemplo a seguir: SELECT id. Isto see a ria um pouco mais lento se vocˆ pedisse informa¸˜es sobre todas as tabelas. text_field2. @a:=COUNT(*). text_field3) SET table_field1=CONCAT(text_field1. • INSERT SQL_CONCURRENT e mysqld --concurrent-insert para fazer uma inser¸˜o concorrente no fim do arquivo se o arquivo tiver lock de leitura.Cap´ ıtulo 1: Informa¸˜es Gerais co 29 1. • Adicionar SUM(DISTINCT). se um registro de entrada n˜o a a cont´m um valor de chave prim´ria ou estr´ faltando alguma parte da e a a chave. REPLACE e INTO.4 Novos Recursos Planejados Para a Vers˜o em um Futuro a Pr´ximo o Novas funcionalidade • Comando como do Oracle CONNECT BY PRIOR . table_field3=23 IGNORE text_field3 Isto pode ser usado para saltar colunas extras no arquivo texto. Alternativamente.. o • Novas fun¸˜es para tyrabalhar com tipos de colunas SET: co • ADD_TO_SET(valor. • Adicionar a op¸˜o IMAGE a LOAD DATA INFILE para n˜o atualizar campos ca a TIMESTAMP e AUTO_INCREMENT. o registro ´ tratado como um LOAD DATA INFILE . para estruturas de busca tipo ´rvore (hier´rquica) a a • Adicionar todos os tipos que faltam do SQL-92 e ODBC 3. SUM(sum_col)/@a FROM nome_tabela GROUP BY id.. text_field2).0. ca • Adicione um interface do mecanismo de armazenamento para informa¸˜es co da tabela assim que vocˆ puder us´-la como uma tabela de sistema. a • Para tabelas com chaves prim´rias.

• Possibilita especificar long_query_time com uma granularidade em microsegundos.. • Corrigir para que o tipo de MAX(coluna) seja o mesmo do tipo da coluna: mysql> mysql> mysql> mysql> CREATE TABLE t1 (a DATE). SHOW COLUMNS FROM t2. etc. a frequˆncia com que joins a e e multi-tables s˜o executados. EVERY() e SOME().30 MySQL Technical Reference for Version 5. neste caso ´ considerado que a vem da tabela crash_me. SHOW INFO FROM tbl_name para informa¸˜es b´sicas co a das tabelas deve ser implementado. ca • Altera o formato de DATETIME para armazenar fra¸˜es de segundo. .0.0-alpha mas muito flex´ ivel. • Permite SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a). Isto deve ajudar os usu´rios a identia a ficar ´reas ou projetos de tabelas que podiam ser otimizados para executar a consultas muito mais eficientes. No padr˜o co a SQL isto s´ funciona em colunas booleanas. e • Op¸˜es DELETE e REPLACE para a instru¸˜o UPDATE (isto deletar´ registros co ca a quando se tiver um erro de chave duplicada durante a atualiza¸˜o). Internacionaliza¸˜o ca Aprimoramentos de usabilidade • Retorna os tipos dos campos originais ao se fazer SELECT MIN(coluna) .. CREATE TABLE t2 SELECT MAX(a) FROM t1. mas podemos extendˆ-las para o e funcionar em qualquer coluna/express˜o tratando valores 0 como FALSE a e valores diferentes de 0 como TRUE. GROUP BY.. a • Permitir joins em partes de chaves (otimiza¸˜o). Enviar um erro ao a a usar um INSERT que n˜o contenha uma coluna que n˜o tenha um DEFAULT. a Compatibilidade com os padr˜es. co • Possibilitar o uso da nova biblioteca regexp GNU em vez da atual (a biblioteca GNU deve ser muito mais r´pida que a antiga). a a • Adicionar as fun¸˜es de agrupamento ANY(). ca • Adicionar simula¸˜o de pread()/pwrite() no Windows para permitir ca inser¸˜es concorrentes. SELECT opcionalmente. INSERT INTO t1 VALUES (NOW()). Aumento de velocidade • N˜o permitir mais que um n´mero definido de threads fa¸am a recupera¸˜o a u c ca do MyISAM ao mesmo tempo.. co • Um analizador de arquivos de log que possam analizar informa¸˜es sobre co quais tabelas s˜o usadas com mais frequˆncia. • Alterar INSERT . para usar inser¸˜es co concorrentes • Adicionar uma op¸˜o para descarregar paginas de chaves para tabelas com ca delayed keys se elas n˜o forem usados por um tempo. portabilidade e migra¸˜o o ca • N˜o adicionar valores DEFAULT autom´ticos as colunas.

o • Tornar o c´digo de timestamp autom´tico melhor. • Permitir vari´veis SQL em LIMIT. Leitura e atualiza¸˜o de rega ca istros. • Colunas referˆnciadas em uma cl´usula UPDATE ir˜o conter os valores antie a a gos antes da atualiza¸˜o iniciar. • Portar os clientes MySQL para LynxOS.. co • Usar mutex de leitura/escrita em alguns lugares para obter maior velocidade. Selects em 1 tabela e select com joins. • Se vocˆ realizar um ALTER TABLE em uma tabela que ´ ligada simbolicae e mente a outro disco. . a a a • Corrigir o configure para se poder compilar todas as bibliotecas (como no MyISAM) sem threads. • Saida a • LOCK DATABASES (com diversas op¸˜es).table2. co a • Alterar o nome de tabelas de string vazias para NULL para colunas calculadas. N´mero de tabelas na select.table1. a ´ autom´tica do mysql para um navegador web. u • mysqladmin copy database novo-banco_dados. • Adicionar uma cache de chaves tempor´ria durante INSERT/DELETE/UPDATE a para podermos fazer um recupera¸˜o se o ´ ca indice ficar cheio. 1. como em LIMIT @a. exige que o comando COPY seja adicionado ao mysqld. u N´mero de consultas ORDER BY e GROUP BY.. Adicionar timestamps para o log o a de atualiza¸˜es com SET TIMESTAMP=#. ca Novos sistemas operacioais. • N˜o usar Item_copy_string em valores num´ricos para evitar a convers˜o a e a number->string->number no casos de: SELECT COUNT(*)*(id+0) FROM nome_tabela GROUP BY id • Alterar aqueles ALTER TABLE que n˜o abortam clientes que executam a INSERT DELAYED..5 Novos Recursos Planejados Para a Vers˜o em um Futuro a a M´dio Prazo e • Implementar fun¸˜o: get_changed_tables(timeout. Atualmente somente tabelas compactadas usam mapeamento de mem´ria.Cap´ ıtulo 1: Informa¸˜es Gerais co 31 • Ligue o c´digo myisampack no servidor assim ele poder´ realizar opera¸˜es o a co PACK e COMPRESS. • Lista de processos deve mostar o n´mero de consultas/threads.@b. crie tabelas tenpor´rias neste disco. u • SHOW HOSTS para xibir informa¸˜es sobre a cache de nome de m´quina. co • Muito mais vari´veis para SHOW STATUS.) ca • Alterar leitura atrav´s de tabelas para usar mapeamento de mem´ria quando poss´ e o ivel. a • Implementar um tipo DATE/DATETIME que trate as informa¸˜es de fusos co hor´rios de forma apropriada e assim lidar com datas em diferentes fusos a hor´rios ser´ mais f´cil.6.

• Permitir obter mais de um bloqueio com GET_LOCK. e a .0] e LEFT OUTER JOIN s˜o suportados). a • SQL_OPTION MAX_SELECT_TIME=# para colocar um limite de tempo em uma pesquisa. • Alterar o analisador para usar somente uma regra para diferentes n´meros de arguu mentos em uma fun¸˜o.4. isto ´ feito somente para alguns casos a e simples. ca • Utilizar nomes de c´lculo completos na parte de ordena¸˜o. depois em qualquer express˜o). Seria ´timo se vocˆ puder colocar o diret´rio de dados na o e o primeira declara¸˜o de "pidfile" e "log". tabela tempor´ria ou arquivos a tempor´rios obtiverem o erro 23 (n˜o pode abrir arquivos suficientes). Veja a Se¸˜o 1. No momento somente a chave = campo ou a chave = a constante s˜o otimizadas. e • Como uma alternativa para uma thread / conex˜o gerencie uma fila de threads para a manipular as pesquisas. para permitir que as instru¸˜es leiam co arquivos compactados com gzip. a • Melhorar o c´digo de algumas das fun¸˜es de c´pia o co o • Alterar ‘sql_yacc. P´gina 51. para que a coloca¸˜o destes arquivos possa ca ca ser alterada com uma simples instru¸˜o. a tamb´m. tratados os poss´ e iveis deadlocks que essa altera¸˜o ir´ acarretar.32 MySQL Technical Reference for Version 5. • Corrigir ordena¸˜o e agrupamento de colunas BLOB (parcialmente resolvida agora).0. co a • Por favor.yy’ para um analizador em linha para reduzir seu tamanho e obter melhores mensagems de erro (5 dias). (Atualmente UNION [na 4. • Alterar todas express˜es const com express˜es calculadas se poss´ o o ivel.pid’ e arquivos de log em ‘/var/log’. Quando uma ocorrˆncia de nome_col=n ´ encontrada ca e e em uma express˜o. ser˜o.8.0-alpha • Views simples (inicialmente em uma tabela. co • LIMIT negativo para recuperar dados do fim. leitura e escrita. • Adicionar uso de zlib() a LOAD DATA INFILE. para algumas constantes n.6 [ANSI diff Views]. • Alarmes em fun¸˜es clientes de conex˜o. • Chave otimizadora = express˜o. a • Adicionar suporte pleno para JOIN com parˆnteses. Atualmente. ca a O tempo ´ fornecido de acordo com a quantidade de trabalho. ca a • Fechar algumas tabelas automaticamente se uma tabela. ca • Alterar para o uso de sem´foros quando contar threads. (For ACCESS97) a ca • MINUS. • Fazer o log de atualiza¸˜es gravar em um banco de dados. Devemos primeiro implementar a uma biblioteca de sem´foros para a MIT-pthreads. substitua outras ocorrˆncias de nome_ a e col dentro da express˜o por n. INTERSECT e FULL OUTER JOIN. ca • Permitir um cliente requisitar log. a a • Melhor propaga¸˜o de constantes. perceba as altera¸˜es ao mysqld_safe: de acordo com o FSSTND (que o co Debian tenta seguir) arquivos PID dever ir em ‘/var/run/<progname>. e n˜o tempo real. Quando isto for feito.

Cap´ ıtulo 1: Informa¸˜es Gerais co 33 1. Por favor.7. o u 1. Isto significa que vocˆ ir´ receber todas e a mensagens individuais. Note que alguns t´picos s˜o o o a mais bem discutidos em listas mais especializadas.6.1. Se vocˆ enviar para a lista e errada vocˆ pode n˜o obter resposta. 1. Se vocˆ quiser que as mensagens da lista de discuss˜o sejam enceminhadas para uma caixa e a de correio separada no seu programa de emails. e a mysql mysql-digest A lista mysql na forma resumida.6 Novos Recursos que N˜o Planejamos Fazer a • Nada.3 ca ca [Relat´rio de erros]. Planejamos ser totalmente compat´ iveis com o ANSI 92 / ANSI 99. n˜o envie mensagem sobre inscri¸˜o ca a ca ´ ou cancelamento para qualquer das listas de emasil. Vocˆ pode tamb´m usar os cabe¸alhos List-ID: ou Entregar-Para: para e e c identificar suas mensagens. enviadas na forma de uma grande mensagem uma unica ´ vez ao dia. tudo o que ´ enviado para a lista.7. visite http://lists. como e a e a mensagens de email.7 Fontes de Informa¸˜es do MySQL co 1. Existe tamb´m as seguintes listas de discuss˜o sobre MySQL atualmente: e a announce Esta ´ para anuncio de novas vers˜es do MySQL e programas relacionados. porque tais mensagens s˜o distribuidas a automaticamente para milhares de outros usu´rios.mysql. o a .7.com do seu site s˜o propagadas para a lista local.com/. por favor. Veja Se¸˜o 1. a Seu site local pode ter muitas inscri¸˜es para uma lista de email do MySQL. bugs Esta lista s´ ser´ do seu interesse se vocˆ quiser ficar informado sobre assuntos o a e relatados desde a ultima distribui¸˜o do MySQL ou se vocˆ quiser estar ativa´ ca e mente envolvido no processo de busca e corre¸˜o de erros. o site co pode ter uma lista de email local. vocˆ receber´. contate seu administrador a de sistema para adicionado ou excluido da lista local do MySQL. P´gina 36. assim as mensagens enviadas para lists. A principal lista para discuss˜es MySQL em geral. Se sim. Nestes casos. Vocˆ tamb´m poder´ enviar suas e e e a pr´prias d´vidas e respostas para a lista.1 Listas de Discuss˜o MySQL a Esta se¸˜o introduz a lista de deiscuss˜o do MySQL e d´ algumas explica¸˜es sobre como a ca a a co lista deve ser utilizada.1 As Listas de Discuss˜o do MySQL a Para se inscrever ou cancelar a inscri¸˜o de qualquer uma das listas de email descritas nesta ca se¸˜o.mysql. Quando vocˆ se inscreve na lista de discuss˜o. e o Esta ´ uma lista com baixo volume na qual todos usuarios do MySQL deveriam e se inscrever. configure um filtro com base nos cabe¸alhos c das mensagens.1.

win32-digest Uma vers˜o resumida da lista win32. internals Uma vers˜o resumida da lista internals. e a ´ java Discuss˜o sobre o servidor MySQL e Java. a mysqldoc Esta lista ´ para pessoas que trabalham na documenta¸˜o do MySQL: pessoas e ca da MySQL AB. e a .0.com desempenho do kernel.34 MySQL Technical Reference for Version 5. a win32 Esta ´ a lista para todos os t´picos relacionados ao MySQL em sistemas operae o cionais Microsoft. NT e Win2000. como o Win95. incluindo MySQL Connector/J. java-digest Uma vers˜o resumida da lista java. mysqldoc-digest Esta ´ uma vers˜o resumida da lista mysqldoc. e a benchmarks Esta lista ´ para qualquer um interessado em assuntos de desempenho.0-alpha bugs-digest Uma vers˜o resumida da lista bugs. ivel packagers-digest Esta ´ uma vers˜o resumida da lista packagers. Dise cuss˜es concentradas em desempenho de banco de dados (n˜o limitado ao o a MySQL) mas tamb´m inclue categorias . e o ca Este ´ o f´rum usado pela pessoas que mant´m a distribui¸˜o para troca de e o e ca id´ias de pacotes do MySQL e para assegurar que o MySQL esteja o mais e parecido poss´ em todas as plataformas e sistemas operacionais suportados. benchmarks Esta ´ uma vers˜o resumida da lista benchmarks. E mais usada para discuss˜es sobre a o o driver JDBC. a myodbc Lista para todos os t´picos relacionados a conectividade do MySQL com ODBC. mysqlcc-digest Esta lista ´ uma vers˜o resumida da lista mysqlcc. e a packagers Esta lista ´ para discuss˜es sobre empacotamento e distribui¸˜o do MySQL. sistema e de arquivos. a mysqlcc Esta lista ´ sobre todos os t´picos relativos ao cliente gr´fico MySQL Control e o a Center. Nesta lista pode-se o discutir desenvolvimento do MySQL e pos-patches. sistema de disco e outros. Win98. a internals Uma lista para pessoas que trabalham no c´digo do MySQL. o myodbc-digest Uma vers˜o resumida da lista myodbc. tradutores e outros membros da comunidade.

com Lista de mensagens na l´ ingua francesa. P´gina 17. plusplus-digest Uma vers˜o resumida da lista plusplus.Cap´ ıtulo 1: Informa¸˜es Gerais co 35 plusplus Lista sobre todos os t´picos relacionados ` programa¸˜o da API C++ para o o a ca MySQL. uma e a o op¸˜o ´ pagar pelo suporte da MySQL AB. Envie subscribe mysql your@email. a • Pesquise os arquivos das listas de mensagens MySQL: http://lists. a Envie subscribe mysql-de your@email. por favor fa¸a o seguinte: a c • Comece pesquisando o manual MySQL online em: http://www. frequentemente atualizando-o com o solu¸˜es para novos problemas encontrados! O apˆndice de hist´rico de mudan¸as co e o c ´ que (http://www. Vocˆ pode encontrar informa¸˜es sobre esta lista de mensagens em e co http://www. portanto.html) pode ser util j´ que ´ bem possivel ´ a e uma vers˜o mais nova ja tenha a solu¸˜o para o seu problema. a Se vocˆ n˜o obtiver uma resposta para suas quest˜es na lista de mensagens do MySQL.com/ para ver se o erro j´ foi relatado/resolvido. Perceba que elas n˜o s˜o operadas pela MySQL AB. mysql-france-subscribe@yahoogroups.mysql.4. que ir´ colocar vocˆ em contato direto com ca e a e desenvolvedores MySQL. Envie subscribe mysql your@email.1.7.address para esta lista. e mysql-alta@elistas.mysql.com.4t2.br Lista de mensagens em portuguˆs Envie subscribe mysql-br your@email.2 Fazendo perguntas ou relatando erros Antes de enviar um relato de erro ou uma quest˜o.mysql.com/mysql.1 [Suporte].com/ .address para esta lista.address para esta lista.address para esta lista. mysql-br-request@listas.com/doc/en/News.com Lista de mensagens alem~. n˜o e a a a podemos garantir a qualidade destas. a ca • Procure no banco de dados de bugs em http://bugs.net Lista de mensagens espanhola.linkway. a msql-mysql-modules Lista sobre o Suporte MySQL no Perl com o msql-mysql-modules que ´ e chamado DBD-mysql.net Lista de mensagens coreana. Veja Se¸˜o 1. msql-mysql-modules-digest Lista resumida sobre a vers˜o do msql-mysql-modules. ca a A seguinte tabela mostra algumas listas de mensagens sobre o MySQL que utilizam linguas diferentes do Inglˆs. list@tinc. 1.mysql.4t2. mysql-de-request@lists.com/doc/ N´s tentaremos manter o manual atualizado.

para uma distribui¸˜o bin´ria. Se vocˆ tiver um relat´rio de erro que possa ser repetido. e e a o Escrever um bom relat´rio de erro exige paciˆncia. Esta se¸˜o ir´ ajud´-lo a a a i-lo o ca a a a escrever seu relat´rio corretamente para que vocˆ n˜o perca seu tempo fazendo coisas que o e a n˜o ir˜o ajudar-nos muito ou nada. e ido o Todos os erros enviados para o banco de dados dem bugs em http://bugs.1. confira com seu e a expert em MySQL local.com/. Se vocˆ continua n˜o encontrando uma resposta para sua quest˜o. o De preferˆncia. e Se vocˆ encontrar um erro de seguran¸a no MySQL. a a N´s encorajamos todo mundo a usar o script mysqlbug para gerar um relato de erros (ou um o relato sobre qualquer problema).com/search. por favor co forne¸a-o junto de sua mensagem! Por favor leita esta se¸˜o com cuidado e tenha certeza c ca que todas as informa¸˜es descritas aquie est˜o inclu´ co a idas no seu relat´rio.com/ ser˜o corrigidos ou documentados na pr´xma distribui¸˜o do MySQL. Qualquer um deve estar apto a repetir o erro apenas usando ’mysql test < script’ no caso de teste incluido ou executando o script sheel ou Perl que ´ inclu´ no relat´rio de erros.mysql. c o a O lugar comum para relatar erros e problemas ´ http://bugs.com. Se vocˆ n˜o puder encontrar uma resposta no manual ou nos arquivos.mysql. ´ ainda de vital importˆncia que vocˆ incluia e e a e todas as informa¸˜es necess´rias listadas nesta se¸˜o (o mais importante ´ uma descri¸˜o co a ca e ca do sistema operacional e a vers˜o do MySQL).com/. mas se alguma coisa importante estiver faltando.com. a O script mysqlbug lhe ajudar´ a gerar um relat´rio determinando muitas das seguintes a o informa¸˜es automaticamente.mysql.mysql. o ca e a se vocˆ o estiver executando no Windows). vocˆ deve testar o problema usando a ultima vers˜o de produ¸˜o ou desene e ´ a ca volvimento do Servidro MySQL antes do envio. Se vocˆ logar no sistema. Note que mesmo neste caso ´ bom executar o script mysqlbug e primeiro para ter informa¸˜es sobre o sistema. Se apenas pequenas a o ca mudan¸as de c´digo forem necess´rias enviaremos um patch para corrigir o problema. o ca Para relatar outros problemas. envie um email para e c security@mysql.html para e e a pesquisar todas as p´ginas Web (incluindo o manual) que est˜o localizados em a a http://www.36 MySQL Technical Reference for Version 5. relate-o no banco de dados de bugs e o em http://bugs. Qualquer erro que pudermos repetir tem co uma grande chance de ser corrigido na pr´xima distribui¸˜o do MySQL. no diret´rio ‘bin’ no ca ca a o diret´rio de instala¸˜o do MySQL.7. ou. vocˆ poder´ entrar novos relat´rios.mysql.0. 1. vocˆ pode usar a lista de email do MySQL. e .mysql. se poss´ ivel.0-alpha • Vocˆ pode tamb´m usar a p´gina http://www. mysqlbug pode ser encontrado no diret´rio o ‘scripts’ na distribui¸˜o fonte. Um bom relat´rio de erros contendo um teste de caso para o o e o bug ir´ torn´-lo muito mais f´cil para corrig´ no pr´ximo release.com. e fazˆ-lo de forma apropriada economiza o e e tempo para n´s e para vocˆ. e a a v´ em frente e leia a pr´xima se¸˜o para saber como enviar email para lista de email do a o ca MySQL.3 Como relatar erros ou problemas Nosso banco de dados de bugs ´ publico e pode ser pesquisado por qualquer um em e http://bugs. Se vocˆ n˜o puder utilizar o mysqlbug (por exemplo.

7 [MyODBC bug report]. declare-a ! E milhares de e e a u vezes mais r´pido e menos problem´tico escrever um pouco de linhas a mais no seu relat´rio a a o do que ser for¸ado a perguntar de novo e esperar pela resposta porque vocˆ n˜o forneceu c e a informa¸˜o sufiente da primeira vez. ent˜o dever´ usar a op¸˜o --vertical (ou a instru¸˜o terminadora \G) a a ca ca para sa´ que ir´ exceder a largura dispon´ para este tipo de v´ ida a ivel ideo (por exemplo. n´s precisamos saber qual compilador foi usado. (At´ o caso deve ser observado!) Vocˆ nunca deve tentar lembrar qual foi a e e mensagem de erro. Note que a o todo problema de compila¸˜o deve ser estimado como relato de erros e.6 [Casos de teste reproduz´ c˜ iveis]. Frequentemente pessoas encontram erros em compiladores e acreditam que o problema ´ relacionado ao MySQL. MySQL u a ca a Version 3. e em 99% dos casos o relato de erro ´ in´til sem ela! Frequentemente n´s e u o recebemos quest˜es como. ca P´gina 875. Essa informa¸˜o ´ u a ca e muito relevante.2. ca Os erros mais comuns acontecem porque as pessoas n˜o indicam o n´mero da vers˜o da a u a distribui¸˜o do MySQL que est˜o usando.22. ´ quase imposs´ corrigir alguma e e ivel coisa sem conhecimento do sistema operacional e o n´mero da vers˜o da plataforma. ou que o a a erro descrito num relat´rio foi resolvido em uma vers˜o do MySQL mais nova. e sim. Isto ca e ida ´. Quando estiver gerando relat´rios ou exemplos usando a ferramenta de linha o de comando mysql. mas n˜o e ivel ca a a uma contendo muito pouca.Cap´ ıtulo 1: Informa¸˜es Gerais co 37 Lembre-se que ´ poss´ responder a uma mensagem contendo muita informa¸˜o. veja exemplo abaixo). usando o e a a e a . nesses casos. A maioria dos compiladores est˜o sobre desenvolvimento e a todo o tempo e tornam-se melhores a cada vers˜o.1. com a instru¸˜o EXPLAIN SELECT. ca Por favor inclua a seguinte informa¸˜o no seu relat´rio: ca o • O n´mero da vers˜o da distribui¸˜o do MySQL que est´ em uso (por exemplo. a Por favor lembre-se que muitas das pessoas que ler˜o seu relat´rio podem usar um v´ a o ideo de 80 colunas. “Por que isto n˜o funciona para mim?” ent˜o n´s vemos que o a a o aquele recurso requisitado n˜o estava implementado naquela vers˜o do MySQL. vocˆ deve tentar gerar um arquivo para e e rastremento de erros (trace) do MyODBC. consequentemente ca publicado. Os melhores relat´rios s˜o aqueles que incluem um exemplo completo mostrando o a como reproduzir o erro ou o problema Veja Se¸ao D. Um bom a ´ principio ´: Se vocˆ est´ em d´vida sobre declarar alguma coisa. u a Lembre-se tamb´m de fornecer informa¸˜es sobre seu compilador. ´ muito importante incluir essas mensagens e no seu relat´rio! Se n´s tentarmos procurar por algo dos arquivos usando programas. Algumas o a vezes o erro ´ dependente da plataforma. a Se um programa produz uma mensagem de erro. Para determinar se o seu problema a depende ou n˜o do compilador. copiar e colar a mensagem inteira no seu relat´rio! o Se vocˆ tem um problema com o MyODBC. ou n˜o indicam em qual plataforma elas tem ca a a o MySQL instalado (Incluindo o n´mero da vers˜o da plataforma). se isto for relacionado e co ao problema. P´gina 1075. Vocˆ poder´ saber qual vers˜o vocˆs est´ executando. ´ E de grande ajuda quando uma boa descri¸˜o do problema ´ inclu´ no relato do erro. Frequentemente pessoas omitem fatos porque acreditam que conhecem a causa do problema e assumem que alguns detalhes n˜o importam.22). um bom exemplo de todas as coisas que o levou ao problema e a correta descri¸˜o do e ca problema. Veja Se¸˜o 12. ´ o o e melhor que as mensagens de erro relatadas sejam exatamente iguais a que o programa produziu.

<saida do SHOW STATUS> Se um erro ou problema ocorrer quando estiver executando o mysqld. Algumas vezes a quantidade de mem´ria (real e virtual) ´ relevante. ´ necess´rio o nome e n´mero e ca e a u da vers˜o do compilador usado. Isto ´ muito f´cil de fazer e a e ´ um modo poderoso de obter informa¸˜es sobre qualquer tabela em um banco de e co dados que ir´ ajudar-nos a criar uma situa¸˜o parecida da que vocˆ tem. Vocˆ tamb´m deve incluir a sa´ de SHOW CREATE TABLE ca e e ida nome_tabela para cada tabela envolvida. u Se vocˆ estiver usando uma distribui¸˜o fonte do MySQL. inclua a(s) exata(s) mensagem(s) de erro(s) ca e tamb´m algumas linhas do contexto envolvendo o c´digo no arquivo onde o erro e o ocorreu.. e a e Normalmente vocˆ pode encontrar isto executando mysqld com o log habilitado. Quanto mais informa¸˜o vocˆ fornecer sobre ca e a sua situa¸˜o. Se vocˆ trae ca e balho no Windows.. a ca e Para problemas relacionados ` velocidade ou problemas com instru¸˜es SELECT.. a ca Se o problema ocorre durante a compila¸˜o.... vocˆ pode normalmente conseguir o nome e o n´mero da vers˜o com e u a um duplo clique sobre o ´ icone ”Meu Computador” e em seguida no menu ”Ajuda/Sobre o Windows”. Se vocˆ estiver usando uma distribui¸˜o bin´ria.\G <saida para SHOW COLUMNS> mysql> EXPLAIN SELECT .38 MySQL Technical Reference for Version 5.. e ao menos o n´mero de linhas que ida u a instru¸˜o SELECT produz. mysql> SHOW COLUMNS FROM . mysqladmin pode ser encontrado no diret´rio ‘bin’ o sob sua instala¸˜o do MySQL. ´ a e ca a e necess´rio o nome da distribui¸˜o.. Se o mysqld finalizou. vocˆ dever´ relatar tamb´m a consulta que travou o mysqld.. a i incluindo a hora em que a consulta foi executada> mysql> SHOW STATUS.5 [Using log files]. tente fornecer um script de entrada que ir´ reproduzir a anomalia. Veja e Se¸˜o D. mysql> SELECT ..1.0. Para a maioria dos sistemas operacionais. vocˆ a co e sempre deve incluir a sa´ de EXPLAIN SELECT .. a vocˆ pode obter esta informa¸˜o executando o comando Unix uname -a. inclua esses valores. Se estiver em o e d´vida. P´gina 1074. mais f´cil ser´ para algu´m ajudar-lo! A seguir um exemplo de um ca a a e relat´rio de erros muito bom (ele deve ser postado com o script mysqlbug): o Exemplo de execu¸˜o usando a ferramenta de linha de comando mysql (perceba o uso ca do instru¸˜o terminadora \G para instru¸˜es cuja largura de sa´ deva ultrapassar 80 ca co ida colunas): mysql> SHOW VARIABLES. ca O fabricante e o modelo da m´quina na qual vocˆ est´ trabalhando. inclua a sa´ de ida mysqldump --nodata nome_db nome_tbl1 nome_tbl2. <Uma pequena vers~o da sa´da do SELECT..\G <saida para EXPLAIN> mysql> FLUSH STATUS. a e a O nome do sistema operacional e a vers˜o. ca a Se alguma tabela do banco de dados estiver relacionado ao problema.0-alpha • • • • • • • • • comando mysqladmin version. Este script deve incluir qualquer ara .

se vocˆ n˜o fornecer algumas informa¸˜es a e a co necess´rias. ou que iremos us´-lo. e para o script configure. Depois. O ca problema pode ser relacionado ao nome da vari´vel ou tabela! Esses casos s˜o raros. etc. todas as op¸˜es fornecidas aos programas relevantes. se poss´ ivel. n˜o e a inclua somente o resultado. execute mysqladmin reload version e tente conectar com o programa que gerou o problema. ca • Se vocˆ n˜o puder produzir um caso de teste em algumas linhas. e e a uma conta descrevendo o base de sua opini˜o. s˜o frequentemente chaves para a respostas e s˜o muito relevantes! Nunca ´ uma m´ id´ia inclu´ a e a e i-las de qualquer forma! Se vocˆ usa algum m´dulo. vocˆ pode usar o ftp para transferia e lo para ftp://support. vocˆ deve e e e e primeiramente executar mysqlaccess. o o ca Se vocˆ tiver um patch para um erro. a a mas ´ melhor prevenir do que remediar. Quanto mais pr´ximo o script puder reproduzir sua situa¸˜o. e todas as mensagens de erro que ida vocˆ obteve quando tentava conectar! Quando vocˆ testar seus privil´gios. mas n˜o assuma que o patch ´ e e a e tudo que precisamos. ser´ mais f´cil para vocˆ fornecer e e a a e um exemplo que use sua situa¸˜o atual. e Se sua quest˜o ´ relacionada ao sistema de privil´gios. nomes e a de tabelas. No caso ca e o de ter dados que n˜o deseja mostrar para outros. As op¸˜es para programas co como o mysqld e mysql. e vocˆ n˜o deseja mostr´-los nem mesmo para n´s. ou se a tabela de e a testes for muito grande para ser enviada por email para a lista de mensagens (mais de 10 linhas).com/pub/mysql/secret/. mas tamb´m sua opini˜o de como o resultado deve ser. a Quando fornecer um exemplo do problema. e use o ftp para transferir o arquivo para ftp://support.mysql. utilizados na sua situa¸˜o atual do que enviar com novos nomes. o a e se for assim. vocˆ dever´ dar um dump de suas tabelas usando o mysqldump e criar um e a arquivo ‘README’ que descreve seu problema. Se vocˆ puder fazer uma s´rie de testes repetidos. ´ Inclua. Se os dados s˜o realmente a confidenciais. mas. n˜o podemos us´-lo. Crie um arquivo comprimido de seus arquivos usando tar e gzip ou zip. por favor considere isso como uma unica chance. a o ca melhor. vocˆ ao menos deve incluir a sa´ de mysqladmin a e ida variables extended-status processlist na sua mensagem para fornecer alguma informa¸˜o da performance do seus sistema. a a • • • • • . Por exemplo.com/pub/mysql/secret/. que ´ o que mais importa para n´s. N´s a o podemos encontrar problemas com seu patch ou n´s podemos n˜o entendˆ-lo ao todo.com. E envie uma pequena descri¸˜o do problema para bugs@lists. por favor forne¸a a sa´ a e e c ida de mysqlaccess. como os casos de testes mostrando o erro que seu patch corrige. mysqlaccess pode ser encontrado no diret´rio ‘bin’ sob seu diret´rio de instala¸˜o do MySQL. isso ´ bom. como Perl ou PHP por favor forne¸a o n´mero da vers˜o e o c u a deles tamb´m. ´ melhor usar os nomes de vari´veis.mysql.mysql.Cap´ ıtulo 1: Informa¸˜es Gerais co 39 quivo de fonte necess´rio. Al´m disso. a sa´ de mysqladmin reload. vocˆ poder´ post´-lo para o e e e a a bugs@lists.mysql. co indique as op¸˜es que vocˆ utiliza quando inicializa o daemon mysqld e aquelas que s˜o co e a utilizadas para executar qualquer programa cliente MySQL. ca Se vocˆ achar que o MySQL produziu um resultado estranho para uma consulta.com para um tratamento de alta prioridade! Se n˜o puder fornecer o script. ent˜o v´ em frente e e a a o a a providencie um exemplo usando outros nome.

vocˆ dever´ primeiro e e a checar depois tentar reparar suas tabelas com myisamchk ou CHECK TABLE e REPAIR TABLE. o mais comp´tivel a ´ possivel com as vers˜es anteriores. Mostre que o patch ir´ cuidar de todas as a a situa¸˜es que possam ocorrer.mysql. P´gina 907. bem como para a lista de a mensagens apropriada para ver se mais algu´m teve experiˆncias com (e talvez resolveu) o e e problema. vocˆ dever´ conferir o hist´rico de altera¸˜es do MySQL para ver e a o co quando a sintaxe foi implementada.com para tratamento de alta priorit´rio. Veja Apˆndice C [News].0. porque ocorre.4 [Which version].1 [What a o e ca ca is crashing]. ca a Se vocˆ ´ um cliente de nosso suporte. fa¸a o download e instale a vers˜o mais recente do MySQL para saber se c a ela resolve ou n˜o o seu problema. Veja Cap´ “ptexi tulo 4 [MySQL Database Administration]. ´ extremamente prov´vel e a e a que que sua vers˜o corrente do MySQL n˜o suporte a consulta que vocˆ a a e est´ utilizando.40 MySQL Technical Reference for Version 5. Todas vers˜es do MySQL s˜o muito bem testadas a o a e devem funcionar sem problemas! Acreditamos em deixar tudo. P´gina 208. Mesmo o time MySQL n˜o pode adivinhar antecipadamente tais coisas sem a usar um debugger para determinar a causa real do erro. P´gina 373. co ca P´gina 869. Neste caso. por favor envio o seu relat´rio de erros em e e o mysql-support@mysql. e vocˆ conseguir´ mudar de vers˜es MySQL em o e a o minutos! Veja Se¸˜o 2.2. mas vocˆ tiver uma vers˜o mais e e a antiga do MySQL. o arquivo ‘mysql-data-directory/’hostname’.com/documentation/manual.0-alpha • • • • • • Se n´s n˜o verificarmos exatamente o que o patch quer dizer. P´gina 80. a . veja Se¸˜o 12. n´s n˜o poderemos us´o a o a a lo. suas unicas e a op¸˜es s˜o implementar vocˆ mesmo a sintaxe ou enviar uma mensagem para co a e mysql-licensing@mysql. se torna muito mais ca e f´cil para n´s fornecemos a vocˆ uma solu¸˜o para o problema! Veja Se¸˜o A. por favor confira sua sintaxe com aten¸˜o! Se e ca vocˆ n˜o conseguiu encontrar nada errado com ela. geralmente est˜o e a errados. Neste caso. a Se vocˆ frequentemente obt´m tabelas corrompidas. Casos de testes ir˜o ajudar-nos aqui. P´gina 948.php n˜o cobrir a sintaxe que a vocˆ estiver usando. o MySQL n˜o suporta sua consulta. a u Palpites sobre qual ´ o erro. ou do que ele depende. a Se poss´ ivel. Veja Se¸˜o 4. Indique na sua mensagem de e-mail que vocˆ conferiu o manual de referˆncia e o arquivo e e de mensagens para que outros saibam que vocˆ tentou solucionar o problema. a Se vocˆ estiver usando a vers˜o recente e o manual em e a http://www.4 [ODBC Problems]. e Se vocˆ obter um parse error. Se n´s encontrarmos um caso (mesmo que raro) onde o co o patch n˜o funcionaria. e e vocˆ deve tene tar encontrar quando e porque isto acontece! Neste caso.2. ele pode ser in´til. Para informa¸˜es sobre relatar erros no MyODBC. a e a Se vocˆ tiver um problema do tipo que seus dados aparecem corrompidos ou vocˆ e e obtem erros quando vocˆ acessa alguma tabela em particular. vocˆ tem a op¸˜o de atualizar para e ca uma nova vers˜o do MySQL.com e perguntar por uma oferta para implement´-lo! a Se o manual cobrir a sintaxe que vocˆ estiver usando.10.err’ deve conter algumas informa¸˜es co sobre o que aconteceu. Por favor forne¸a ca a c qualquer informa¸˜o relevante deste arquivo no seu relat´rio de erro! Normalmente ca o o mysqld NUNCA dever´ danificar uma tabela se nada o finalizou no meio de uma a atualiza¸˜o! Se vocˆ puder encontrar a causa do fim do mysqld.1 [Error log].

co e a Quando respostas s˜o enviadas para vocˆ individualmente e n˜o para a lista de mensagens.efnet. e como o o e a a us´-las. a e e Tente resumir a parte essencial da quest˜o na sua resposta. a o . e aqui vocˆ descobrir´ quais s˜o elas. ´ a e a e considerado boa etiqueta resumir as respostas e enviar o resumo para a lista de mensagens para que outras possam ter o benef´ icio das respostas que vocˆ recebeu que ajudaram a e resolver seu problema! 1. e como trabalhar com algumas diferen¸as.2 Suporte a Comunidade MySQL Atrv´s do IRC (Internet e Relay Chat) Em adi¸˜o as diversas listas de email. vocˆ pode querer post´-la e e a para a lista de mensagens em vez de responder diretamente para a pessoa que perquntou.xchat. n˜o se sinta obrigado a citar a a a mensagem original inteira. uma combina¸˜o popular. outra combina¸˜o popular.Cap´ ıtulo 1: Informa¸˜es Gerais co 41 Para solu¸˜es a alguns problemas comuns. por e favor tenha certeza que sua resposta n˜o ´ uma r´plica de uma resposta anterior. o ca • #mysqlperl Quest˜es sobre MySQL+Perl. vocˆ pode pessoas experientes da comunidade no IRC ca e (Internet Relay Chat). Mesmo se n˜o tivermos os recursos para fazer o desenvolvimento para todos a os usos poss´ iveis. Tente deixar sua resposta da forma mais gen´rica poss´ e ivel para que outras pessoas al´m e da que postou a pergunda possam se beneficiar dela. o ca • EFnet (veja http://www. o Se vocˆ est´ procurando por programas clientes de IRC para conectar a uma rede IRC. a usabilidade do MySQL Server para e a a qualquer uso. a • #mysqlphp Quest˜es sobre MySQL+PHP. dˆ e a e uma olhada no X-Chat (http://www.org/ para servidores) • #mysql Quest˜es sobre MySQL. Quando vocˆ postar para a lista.1.freenode. Estes s˜o os melhores canais atualmente conhecidos por n´s: a o • freenode (veja http://www. mas d´vidas sobre outros bancos ipio a o u de dados e SQL s˜o bemvindas.org/). Vocˆ ir´ tamb´m encontrar informa¸˜o sobre falta de funcionalidade do Servidor a e a e ca MySQL. Por favor n˜o poste mensagens a partir de seu browser com o modo HTML ligado! Muitos a usu´rios n˜o leem e-mail com browser! a a 1. sem um boa raz˜o. 1.7. O Servidor ca o MySQL tem muitas extens˜es aos padr˜es SQL. veja Veja Apˆndice A [Problems]. X-Chat (licen¸a GPL) est´ dispon´ c a ivel para as plataformas Unix e Windows.7.4 Guia para responder quest˜es na lista de discuss˜o o a Se vocˆ considerar que sua respota possa ter um amplo interesse.net/ para servidores) • #mysql A princ´ s˜o quest˜es sobre o MySQL. P´gina 907. c Nosso objetivo ´ n˜o restringir.8 Qual compatibilidade aos padr˜es o MySQL oferece ? o Esta se¸˜o descreve como o MySQL se relaciona aos padr˜es ANSI/ISO SQL. estamos sempre querendo ajudar e oferecer sugest˜es para pessoas que o est˜o tentando usar o MySQL Server em novos territ´rios.

Veja Se¸˜o 6.2 Executando o MySQL no modo ANSI Se vocˆ inicializa o mysqld com a op¸˜o --ansi ou --sql-mode=ANSI. por haver a fun¸˜o e a ca USER(). mas sem sacrificar velocidade e confian¸a. Uma implica¸˜o disto ´ que vocˆ n˜o pode usar aspas duplas para citar ca e e a um string literal. O design compacto do servidor MySQL tornam ambas as dire¸˜es poss´ co iveis sem qualquer conflito na ´rvore a fonte. • REAL ´ um sinˆnimo para FLOAT no lugar de um sinˆnimo de DOUBLE.8. (A nova interface a HANDLER no MySQL Server 4.) a Continuaremos a suportar bancos de dados transacionais e n˜o transacionais para satisfazer a ´ tanto o uso pesado na web quanto o uso de miss˜o critica 24/7.8. 1. o seguinte compore ca tamento ´ alterado no MySQL: e • || ´ um oprador de concatena¸˜o de strings em vez de um sinˆnimo para OR. Como co resultado. but without concessions to speed and quality of the code. Por exemplo. porque ela ser´ intepretada como um identificador. e o o .0 ´ um exeemplo desta estrat´gia. N˜o estamos receosos em a c a adicionar extens˜es ao SQL ou suporte para recursos n˜o SQL se ele aumentar extremamente o a a usabilidade do MySQL Server para uma grande parte de nossos usu´rios. se vocˆ quiser acessar qualquer banco de dados. We are aiming toward supporting the full SQL-99 standard.42 MySQL Technical Reference for Version 5.0-alpha Um dos nossos principais objetivos com o produto ´ continuar a trabalhar em acordo com e o padr˜o SQL-99. vocˆ deve coloc´-lo entre aspas. e a c ca Estamos buscando melhoras no fornecimento de suporte a XML no servidor de banco de dados. Vocˆ ainda pode usar ‘‘’ para citar identificadores a e no modo ANSI. assim vocˆ deve coloc´-la entre aspas: e a SELECT "User" FROM mysql. a O MySQL Server foi projetado inicialmente para trabalhar com bancos de dados de tamanho m´dio (10-100 milh˜es de registros ou cerca de 100 MB por tabela) em sistemas computae o cionais pequenos. a • Vocˆ pode ter qualquer n´mero de espa¸os entre um nome de fun¸˜o e o ‘(’. e ca o • ‘"’ ´ tratado como um caracter identificados (com o caracter de aspasr ‘‘’ do MySQL e Server)e n˜o um caracter de string.9 [HANDLER].51.0. tabelas ou coluna que ´ uma e e palavra reservada. o nome da tabela user no banco de dados mysql e a coluna User nesta tabela se torna reservada. assim como tornar poss´ compilar uma vers˜o ivel a reduzida do MySQL mais apropriadas para handhels e uso embutido. 1.1 Qual Padr˜o o MySQL Segue? a Entry-level SQL-92. Atualmente n˜o estamos buscando suporte em tempo real ou banco de dados em cluster a (mesmo se vocˆ j´ puder fazer muitas coisas com nossos servi¸os de replica¸˜o). e e ca P´gina 595."user". ODBC levels 0-3. Continuaremos a extender o MySQL Server para funcionar ainda melhor com banco de dados na ordem de terabytes. Isto e u c ca faz com que todos nomes de fun¸˜es sejam tratadas como palavras reservadas.4.

Em alguns casos. SET.1.3 Extens˜es do MySQL para o Padr˜o SQL-92 o a O MySQL fornece algumas extens˜es que vocˆ provavelmente n˜o ir´ encontrar em alguns o e a a bancos de dados SQL.ANSI_QUOTES. a sintaxe s´ ser´ executada se a e u a o a vers˜o do MySQL ´ igual ou maior que o n´mero de vers˜o usado: a e u a CREATE /*!32302 TEMPORARY */ TABLE t (a INT). • Os atributos de campos AUTO_INCREMENT.PIPES_AS_CONCAT. vocˆ pode conseguir o mesmo efeito com estas duas instru¸˜es: e co SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE.. NULL.. mas continua port´vel. -> "REAL_AS_FLOAT..ONLY_FULL_GROUP_BY". Neste o a a caso. mysql> SELECT @@GLOBAL. seu c´digo pode n˜o ser mais e a o a port´vel para outros servidores SQL.ANSI_QUOTES.PIPES_AS_CONCAT.02 ou mais nova.1 a ultima op¸˜o sql_mode tamb´m pode ser dada com: ´ ca e SET GLOBAL sql_mode="ansi". P´gina 618.ONLY_FULL_GROUP_BY --transaction-isolation=serializable No MySQL 4. a . usando coment´rios da forma /*! .IGNORE_SPACE. ENUM e os diferentes tipos BLOB e TEXT. No caso acima o sql_mode estar´ configurado com todas as op¸˜es que s˜o relevantes para a co a o modo ANSI. ca a o Por exemplo: SELECT /*! STRAIGHT_JOIN */ nome_campo FROM table1.. e a a a Executando o servidor em modo ANSI ´ o mesmo que inici´-lo com estas op¸˜es: e a co --sql-mode=REAL_AS_FLOAT.7.ONLY_FULL_GROUP_ 1. a Se vocˆ n˜o gosta disso vocˆ dever´ declarar suas colunas com o atributo BINARY ou e a e a usar o operador BINARY. e a ent˜o o MySQL ir´ usar a palavra-chave TEMPORARY a a Extens˜es MySQL s˜o listadas abaixo: o a • Os tipos de campo MEDIUMINT.ANSI_QUOTES.table2 WHERE . SET GLOBAL sql_mode= "REAL_AS_FLOAT. Se vocˆ adicionar um n´mero de vers˜o depois do ’!’. IGNORE_SPACE. mas outros servidores SQL ir˜o ignorar as extens˜es.23. vocˆ pode escrever c´digo que inclui a e o extens˜es MySQL. UNSIGNED e ZEROFILL.Cap´ ıtulo 1: Informa¸˜es Gerais co 43 • O n´ de isolamento padr˜o de um transa¸˜o ´ SERIALIZABLE. o MySQL ir´ analisar e executar o c´digo com o coment´rio como ir´ fazer com a o a a qualquer outra instru¸˜o MySQL. BINARY.6 [SET ivel a ca e ca TRANSACTION].*/. Fique avisado que se vocˆ us´-las. • Todas compara¸˜es de strings por padr˜o s˜o caso insensitivo. Veja Se¸˜o 6. No MySQL 4. com classifica¸˜o ordeco a a ca nada determinada pelo conjunto de caracteres corrente (ISO-8859-1 Latin1 por padr˜o).8.IGNORE_SPACE.1. Vocˆ pode verificar o resultado fazendo: e mysql> SET GLOBAL sql_mode="ansi". a • Vocˆ pode usar um campo/express˜o em GROUP BY que n˜o est´ na lista de campos.sql_mode. que fazendo com que as compara¸˜es sejam feitas de acordo co com a ordem ASCII usada na m´quina servidora do MySQL. O exemplo acima significa que se vocˆ tiver uma vers˜o do MySQL 3.PIPES_AS_CONCAT.

e u ca ´ • As cl´usulas ORDER BY e LIMIT das instru¸˜es UPDATE e DELETE. e a − Vocˆ pode usar comandos padr˜o do sistemas para fazer backups.. DROP nome_campo. Veja Se¸˜o 6. a co • O uso de LOAD DATA INFILE. Por exemplo. e REPAIR TABLE.8 [LOAD DATA].IN minha_tablespace. ca ca a • Strings podem ser fechadas pelo ‘"’ ou ‘’’.1.8 [SHOW]. ca ca • EXPLAIN SELECT para obter uma descri¸˜o de como as tabelas s˜o ligadas. e e • O uso de INTO OUTFILE e STRAIGHT_JOIN em uma instru¸˜o SELECT. ca a • Utiliza¸˜o de m´ltiplas cl´usulas ADD. • Vocˆ pode remover m´ltiplas tabelas com uma instru¸˜o unica DROP TABLE. tabelas.4 [ALTER TABLE]. ‘.0. a .1 ca ca [SELECT]..44 MySQL Technical Reference for Version 5. P´gina 562. ca ca a • O uso de RENAME TABLE. P´gina 587. para renomear uma tabela. n˜o apenas pelo ‘’’. • O uso de COUNT(DISTINCT lista) onde ’lista’ ´ maior que um elemento. SET col_name = . ca a ´ − Nomes de Bancos de dados. ´ indices em um prefixo de um campo.MYI’ e ‘. renomear. DROP. a co • A cl´usula LOW_PRIORITY das instru¸˜es INSERT. ou DROP INDEX. • LIKE ´ permitido em campos num´ricos. DELETE e UPDATE. OPTIMIZE TABLE. P´gina 611. ca a • As intru¸˜es ANALYZE TABLE. Veja Se¸˜o 6.my_table.5. co • A instru¸˜o SHOW. ALTER. renomeie os arquivos ‘. ca ca a • O uso de TEMPORARY ou IF NOT EXISTS com CREATE TABLE. ca a • A utiliza¸˜o de nomes de ´ ca indices. • A cl´usula DELAYED das instru¸˜es INSERT e REPLACE. Veja Se¸˜o 6.4.3 [Name case sensitivity]. a co • Sintaxe INSERT INTO . ou CHANGE em uma instru¸˜o ALTER ca u a ca TABLE. vocˆ pode acessar tabelas de diferentes bancos de dados co e com a sintaxe nome_bd. Alguns servidores SQL fornecem a mesma funcionalidade mas chamam isto de User space.0-alpha • O MySQL mapeia cada banco de dados em um diret´rio sob o diret´rio de dados do o o MySQL. P´gina 473. O MySQL n˜o suporta tablespaces como a em: create table ralph. P´gina 303. e tabelas internamente num banco de dados para arquivos no diret´rio do o banco de dados. P´gina 607. REPLACE. e uso de INDEX ou KEY em uma instru¸˜o CREATE TABLE.MYD’.5.nome_tbl. campos ou apelidos pode come¸ar c com um d´ igito (por´m n˜o podem consistir somente de digitos). apagar e a e copiar tabelas.3 [CREATE TABLE]. e • O uso de CHANGE nome_campo. para o nome da tabela correspondente.5..frm’. a • A op¸˜o SQL_SMALL_RESULT em uma instru¸˜o SELECT. P´gina 597.4. Veja Se¸˜o 6.6. IGNORE ou RENAME em uma instru¸˜o ALTER TABLE. Em alguns casos essa sintaxe ´ compat´ com o Oracle e ivel LOAD DATA INFILE. • O uso de DROP TABLE com as palavras-chave IF EXISTS. Isto tem algumas implica¸˜es: co − Nomes de bancos de dados e tabelas s˜o caso sensitivoo no MySQL em sistemas a operacionais que possuem o sistema de arquivos caso sensitivoo (como na maioria dos sistemas Unix)... Veja Se¸˜o 6. indices.. Veja Se¸˜o 4. CHECK TABLE..5 [RENAME TABLE]. Veja Se¸˜o 6. • Em algumas instru¸˜es SQL.

PERIOD_ADD(). mas em alguns casos.1 [CREATE DATABASE].@t2.@a/@b AS media FROM tabela_teste. P´gina 587. Veja Se¸˜o 6. • Uso de TRIM() para cortar substrings.5. mas muito comuns. || e OR s˜o sinˆnimos. <=>. ca a • O operador % ´ um sinˆnimo para MOD(). TO_DAYS() ou WEEKDAY(). assim como && e ca a o AND. ELT(). P´gina 53.7 [Group by functions and modifiers].>. ca a • As instru¸˜es FLUSH. AND.31 [mysql_insert_id()].) u • As fun¸˜es BIT_COUNT(). o MySQL n˜o suporta o operador ANSI SQL para o a concatena¸˜o de strings ||. expa¸os extras s˜o removidos quando o valor ´ armazenado. o MySQL a a suporta apelidos (aliases) para v´rias fun¸˜es.8. Veja Se¸˜o 6. como na linguagem de programa¸˜o C.1.4 Diferen¸as do MySQL em Compara¸˜o com o SQL-92 c ca N´s tentamos fazer com que o MySQL siguisse os padr˜es ANSI SQL (SQL-92/SQL-99) e o o o ODBC SQL. OR ou LIKE podem ser utilizados em compara¸˜es de campos a esquerda do FROM nas instru¸˜es SELECT. MD5().6 [SET OPTION]. <>.@t3. DECODE(). ca ca a • Os operadores extendidos REGEXP e NOT REGEXP utilizados em express˜es regulares.3.7 [REPLACE]. CASE. use o CONCAT(). SELECT @t1:=(@t2:=1)+@t3:=4.6 [Bugs]. PASSWORD().3. todas fun¸˜es de string a co co suportam as sintaxes ANSI SQL e ODBC. em vez disso. PERIOD_DIFF(). ca ca a • Vocˆ n˜o precisa nomear todos os campos selecionados na parte GROUP BY.7 [Group by functions and modifiers]. ENCODE(). • A instru¸˜o SET OPTION. IF(). o SQL-99 s´ suporta remo¸˜o de caracteres o ca unicos. BIT_AND() e BIT_XOR() e GROUP_CONCAT().Cap´ ıtulo 1: Informa¸˜es Gerais co 45 • O uso do meta-caractere de escape ‘\’. • Para tornar mais f´cil para usu´rios que venham de outros ambientes SQL.@t1. Por exemplo. P´gina 799. co Veja Se¸˜o 6. <= . ca a • Uso de REPLACE no lugar de DELETE + INSERT. ca a . RESET e DO. P´gina 596. <<. FORMAT(). >>. • A fun¸˜o LAST_INSERT_ID(). Isto fornece e a melhor performance para algumas consultas espec´ ificas. >=. 1. Veja Se¸˜o 12. o MySQL realiza opera¸˜es de forma diferente: co • Para campos VARCHAR. • O MySQL entende os operadores || e && como ou(OR) e e(AND) logicos. % ´ e o e e e suportado para programadores C e para compatibilidade com o PostgreSQL. co • A possibilidade de configurar vari´veis em uma instru¸˜o com :=: a ca SELECT @a:=SUM(total).M). Como CONCAT() aceita ca v´rios argumentos. Isto ´. BIT_OR(). Veja Se¸˜o 5. c a e Veja Se¸˜o 1.5. ca a • Pode ser especificado ASC e DESC com o GROUP BY. N % M ´ equivalente a MOD(N. • Os operadores =. a e a • CREATE DATABASE or DROP DATABASE. ´ f´cil converter o uso do operador || para MySQL. ´ • As fun¸˜es do GROUP BY: STD(). FROM_DAYS().3. o • CONCAT() ou CHAR() com um ou mais de dois argumentos. P´gina 555. estas fun¸˜es co receber qualquer n´mero de argumentos.4. No MySQL.<. Devido a esta ´tima sintaxe. co ENCRYPT().8. Por exemplo: co co mysql> SELECT col1=1 AND col2=2 FROM nome_tabela. Veja Se¸˜o 6. P´gina 555.@b=COUNT(*). P´gina 461. (No MySQL.

De maneira alternativa. ca a • Privil´gios para uma tabela n˜o s˜o negadas automaticamente quando vocˆ apaga uma e a a e tabela. 1.11 [Rewriting subqueries].1 supports subqueries and derived tables (unnamed views).4. P´gina 255.1 [Silent column changes].mysql.fldOrder_ID > 100.8.46 MySQL Technical Reference for Version 5.3. P´gina 606.. MySQL a a suporta a sintaxe ANSI SQL INSERT INTO . tabelas MyISAM efetivamente sempre operam em modo AUTOCOMMIT=1. INTO TABLE .1 [GRANT].. Como notado. Tabelas transacionais tem uma exigˆncia de mem´ria e espa¸o em disco e o c .html.6 [TODO]. non-transactional table se encontra em grande parte no desempenho.com/doc/en/TODO.1. Veja Se¸˜o 6. ca a Para uma lista priorizada indicando quando novas extens˜es ser˜o adio a cionadas ao MySQL vocˆ deve consultar lista TODO online do MySQL em e http://www. InnoDB fornece compatibilidade total com ACID.2 SELECT INTO TABLE O MySQL ainda n˜o suporta a extens˜o SQL Oracle: SELECT .0 e acima) suportam transa¸˜es com a o co os mecanismos de armazenamento transacionais InnoDB e BDB. ou CREATE TABLE . vocˆ pode usar SELECT INTO OUTFILE. ca a For MySQL versions prior to 4..2 [Subqueries].23-max e todas as vers˜es 4.. Esta escolha pode ser feita em uma base por tabela.4.1 [INSERT SELECT]. ca a 1. P´gina 581.1 Subqueries MySQL Version 4.0... P´gina 629. Veja Cap´ “ptexi tulo 7 [Tipos de tabelas]. Esta ´ a ultima vers˜o da lista TODO neste e ´ a manual. P´gina 569. Veja Se¸˜o 4..8.. Veja Se¸˜o 6..2.4. Veja Se¸˜o 6. ca a INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.. a compara¸˜o para tabelas transacionais vs. ca Opera¸˜es atˆmicas geralmente oferecem integridade compar´vel com a mais alta perforco o a mance.5. que ´ basicamente a mesma e coisa. SELECT .4.4. Veja Se¸˜o 6. o usu´rio pode decidir se precisa a da velocidade das opera¸˜es atˆmicas ou se precisa usar recursos transacionais em seu co o aplicativo.fldOrder_ID FROM tblTemp1 WHERE tblTemp1.. n˜o transacionais As noted. Com o MySQL Server suportando ambos os paradigmas. Veja Se¸˜o 1. Vocˆ deve usar explicitamente um REVOKE para negar privil´gios para uma e e tabela. a Os outros tipos de tabelas n˜o transacionais (tais como MyISAM) no MySQL Server seguem a um paradigma diferente para integridade de dados chamado “Oper¸~es At^micas. P´gina 26.. ca a 1.3. most subqueries can be successfully rewritten using joins and and other methods.” Em co o termos de transa¸˜o.3 Transa¸oes e Opera¸˜es Atˆmicas c˜ co o O MySQL Server (vers˜o 3. campos CHAR s˜o alterados sem perguntas para o tipo de campo a VARCHAR.8.4.. ca a the trade off for transactional vs. P´gina 577.0-alpha • Em alguns casos. e SELECT para resolver seu problema..4.

independente de qual banco de dados vocˆ usa. pode-se corrigir tabelas perfeitamente sem nenhuma perda de integridade. Muitos usu´rios e a desenvolvedores de aplica¸˜es dependem da facilidade com a qual eles podem codificar co contornando problemas onde abortar parece ser. c˜ Para estar seguro com o MySQL Server. e O MySQL Server. se as suas aplica¸˜es s˜o escritas de uma forma que ´ co a e dependente na chamada de ROLLBACK em vez de COMMIT em situa¸˜es cr´ co iticas. Perceba que apenas usando o log do MySQL ou mesmo adicionando um log extra. No paradigma transacional. repara ou avisa caso e isto ocorra. permite a vocˆ resolver potenciais problemas e incluindo simples conferˆncias antes das atualiza¸˜es e executando scripts simples que e co conferem inconsistˆncias no banco de dados e. Nestes co casos mesmo um sistema transacional pode perder dados. Em situa¸˜es onde integridade ´ de grande importˆncia. o que ´ um problema comum e a ca a e em bancos de dados transacionais. 2. e o co Mas como fazer uso dos recursos do MySQL Server para manter uma integridade rigorosa mesmo com tabelas MyISAM n˜o transacionais e como este recurso se compara com os tipos a de tabelas transacionais? 1. na maioria dos casos. vocˆ apenas deve fazer backups e ter o log e de atualiza¸˜es ligado. o a servidor oferece uma oportunidade para fazer um rollback autom´tico e seu banco de a dados ´ mantido. tem relatos ca de algumas vezes perder dados nestas situa¸oes.” Mesmo o e Oracle. A diferen¸a entre sistemas c diferentes ´ apenas em qu˜o pequeno ´ o lapso de tempo em que eles podem perder e a e dados. Nenhum sistema ´ 100% seguro. Al´m disso. se vocˆ e a e ´ novo no paradigma de opera¸˜es atˆmicas ou tem mais familiaridade ou conforto com e co o transa¸˜es. De fato podemos dizer que todos problemas de integridade que transa¸˜es o co resolvem podem ser feitas com LOCK TABLES ou atualiza¸˜es atˆmicas. somente “seguro o suficiente. Se vocˆ s´ obter um bloqueio de leitura (oposto ao bloqueio de escrita). transa¸˜es asseguram que atualiza¸˜es co a e co co inacabadas ou atividades corrompidas n˜o sejam executadas no banco de dados. Nem mesmo transa¸˜es podem prevenir todas as falhas se o servidor cair. atualiza¸˜es transacionais fatais podem ser reescritas para serem co atˆmicas. assegurando que co o vocˆ nunca ir´ ter uma finaliza¸˜o autom´tica da tabela. na ordem de 3 a 5 vezes da velocidade que as tabelas transacionais mais r´pidas e a otimizadas. com reputa¸˜o de ser o mais seguro bancos de dados transacionais. e O paradigma transacional tem seus benef´ icios e suas desvantagens. e o .Cap´ ıtulo 1: Informa¸˜es Gerais co 47 significantemente maior e maior sobrecarga da CPU. Com isto vocˆ pode se recuperar de qualquer situa¸˜o poss´ co e ca ivel ´ com bancos de dados transacionais. 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. Mais do que nunco. ent˜o a transa¸˜es s˜o mais convenientes. ou ´ necess´rio. automaticamente. as atuais caracter´ co e a isticas do MySQL permitem n´ iveis transacionais ou melhor confian¸a e integridade. E sempre bom ter backups. Se vocˆ bloquear tabelas c e com LOCK TABLES todos as atualiza¸˜es ir˜o ser adiadas at´ qualquer verifica¸˜o de inteco a e ca gridade ser feita. considere o benef´ co icio da velocidade que as tabelas n˜o transacionais podem a oferece. No entanto. Tipos de tabelas transacionais como InnoDB oferecem muitos recursos unicos. 3.

” Ent˜o mostramos o a registro antigo versus o novo em uma janela. a ca Veja Se¸˜o 6. assim o usu´rio pode decidir qual vers˜o a a do registro de cliente de ser usado.3. Com INSERT DELAYED vocˆ pode enfileirar inser¸˜es em uma fila local. Neste caso. Isto nos d´ algo similar a lock de colunas mas que. na verdade. co 3.. para fazer um lock todas as tabelas que vocˆ quer acessar. Vocˆ e e co ´ ca e pode conseguir uma aplica¸˜o muito eficiente usando as seguintes t´cnicas: ca e • Modifique campos em rela¸˜o ao seus valores atuais. O MySQL co e a tamb´m assegura que nunca ocorrer´ uma leitura suja. usando valores relativos ao seu valor atual. e nunca haver´ um rollback autom´tico (que pode a a a acontecer em sistemas baseados em transa¸˜es se vocˆ n˜o tiver muito cuidado). Significa apenas que vocˆ o o a e a e pode estar certo que enquanto cada atualiza¸˜o espec´ ca ifica est´ sendo executada. Condi¸˜es de teste. no sentido em que n´s mencionamos. at´ e co e os bloqueios serem liberados. Os novos registros inseridos n˜o poder˜o ser via co a a a sualizados por nenhum dos clientes que tiverem um bloqueio de LEITURA at´ eles liberarem e estes bloqueios.2 [INSERT DELAYED]. Se o registro n˜o foi atualizado. co Por exemplo. a ca a • Vocˆ tamb´m pode usar fun¸˜es para atualizar registros em uma unica opera¸˜o. nenhum a outro usu´rio pode interferir com ela. ca a “Atˆmico”.0. 4. address=’new address’. sem que o cliente precise esperar at´ a inser¸˜o completar. e a • Para evitar o uso do ROLLBACK. Use UNLOCK TABLES para liberar seus locks. n˜o ´ m´gico. Atualize se estiver tudo OK. e a A seguir est˜o algumas t´cnicas para trabalhar com tabelas n˜o transacionais: a e a • Loops que precisam de transa¸˜es normalmente pode ser codificados com a ajuda de co LOCK TABLES. O teste dos dados alterados ´ feito com a cl´usula WHERE na instru¸˜o e a ca UPDATE. quando fazemos atualiza¸˜es em alguma informa¸˜o de cliente. UPDATE customer SET customer_date=’current_date’.. vocˆ pode usar as seguintes estrat´gias: e e 1.48 MySQL Technical Reference for Version 5. mandamos ao cliente uma mensagem: ”Some a of the data you have changed has been changed by another user. ca • Atualize apenas aqueles campos que realmente tiveram altera¸˜es. . Isto ´ normalmente um m´todo muito mais r´pido que usar transa¸˜es com poss´ e e a co iveis ROLLBACKs. Isto significa que instru¸˜es UPDATE comuns se parecem com estas: co UPDATE nometabela SET pay_back=pay_back+125. e 2. A unica situa¸˜o que esta solu¸˜o n˜o pode tratar ´ ´ ca ca a e quando algu´m mata a threads no meio de uma atualiza¸˜o.0-alpha ent˜o leituras e inser¸˜es poder˜o ocorrer. todas os locks e ca ser˜o liberados mas algumas das atualiza¸˜o podem n˜o ter sido execuadas. Use LOCK TABLES . mudaram em compara¸˜o com o ca registro original. e vocˆ n˜o precisa de cursores para atualizar regitros imeditamente. atualco ca izamoa apenas os dados do clientes que alteraram e testamos apenas aqueles com dados alterados ou dados que dependem dos dados alterados. mas nem sempre. ´ melhor porque apenas a e atualizamos algumas das colunas.4. P´gina 581.

vocˆ e pode usar uma coluna de flag na tabela e fazer algo como a seguir: UPDATE nome_tbl SET row_flag=1 WHERE id=ID.8. Um trigger a a ´ um tipo de stored procedure que ´ chamado quando um evento em particular ocorre. stored procedures co aumentam a carga no servidor de banco de dados. Como vocˆ pode ver. • Em muitos casos.4. j´ que grande parte do trabalho ´ feito a e do lado do servidor e menos do lado do cliente (aplica¸˜o). co . e tabelas InnoDB suportam lock de regitstro. ca Triggers est˜o programados para serem implementados no MySQL vers˜o 5. Veja Se¸˜o 12. e e Por exemplo.1. money_he_owes_us=money_he_owes_us-125 WHERE customer_id=id AND address=’old address’ AND phone=’old phone’. a a Vocˆ pode pensar nisto como se o MySQL Server tivesse alterado a consulta anterior e para: UPDATE nome_tbl SET row_flag=1 WHERE id=ID AND row_flag <> 1. e necessita menos informa¸˜o para ser enviada entre o servidor e o cliente. usu´rios querem fazer ROLLBACK e/ou LOCK TABLES com o prop´sito a o de gerenciarem identificadores unicos para algumas tabelas.1.3. P´gina 100. Comoo MyISAM.Cap´ ıtulo 1: Informa¸˜es Gerais co 49 phone=’new phone’.4 [Instalando da ´rvore de fontes]. Uma Stored Procedure ´ um conjunto de comandos SQL que podem ser compilados e e armazenados no servidor. estamoas implementando o framework SQL-99 enganchar ca em linguagens externas. ca a a Este esfor¸o ´ baseado no SQL-99. os clientes n˜o necessitam reescrever toda a a consulta mas podem fazer referˆncia ` stored procedure.3. Isto pode ser tratado muito ´ mais eficientemente usando uma coluna AUTO_INCREMENT e tamb´m uma fun¸˜o SQL e ca LAST_INSERT_ID() ou a fun¸˜o da API C mysql_insert_id(). No entanto. 1. Uma fez feito isso.31 ca ca [mysql_insert_id()].4 Stored Procedures e Triggers Steored procedures est˜o sendo implementadas em nossa vers˜o 5. Isto fornece melhor performance e a porque a query necessita ser analisada pelo servidor somente uma vez. que tˆm uma sintaxe b´sica similar (mas n˜o idˆntica) ao c e e a a e Oracle PL/SQL. Vocˆ tamb´m pode elevar o ca e e ´ nivel conceitual tendo bibliotecas de fun¸˜es no servidor. P´gina 799. Algumas situa¸˜es realmente e co precisam disto.0 na ´rvore de desenvolvia a a mento. O MySQL retorna 1 para o n´mero de linhas afetadas se as linhas foram encontradas u e row_flag j´ n˜o era 1 na linha original. Veja Se¸˜o 2. isto ´ muito eficiente e funciona mesmo se outro cliente alterar e e os valores nas colunas pay_back ou money_he_owes_us. Em adi¸˜o a isto. vocˆ poderia configurar uma stored procedure que ´ disparada toda vez que e e um registro for apagado de uma tabela transacional que automaticamente apaga o cliente correspondente de uma tabela de clientes quando todas as transa¸˜es forem removidas. a Geralmente vocˆ pode codificar evitando lock de registro.

id.0 vocˆ pode utilizar dele¸˜es multi-tabela para apagar linha de muitas e co tabelas com um comando. ca a e Algumas vantagens das chaves estrangeiras: • Assumindo o projeto apropriado das rela¸oes. Mesmo quando usado apropriadamente.44 e posterior. que s˜o fac´is de se ter ao projetar a rela¸˜o das chaves.50 MySQL Technical Reference for Version 5.. Note que as chaves estrangeiras no SQL n˜o s˜o usadas para ligar tabelas. FOREIGN KEYs n˜o precisa ser usado se a aplica¸˜o insere ca a ca duas linhas em tabelas MyISAM na ordem apropriada. Para tabelas MyISAM. regras circulares ou a combina¸˜o errada de uma dele¸˜o em ca ca cascata. Veja Se¸˜o 6. mas n˜o usa/armazena esta informa¸˜o. vocˆ pode fazer isto ligando tabelas: ca e SELECT * FROM table1.8.0.5 Chaves Estrangeiras No MySQL Server 3. Em um est´gio posterior. Veja Se¸˜o 7. Veja Se¸˜o 6. a a Note que chaves estrangeiras s˜o mal usadas com frequˆncia. P´gina 652.6 [Exemplos de chaves estrangeiras]. • Usar atualiza¸˜es e dele¸˜es em cascata pode simplificar o c´digo do cliente. restri¸˜es de chaves estrangeiras ser˜o implementadas a co a para tabelas MyISAM. ca a ca P´gina 199. Veja Se¸˜o 3.4. e ON UPDATE. ´ usada geralmente por aplicac˜es ODBC para e o produzir cl´usulas WHERE autom´ticas. ca Desvantagens: • Erros. por esta raz˜o algumas ca a ´ da aplica¸˜o. embora possa ajudar. das principais aplica¸˜es comerciais codificam sua l´gica no nivel co o ca .5.5.5 [DELETE].id = table2.6.1 [JOIN]. ca a A sintaxe FOREIGN KEY sem ON DELETE . P´gina 567.. mas s˜o usadas a a a para verificar a integridade referencial. co a Para outros tipos de tabela.4. o que pode causar graves a e problemas.table2 WHERE table1. Em a ca um futuro pr´ximo esta implementa¸˜o ser´ estendida para que assim a informa¸˜o seja o ca a ca armazenada num arquivo de especifica¸˜o de tabela e possa ser recuperado por mysqldump ca e ODBC. • Verifica¸˜o adicional no banco de dados afeta o desempenho. P´gina 584. Se vocˆ deseja obter resultados de m´ltiplas tabelas e u de uma instru¸˜o SELECT. as restri¸˜es de chaves estrangeiras c˜ co tornar˜o mais dif´ para um programador introduzir uma inconsistˆncia no banco a icil e de dados. ON DELETE. Na pr´tica isto ´ mais r´pido e muito mais port´vel que utilizar a e a a chaves estrangeiras.23.2 ca [Restri¸˜es de chaves estrangeiras do InnoDB]. incluindo CASCADE.4.0-alpha 1.1. o MySQL Server atualmente apenas analisa a sintaxe de FOREIGN KEY no comando CREATE TABLE. tabelas InnoDB suportam verifica¸˜o de restri¸˜o ca ca de chaves estrangeiras. a Quando usada como uma restri¸˜o. co co o • Regras de chaves estrangeiras projetados apropriadamente ajudam ao documentar a rela¸˜o entre as tabelas. No MySQL Server 4. o suporte a chaves estrangeiras n˜o ´ a e uma solu¸˜o m´gica para o problema de integridade referˆncial. podem causar graves a e ca problemaspor exemplo. vocˆ pode contornar a falta de ON DELETE adicionando a instru¸˜o e ca DELETE apropriada a uma aplica¸˜o quando vocˆ deletar registros de uma tabela que tem ca e uma chave estrangeira.

devem se atualizados tamb´m na a a e pr´tica. a 1.3 [Sistema de e ca privil´gios]. P´gina 227. Veja Se¸˜o 6. e a ca a P´gina 479. co Em nosso projeto de implemta¸˜o de views.23. mas vocˆ tem que a e fazer as atualiza¸˜es em tabelas separadas. Isto ocorre porque este estilo de coment´rio causou muitos problemas a com queries SQL geradas automaticamente que usavam algo como o c´digo seguinte.6 [Coment´rios]. a O MySQL Server vers˜o 3. Historicamente o MySQL Server tem sido mais usado em aplica¸˜es e sistemas web onde o co ´ desenvolvedor da aplica¸˜o tem total controle sobre o uso do banco de dados. e limitar o acesso a apenas estas rela¸˜es. E claro que o ca uso aumentou em v´rias vezes e ent˜o descobrimos que um crescente n´meros de usu´rios a a u a consideram views como um importante aspecto.0 e 5. ivel.8. e a Muitos SGBD n˜o permitem atualizar nenhum registro em uma view. mesmo se a ferramenta de linha de comando mysql icio a remover todas linhas que come¸am com ‘--’. e a e Outro recurso seguro ´ que o cliente de linha de comando mysql remove todas as linhas que e iniciam com ‘--’. fazer backup ou restaurar tabelas individuais. n´s achamos terr´ que ‘--’ signifique in´ de coment´rio. e o ivel icio a Usando a nossa implementa¸˜o deste m´todo de coment´rio no MySQL Server Version ca e a 3. Vocˆ tamb´m pode usar o coment´rio no c e e a estilo C /*isto ´ um coment´rio*/ com o MySQL Server. 1.3 e posterior.Isto ´ um coment´rio ´ atualmente seguro. 1-. Unnamed views (derived tables. O MySQL usa ‘#’ como a o caractere para in´ de coment´rio.1.4.7 ‘--’ como In´ icio de Coment´rio a Outros bancos de dados SQL usam ‘--’ para iniciar coment´rios. uma seubquery na cl´usula FROM de uma SELECT) j´ est˜o a a a implementadas na vers˜o 4.3 e superior suporta o estilo de coment´rio ‘--’ somente se o a a coment´rio for seguido por um caractere de espa¸o (ou por um caracter de controle como a c uma nova linha). Views tamb´m co e podem ser usadas para restringir o acesso aos registros (um subconjunto de uma tabela em particular). n´s buscamos (tanto quanto for poss´ dentro ca o ivel do SQL) compatibilidade com “Codd’s Rule #6” para sistemas de banco de dados relacionais: todos os views que s˜o teoricamente atualiz´veis. a Views geralmente s˜o muito uteis para permitir aos usu´rios acessar uma s´rie de rela¸˜es a ´ a e co (tabelas) como uma tabela.4. Veja Se¸˜o 4. onde o automaticamente er´ inserido o valor do pagamento para !pagamento!: a UPDATE nome_tabela SET credito=credito-!pagamento! O que vocˆ acha que ir´ acontecer quando o valor de pagamento for negativo? Como 1--1 e a ´ legal no SQL.6 Views Views est˜o senda implementadas atualmente e aparecer˜o na vers˜o 5. Mas views n˜o s˜o necess´rias para restringir o acesso a registros j´ que a a a a o MySQL Server tem um sofisticado sistema de privil´gios.8.Cap´ ıtulo 1: Informa¸˜es Gerais co 51 • N˜o ´ incomum para um DBA fazer uma topologia complexa de rela¸˜es que torna a e co muito dif´ e em alguns casos imposs´ icl.23.1. .1 do MySQL a a a Server.

Veja Se¸˜o 4. Veja Se¸˜o 1.0-alpha A seguinte discuss˜o somente interessa se vocˆ estiver executando uma vers˜o do MySQL a e a inferior a vers˜o 3.4 [TODO a ca future].arquivo-texto-com-comentario.arquivo-texto-com-comentario. Se vocˆ ca a ´ e estiver usando um mecanismo de armazenamento transacional.5 Como o MySQL Lida com Restri¸˜es co Como o MySQL lhe permite trabalhar com tabelas transacionais e n˜o transacionais (que a n˜o permitem rollback). ca ca Fazemos isto na maiorioa dos casos.29 [mysql info].). Neste ca caso o MySQL ir´ ignorar qualquer viola¸˜o de chave e continuar´ com o processamento do a ca a pr´ximo registro.sql Vocˆ tamb´m pode editar o pr´prio arquivo de comandos alterando os coment´rios ‘--’ e e o a para ‘#’: shell> replace " --" " #" -.6.52 MySQL Technical Reference for Version 5. mas n˜o para todos ainda.6. co 1.. Se vocˆ estiver usando mecanismos de a ca e armazenemento n˜o transacionais o MySQL ir´ para no registro errado e deiar o resto dos a a registros se processamento. P´gina 798. Temos que tratar o caso quando vocˆ atualiza diversos registros com uma tabela n˜o transae a cional que n˜o pode fazer rollback em erros. como InnoDB. Para tornar a vida mais f´cil o MySQL adicionou suporte a diretiva IGNORE para a maioria a dos comandos que podem causar uma viola¸˜o de chave (como INSERT IGNORE .8. o tratamento de restri¸˜es ´ um pouco diferente no MySQL que a co e em outros bancos de dados.1 Restri¸oes de PRIMARY KEY / UNIQUE c˜ Normalmente vocˆ receber´ um erro quando tentar fazer um INSERT / UPDATE de um registro e a que cause uma viola¸˜o de uma chave prim´ria. P´gina 323.. a A op¸˜o b´sica que o MySQL tem ´ parar a instru¸˜o no meio ou fazer o melhor para se ca a e ca recuperar do problema e continuar.23: a Se vocˆ tem um programa SQL em um arquivo texto que contˆm coment´rios ‘--’ vocˆ e e a e dever´ usar: a shell> replace " --" " #" < arquivo-texto-com-coment´rio. Veja Se¸˜o 12.9 [SHOW ca a ca WARNINGS].sql 1.1 com o comando o SHOW WARNINGS.sql \ a | mysql banco-de-dados No lugar de: shell> mysql banco-de-dados < arquivo-texto-com-comentario.1. P´gina 29.sql Desfa¸a utilizando este comando: c shell> replace " #" " --" -. a . o MySQL automaticamente far´ um rollback da transa¸˜o. A seguir mostramos o que acontece com diferentes tipos de restri¸˜es.5.8.0.3. Vocˆ pode obter informa¸˜o sobre o que o MySQL fez com a fun¸˜o da o e ca ca API mysql_info() API function e em vers˜es posteriores do MySQL 4. a A filosofia b´sica ´ tentar obter um erro para qualquer coisa que possamos detectar em temp a e de compila¸˜o mas tentar recuperar de qualquer erro que abtemos em tempo de execu¸˜o. chave unica ou chave estrangeira.8.

Veja e ca a Se¸˜o 6. o valor errado ser´ ignorado. Se¸˜o 7.5.3 [Op¸˜es de configura¸˜o].3.0. P´gina 652. a ´ para uma simples inser¸˜o de registro.3. o a e ca co P´gina 53. Para strings este valor ´ e uma string vazia ou a maior string poss´ que possa estar na coluna. ca a 1. Veja Se¸˜o 6. a Se vocˆ inserir um valor errado em um campo ENUM. A raz˜o para as regras acima ´ que n˜o podemos verificar estas condi¸˜es antes da consulta a e a co come¸ar a executar. P´gina 499. Veja Se¸˜o 1. Isto faz com ca co ca a que as instru¸˜es INSERT gerem um erro a menos que vocˆ explicite valores espec´ co e ificos para todas as colunas que exigem um valor diferente de NULL.3 Restri¸˜es de ENUM e SET co No MySQL 4.5.5. Neste caso ´ melhor ’fazer o poss´ e ivel’ e ent˜o continuar como se a nada tivesse acontecido.) Veja Se¸˜o 2.2 Restri¸oes de NOT NULL c˜ Para poder suportar um f´cil tratamento de tabelas n˜o transacionais todos os campos no a a MySQL tˆm valores padr˜o. e ca 1.6 Erros Conhecidos e Deficiˆncias de Projetos no MySQL e . e a o MySQL Server armazenar´ 0 ou ’’ (strig vazia) nela.x ENUM n˜o ´ uma restri¸˜o real. mas um modo mauis eficiente de armazenar a e ca campos que possam apenas conter um conjunto de valores dados. ca co a Veja O suporte a chaves estrangeiras nas tabelas MyISAM est´ programado para ser inclu´ na a ida arvor´ de fonte do MySQL 5. Este ultimo comportamento pode. ca a Se vocˆ inserir uma op¸˜o errada em um campo SET.5.0 plenejamos melhorar into forncendo avisos para convers˜es autom´ticas de campo.4 [SET].2 [Restri¸˜es de chaves estrangeiras no InnoDB].2 [restri¸˜es NOT NULL].Cap´ ıtulo 1: Informa¸˜es Gerais co 53 Note que no momento apenas as tabelas InnoDB suportam chaves estrangeiras. mais uma op¸˜o para deixar vocˆ fazer um rollback o a ca e das instru¸˜es que usam apenas tabelas transacionais no caso de tal instru¸˜o fizer uma co ca defini¸˜o de campo n˜o permitida.3.2.8. o MySQL ir´ atribuir a coluna e e a ´ o ’melhor valor possivel’ em vez de dar uma mensagem de erro. ser alterado com a op¸˜o de compila¸˜o -DDONT_ ca ca ca USE_DEFAULT_FIELDS. ca a O mostrado acima significa que n˜o se deve usar o MySQL para verificar o conte´do dos a u campos. Se encontrarmos um problema depois de atualizar algumas linahs. No MySQL 5.3 [ENUM]. n˜o c a podemos fazer um rollback j´ que o tipo de tabela n˜o suporta isto.8. e 1. ivel Isto significa que se vocˆ tentar armazenar NULL em uma coluna que n˜o aceita valores NULL. P´gina 97. A op¸˜o de parar n˜o a a ca a ´ t˜o boa como no caso em que a atualiza¸˜o esteja feita pela metade que ´ provavelmente e a ca e o pior cen´rio poss´ a ivel. ele ser´ configurado com uma string e a vazia em um contexto string.2.5.8. Isto ´ devido as mesmas e raz˜es pelas quais NOT NULL n˜o ´ respeitado. e a Se vocˆ inserir um valor ’errado’ em uma coluna como um NULL em uma coluna NOT NULL e ou um valor num´rico muito grande em um campo num´rico. mas deve se fazˆ-lo por meio da aplica¸˜o. P´gina 500.8.

ca a Isto ´ um r´pido. a a a • DELETE FROM heap_table sem um WHERE n˜o funcionam em tabelas HEAP com lock. mas sim o valor m´ximo da coluna. Se vocˆ tiver v´rias tabelas BDB em um a e a banco de dados..8.6.6.t3. a 1. a • ANALYZE TABLE em uma tabela BDB pode. Isto ´ percebido e a ca e e principalmente quando vocˆ tiver um cache de tabelas grandes.8. Corrigido na vers˜o 4.t2.1 Erros da Vers˜o 3. que pode criar a um problema com a posi¸˜o do log bin´rio ao se fazer um backup completo de tabelas ca a e do log bin´rio. Quando isto acontecer vocˆ ir´ ver o seguinte tipo de e a erro no arquivo de erros do MySQL. A raz˜o pela qual a n˜o s˜o retornados erros ´ que muitos clientes que geram consultas automaticamente a a e adicionam parentesis na parte FROM mesmo onde eles n˜o s˜o necess´rios. compacto e eficiente m´todo de registro o que funciona perfeitamente e a e .. e • Fazendo um LOCK TABLE . e FLUSH TABLES .. Corrigido na vers˜o 4. a a a • Concatenar muitos RIGHT JOINS ou combinar joins LEFT e RIGHT na mesma consulta podem dar uma resposta incorreta ja que o MySQL s´ gera registros NULL para tabelas o que precedem um join LEFT ou antes de um join RIGHT. • ANALYZE TABLE. talvez piores. gastar´ muito tempo para usar o cliente mysql no banco de dados se a vocˆ n˜o estiver usando a op¸˜o -A ou se vocˆ estiver usando rehash. 001207 22:07:56 bdb: log_flush: LSN past current end-of-log • O MySQL aceita parenteses na parte FROM.12 a • SELECT MAX(campo_chave) FROM t1. Pode-se no entanto fazer um KILL em qualquer uma das threads envolvidas para resolver isto. onde uma das trˆs tabelas est´ vazia e a n˜o retorna NULL. co co a (A transa¸˜o provavelmente ser´ ca a ignorada). OPTIMIZE TABLE e REPAIR TABLE podem causar problemas em tabelas para as quais vocˆ estiver usando INSERT DELAYED.23 porque corrig´ a a i-los involveria a mudan¸a de muito c´digo.. c o Os erros s˜o tamb´m classificados como ’n˜o fatal’ ou ’toler´vel’.0-alpha 1. a • Tabelas BDB s˜o um pouco lentas para abrir. o que poderia introduzir outros erros. em alguns. Isto ser´ corrigido na vers˜o a a 5.23 Corrigidos em Vers˜es Posteriores do a o MySQL Os seguintes erros/bugs conhecidos n˜o est˜o corrigidos no MySQL 3.0.2 Open Bugs / Deficiˆncias de Projeto no MySQL e Os seguintes problemas s˜o conhecidos e tem prioridade muito alta para serem corrigidos: a • FLUSH TABLES WITH READ LOCK n˜o bloqueia CREATE TABLE ou COMMIT.0. e • A replica¸˜o utiliza o log a nivel de consulta: o master grava a consulta no log bin´rio.54 MySQL Technical Reference for Version 5. casos inutilizar a tabela at´ que e se reinicie o servidor mysqld.0 junto com o suporte a parentesis na parte FROM.11.0. a e a a • Pode se obter um deadlock ao fazer LOCK TABLE em multiplas tabelas e ent˜o na mesma a conex˜o fizer um DROP TABLE em uma delas enquanto outra thread est´ tentando bloa a quear a tabela. n˜o garante que n˜o existem transa¸˜es a a co n˜o terminadas em progresso na tabela. mas os ignora sem aviso. • N˜o execute ALTER TABLE em uma tabela BDB em que vocˆ estiver executando a e transa¸˜es multi-instru¸˜es n˜o completadas.

. A compara¸˜o ´ feita caracter por a e ca e caracter. O modo mais f´cil de evitar este problema em todos os casos ´ adicionar uma cl´usula a e a ´ ORDER BY para tal consulta n˜o deterministica assegure que os registros s˜o sempre ara a mazenados/modificados na mesma ordem. depenco u dendo da escolhe feita pelo otimizador no master e slave. InnoDB ne master e MyISAM no slave. ou qualquer outra fun¸˜o string que termina adicionando espa¸os co ca c em branco a direita. a a Os seguintes problemas s˜o conhecidos e ser˜o corrigidos na hora certa: a a • LIKE n˜o ´ seguro com caracteres multi-byte. INSERT IGNORE .1.Cap´ ıtulo 1: Informa¸˜es Gerais co 55 na maioria dos casos. Embora nunca tenhamos ouvido sobre um caso ocorrido. SELECT. obtendo um n´mero diferente na coluna auto_increment).. a − A tabela est´ armazenada em um mecanismo de armazenamento diferente no masa ter e no slave (pode se executar diferentes mecanismos de armazenamento no metre e no slave: por exemplo. Por exemplo: ca − CREATE . SELECT que preenchem com zeros ou NULL uma coluna auto_increment. em uma consulta que preisa usar tabelas tempor´rias para ser a .. e o c´digo do toimizador o o ´ diferente entre estas vers˜es..1. h´ uma a chance te´rica que o dado no master e slave sejam diferente se uma consulta ´ feita o e de tal modo que a modifica¸˜o do dado ´ n˜o determin´ ca e a istica. o SELECT pode retornar registros em uma ordem diferente (no qual resultar´ em um registro tendo a diferentes posi¸˜es. • Ao usar fun¸˜es RPAD. e o Este problema tamb´m pode afetar a restaura¸˜o de um banco de dados usando e ca mysqlbinlog|mysql. Nas vers˜es futuras do MySQL adicionareo mos automaticamente uma cl´usula ORDER BY quando necess´rio.. OPTIMIZE.. ANALYZE e REPAIR s˜o escritos no a log bin´rio). deixar ao desejo e do otimizador de consultas (o que geralmente n˜o ´ uma boa pr´tica. desde o MySQL 4. SELECT ou INSERT ... c ivel − The MySQL buffers’ sizes (key_buffer_size etc) are different on the master and slave.. − DELETE se vocˆ estiver apagando registros de uma tabela que tem chaves ese trangeiras com a propriedade ON DELETE CASCADE. − REPLACE . ˜ Se e somente se todos estas consultas NAO tiverem cl´usulas ORDER BY garantindo uma a ordem determin´ istica. se o slave possuir menos espa¸o disppon´ em disco). por exemplo a a OPTIMIZE TABLE foi executado nas tabelas master e n˜o nas nas tabelas slave (para a corrigir isto. mesmo fora da a e a replica¸˜o!). SELECT se vocˆ tiver valores de chaves e duplicados nos dados inseridos. por exemplo para INSERT . Uma consulta ser´ otimizada a deiferentemente no master e slave apenas se: − Os arquivos usados pelas duas consultas n˜o s˜o exatamente a mesma.. Na verdade. − O master e slave executam vers˜es diferentes do MySQL. isto ´. SELECT sem ORDER BY.

record=t2. a co e Devido ao modo como os arquvos de defini¸˜es de tabelas s˜o armazenados n˜o se co a a pode usar 255 caracteres (CHAR(255)) em nomes de tabelas. ambos tem o tamanho de 64 a a bits). se vocˆ tiver uma coluna DECIMAL com um n´mero armazenado em diferentes formatos e u (+01. RPAD(t2.1 quando temos novos arquivos de a a formatos de defini¸˜o de tabelas. o A raz˜o disto ´ devido ao fato de tabelas HEAP. campos VARCHAR s˜o tratados desta mesma forma. n˜o apagando tudo nas tabelas mapeadas.. n´s n˜o estamos aptos a corrig´ co o a ila. 50. ESCAPE.joinID ORDER BY t2. ca Quando estiver usando SET CHARACTER SET. ORDER BY ou a c DISTINCT.2048) FROM e nome_tabela. BLOB valores n˜o podem ser usados com confian¸a em GROUP BY. Somente os primeiros bytes (padr˜o 1024) max_sort_length s˜o usados a a quando estiver comparando BLOBs nestes casos. isto n˜o tem c a problema. a Vocˆ n˜o pode construir em outro diret´rio quando estiver utilizando MIT-pthreads.record. e o e Em MIN().00. que s˜o usadas primeiro para tabelas a e a tempor´rias. O comportamento anterior existe em todas as vers˜es do MySQL. Para tipos CHAR. ’ ’) AS f2. Isto est´ programado para ser corrigido na vers˜o 5. o MySQL atualmente compara as co colunas ENUM e SET pelo valor de suas strings ao inv´s da posi¸˜o relativa da string no e ca conjunto. todas as strings resultantes ser˜o cortadas a direita (como em RTRIM).1. C´lculos s˜o feitos com BIGINT ou DOUBLE (normalmente. .field2. A regra geral ´ que fun¸˜es bin´rias a c˜ e co a s˜o feitas com precis˜o BIGINT. exceto campos do tipo BLOB e TEXTO tem. a a a Este comportamento ser´ corrigido em uma das distribui¸˜es da s´rie 4. 50. tabelas ou campos. nomes de colunas e enum. Depende da precis˜o utilizada na fun¸ao.00).field1. DELETE FROM merge_table usado sem WHERE ir´ apenas apagar o mapeamento para a a tabela. e a o Como isto necessitaria de altera¸˜es na MIT-pthreads.0-alpha • • • • • • • • • • • rsolvida. ’ ’) AS f1 FROM table1 as t1 LEFT JOIN table2 AS t2 ON t1. O resultado final deste erro ´ que o usu´rio n˜o conseguira espa¸os em branco do lado e a a c direito do campo resultante. n˜o ´ permitido usar caracteres especias a e no nome do banco de dados. Pode-se usar _ ou % com ESCAPE em LIKE .00. GROUP BY pode considerar cada valor como um valor diferente. MAX() e outras fun¸˜es de agrupamente.56 MySQL Technical Reference for Version 5. IF e ELT() com precis˜o BIGINT ou DOUBLE e o resto a a a com precis˜o DOUBLE. Este a ´ um exemplo de uma consulta: e SELECT RPAD(t1.0. 1. Uma forma de contornar este problema para a maioria dos casos ´ usar a substring: SELECT DISTINCT LEFT(blob. e a Vocˆ s´ pode ter at´ 255 colunas ENUM e SET em uma tabela. automaticamente. Isto pode ser alterado com a op¸˜o ca -0 max_sort_lenght para mysqld. todos os espa¸os extras removidos quando recuperados. O problema ´ que no MySQL. 01.. e pode ser considerado como um recurso de acordo com o ANSI SQL92. Devemos evitar o uso de valores sem sinal maiores que 63 bits a (9223372036854775807) para qualquer outra coisa al´m de campos bin´rios! e a Todas os campos string. n˜o s˜o capazes de tratar colunas VARCHAR.

Por exemplo. temporary_table AS t2. • Em instru¸˜es UPDATE. dever´ editar o mysqld_safe para logar em ‘’hostname’.userid = 9 AND band_mp3. Por´m isto pode ser um a e pouco estranho em casos que os valores dos campos devem ser verificados na aplica¸˜o. No segundo caso. • Vocˆ pode se referir a m´ltiplas tabelas em uma mesma consulta. Um problema com isto ´ que se vocˆ executar o mysqladmin refresh para fechar e reabrir o e e log. N´s provavela ca o mente iremos alterar isto no futuro para nunca comparar as colunas escondidas quando executando DISTINCT. um exemplo disto ´: e SELECT DISTINCT mp3id FROM band_downloads WHERE userid = 9 ORDER BY id DESC. Se vocˆ co a e referenciar a uma coluna atualizada. algo n˜o permitido no SQL-92. colunas escondidas s˜o contadas a a como parte do resultado (mesmo se elas n˜o s˜o mostradas) enquanto que em queries a a normais colunas escondidas n˜o participam na compara¸˜o DISTINCT. vocˆ ir´ obter o valor atualizado em vez do valor e a original.err’ a em vez de ‘’hostname’. ca mas isto ira fornacer um ´timo ganho de velocidade assim como permite ao MySQL o fazer algumas otimiza¸˜es que de outro modo seriam muito dif´ co iceis para serem feitas. a • Como o MySQL permite trabalhar com tipos de tabelas que n˜o suportam transa¸˜es a co (e assim n˜o pode fazer rollback em dados) algumas coisas funcionam um pouco a diferentes de outros servidores SQL em MySQL (Isto serve para garantir que o MySQL nunca necessitar´ de um rollback para um comando SQL). assim vocˆ pode facilmente utilizar o espa¸o do log antigo e c apagando-o e executando mysqladmin refresh. • O otimizador pode lidar com o DISTINCT de forma diferente se vocˆ estiver usando cole unas ’escondidas’ em uma join ou n˜o.KEY=KEY+1. por exemplo: mysql> UPDATE nome_tabela SET KEY=KEY+1. . Em uma join. Se vocˆ utiliza e --log extensivamente.id DESC. Isto atualiza KEY com 2 no lugar de 1. vocˆ pode obter duas linhas idˆnticas no MySQL 3. a stdout e a stderr continuam redirecionadas para o log antigo. and SELECT DISTINCT band_downloads. a seguinte a instru¸˜o n˜o funciona.id = band_downloads.mp3id FROM band_downloads. Perceba que isto somente acontece em consultas onde vocˆ n˜o tem colunas ORDER e a BY no resultado. • RENAME n˜o funciona com tabelas tempor´rias (TEMPORARY) ou tabelas usadas em uma a a tabelas MERGE. mas vocˆ n˜o pode se e u e a referir a qualquer tabelas tempor´rias dada mais de uma vez.x na s´rie do e e e resultado (porque o campo escondido ’id’ pode variar).mp3id ORDER BY band_downloads. ca a mysql> SELECT * FROM temporary_table.23.Cap´ ıtulo 1: Informa¸˜es Gerais co 57 • mysqld_safe redireciona todas as mensagens de mysqld para o log mysqld.band_mp3 WHERE band_downloads. colunas s˜o atualizadas da esquerda para a direita.log’.

o MySQL. em e e alguns casos a instru¸˜o PROCEDURE n˜o ir´ transformar as colunas. ser alterado com a op¸˜o de compila¸˜o ca ca -DDONT USE DEFAULT FIELDS).58 MySQL Technical Reference for Version 5. Os seguintes erros s˜o conhecidos em vers˜es mais antigas do MySQL: a o • Vocˆ pode pendurar um processo se vocˆ fizer um DROP TABLE em uma tabela entre e e outras que esteja travada com LOCK TABLES. • No caso seguinte vocˆ pode obter um descarrego de mem´ria para o arquivo core: e o − Tratamento de inser¸˜es com atraso tem deixado inser¸˜es pendentes na tabela. o MySQL ir´ armazenar 0 na coluna. e − Se vocˆ definir uma coluna SET com um valor n˜o suportado. a ordem das chaves ser´ diferente para as tabelas se existir uma chave a antiga n˜o unica na tabela. Isto ´ porque o ALTER TABLE coloca chaves UNIQUE antes a ´ e de chaves normais para ser poss´ detectar chaves duplicadas o mais cedo o poss´ ivel ivel. ele ser´ e a a alterado para o valor de erro ’empty string’.0-alpha Se vocˆ informar um valor incorreto em uma coluna. com valor num´rico 0. Se o MySQL pode armazenar uma data e c recuperar extamente a mesma data. Se a data a a estiver totalmente errada. − O MySQL permite o armazenamento de alguns valores errados de data em campos do tipo DATE e DATETIME. A id´ia ´ que n˜o ´ e e a e servi¸o do servidor SQL validar datas. • LIMIT em n´meros negativos s˜o tratados como n´meros grandes positivos. ca a a • Cria¸˜o da tabela do tipo MERGE n˜o verifiva se as tabelas envolvidas s˜o de tipos ca a a compat´ iveis. e a − Se vocˆ tentar armazenar NULL em uma coluna que n˜o aceita valores e a nulos.0. Us´-los a a causar´ problemas na exporta¸˜o e importa¸ao de dados. a (Este comportamento pode. MySQL ir´ armazenar 0 ou ’’ (string vazia) na coluna. aramzenar´ o melhor valor poss´vel no campo. a − Se vocˆ especificar um valor n˜o suportado para um campo do tipo enum. e a a • Se vocˆ executar uma PROCEDURE em uma pesquisa que retorna uma s´rie vazia.23. o MySQL e ir´ armazenar o menor ou maior valor poss´ no campo.2 do MySQL um UPDATE que atualizava uma chave com um WHERE a na mesma chave podia falhar porque a chave era usada para procurar por registros e a mesma linha poderia ter encontrado v´rios itens: a . -Inf e Inf em tipos double. em vez de fazer um e rollback. • O MySQL ainda n˜o pode lidar com valores NaN. a i − Se tentar armazenar um valor fora da faixa em uma coluna num´rico. o MySQL ir´ armazenar a data 0000-00-00 no campo. Uma solu¸˜o intermedi´ria a ca c˜ ca a ´ alterar NaN para NULL (se for poss´ e ivel) e -Inf e Inf para o valor double m´ inimo ou m´ximo respectivo poss´ a ivel. a ivel − Se tentar armazenar uma string que n˜o comece com um n´mero em uma coluna a u num´rica. co co − LOCK table com WRITE − FLUSH TABLES • Antes da vers˜o 3. entretanto. ent˜o o MySQL armazenar´ a data. o valor ser´ ignorado. (Como 2000-02-31 ou 2000-02-00). u a u • Se vocˆ usar ALTER TABLE para primeiro adicionar um ´ e indice UNIQUE a uma tabela usada em uma tabela MERGE e ent˜o usar ALTER TABLE para adicionar um ´ a indice normal na tabela MERGE.

23 do MySQL. ca a e a . • Antes da vers˜o 3. Veja co ca Se¸˜o 2. todos os tipos num´ricos tratados como campos a e de pontos fixos. P´gina 94. vejas as se¸˜es sobre compila¸˜o e portabilidade. Isto funcionar´ porque MySQL n˜o utilizar´ indices em express˜es com a cl´usula a a a o a WHERE. Veja Apˆndice D [Porting].3 [Installing source]. P´gina 1069. Para erros espec´ ificos na plataforma.Cap´ ıtulo 1: Informa¸˜es Gerais co 59 UPDATE nome_tabela SET KEY=KEY+1 WHERE KEY > 100. Um modo de contornar este erro ´ utilizar: e mysql> UPDATE nome_tabela SET KEY=KEY+1 WHERE KEY+0 > 100. Todos os resultados eram retornados com o n´mero u correto de casas decimais. Isto significa que vocˆ tem que especificar quantas casas decimais um e campo de ponto flutuante deve ter.

2.2. P´gina 75.9 ca [Installing binary]. No entanto. a • Para saber quais s˜o as plataformas suportadas. veja Se¸˜o 2. Configure um arquivo de op¸˜o se necess´rio. Estes o ca ca a procedimentos podem ser aplicados caso vocˆ use uma distribui¸˜o bin´ria ou fonte do e ca a MySQL. . veja Se¸˜o 2. Instale a distribui¸˜o. Por favor perceba que nem todas as plataformas suportadas s˜o igualmente a a boas para executar o MySQL.1 [Getting e ca MySQL]. Selcione o servidor que vocˆ quer usar. O MySQL para Windows est´ dispon´ em dois formatos de distribui¸˜o: a ivel ca • A distribui¸˜o bin´ria cont´m um programa de instala¸˜o que instala que vocˆ precisa ca a e ca e e assim possa iniciar o servidor imediatamente.2.60 MySQL Technical Reference for Version 5. P´gina 94. Inicie o servidor. e 2. Algumas s˜o mais robustas e eficientes que outras . ca a 3. Cada conjunto a ca a de instru¸˜es inclui uma se¸˜o sobre problemas espec´ co ca ificos de sistemas que vocˆ pode e precisar. use uma a distribui¸˜o bin´ria. P´gina 91 para instru¸˜es gerais de instala¸˜o para estes pacotes que se a co ca aplicam a todas as plataformas.3 [Which OS]. P´gina 75 para mais informa¸˜es sobre quais ca a co outras distribui¸˜es bin´rias est˜o dispon´ co a a iveis e como obtˆ-las. N´s co a o tamb´m fornecemos acesso p´blico ` nossa ´rvore fonte atual para aqueles que desejam e u a a ver nossos desenvolvimentos mais recentes e nos ajudar a testar novos c´digos.0-alpha 2 Instala¸˜o do MySQL ca Este cap´ itulo descreve como obter e instalar o MySQL: • Para uma lista de sites no quais vocˆ pode obter o MySQL. a u ca a • Instru¸˜es de instala¸˜o para distribui¸˜es bin´ria e fonte s˜o descritos em Se¸˜o 2. a ca P´gina 78.1 Instala¸˜o r´pida padr˜o do MySQL ca a a Este cap´ itulo cobre a instala¸˜o do MySQL em plataformas onde oferecemos pacotes usando ca oformato de empacotamento nativo da respectiva plataforma. ca a • V´rias vers˜es do MySQL est˜o dispon´ a o a iveis em distribui¸˜es bin´rias e fonte. Se ainda restar d´vidas. P´gina 91 e Se¸˜o 2.9 co ca co a a ca [Installing binary].4 [Post-installation].3 [Installing source].2 [General Installation Issues].0. Para o determinar que vers˜o e tipo da distribui¸˜o vocˆ deve usar. ca 2.2. veja Se¸˜o 2.1 Instalando o MySQL no Windows O processo de instala¸˜o para o MySQL no Windows tem os seguintes passos: ca 1.2.4 [Which a ca e ca version].1. P´gina 80.2.ver a Se¸˜o 2. Veja Se¸˜o 2. e 4. veja em Se¸˜o 2. P´gina 111.3 [Which OS]. as distribui¸˜es co bin´rias do MySQL est˜o dispon´ a a iveis para muitas outras plataformas. veja Se¸˜o 2. 2. P´gina 78 para detalhes. • Para procedimentos p´s-instala¸˜o.

1. e a a 2. instale o MySQL em um e sistema de arquivos NTFS ou mais novo. NT. a melhor op¸˜o ´ a distribui¸˜o bin´ria. Vocˆ pode reinstalar o servi¸o com o servidor pr´prio depois de atualizar. vocˆ precisar´ do seguinte: e a • Um sistema operacional Windows de 32 bits como 9x. P´gina 66. 200 ou XP. ME. e c o Se vocˆ n˜o estiver executando o servidor MySQL como um servi¸o. o qual pode ser feito o ca a download em http://www. P´gina 107. Veja Se¸˜o 2. pare desta forma: e a c .3 [CREATE TABLE]. Veja Se¸˜o 6.com/downloads/.7 [NT start].7 [Constru¸˜o do fonte para a ca ca Windows]. se vocˆ e ca e quiser executar o mysqld-max em vez do mysqld). a ´ Geralmente.0. Em m´quinas com Windows NT. ca a • Se vocˆ precisa de tabelas com tamanho maior que 4GB. c ca a • Suporte ao protocolo TCP/IP.1. remova o servi¸o existente: c C:\mysql\bin> mysqld --remove 3. e • Se vocˆ planeja se conectar ao servidor MySQL via ODBC.5. 2000 ou XP. Se vocˆ estiver fazendo uma atualiza¸˜o de uma instala¸˜o MySQL mais nova. A fam´ ilia NT (Windows NT. P´gina 866.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 61 • A distribui¸˜o fonte cont´m todo o c´digo e os arquivos suportados para construir o ca e o execut´vel usando o compilador VC++ 6.2 Instalando uma Distribui¸˜o Bin´ria do Windows ca a Para instalar o MySQL no Windows usando uma distribui¸˜o bin´ria. ca • Espa¸o suficiente em disco para descompactar. • Um c´pia da distribui¸˜o bin´ria do MySQL para Windows. se a a vocˆ estiver executando o servidor como um servi¸o. Se vocˆ estiver trabalhando em uma m´quina Windows NT. 2000.mysql. vocˆ tamb´m precisar´ do e e e a dirver MyODBC.1.1. esteja certo e a de que vocˆ est´ logado com um usu´rio com privileios de administrador. N˜o se esque¸a de usar MAX_ROWS e AVG_ROW_ a c LENGTH quando criar tabelas. 2000 e XP) lhe permite executar o servidor MySQL como um servi¸o. E mais simples e vocˆ n˜o precisa de ca e ca a e a nenhuma ferramenta adicional para ter o MySQL em execu¸˜o. siga este procedica a mento: 1. ou XP. Veja Se¸˜o 12. • Um programa ZIP para descompactar os arquivos da distribui¸˜o.3. pare-o com o comando: e c C:\> NET STOP MySQL Se vocˆ planeja usar um servidor diferente depois da atualiza¸˜o (por exemplo. Nota: A distribui¸˜o de arquivos s˜o fornecidas no formato zip e recomendamos o ca a uso de um cliente FTP com op¸˜o de resumo para evitar corrompimento de arquivos ca durante o processo de download. ´ e ca ca e necess´rio parar o servidor atual. ca a 2.1.1 Exigˆncias do Sistema Windows e Para executar o MySQL no Windows.2 [ODBC].1. ca 2. P´gina 597. instalar e criar o banco de dados de c acordo com suas exigˆncias. Veja Se¸˜o 2.

Se vocˆ quiser usar um diret´rio de dados de ‘E:\mydata’. Se vocˆ quiser ca e instalar em um diret´rio diferente do padr˜o (‘c:\mysql’).1.5. vocˆ o e a a e precisar´ epecificar o local onde vocˆ inicia o servidor. ca o a 6. P´gina 643.0-alpha C:\mysql\bin> mysqladmin -u root shutdown 4.1.3 [Iniciando o InnoDB]. use o bot˜o Browse para o a a especificar seu diret´rio preferido. o • Use uma op¸˜o --datadir para especificar a nova localiza¸˜o do diret´rio de dados ca ca o cada vez que vocˆ iniciar o servidor. Finalize o processo de instala¸˜o. vocˆ deve copiar todo o conte´do do diret´rios data para a nova localiza¸˜o. Por exemplo.0. ca 5. ca 2. (A ca ca a partir do MySQL 4. o InnoDB cria os seus arquivos de log e dados no diret´rio de dao dos por padr˜o. o instalador coloca o MySQL em ‘C:\mysql’ e o diret´rio de dados a o em ‘C:\mysql\data’.) e e ca a´ No Windows. vocˆ pode e co ca e indentifica-los na linha de comando ou coloc´-los em um arquivo de op¸˜o. como descrito em Se¸˜o 7.1. P´gina 62.3 [Windows prepare e ca ca environment]. Isto ´ particularmente verdade sob a ca e as seguintes circunstˆncias: a • A localiza¸˜o do diret´rio de instala¸˜o ou dados s˜o diferentes dos locais padr˜o ca o ca a a (‘c:\mysql’ e ‘c:\mysql\data’). a e a Vocˆ ainda deve fazˆ-lo se desejar. a 7. Finalize o programa WinMySQLAdmin se ele estiver em execu¸˜o. por padr˜o. vocˆ achar´ mais conveniente utilizar um arquivo a e a de opc˜o para especificar a configura¸˜o do seu MySQL. o instalador do MySQL coloca o diret´rio de dados diretamente sob o diret´rio o o onde vocˆ instalou o MySQL. Execute o programa ‘setup. e Quando o servidor MySQL inicia no Windows. ele procura pelas op¸˜es em dois arquivos: co O arquivo ‘my. o ‘c:\ibdata’ e ‘c:\iblogs’. Por e u o ca exemplo. • Vocˆ precisa ajustar as configura¸˜es do servidor. O diret´rio o o do Windows ´ normalmente chamado ‘C:\WINDOWS’ ou ‘C:\WinNT’. vocˆ deve e o e fazer duas coisas: • Mova o diret´rio de dados de ‘C:\mysql\data’ para ‘E:\mydata’. Vocˆ tamb´m poder´ adicionar algumas linhas extras ao e e a arquivo de op¸˜o. vocˆ deve criar manualmente dois novos a e diret´rios para guardar os arquivos de dados e de log do InnoDB — por exemplo.23. Isto significa que vocˆ n˜o precisa configurar o InnoDB explicitamente. Descompacte os arquivos de distribui¸˜o em um diret´rio tempor´rio.1. Se vocˆ n˜o instalar o MySQL no local padr˜o. e um arquivo de op¸˜o ser´ util neste caso. para usar as tabelas e co transacionais InnoDB no MySQL vers˜o 3.0. Vocˆ pode determinar e e a sua localiza¸˜o exata a partir do valor da vari´vel de ambiente WINDIR usando o seguinte ca a comando: C:\> echo %WINDIR% .ini’ no diret´rio Windows e o arquivo chamado ‘C:\my. como descrito em Se¸˜o 2. Par op¸˜es que a ca co s˜o usadas sempre que o servidor iniciar.3 Preparando o Ambiente MySQL do Windows Se vocˆ precisar especificar op¸˜es de inicializa¸˜o quando executar o servidor.62 MySQL Technical Reference for Version 5. O modo mais f´cil de se fazer a e a isto ´ usar um arquivo de op¸˜o.exe’ para iniciar o processo de instala¸˜o. Se vocˆ quisesse utilizar um diret´rio de dados em um local e e o diferente.cnf’.

38. ´ melhor se vocˆ usar apenas um destes arquivos. a Agora vocˆ est´ pronto para testar o servidor. a Bin´rio otimizado com suporte para links simb´licos. Independente de qual arquivo usar. Aqui est´ uma lista dos diferentes servidores MySQL dos quais vocˆ pode a e escolher: Binario mysqld mysqld-opt mysqld-nt mysqld-max mysqld-max-nt Descri¸˜o ca Compilado com debugger integral e conferˆncia autom´tica de aloca¸˜o e a ca de mem´ria. BDB e tabelas InnoDB. Como o mysqld-max. normal e o ca a MySQL-Max.1.ini’. este servidor n˜o tem suporte a tabelas a a transacionais. Se vocˆ usar barras invertidas. O WinMySQLAdmin tem a capacidade co a de editar os seus arquivos de op¸˜o. o datadir=D:/mydata/data Note que os nome de caminho do Windows s˜o espec´ a ificados em arquivos de op¸˜o usando ca barras normais em ves de barra invertida. links simb´licos.bak’ para disabilit´-lo. e a 2.1. Se o a e e seu PC usa um boot loader onde o drive C: n˜o ´ o drive de boot. tabelas BDB e a o InnoDB. vocˆ pode criar o arquivo de op¸˜o e definir a e ca uma se¸˜o [mysqld] para especificar valores para os parˆmetros basedir e datadir: ca a [mysqld] # defina basedir com o seu caminho de instala¸~o ca basedir=D:/mysql # defina datadir com o local do diret´rio de dados. para evitar confus˜o. Outro modo de se gerenciar um arquivo de op¸˜o ´ usar a ferramenta WinMySQLAdmin. Por exemplo. Vocˆ ca e e pode encontrar o WinMySQLAdmin no diret´rio ‘bin’ de sua instala¸˜o MySQL. A partir da vers˜o 4. e ent˜o pelo arquivo ‘my. assim como o ca um arquivo de ajuda contendo instru¸˜es para us´-lo. Um arquivo de op¸˜o pode ser criado e modificado com qualquer editor de texto como o ca programa Notepad. a distribui¸˜o Windows inclui ambos bin´rios. co a No entanto. o uso de named pipes est´ sujeito a estas condi¸˜es: a co . se o MySQL est´ instalado em ‘D:\mysql’ e o diret´rio a o de dados est´ localizado em ‘D:\mydata\data’.cnf’.ini’. Antes desta vers˜o. e Todos os bin´rios acima s˜o otimizados para processadores Intel modernos mas deve funa a cionar em qualquer processador Intel i386 ou melhor. • Se o WinMySQLAdmin encontra o arquivo ‘C:\my. Bin´rio otimizado para NT/2000/XP com suporte para named pipes.0 o InnoDB est´ habilia a a tado.4 Selecionando um Servidor Windows Iniciado com o MySQL 3. por´m compilado com suporte para named pipes. vocˆ deve us´-las e e a em dobro.23. Os servidores mysqld-nt e mysqld-max-nt suportam conex˜es named pipe. ele deve ser no formato texto. sua unica op¸˜o ´ usar a e ´ ca e o arquivo ‘my. ele o renomear´ para a ‘C:\my_cnf. mas note o seguinte: ca • WinMySQLAdmin usa apenas o arquivo ‘my. Se vocˆ usar o e um destes servidores.cnf’. o o Bin´rio otimizado.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 63 O MySQL procura pelas op¸˜es primeiro no arquivo ‘my.ini’.

ou eles podem usar um named pipe se o servidor suportar co conex˜es named pipes. named pipes s´ estar˜o habilitados se vocˆ iniciar estes a o a e servidores com a op¸˜o --enable-named-pipe.. XP). Nos sistemas baseados no NT.50. vocˆ deve ver as seguintes mensagens assim e que o servidor iniciar: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist: a new database to be created! Setting file c:\ibdata\ibdata1 size to 209715200 Database physically writes the file full: wait. Se alguma coisa estiver errado com sua configura¸˜o.5 Iniciando o Servidor pela Primeira Vez No Windows 95. estes servidores n˜o podem ser usados.1. ou XP. e as conex˜es named pipes n˜o podem ser usadas. cliente MySQL sempre se conecta ao servidor usando TCP/IP. ca a ca a ‘C:\mysql’. veja Se¸˜o 2. a a e Tenha certeza que vocˆ est´ no diret´rio onde o servidor ´ localizado e ent˜o entre este e a o e a comando: shell> mysqld --console Para servidores que incluem suporte InnoDB.1. Fazer um teste a partir do prompt de comando do em uma janela de console (uma janela “DOS”) ´ a melhor coisa a fazer porque o servidor mostra a mensagem de status que aparece e na janela do DOS. Log file c:\iblogs\ib_logfile0 did not exist: new to be created Setting log file c:\iblogs\ib_logfile0 size to 31457280 Log file c:\iblogs\ib_logfile1 did not exist: new to be created Setting log file c:\iblogs\ib_logfile1 size to 31457280 Log file c:\iblogs\ib_logfile2 did not exist: new to be created Setting log file c:\iblogs\ib_logfile2 size to 31457280 Doublewrite buffer not found: creating new Doublewrite buffer created creating foreign key constraint system tables foreign key constraint system tables created . mas o TCP/IP deve estar instalado.1.23. 98. como o Windows NT. P´gina 62. ou Me.1. o a • No Windows 95. a 2. Ajuste o caminho mostrado nos exemplos se vocˆ tiver o MySQL instalado em e um local diferente.. o Para informa¸˜es sobre qual servidor bin´rio executar. Eles podem usar TCP/IP.0-alpha • Os servidores devem ser executados em uma vers˜o do Windows que suporte named a pipes (NT. 2000. a Esta se¸˜o lhe d´ um vis˜o geral da inicializa¸˜o de um servidor MySQL. A seguinte se¸˜o ca a a ca ca fornce informa¸˜o mais espec´ ca ifica para vers˜es particulares do Windows. 2000.3 [Windows prepare co a ca environment].64 MySQL Technical Reference for Version 5. estas mensagens ca tornar˜o mais f´cil para vocˆ de identificar e corrigir qualquer problema.0. o Os exemplos nesta se¸˜o assumem que o MySQL est´ instalado sob a localiza¸˜o padr˜o. os clientes possuem duas op¸˜es. • A partir da vers˜o 3. ca • Os servidores podem ser executados no Windows 98 ou Me.

Por isto.err’. ou Me No Windows 95. P´gina 1071. A ultima op¸˜o ´ iniciar o mysqld com --standalone --debug. Vocˆ pode abrir uma nova janela de console na qual se executar´ os programas e a clientes. vocˆ deve ver algo como abaixo. e ´ Note que se vocˆ estiver usando uma vers˜o antiga do Win95 (por exemplo.) Por a a isto. e ca e que indica que o servidor est´ pronto para o conex˜o com o cliente: a a port: 3306 O servidor continuar´ a gravar no console qualquer sa´ de diagn´stico adicional que ele a ida o produza. note que o sistema de permiss˜es do MySQL o o ´ totalmente independente de qualquer login de usu´rio sob o Windows. a ca a Use mysqld --help para mostrar todas as op¸˜es que o mysqld entende! co .1.1.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 65 011024 10:58:25 InnoDB: Started Quando o servidor finaliza sua sequˆncia de inicializa¸˜o. Por favor. para o MySQL ´ necess´rio o Winsock ivel e e a 2! Vocˆ pode obter o Winsock mais novo em http://www. vocˆ deve abrir outro prompt de comando a e e para executar programas clientes enquanto o servidor estriver em execu¸˜o.com.trace’ que deve conter a raz˜o pela qual o mysqld a n˜o inicia. depois do servidor iniciar. OSR2). Vocˆ pode encontrar o TCP/IP no seu CD-ROM do Windows. vocˆ deve iniciar uma janela do Prompt (Janela “MS-DOS”) e e digitar: shell> C:\mysql\bin\mysqld Isto ir´ iniciar o mysqld em segundo plano.) ca Vocˆ pode finalizar o servidor MySQL executando: e shell> C:\mysql\bin\mysqladmin -u root shutdown Isto chama o utilit´rio administrativo do MySQL mysqladmin para conectar ao servidor e a manda-lo finalizar. Veja Se¸˜o D. Neste caso o mysqld ir´ ´ ca e a escrever em um arquivo log ‘C:\mysqld. O Windows 98 e tem a nova biblioteca Winsock 2. O log de erro ´ o arquivo com a extens˜o ‘.0. verifique o log de erro para ver se o servidor escreveu a alguma mensagem que possa indicar a causa do problema. vocˆ deve ver a e e outro prompt de comando. (Isto permitir´ que qualquer m´quina na sua rede se conecte a seu servidor MySQL. por favor. portanto n˜o ´ necess´rio atualizar a biblioteca. 2000 ou XP.2 [Making trace files]. a e a Para iniciar o servidor mysqld. vocˆ deve ter certeza de que o suporte TCP/IP est´ instalado na sua m´quina antes e a a de iniciar o MySQL. O comando conecta como root que ´ a conta administrativa padr˜o no e a sistema de permiss˜es do MySQL. e a Se o mysqld n˜o iniciar.14-log’ socket: ’’ 2.microsoft. o e a mysqld: ready for connections Version: ’4. vocˆ pode obter alguma informa¸˜o util na e ca ´ tela que pode ajudar a resolver o problema. 98.6 Iniciando o MySQL no Windows 95. (Note que se vocˆ iniciar o servidor deste modo no Windows e NT. o servidor grava a sa´ do diagn´stico no log de erro e ca ida o no diret´rio de dados. 98 ou Me. o servidor ir´ executar em segundo plano e nenhum prompt de comando a aparecer´ at´ que o servidor finalize. Isto ´. neste caso. o MySQL usa TCP/IP para conectar um cliente a um servidor. Se vocˆ omitir a op¸˜o --console. E e a prefer´ que vocˆ use um pacote antigo Winsock.1. Vocˆ pode tamb´m tentar iniciar e e o servidor com mysqld --console.

ca Para ter o MySQL funcionando com TCP/IP no Windows NT 4.3. . ele pode ser imediatamente iniciado a partir do utilit´rio Servi¸os. O servidor le op¸˜es do arquivo de op¸˜es padr˜o. o servidor usa o nome padr˜o do MySQL e e a c a o servidor lˆ as op¸˜es do grupo [mysqld] no arquivo de op¸˜es padr˜o. Por favor. A c co regras que determinam o nome do servi¸o e os arquivos de op¸˜o que o servidor usa s˜o as c ca a seguintes: • Se vocˆ n˜o especificar um nome de servi¸o. a a c O utilit´rio Servi¸os (o Service Control Manager do Windows) pode ser encontrado no a c Painel de Controle do Windows (em Ferramentas Administrativas no Windows 2000). note que o sistema de permiss˜es do MySQL o o ´ totalmente independente de qualquer login de usu´rio sob o Windows.1. vocˆ pode especificaro nome do servi¸o depois da op¸˜o -e c ca install. A partir do MySQL 4. ou o comando mysqladmin shutdown. c co co a • Se vocˆ especificar uma op¸˜o --defaults-file depois do nome de servi¸o. e Uma vez em execu¸˜o. o servidor ignora e c ca o grupo de op¸˜o [mysqld] em vez de ler op¸˜es do grupo que tem o mesmo nome que ca co o servi¸o.0-alpha 2. (Este comando ´ caso insensitivo). Uma vez e a c e instalado. ´ E recomendado que se feche o utilit´rio Servi¸os enquanto realiza a opera¸˜es de instala¸˜o a c co ca ou remo¸˜o do servidor a partir desta linha de comando.2. Isto evita alguns erros estranhos. vocˆ deve primeiro parar o servidor atual em c e execu¸˜o usando o seguinte commando: ca shell> C:\mysql\bin\mysqladmin -u root shutdown Isto chama o utilit´rio administrativo do MySQL mysqladmin para conectar ao servidor a e mand´-lo parar. Um servidor instalado como um servi¸o c tamb´m pode ser controlado a partir da linha de comando usando os comandos NET. o mysqld pode ser parado usando o utilit´rio de Servi¸os ou usando ca a c o comando NET STOP MySQL.1.0. 2000 ou XP) o modo recomendado de executar o MySQL ´ ilia e instal´-lo como um servi¸o do Windows.7 Iniciando o MySQL no Windows NT.66 MySQL Technical Reference for Version 5. ele ´ instalado com o nome MySQL. Se vocˆ tiver problemas instalando o mysqld como um servico usando apenas o nome do e servidor. O comando conecta com root que ´ a conta administrativa padr˜o no a e a sistema de permiss˜es do MySQL. O Windows ent˜o inicia e para o servidor MySQL a c a automaticamente quando o Windows inicia e para. e a Agora instale o servidor como um servi¸o: c shell> mysqld --install Se vocˆ n˜o definir um nome para o servi¸o.0. vocˆ deve instalar o service e pack 3 (ou mais novo)! Antes de instalar o MySQL como um servi¸o. vocˆ pode especificar uma op¸˜o --defaults-file e ca depois do nome do servi¸o para indicar onde o servidor deve obter op¸˜es ao iniciar.0. ou usando o a c comando NET START MySQL. ou XP Na fam´ NT (Windows NT. ou e com o utilit´rio gr´fico Servi¸os. tente instal´-lo usando seu caminho compelto: a shell> C:\mysql\bin\mysqld --install A partir do MySQL 4. o servidor e ca c ignora o arquivo de op¸˜es padr˜o e lˆ op¸˜es apenas a partir do grupo [mysqld] do co a e co arquivo indicado. e co co a • Se vocˆ especificar um nome de servi¸o depois da op¸˜o --install. 2000.

ele pode ser parado usando o utilit´rios a c a Servi¸os. e a e ca n˜o ´ seguro executar o MySQL Server como um servi¸o.cnf Aqui. Se o mysqld n˜o iniciar. A a ca o ca partir do MySQL 3. a e co e apenas do grupo de op¸˜o [mysqld]. ca shell> C:\mysql\bin\mysqld --install-manual Para remover um servi¸o que est´ instalado como um servi¸o. (Isto seria uma m´ id´ia. vocˆ pode escolher entre instalar o servidor como um a e servi¸o Manual se vocˆ n˜o deseja que os servi¸os sejam executados automaticamente duc e a c rante o processo de inicializa¸˜o. use a op¸˜o --install-manual em vez ca ca da op¸˜o --install. a o Quando o mysqld est´ executando como um servi¸o. E o arquivo com um sufixo ‘. o Windows ir´ parar o servidor automatica a camente.49. Isto potencialmente causava problemas. como a op¸˜o -ca e ca defaults-file est´ presente. mas n˜o para o Windows NT. e finalize-o com mysqladmin shutdown. o Windows ir´ esperar mais para que a finaliza¸˜o do MySQL a ca Server esteja completa.44. o Windows ir´ iniciar o servi¸o automaticamente e a c sempre que o Windows inicia. primeiro pare-o se ele estiver c a c em execu¸˜o. ou o comando mysqladmin shutdown. e c o servidor ´ instalado com um nome de servi¸o de MySQL. O servi¸o tamb´m pode ser iniciado imediatamente a partir c e do utilit´rio Servi¸os ou usando o comando NET START MYSQL. A altera¸˜o para avisar para o Windows para esperar mais quando parar o servidor MySQL ca funciona apenas com o Windows 2000 e XP. e depois desso ele c . o mysqld n˜o tˆm acesso a um console e c a e ent˜o nenhuma mensagem pode ser vista. Para fazer isto. No NT. Se nenhuma op¸˜o -c e ca ca defaults-file for dada. ca Vocˆ tamb´m pode especificar as op¸˜es como “Par^metros de inicializa¸~o” no e e co a ca utilit´rio de Servi¸os do Windows antes de vocˆ iniciar o servi¸o MySQL. o a Windows espera apenas 20 segundos para que o servi¸o seja finalizado. o servidor lˆ as op¸˜es apenas a partir do arquivo indicado. o comando NET STOP MYSQL. o Windows esparava apenas por alguns segundos para o desligamento completo. Se o servi¸p c c estiver em execu¸˜o quando o Windows desliga. um nome de servi¸o ´ dado depois de op¸˜o --install. considere o seguinte comando: shell> C:\mysql\bin\mysqld --install mysql --defaults-file=C:\my-opts. porque aquele grupoo co a a e de op¸˜o ´ para ser usado pelo programa cliente mysql.err’. Ent˜o use a op¸˜o --remove para removˆ-lo: ca a ca e shell> mysqld --remove Um problema com a finaliza¸˜o autom´tica do servi¸o MySQL ´ que. Note que quando executado como um servi¸o.23. verifique o log de erros a a par ver se o servidor gravou alguma mensagem l´ indicando a causa do problema.23. Em vez disso. O log de a ´ erro est´ localizado no diret´rio ‘c:\mysql\data’. (Por exemplo. a c e c Uma vez que o servidor MySQL ´ instalado. O comando NET n˜o ´ caso a c a e sensitivo. A partir do MySQL vers˜o 3.23. Se vocˆ notar que ainda n˜o ´ o suficiente para a sua instala¸˜o.49. e matava os processos do servidor de banco de dados se o tempo limite fosse excedido. para vers˜es do ca a c e o MySQL anteriores a 3.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 67 No caso normal que vocˆ instala o servidor com --install mas nenhum nome de servi¸o.) No entanto. e c Como um exemplo mais complexo. o mecanimo de armazenamento InnoDB dever´ fazer uma recupera¸˜o de falhas na pr´xima inicializa¸˜o). este comando teria o efeito de fazer o servidor ler o grupo [mysql] a partir do arquivo de op¸˜es padr˜o. execute-o a partir a e c do prompt de comando.

olhe no diret´rio lib para encontr´-lo e copi´-lo para o seu diret´rio de o o a a o sistema no Windows.23.1. ca Vocˆ pode for¸ar que um cliente MySQL use named pipes especificando a op¸˜o --pipe ou e c ca especificando .dll’ em ale o gum lugar que o mysqlc possa encontr´-la.dll no ca ca a diret´rio ‘bin’.0. P´gina 65.1. provavelmente a o existe um problema com seu DNS.6 [Win95 start].exe’) e editar o valor de WaitToKillServiceTimeout em ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control’ na ´rvore do Registro. vocˆ deve usar a op¸˜o --protocol=PIPE. Os servidores mysqld-nt e mysql-max-nt suportam named pipes no NT. Existem duas vers˜es da ferramenta de linha de comando MySQL: o Binario Descri¸˜o ca mysql Compilado em Windows nativo. co ca a 2. Vocˆ pode aumentar este padr˜o abrindo o Editor de Registro c e a (‘\winnt\system32\regedt32. Se vocˆ desejar usar o mysqlc. oferecendo capacidades de edi¸˜o de ca texto muito limitadas. inicie o mysqld com a op¸˜o --skip-nameca resolve e use somente localhost e n´meros IP na coluna Host das tabelas de permiss˜es u o do MySQL. A partir da vers˜o 3. No entanto. e Se vocˆ n˜o quiser iniciar o mysqld como um servi¸o.8 Executando o MySQL no Windows O MySQL suporta TCP/IP em todas as plataformas Windows. (‘\Windows\system’ ou um lugar parecido). Se sua distribui¸˜o do MySQL n˜o tiver esta a ca a biblioteca instalada no mesmo diret´rio que o mysqlc (o diret´rio bin sob o diret´rio base o o o sa dua instala¸˜o do MySQL).1. e ca Vocˆ pode testar se o MySQL est´ funcionando executando qualquer dos seguintes comane a dos: 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. Se sua distribui¸˜o n˜o tem a biblioteca cygwinb19. vocˆ pode inici´-lo a partir da linha e a c e a de comando do mesmo modo que em vers˜es do Windows que n˜o s˜o baseados no NT. named pipes s´ est´ habilitado para o mysqld-nt e mysql-maxa o a nt se eles forem iniciados com a op¸˜o --enable-named-pipe.50.1. deve ter uma c´pia da biblioteca ‘cygwinb19. Use a op¸˜o --socket para especificar o nome do a ca pipe. 2000 e XP. • Alguns usu´rios encontraram problemas ao finalizar o servidor MySQL quando era a usado named pipes.0-alpha mata o processo do servi¸o. como nome de m´quina. Esa pecifique o novo valor mais largo em milisegundos (por exemplo 12000 para que o Windows NT espere at´ 120 segundos).1. mysqlc Compilado com o compilador Cygnus GNU. que oferece edi¸˜o ca readline. o padr˜o ´ usar a e TCP/IP. independente da plataforma: • Named pipes ´ atualmente mais lento que TCP/IP em muitas configura¸˜es do Wine co dows.68 MySQL Technical Reference for Version 5. No MySQL 4. o a a Para instru¸˜es use Se¸˜o 2. . Neste caso.

Se vocˆ quiser executar um servidor MySQL Max que tenha ca a e capacidades adicionais. vocˆ pode usar o e e seguinte comando: C:\> mysqladmin --user=root --password=sua_senha shutdown Se vocˆ estiver usando o servidor de uma antiga vers˜o shareware do MySQL vers˜o 3. ca a Se vocˆ tiver um dependˆncia de falha ao tentar instalar os pacotes do MySQL 4. o Se vocˆ tiver problemas com um arquivo RPM (por exemplo. Para deixar o MySQL mais seguro. Veja Se¸˜o 4.1 [Binary ca notes-Linux].2. Os e RPMs do MySQL atualmente s˜o constru´ a idos na vers˜o 7. Os outros pacotes n˜o s˜o exigidos ca a a para uma instala¸˜o padr˜o.. e e o qual inclui ambas as bibliotecas para compatibilidade com vers˜es anteriores o (libmysqlclient.0 e libmysqlclient.12 para MySQL 4.so.”). O exemplo seguinte exemplo e e a inicia removendo o usu´rio anˆnimo que tem todos os privil´gios.8. MySQL-shared). A corre¸˜o para este problema ´ atualizar para uma vers˜o mais ca e a nova do MySQL. vocˆ tamb´m deve instalar o pacote MySQL-shared-compat.6. Veja Se¸˜o 4.5 [mysqld-max]. P´gina 141. Com as vers˜es atuais do MySQL vocˆ pode facilmente adicionar novos usu´rios e alterar o e a privil´gios com os comandos GRANT e REVOKE. vocˆ deve configurar uma senha para todos os usu´rio e remover a linha na tabela e a mysql. ´ suficiente simplesmente deixar a e estes pacotes instalados e apenas atualizar os pacotes do servidor e cliente MySQL (que s˜o a . P´gina 344.: e e “error: removing these packages would break dependencies: libmysqlclient.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 69 Os privil´gios padr˜es no Windows d˜o a todos usu´rios locais privil´gios totais para todos e o a a e os bancos de dados sem necessidade de especificar uma senha. Vocˆ tamb´m deve adicionar uma senha para o usu´rio root. the host ’xxxx’ could not be looked up”). Muitas distribui¸˜es Linux ainda vˆm com o MySQL 3.3 do sistema Suse Linux mas a deve funcionar em outras vers˜es de Linux que suportam rpm e usam glibc.21m e a a o comando mysqladmin para configurar uma senha ir´ falhar com um erro: parse error a near ’SET password’..0 (ex. se vocˆ desejar desligar o servidor mysqld.4. Se estas bibliotecas comparco c tilhadas est˜o em pacotes separados (ex. mysql> FLUSH PRIVILEGES. a Na maioria dos casos.2 Instalando o MySQL no Linux O modo recomendado para instalar o MySQL no Linux ´ usando um arquivo RPM.10 para MySQL 3.user que tem Host=’localhost’ e User=’’. se vocˆ receber o e e erro “Sorry.. veja Se¸˜o 2. vocˆ s´ precisa instalar os pacotes servidor MySQL e o cliente e o MySQL para ter uma instala¸˜o funcional do MySQL.23 a elas normalmente ligam as co e aplica¸˜es dinamicamente para economizar espa¸o em disco.1. e ent˜o configura uma a o e a senha para o usu´rio root: a C:\> C:\mysql\bin\mysql mysql mysql> DELETE FROM user WHERE Host=’localhost’ AND User=’’.so.10 is needed by .so. mysql> QUIT C:\> C:\mysql\bin\mysqladmin -u root password your_password Depois de configurar a senha. vocˆ deve instalar o RPM MySQL-Max depois de instalar o RPM e MySQL-server.23).1 [GRANT]. P´gina 255. e ca a 2.

10.i386.70 MySQL Technical Reference for Version 5.rpm Testes e comparativos de performances (benchmarks).0.0).i386.rpm Para instalar somente o pacote cliente. • MySQL-client-VERSION. execute: .rpm Os programas clientes padr˜es do MySQL.0.rpm Este pacote cont´m as bibliotecas compartilhadas (libmysqlclient.0.i386. • MySQL-embedded-VERSION. Vocˆ deve instalar o RPM MySQL-server primeiro.13.0 sem a e quebrar as dependˆncias da biblioteca.rpm MySQL-client-VERSION. execute: a shell> rpm -i MySQL-server-VERSION. Para ver todos os arquivo em um pacote RPM. Alpha ou SPARC).rpm A biblioteca do servidor embutido MySQL (MySQL 4. vocˆ tamb´m pode instalar nosso RPM MySQL-shares 3. Vocˆ ira precisar dele a n˜o ser que vocˆ apenas queira se conectar a e a e um servidor MySQL executando em outra m´quina.i386. co a a • MySQL-shared-compat-VERSION.: Red Hat Linux). Instale este pacote em vez do MySQL-shared. Este pacote esta dispon´ e ivel desde o MySQL 4.23 e MySQL 4.src.rpm As bibliotecas e arquivos include necess´rios se vocˆ precisa para compilar outros a e clientes MySQL. a e porque o RPM MySQL-Max depende dele. se vocˆ tiver aplica¸˜es instaladas que s˜o e co a dinˆmicamente ligadas ao MySQL 3.i386. Note que este pacote era chamado a MySQL-VERSION.rpm O servidor MySQL.i386. um RPM MySQL-server).rpm Para realizar uma instala¸˜o m´ ca inima padr˜o. (por exemplo. • MySQL-devel-VERSION.so*) que certas e linguagens e aplica¸˜es nencess´rias para carregar dinˆmicamente e usar o MySQL. execute: shell> rpm -qpl MySQL-server-VERSION. Necessita do Perl e m´dulos do o BDB-mysql. • MySQL-VERSION.i386.rpm Este cont´m o c´digo fonte para todos os pacotes acima. ivel Os seguintes pacotes RPM est˜o dispon´ a iveis: • MySQL-server-VERSION. o • MySQL-shared-VERSION. Provavelmente vocˆ sempre instalar´ este o e a pacote.i386. Ele tamb´m pode ser usado e o e para tentar construir RPMs para outras arquiteturas (por exemplo. • MySQL-Max-VERSION.23 ou usar o e e pacote compat´ com MySQL-shared.23 mas vocˆ quer atualizar para o MySQL 4.rpm O servidor MySQL Max.i386.i386.i386. como nos m´dulos Perl.0-alpha estaticamente ligados e n˜o dependem de bibliotecas compartilhadas). Este seridor tem capacidades adicionais que o servidor no ROM MySQL-server n˜o tem.rpm Este pacote inclui o biblioteca compartilhada para MySQL 3.rpm antes do MySQL 4.i386. • MySQL-bench-VERSION. Para distribui¸˜es a co que incluem as bibliotecas compartilhadas no mesmo pacote que o servidor MySQL (ex.0.

x) n˜o s˜o suportadas por este o a a pacote. Ele deve ent˜o a montar a imagem e exibir o seu conte´do. Se um diret´rio chamado ‘/usr/local/mysql’ j´ existe. vocˆ encontrar maiores informa¸˜es no cap´ e co itulo de instala¸˜o.i386. Adicionalmente.3 [Automatic start]. Este pacote est´ localizado dentro de um arquivo de imagem de disco (.1. ca a a 2. Para relamente instalar o MySQL PKG. Isto inicia o Mac OS Package Installer. P´gina 111. No entanto. que ir´ guia-lo pela instala¸˜o do MySQL. a ca O Mac OS X PKG do MySQL ir´ se instalar em ‘/usr/local/mysql-<version>’ a e tamb´m instalr´ um link simb´lico ‘/usr/local/mysql’.d/init. a O RPM coloca dados sob o ‘/var/lib/mysql’.: 10.d’ (diretamente ou via link simb´lico).bak’ em primeiro lugar. Veja ca o ca e a Se¸˜o 2. ca Veja Se¸˜o 2.2. P´gina 118 para mais informa¸˜es sobre ca a co como o MySQL pode ser iniciado automaticamente na inicializa¸˜o do sistema.2 [Verifying a e ca Package Integrity]. tenha certeza que vocˆ finalizou todas as ca e instˆncias do MySQL em execu¸˜o usando o MySQL Manager Aplication (no Mac OS X a ca Server) ou via mysqladmin shutdown na linha de comando. Se o arquivo RPM que vocˆ instalar inclui o MySQL-server.4 [P´s Instala¸˜o]. ca Se vocˆ quiser instalar o RPM do MySQL em uma distribui¸˜o Linux mais antiga que n˜o e ca a suporte scripts de inicializa¸˜o no ‘/etc/init.11. P´gina 75. vocˆ pode instalar o MySQL no Mac OS X 10. Por exemplo. a ca a Note que vers˜es mais antigas do Mac OS X (ex. todas as distribui¸˜es de Linux atuais j´ devem suportar este novo layout co a de diret´rio que usa ‘/etc/init. Veja Se¸˜o 2.3 Instalando o MySQL no Mac OS X A partir do MySQL 4. o daemon mysqld deve estar e pronto e em execu¸˜o ap´s a instala¸˜o.dmg). use a ca estes comandos antes de intalar o RPM para criar ‘/etc/init.d . e ca co ca vocˆ pode desejar criar uma c´pia do script para que vocˆ n˜o perca ao instalar um RPM e o e a mais novo). ln -s rc.2 (“Jaguar”) e usando um pacote do bin´rio do Mac OS X PKG em vez da distribui¸˜o bin´rio em tarball.0.d/’ para iniciar o servidor automaticamente na hora do boot.d’ j´ que ele ´ exigido para compatibilidade LBS (Linux o a e Standard Base). u NOTA: Antes de proceder com a instala¸˜o.rpm O RPM fornece um recurso para verificar a integridade e autenticidade dos pacotes antes de instal´-los.2.d’. O RPM tamb´m cria as entradas apropriadas e em ‘/etc/rc.4. P´gina 91. ele ir´ instalar a a .Cap´ ıtulo 2: Instala¸˜o do MySQL ca 71 shell> rpm -i MySQL-client-VERSION. ca o ca a Se alguma coisa der errado. que vocˆ a e primeiro precisa montar com um duplo clique em sua ´ icone no Finder.d/init. ele ser´ renomeado ca o a a para ‘/usr/local/mysql. se esta localiza¸˜o for ‘/etc/rc. vocˆ ca o e deve criar um link simb´lico que aponte para a localiza¸˜o onde o seu script de instala¸˜o o ca ca est´ atualmente instalado. de um duplo clique na ´ icone do pacote. apontando para a nova e a o localiza¸˜o.1. veja Se¸˜o 2.9 [Instalado o bin´rio]. Se vocˆ quiser aprender mais sobre este recurso. Agora vocˆ j´ deve poder iniciar o MySQL.d’ como um link simb´lico o que aponte l´: a shell> cd /etc. (Isto significa que se vocˆ realizou uma instala¸˜o anterior e fez altera¸˜es em seu script de inicializa¸˜o.

5 [Installation layouts].2-10. Devido a um erro no instalador de pacotes do Mac OS X. que a vers˜o pr´-instalada do MySQL no Mac OS X Server ´ iniciado a e e com o comando safe_mysqld em vez de mysqld_safe. selecione ca a ajuda do “Mac OS X Server” e fa¸a uma busca por “MySQL” e leia o item entitulado c “Installing MySQL”). a a Se vocˆ estiver executando o MAC OS X Server. ca O layout de instala¸˜o ´ similar a aquele da distribui¸˜o bin´ria. todos os bin´rios do MySQL ca e ca a a est˜o localizados no diret´rio ‘/usr/local/mysql/bin’. ca a Se vocˆ preferisse iniciar automaticamente o MySQL durante o boot do sistema.2 vem com o MySQL 3. simplesmente altere o valor e ca a desta vari´vel para MYSQLCOM=-NO-. ca a a Se vocˆ est´ atualizado da vers˜o 3.2.2 e acima). co a Note que isto s´ precisa ser feito uma vez! N˜o h´ necessidade de se instalar o Startup Item o a a toda vez que se atualizar o pacote do MySQL. P´gina 130.0.2. Note especialmente. Veja Se¸˜o 2.6 [Upgrading-grant-tables].ch. Se este erro ocorrer.14 Esta se¸˜o do manual cobre a instala¸˜o apenas do MySQL Mac OS X PKG oficial.23. Veja Se¸˜o 2. simplesmente clique no bot˜o Go ca a Back uma vez para retornar a tela anterior. P´gina 83.sock’ por padr˜o. vocˆ e e tamb´n precisa instalar o MySQL Startup Item. algumas vezes vocˆ pode ver a e mensagem de erro You cannot install this software on this disk.0-alpha tabela de permiss˜es do banco de dados MySQL executando mysql_install_db depois da o instala¸˜o. Simplesmente ca ca de um duplo clique no ´ icone MySQLStartupItem. Ele adiciona uma a vari´vel MYSQLCOM=-YES.agora vocˆ deve estar apto a escolher o disco destino ca e corretamente. vocˆ tamb´m deve converter a tabela de privil´gios do e e e MySQL existente para o formato atual. a No Mac OS X Server. a ca a A instala¸˜o do MySQL exige uma conta de usu´rio do Mac OS X chamada mysql (uma ca a conta de usu´rio com este nome existe por padr˜o no Mac OS X 10.72 MySQL Technical Reference for Version 5.6 vem com o MySQL 3.entropy.0.23. o a O Startup Item ser´ instalado em ‘/Library/StartupItems/MySQL’. A partir do MySQL 4. Leia o ca ca ajuda da Apple sobre a instala¸˜o do MySQL (Execute o aplicativo “Help View”.5. Agora clique em Continue para avan¸ar para a c sele¸˜o do disco de destino novamente .xx de Marc ou do vers˜o Mac OS X Server do e a a a MySQL para o MySQL PKG oficial.3-10.23. vocˆ j´ ter´ uma vers˜o do MySQL e e a a a instalado: • Mac OS X Server 10.ao arquivo de configura¸˜o do sistema (‘/etc/hostconfig’). o script de instala¸˜o do Startup Item disabilitar´ automaticaca a mente a inicializa¸˜o da instala¸˜o padr˜o do MySQL alterando a vari´vel MYSQL em ca ca a a .51 instalado • Mac OS X Server 10.pkg e siga as instru¸˜es para instal´-lo. vocˆ pode simplesmente seguir as intru¸˜es de atualiza¸˜o para e co ca pacotes usando o layout de instala¸˜o dos bin´rio como dados em suas p´ginas.2. (null) no di´logo a de sele¸˜o do disco de destino. N´s informamos este erro a Apple e eles est˜o investigando este problema.53 • Mac OS X Server 10. O socket MySQL ser´ colocado em a o a ‘/tmp/mysql. Se a ca vocˆ desejasse diasbilitar a inicializa¸˜o autom´tica do MySQL.0.3 vem com o MySQL 4. ele ´ parte do e e disco de instala¸˜o do Mac OS X como um pacote de instala¸˜o separado.2. porque alguns novos privil´gios de seguran¸a foram e c adicionados.15. Se anteriormente vocˆ usava pacotes do MySQL de Marc Liyanage para Mac OS X de e http://www.

ex. Infelizmente o Mac OS X Installer ainda n˜o oferece a funcionalidade exigida para a atualizar apropriadamente pacotes instalados anteriormente. . ele n˜o desliga um servidor MySQL aj´ em execu¸˜o. a ´ com a sa´ deste comando (o nome da m´quina deste assim a shell pode substitui-la ida a sistema)! Vocˆ tamb´m pode querer adicionar aliases ao seu arquivo de resursos do sheel para acessar e e mysql e mysqladmin da linha de comando: alias mysql ’/usr/local/mysql/bin/mysql’ alias mysqladmin ’/usr/local/mysql/bin/mysqladmin’ De forma alternativa. vocˆ pode simplesmente adicionar /usr/local/mysql/bin a sua e vari´vel de ambiente PATH. ex. lembre-se de consigurar uma senha para o e usu´rio root do MySQL! a Isto ´ feito com os seguintes comandos: e /usr/local/mysql/bin/mysqladmin -u root password <password> /usr/local/mysql/bin/mysqladmin -u root -h ‘hostname‘ password <password> Por favor. Se vocˆ tiver instalado o Startup Item: e shell> sudo /Library/StartupItems/MySQL/MySQL start (Enter your password.: e ‘/usr/local/mysql/bin/mysql’ Se vocˆ instalar o MySQL pela primeira vez. if necessary) (Press Control-D or enter "exit" to exit the shell) Se vocˆ n˜o tiver instalado o Startup Item. Depois de copiar os arquivos de banco de dados do MySQL sobre os da vers˜o a anterior e inicializar o nova vers˜o com sucesso. Isto ´ para evitar conflitos na inicializa¸˜o.pkg’./bin/mysqld_safe your password. Adicionalmente vocˆ tamb´m ca c e e deve remover vers˜es mais antigas do diret´rio do Package Receipt localizados em o o ‘/Library/Receipts/mysql-<version>. No e ca entanto. tenha certeza que o comando hostname na segunda linha est´ entre crases (‘).: adicionando o seguinte ao arquivo ‘$HOME/. vocˆ pode iniciar o MySQL executando os seguintes comandos em ca e um janela de terminal.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 73 ‘/etc/hostconfig’ para MYSQL=-NO-.tcshrc’: a setenv PATH ${PATH}:/usr/local/mysql/bin Note que instalar um novo MySQL PKG n˜o remove o diret´rio de uma instala¸˜o mais a o ca antiga. if necessary) Control-Z) bg Control-D or enter "exit" to exit the shell) executando Agora vocˆ deve conseguir se conectar ao servidor MySQL. digite a seguinte sequˆncia de comandos: e a e shell> shell> (Enter (Press shell> (Press cd /usr/local/mysql sudo . a a ca Depois da instala¸˜o. vocˆ deve remover os arquivos da a e instala¸˜o antiga para economizar espa¸o em disco. Note qye vocˆ preceisa ter privil´gios de administrador para realizar e e esta tarefa.

ou NetWare 6.11. 7. e o a Recomendamos usar o ‘SYS:MYSQL’. o servidor NetWare deve suprir estas exigˆncias: a e • NetWare vers˜o 6. devem ser instalados em um volume a NSS.: ‘SYS:MYSQL\DATA’) agora. Vocˆ pode ent˜o deletar a c´pia antiga do MySQL.4 Instalando o MySQL no NetWare A partir da vers˜o 4. e a o 4. o ca 5.0 com Support Pack 3 instalado (Vocˆ pode obtˆ-lo a e e em http://support.0. Tamb´m ser´ necess´rio utilizar CHECK e a a TABLE e REPAIR TABLE em vez de myisamchk. o MySQL est´ dispon´ a a ivel para a Novell NetWare na forma de pacote do bin´rio.74 MySQL Technical Reference for Version 5.1. sugerimos que vocˆ utilize a op¸˜o e e ca --skip-external-locking na linha de comando. • Os dados do MySQL. porque myisamchk faz uso de lock externo.5.novell.1. vocˆ tamb´m deve adicionar os seguintes comandos ao ca e e autoexec.html). usando: SERVER: mysqladmin -u root shutdown 2.com/filefinder/13659/index. 8.4. se sua instala¸˜o do MySQL est´ em ‘SYS:MYSQL’ e vocˆ ca a e quiser que o MySQL inicie automaticamente. Por exemplo. assim como ‘my.1 Instalando o MySQL para Bin´rios do NetWare a 1. vocˆ pode precisar copiar os e e diret´rios de dados (ex. Extraia o pacote zip bin´rio em seu servidor.0. Para servir o MySQL.5. Isto ´ e ca e feito a partir do console do servidor. No console do servidor. Inicie o servidor MySQL usando mysqld_safe no console do servidor. o problema foi eliminado no NetWare 6. volumes tradicionais n˜o s˜o suportados. exemplos no manual o usar˜o para se referir ao a diret´rio de instala¸˜o em geral.0. para o servidor MySQL.cnf’ se vocˆ o tiver o e costumizado. assim com os seus bin´rios.mysql.0.x database server SEARCH ADD SYS:MYSQL\BIN . Instale o banco de dados inicial. Tenha certeza de permitir que os caminhos a ´ no arquivo zip sejam usados. Para finalizar a instala¸˜o.com/downloads/. Vocˆ pode desejar renomear o diret´rio para algo mais consistente e f´cil de usar.0. a a O pacote bin´rio para o NetWare pode ser obtido em http://www. adicione um caminho de busca no diret´rio contendo os NLMs o do MySQL.0-alpha 2. digitando mysql_install_db no console a do servidor. O sistema deve obedecer as exigˆncias m´ e inimas da Naveel para executar a respectiva vers˜o do Neta Ware. se necess´rio.ncf. a Se vocˆ estiver executando o MySL no NetWare 6. E seguro simplesmente extrair os arquivos para ‘SYS:\’. vocˆ pode adicionar estas linhas: e #Starts the MySQL 4. Se vocˆ estiver atualizando de uma instalando anterior. Lock externo possui problemas com NetWare 6. Por exemplo: SERVER: SEARCH ADD SYS:MYSQL\BIN 6. 2. Se vocˆ estiver atualizando de um instaa¸˜o anterior. Conecte-se no servidor alvo a partir de uma m´quina cliente com acesso ao local onde a vocˆ instalar´ o MySQL. e a 3.

veja http://www. Cada pacote tem um checksum a individual. e edite ou delete-os se necess´rio.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFE --skip-external-locking Se houver uma instala¸˜o existente do MySQL no servidor.html.em alguns ele ´ simplesmente chamado md5.dk/mysql/. que est´ disponivel para uma grande faixa de plataformas. a co Nosso principal espelho de download est´ localizado em: http://mirrors. Verificando o MD5 Checksum Depois de fazer o download do pacote.0. verifique a existencia de comanca dos de inicializa¸˜o do MySQL em autoexec. Exemplo: .2.0. Vocˆ a e pode fazer o download do c´digo fonte em http://www.com/) para informa¸˜es co sobre a vers˜o atual e para instru¸˜es de download.fourmilab.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 75 MYSQLD_SAFE Se vocˆ estiver usando NetWare 6. vocˆ deve verificar se o MD5 checksum corresponde e a aquele fornecido na p´gina de download do MySQL. o GNU Privacy Guard. ca a 2. a Para uma lista atualizada completa dos mirrors de download da MySQL. Uma implementa¸˜o do comando md5 para DOS/Windows est´ dispon´ em ca a ivel http://www.sunsite. vocˆ deve ter certeza de que ele esta intacto e n˜o foi manipulado.org/software/textutils/.1 Como obter o MySQL Confira a homepage da MySQL homepage (http://www.2 Verificando a Integridade do Pacote Usando MD5 Checksums ou GnuPG Depois de fazer o download do pacote MySQL que serve `s suas necessidades e antes de a tentar instal´-lo.2.2 Detalhes Gerais de Instala¸˜o ca 2. a e a A MySQL AB oferece dois tipos de verifica¸˜o de integridade: MD5 checksums e assinaturas ca criptografadas usando GnuPG.ch/md5/. vocˆ tamb´m pode usar o comando openssl md5 e e e <pacote>. No Linux.mysql.com/downloads/mirrors.gnu.mysql. 2.ncf. que vocˆ pode verificar com o seguinte comando: e shell> md5sum <pacote> Note que nem todos os sistemas operacionais suportam o comando md5sum . o Se vocˆ tiver o OpenSSL instalado. vocˆ deve adicionar o parˆmetro --skipe e a external-locking: #Starts the MySQL 4. ele ´ parte do pacote e a e ´ GNU Text Utilities. outros n˜o o possuem. Vocˆ tamb´m encontrar´ informa¸˜o e e a ca sobre como se tornar um mirror do MySQL e como relatar um mirror ruim ou desatualizado.

0. A maioria das distribui¸˜es co de Linux j´ vˆm com o GnuPG instalado por padr˜o.org mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3 RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3 BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj .76 MySQL Technical Reference for Version 5.6 (GNU/Linux) Comment: For info see http://www.com).0. vocˆ primeiro precisa obtter uma c´pia e o da chave p´blica GPG da MySQL AB (build@mysql. a MySQL AB come¸ou a assinar o seus c pacotes de download com GnuPG. a ca Para verificar a assinatura de um pacote espec´ ifico.0.gz 155836a7ed8c93aee6728a827a6aa153 mysql-standard-4.keyserver.org/ para mais informa¸˜es sobre co OpenPGP/GnuPG e como obter e instalar o GnuPG em seus sistema. A MySQL AB usa o GNU Privacy Guard (GnuPG).gnupg.10-gamma-pc-linux-i686. e a a e e a Caso esteja em d´vida.0.0-alpha shell> md5sum mysql-standard-4. Note no o entanto que ´ muito f´cil de modificar este arquivo e ele n˜o ´ um m´todo muito confi´vel.gz Vocˆ deve verificar se o resultado do checksum corresponde a aquele impresso no p´gina de e a download logo abaixo do respectivo pacote. A maioria do sites mirrors tamb´m oferecem um arquivo chamado ‘MD5SUMS’.org/ and http://www.0.gnupg.mysql.10-gamma-pc-linux-i686.openpgp.tar.net/. Vocˆ tamb´m pode cort´-la e u e e a col´-la diretamente daqui ou obtˆ-la em http://www.tar. a e Key ID: pub 1024D/5072E1F5 2003-02-03 MySQL Package signing key (www. vocˆ deve consultar diferentes sites mirroers e comparar os resultau e dos. a e a A partir do MySQL 4.com) <build@mysql. Verifica¸˜o de Assinatura Usando GnuPG ca Um m´todo de verifica¸˜o de integridade de um pacote mais confi´vel ´ o uso de assie ca a e naturas criptografadas. uma alternativa Open Source para o bem conhecido Pretty Good Privacy (PGP) de Phil Zimmermann. que tamb´m e e inclui o MD5 checksums para todos os arquivos inclu´ idos no diret´rio ‘Downloads’. Assinaturas criptografadas s˜o um m´todo bem mais a e confi´vel de verifica¸˜o da integridade e autenticidade de um arquivo.10 (Fevereiro de 2003).com> Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5 Public Key (ASCII-armored): -----BEGIN PGP PUBLIC KEY BLOCK----Version: GnuPG v1. Veja http://www.

Por exemplo.com) <build@mysql. a Verificando Assinatura Usando RPM Para pacotes RPM. Vocˆ pode verific´-los executando o seguinte comando: natura GPG incluida e a . n˜o h´ assinaturas separadas . A assinatura tem a extens˜o ‘.asc’.10-gamma-pc-linux-i686.asc’. que tamb´m est´ e a dispon´ ivel na p´gina de download.pacotes RPM atualmente tˆm uma assia a e ´ e MD5 checksum.10-gamma-pc-linux-i686.0.com>" A mensagem "Good signature" indica que est´ tudo certo.asc insecure memory! Mon 03 Feb 2003 08:50:39 PM MET using DSA key ID 5072E1F5 from signing key (www. ca co u Depois de fazer o download e importar a chave publica criada. e Veja a documenta¸˜o de GPG para mais informa¸˜es de como trabalhar com chaves p´blicas.asc Exemplo: shell> gpg --verify gpg: Warning: using gpg: Signature made gpg: Good signature "MySQL Package mysql-standard-4. fa¸a o download c do pacote MySQL desejado e da assinatura correspondente.0. a a a assinatura de ‘mysql-standard-4.tar.mysql. Tenha certeza que ambos os arquivos est˜o armazenados no mesmo diret´rio e ent˜o execute o seguinte comando a o a para verificar a assinatura para este arquivo: shell> gpg --verify <package>.tar.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 77 a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE 7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p /1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92 6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ== =YJkx -----END PGP PUBLIC KEY BLOCK----Vocˆ pode importar esta chave em seu pasta de chaves publicas GPG usando gpg --import.0.gz.10-gamma-pc-linux-i686.gz.gz’ seria ‘mysql-standard-4.tar.

0. P´gina 161. a • SCO UnixWare 7. Veja Se¸˜o 2. P´gina 151.1. para que seja poss´ o ivel portar o MySQL para todos sistemas operacionais modernos com threads Posix funcionando e um compilador C++.4.rpm Exemplo: shell> rpm --checksig MySQL-server-4. um compilador C++ ´ necess´rio mas threads n˜o.x com threads nativas.0.6.0. P´gina 151. talvez de outro site mirror. Veja Se¸˜o 2.2. ca a • SCO OpenServer with a recent port of the FSU Pthreads package.5 [BSDI]. P´gina 157.10 [SCO Unixware]. vocˆ precisa import´-las para dentro de sua pasta de chaves RPM primeiro. P´gina 155. a . RPM e a 4.9 ca [SCO].6. Veja Se¸˜o 2. Veja Se¸˜o 2.6. tente primeiro fazer e a o download do pacote respectivo mais uma vez.x com threads nativas. o Perceba que para alguns sistemas operacionais.78 MySQL Technical Reference for Version 5. notifique-nos sobre ca tais incidentes incluindo o nome completo do pacote e o site que vocˆ tem utilizado para e fazer o download pelos emails webmaster@mysql. use os seguintes comandos: shell> rpm --import <pubkey> Exemplo: shell> rpm --import mysql_pubkey.4.0. o suporte nativo a thread funciona somente nas ultimas vers˜es.i386.10-0.6.) N´s o e a a o mesmos usamos e desenvolvemos o software primeiramente no Linux (SuSE e red Hat).1 e 4. mas mant´m sua a o e pr´pria pasta de chaves (porque ele ´ um aplicativo do sistema e a pasta de chaves p´blicas o e u do GPG ´ um arquivo espec´ e ifico do usu´rio).0-alpha shell> rpm --checksig <package>.6.rpm MySQL-server-4.i386. ido ca a • BSDI 3.6.6. ca a • FreeBSD 2.6.1 e ele reclamar sobre (GPG) NOT OK (MISSING KEYS: e GPG#5072e1f5) (mesmo se vocˆ a importou para detro de sua pasta de chaves publicas e GPG).x com o pacote inclu´ MIT-pthreads.3 Sistemas Operacionais suportados pelo MySQL N´s ulitizamos o GNU Autoconf.com ou build@mysql. O MySQL compila com sucesso nas seguintes combina¸˜es de sistema ´ o co operacional/pacote de thread: • AIX 4.4.4 [IBM-AIX].6.0. Veja Se¸˜o 2. Veja Se¸˜o 2.x com o pacote inclu´ MIT-pthreads.1 n˜o utiliza mais ias suas pastas de chaves GPG (e o pr´prio GPG). P´gina 163. 2.10-0.x com threads nativas. Para importar a chave p´blica do MySQL em a u uma pasta de chaves RPM.asc Caso vocˆ note que as assinaturas MD5 checksum ou GPG n˜o coincidem. 3. FreeBSD e Sun Solaris (Vers˜es 8 e 9). ca a • Amiga. • BSDI 2. ido ca P´gina 149.1 [FreeBSD].6 [Alpha-DEC-UNIX].5 [BSDI]. (Para compilar somente o c´digo cliente. Veja Se¸˜o 2. Se vocˆ n˜o e a obter sucesso na verifica¸˜o da integridade do pacote repetidas vezes.com.6.6.rpm: md5 gpg OK Nota: Se vocˆ estiver usando RPM 4. ca a • DEC Unix 4.

P´gina 160. a • SGI Irix 6.6. introduzimos otimiza¸˜es/corre¸oes espec´ co c ificas para ela habilitadas na hora da compila¸˜o.4.5 e superior com threads nativas nas plataformas SPARC e x86. • Nosso n´ de experiˆncia aqui na MySQL AB com a plataforma. Veja Se¸˜o 2. Se n´s conhecemos ivel e o bem uma plataforma. FixPack 29 e OS/2 Warp 4. Veja Se¸˜o 2.1 [FreeBSD]. .Cap´ ıtulo 2: Instala¸˜o do MySQL ca 79 • FreeBSD 3.6.4. Veja Se¸˜o 2.6. FixPack 4.6.6.x com as threads nativas.x com o pacote inclu´ MIT-pthreads. P´gina 149. ca a • FreeBSD 4. Veja Se¸˜o 2. ca a • OS/2 Warp 3. Veja Se¸˜o 2.8 [Novell NetWare]. Veja Se¸˜o 2.7+. P´gina 154. ca a • Solaris 2.2 • HP-UX 10. • Habilidade do sistema de arquivos em lidar com arquivos grandes de forma eficiente.6. Uma plataforma pode ter excelente reputa¸˜o.2 [Linux].6.3 [Solaris].x com threads nativas.6.6. a a a • A habilidade do kernel e/ou a biblioteca thread tirar vantagem do SMP em sistemas multi-processados.1 [Windows].5 com threads nativas. P´gina 164. o MySQL ir´ ser t˜o est´vel quanto a biblioteca thread. N´s tamb´m podemos fornecer conselhos sobre como ca o e configurar seu sistema otimizadamente para o MySQL.6.0. P´gina 150. OpenBSD < 2. Me.6. Veja Se¸˜o 2. Os seguintes a fatores determinam se uma certa plataforma ´ apropriada para uma miss˜o cr´ e a itica pesada: • Estabilidade geral da biblioteca thread.0.0+ com LinuxThreads 0.x com threads nativas. ca a • SunOS 4.5 com o pacote inclu´ MITido pthreads .x com Linuxthreads. Veja Se¸˜o 2.6. se suas tabelas forem grandes.6. P´gina 149. ca a • NetBSD 1. Veja Se¸˜o 2. ca a Perceba que nem todas as plataformas s˜o apropriadas para executar o MySQL. 2000 e XP.7.20 com o pacote incluido ca [HP-UX 10. ca a ´ MIT-pthreads ou DCE threads.x].7 [OS/2]. adicionar CPUs extras a podem deixar o MySQL mais lento. quando um proceesso cria uma thread. a • HP-UX 11.3 [Solaris].3 [OpenBSD]. Veja Se¸˜o 2.6. Em outras palavras.6. ca a • Linux 2.20].2 ca [NetBSD]. ca P´gina 164. isto ir´ afetar o MySQL a tremendamente. mesmo e a o e se todo o resto for perfeito. Veja Se¸˜o 2.8 [SGI-Irix].4. se a implementa¸˜o de ca pthread_mutex_lock() requisitar a CPU muito rapidamente. P´gina 145. Veja Se¸˜o 2. Veja Se¸˜o 2. ca entretanto.x e 4. Se esse detalhe n˜o estiver sendo cuidado. Em outras palavras. a • Mac OS X Server. a • Novell NetWare 6. ido ca a • Tru64 Unix • Windows 9x. ca a • OpenBSD > 2.4. ca P´gina 137. • Estabilidade e performance geral do sistema de arquivos. P´gina 133. se a biblioteca thread ´ inst´vel no c´digo que ´ usado pelo MySQL. P´gina 152.6. P´gina 145.4 Intel e NetBSD 1. P´gina 154. Veja Se¸˜o 2.3/1.1 [FreeBSD].3 [HP-UX 11. NT.6.3 Alpha (Necessita GNU make).5 [Mac OS X]. ivel • A habilidade do kernel e/ou a biblioteca thread executar v´rias threads que a adiquire/libera um bloqueio mutex sobre uma pequena regi˜o cr´ a itica frequentemente sem trocas de contexto excessivos. deve ser poss´ para aquela thread executar em uma CPU diferente que o processo original.1+ ou glibc 2. P´gina 151.

o .4 e ReiserFS (ou qualquer distribui¸˜o Linux a ca similar) e Sparc com Solaris (2.0-alpha). E em alguns casos. ca 2. perceba que a compara¸˜o acima n˜o ´ para dizer que um SO ´ melhor ou pior ca a e e que o outro em geral. N´s tamb´m acreditamos que em certo ponto iremos estar aptos para incluir o e todas as outras plataformas em que o MySQL compila e executa. kernel 2. caso vocˆ esteja trabalhando com um antigo sistema e quiser atualiz´-lo. a Por favor. N´s estamos falando sobre a escolha de um SO para um prop´sito o o dedicado: executar o MySQL. mas n˜o a e a a que correr o risco com uma atualiza¸˜o sem corre¸˜es.0. c ca Estamos apenas colocando nossas observa¸˜es para ajud´-lo na decis˜o de qual plataforma co a a usar o MySQL na sua configura¸˜o. o resultado desta compara¸˜o seria diferente se n´s inclu´ ca o issemos mais detalhes. Baseado nos crit´rios acima. Repare que todos os lan¸amentos a a a c do MySQL s˜o conferidos com os testes comparativos de performance e um conjunto a extenso de testes antes de cada lan¸amento. FreeBSD vem em terceiro. mas realmente temos esperan¸as que ele ir´ se unir ao clube dos tops uma vez que a biblioteca thread est´ c a a melhorando.7.1. as chances de se ter alguma surpresa co u espec´ ifica da plataforma fica muito menor. P´gina 33. mas n˜o t˜o bem e com a a o mesmo n´ ivel de estabilidade e performance. est´ em uma posi¸˜o para influenciar seu desenvolvimento.1 ca ca [Mailing-list]. a ca e precisa de instru¸˜es mais detalhadas sobre o que o MySQL necessita para uma melhor co execu¸˜o. envie um e-mail para lista de email “insternals” do MySQL. e a ´ u a e N´s temos tentado corrigir somente erros fatais e torn´-los menores. com altera¸˜es o a co relativamente seguras para aquela vers˜o. ca Desta forma. se alguma existir e a ca a para sua plataforma. Isto necessitar´ de a algum esfor¸o da nossa parte em coopera¸˜o com os desenvolvedores dos componentes do c ca Sistema Operacional/Biblioteca que o MySQL depende. Na a e e ca a maioria dos casos provavelmente vocˆ dever´ usar a distribui¸˜o bin´ria. Veja Se¸˜o 1.7-9). vocˆ deve faze-lo do mesmo ramo ca co e que vocˆ est´ usando (onde aenas o ultimo n´mero da vers˜o ´ mais novo que o seu). se vocˆ estiver usando o MySQL pela primeira vez ou tentando port´e a lo para algum sistema em que n˜o exista distribui¸˜o bin´ria. na categoria superior.0. co • O n´mero de usu´rios que tem executado o MySQL com sucesso naquela plataforma em u a configura¸˜es similares.0-alpha • O volume de testes feitos internamente de configura¸˜es similares. a raz˜o de um SO ser melhor que o outro pode ser simplesmente a porque colocamos mais esfor¸o nos testes e otimiza¸˜o para aquela plataforma em particular.2. Se esse n´mero for alto. Se vocˆ tiver interesse em melhorar e algum de nossos componentes. a A segunda decis˜o a ser feita ´ se vocˆ deseja usar uma distribui¸˜o fonte ou bin´ria. as melhores plataformas para a execu¸˜o do MySQL at´ este e ca e ponto s˜o o x86 com SuSe Linux 8.2. ser´ normalmente muito mais f´cil para instalar do que a distribui¸˜o a a ca em c´digo fonte. recomendamos o uso a ca a da vers˜o est´vel (atualmente Vers˜o 5.4 Qual vers˜o do MySQL deve ser usada a A primeira decis˜o a ser feita ´ se vocˆ deve usar a ultima vers˜o de desenvolvimento ou a a e e ´ a ultima vers˜o est´vel: ´ a a • Normalmente. c • Sen˜o.80 MySQL Technical Reference for Version 5. e comparamos as plataformas levando isto em considera¸˜o.

(O padr˜o das disa tribui¸˜es bin´rias ´ estar“pronto para rodar” em qualquer lugar. um nome de lan¸amento como mysql-4. Veja Se¸˜o 4. • Se vocˆ deseja ler (e/ou modificar) o c´digo C e C++ que ´ o MySQL. A distribui¸˜o bin´ria extendida ´ marcada com o sufixo -max e ´ configurada com as ca a e e mesmas op¸˜es de mysqld-max. a ˜ • Se vocˆ deseja configurar mysqld com alguns recursos extras que NAO est˜o nas dise a tribui¸˜es bin´rias. mas talvez vocˆ co a e e deseje ainda mais flexibilidade).0-alpha ´ interpretado c e da seguinte maneira: • O primeiro n´mero (4) ´ a vers˜o principal e tamb´m descreve o formato dos arquivos. co ca a Se vocˆ deseja usar o RPM MySQL-Max. Todos clientes MySQL nativos pode conectar com ambas vers˜es do ca o MySQL.0 e seguintes) a ´ para todas as plataformas) • --with-raid (n˜o disponivel a • --with-libwrap • --with-named-z-lib (Isto ´ feito para alguns dos bin´rios) e a • --with-debug[=full] • A distribui¸˜o bin´ria padr˜o ´ normalmente compilada com suporte para todos conca a a e juntos de caracteres e deve funcionar em uma variedade de processadores para a mesma fam´ do processador. • Se vocˆ encontrar um erro e relat´-lo para o time de desenvolvimento do MySQL vocˆ e a e provavelmente receber´ um patch que ser´ necess´rio aplic´-lo para a distribui¸˜o fonte a a a a ca para ter o bug corrigido. Distribui¸˜es fontes ca o e co tamb´m contem mais testes e exemplos que as distribui¸˜es bin´rias. Por exemplo. primeiramente vocˆ deve instalar o RPM MySQLe e server padr˜o.5 [mysqld-max]. a • O segundo n´mero (1) ´ o n´ da distribui¸˜o. O c´digo fonte ´ sempre o manual final. Segue abaixo a lista das op¸˜es extras mais comuns que vocˆ pode co a co e querer usar: • --with-innodb • --with-berkeley-db (padr˜o para o MySQL 4. • Para estar apto e satisfazer diferentes requisi¸˜es dos usu´rios. Ambas vers˜es s˜o compiladas da mesma co o a distribui¸˜o fonte. usar um compilador e melhor (como pgcc) ou usar op¸˜es de compiladores para usar otimiza¸˜es para seu co co processador. estaremos fornecendo co a duas vers˜es bin´rias diferentes. vocˆ pode obter e o e e uma distribui¸˜o fonte. ilia Se vocˆ precisar de um servidor MySQL mais r´pido vocˆ pode querer recompil´-lo com e a e a suporte para somente o conjunto de caracteres que vocˆ precisa. Uma compilada com os manipuladores de tabelas n˜o o a a transacionais (um bin´rio r´pido e pequeno) e um configurado com as mais importantes a a op¸˜es extendidas como tabelas transacionais.1. e co a O esquema de nomes do MySQL usa n´meros de vers˜es que consistem de tres n´meros e u o u um sufixo.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 81 Nos seguites casos vocˆ provavelmente ser´ mais bem servido com uma instala¸˜o baseada e a ca em c´digo fonte: o • Se vocˆ desejar instalar o MySQL em algum lugar expec´ e ifico. u e ivel ca . P´gina 344.8. u e a e Todas releases da Vers˜o 4 tem o mesmo formato de arquivo.

Naturalmente.0 s´ est´ dispon´ para a ´rvore do BitKeeper. Nenhum novo recurso que possa e e a ca influenciar a estabilidade do c´digo ´ adicionado. novas vers˜es s´ s˜o liberadas para erros e a ca o o a cr´ iticos. Os poss´ ivel a iveis sufixo s˜o: a − alpha indica que a vers˜o cont´m grandes se¸˜es de novos c´digos que n˜o foram a e co o a 100% testados. Isto ´ o que muitas empresas chamam co a e de release. N˜o ser˜o adicionados novos o a a recursos que podem causar algum tipo de corrompimento.23 est´vel/de produ¸˜o. significa que esta vers˜o j´ est´ sendo executada h´ a a a a a algum tempo em diferentes locais sem relatos de erros al´m dos espec´ e ificos de certas plataformas. o e • No ramo alpha 4. Este ´ incrementado u e u a ivel ca e para cada nova distribui¸˜o. novos recursos s˜o adicionados. Uma altera¸˜o de vers˜o de alpha para beta ocorre quando n˜o existir ca a a nenhum relato de erro fatal com uma vers˜o alpha por pelo menos um mˆs e n˜o a e a planejarmos adicionar nenhum recurso que pode deixar algum antigo comando menos confi´vel.0) ´ de qualidade est´vel/produ¸˜o. Desenvolvimento o co ativo que podem envolver maiores altera¸˜es no c´digo pode ocorrer numa vers˜o co o a alpha. e ca a No processo de desenvolvimento do MySQL. mas tudo ser´ testado antes de fazer a publica¸˜o. • O ramo de desenvolvimento 5. .82 MySQL Technical Reference for Version 5. • A s´rie atual (4. o pacote de testes continua melhorando.1 principal. N˜o deve existir bugs a conhecidos. Veja Apˆndice C [News]. v´rias vers˜es coexistem e est˜o em um est´gio a o a a diferente.0. N˜o podem existir erros a ca a conhecidos em nenhuma publica¸˜o do MySQL. ca − beta significa que todo o novo c´digo foi testado. ca • O sufixo (alpha) indica o n´ de estabilidade da vers˜o. co e a • Para a antiga s´rie 3. Perceba que todas publica¸˜es de vers˜es foram testadas pelo menos com: co o Um pacote de testes interna Faz parte de um sistema de produ¸˜o para um cliente. − Se n˜o existir um sufixo. Existem tamb´m ca e a e novos comandos e extens˜es na maioria das publica¸˜es alpha. a Isto ´ o que chamamos de uma distribui¸˜o est´vel. P´gina 948. corre¸˜es de erros relevantes de uma s´rie anterior s˜o propagados.0-alpha • O terceiro n´mero (0 ´ o n´mero da vers˜o do n´ de distribui¸˜o. o a ivel a Todas as vers˜es do MySQL funcionam sobre nossos testes padr˜es e comparativos para o o garantir que eles s˜o relativamente seguros para o uso. Normalmente vocˆ desejar´ a ultima vers˜o para o n´ ca e a ´ a ivel de publica¸˜o que tiver escolhido. Como os testes padr˜es s˜o extena o a didos ao longo do tempo para conferir por todos os bugs antigos encontrados. Somente corre¸˜es de erros cr´ co iticos s˜o adicionados ao release. Ela tem diversas tabelas ca com centenas de megabytes de dados. Fontes e bin´rios est˜o a a a dispon´ iveis para uso e teste em sistemas de desenvolvimento. Bugs conhecidos (normalmente n˜o tem nenhum) devem estar doca umentados na se¸˜o News. e a Apenas pequenas corre¸˜es s˜o adicionadas. a − gamma ´ o beta que j´ tem sido usado a algum tempo e parece funcionar bem.

o layout de uma instala¸˜o baseada em fontes difero ca ca encia de uma instala¸˜o bin´ria nas seguintes formas: ca a • The mysqld server is installed in the ‘libexec’ directory rather than in the ‘bin’ directory. Log de altera¸˜es ca co ‘include’ Arquivos de cabe¸alho (headers) c ‘lib’ Bibliotecas ‘scripts’ mysql_install_db ‘share/mysql’ Arquivos de mensagem de erro ‘sql-bench’ Benchmarks . P´gina 422. • The data directory is ‘var’ rather than ‘data’. a instala¸˜o copia os arquivos em ‘/usr/local’.1. N´s temos mais de 100 gigabytes de dados com que a o trabalhar. E tamb´m um teste para ver se e e o ultimo conjunto de otimiza¸˜es fez o c´digo mais r´pido. P´gina 422. a O teste crash-me Este tenta determinar quais recursos o banco de dados suporta e quais s˜o suas a capacidades e limita¸˜es. . • mysql_install_db is installed in the ‘/usr/local/bin’ directory rather than in ‘/usr/local/mysql/scripts’.1.5 Layouts de Instala¸˜o ca Esta se¸˜o descreve o layout padr˜o dos diret´rios criados pela instal¸˜o das distribui¸˜es ca a o ca co bin´ria e fonte. Veja Se¸˜o 5. 2. nos seguintes subdiret´rios: a ca o Diret´rio o Conte´do do diret´rio u o ‘bin’ Programas clientes e scripts ‘include/mysql’ rquivos de cabe¸alho (headers) A c ‘info’ Documenta¸˜o no formato Info ca ‘lib/mysql’ Bibliotecas ‘libexec’ O servidor mysqld ‘share/mysql’ Arquivos com mensagens de erros ‘sql-bench’ Benchmarks e o teste crash-me ‘var’ Bancos de dados e arquivos log Dentro de um diret´rio de instala¸˜o. Veja Se¸˜o 5. co ca a Outro teste ´ que n´s usamos a vers˜o do MySQL mais nova em nosso ambiente de produ¸˜o e o a ca interna.4 [MySQL Benchmarks]. a Uma distribui¸˜o bin´ria ´ instalada descompactando-a no local de instala¸˜o de sua escolha ca a e ca (tipicamente ‘/usr/local/mysql’) e cria os seguintes diret´rios nesses locais: o Diret´rio o Conte´do do diret´rio u o ‘bin’ Programas clientes e o servidor mysqld ‘data’ Arquivos Log. Por padr˜o. bancos de dados ‘docs’ Documenta¸˜o. em pelo menos uma m´quina.testes comparativos Uma distribui¸˜o baseada em c´digo fonte ´ instalada depois de vocˆ configur´-la e compil´ca o e e a a la.4 ´ co o a ca [MySQL Benchmarks].2.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 83 O pacote de comparativos da MySQL ´ Este executa uma s´rie de consultas comuns.

Quando ca ´ u a e tiver um maior n´mero de novos recursos ou menor incompatibilidade com vers˜es u o antigas. Bugs contiuar˜o a ser corrigidos na vers˜o est´vel. Veja Se¸˜o 2. Eles normalmente s˜o imediatamente disponibilizados em nosso a reposit´rio publico do BitKeeper. • N´s normalmente disponibilizamos os patches logo que localizamos e corrigimos o pequenos bugs. o primeiro n´mero ´ aumentado. tentamos fazer um release.especialmente do que a nossos clientes com suporte extendido desejam e tentamos ajud´-los.6 Como e quando as atualiza¸˜es s˜o lan¸adas? co a c O MySQL est´ evoluindo muito rapidamente na MySQL AB e n´s queremos compartilhar a o isto com outros usu´rios MySQL. Gostariamos que outras empresas fizessem isto tamb´m. o a • Se existitr. u e • Vers˜es est´veis testadas aparecem na m´dia de uma a duas vezes por ano. You can create your own binary installation from a compiled source distribution by executing the script ‘scripts/make_binary_distribution’. iremos combinar v´rios deles em um patch maior.0. P´gina 948. n´s j´ mudamos o desenvolvimento em atividade para a a a e o a vers˜o 4. um bug fatal numa vers˜o criaremos uma nova release a ´ ´ o mais cedo possivel. a Tamb´m tentamos ajudar usu´rios que solicitam recursos que s˜o de f´cil implementa¸˜o. por algum motivo. mas se o a e pequenos bugs s˜o encontrados. e A vers˜o est´vel atual ´ a 3. a N˜o existe uma real necessidade para baixar uma nova release. o ultimo n´mero na vers˜o ´ incrementado. a e e a Usamos a seguinte pol´ itica quando estamos atualizando o MySQL: • Para cada pequena atualiza¸˜o.84 MySQL Technical Reference for Version 5. mas irritantes. 2. A se¸˜o News ir´ dizer se a a ca a nova vers˜o tem alguma coisa que vocˆ precisa. P´gina 80.4 [Qual a ida a ca vers˜o].23. disponibilizamos patches se eles s˜o enviados a a para n´s.2.2. pois isto abandona a corre¸˜es de bugs e coisas que “devem ser co feitas. • Releases funcionais aparecem na m´dia a cada 1-8 semanas. De qualquer forma. Quando o formato de arquivo u a e altera.” a a a O MySQL usa um esquema de nomes um pouco diferente da maioria dos outros produtos. Veja Apˆndice C [News]. o segundo n´mero na vers˜o ´ incrementado. e a a a ca Tomamos notas do que nossos usu´rios licenciados gostariam de ter.” “Alguma coisa congelada” significa que talvez possamos adicionar pequenas coisas que “com certeza n˜o afetar´ nada que j´ esteja funcionando. o ca ´ • Para bugs n˜o criticos. uma vers˜o ser´ lan¸ada apenas com as corre¸˜es dos a a a c co erros. Eles ser˜o inclu´ o a idos na pr´xima distribui¸˜o.0-alpha • The header file and library directories are ‘include/mysql’ and ‘lib/mysql’ rather than ‘include’ and ‘lib’. Sempre que temos alguns recursos uteis que outros acham a ´ necess´io. Outras pessoas podem fazer distribui¸˜es bin´rias para outros co a sistemas mas provavelmente com menos frequencia. N˜o acreditamos em um a a a a a congelamento completo. a a .0. Em geral ´ relativamente seguro utilizar qualquer vers˜o que tenha sido lan¸ado a algumas e a c semanas e que n˜o tenham sido sustitu´ por uma nova vers˜o. e • Distribui¸˜es bin´rias para algumas plataformas ser´ feita por n´s somente para reco a a o leases mais importantes.

com/.mysql.23.com/.) e • Tamb´m criamos casos de teste para todos os novos recursos adicionados ao MySQL. P´gina 53. o corrigiremos o e reiniciaremos o processo de constru¸˜o).x.6 [Bugs]. ca • Depois de publicarmos os bin´rios em http://www. a Aqui est´ um descri¸˜o de como nosso processo de contru¸˜o funciona: a ca ca • Monitoramos erros de nossa lista de suporte ao cliente. Veja Se¸˜o 1. a o a a a ca Naturalmente. o a • Quando corrigimos um erro. A mensagem de an´ncio cont´m uma lista de todas as altera¸˜es da disa u e co tribui¸˜o e qualquer problema conhecido com ela. • Todos os erros relatados em vers˜es usadas s˜o inseridos nio banco de dados de bugs.7 Filosofia das Distribui¸˜es .0.1. Em certos casos.8. isto significa que podemos corrigir um problema a a na(s) vers˜o(˜es) de desenvolvimento. Veja Se¸˜o 1.Nenhum Bug Conhecidos nas co Distribui¸oes c˜ Colocamos muito tempo e esfor¸o em tornar nossas distribui¸˜es livres de erros. u ca P´gina 33. documentamos tais problemas para que o usu´rios esteja ciente. a lista de email externa do MySQL e o banco de dados de bugs em http://bugs. Se algo for imposs´ de corrigir (devido a alguma decis˜o de projeto interno ivel a no MySQL). (Cerca de 90% a de todos os erros corrigidos tˆm um caso de teste.x. e • Antes de come¸armos a fazer uma nova distribui¸˜o do MySQL. • N˜o publicaremos um bin´rio para uma plataforma na qual os testes do pacote de a a benchmarks falharam.1 [Mailing-list]. a ´ fazemos uma nova distribui¸˜o do MySQL a cada 4-5 semanas. (A se¸˜o ’problemas conhecidos’ na ca ca notas das distribui¸˜es s´ tem sido necess´ria em algumas da distribui¸˜es.) co o a co • Para darmos acesso rapidamente aos nossos usu´rios dos ultimos recursos do MySQL. Veja Se¸˜o 1. co • Se n´s. documentaremos isto no manual. asseguramos que todos c ca os erros repetit´ iveis relatados para a vers˜o do MySQL (3.7.6 [Bugs]. Pelo nosso c co conhecimento. Um erro fatal ´ algo que faz o MySQL falhar com o uso normal. 4. etc) est˜o cora a rigidos. ca a • N´s fazemos uma constru¸˜o para todas as plataformas para as quais suportamos o ca bin´rios (mais de 15 plataformas) e executamos nosso pacote de teste e benchmarks a para todas elas. um que cause um core dump). mas sem correr o risco de tornarmos uma vers˜o menos est´vel.8. o corrigimos e fazemos as contru¸˜es mais os teste em todos os sistemas novamente. durante a o porcesso de constru¸˜o e teste (que leva de 2 a 3 dias) recebermos um o ca relat´rio sobre um erro fatal (por exemplo. bugs e assuntos que s˜o depeno a dentes das decis˜es de projeto. depois da distribui¸˜o estar pronta. ca • Se. mas n˜o o corrigirmos na vers˜o est´vel (produ¸˜o).2.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 85 2. Se for um erro geral na fonte. traz respostas erradas para e consultas normais ou tem um problema de seguran¸a. o ca a Nosso objeto ´ corrigir tudo que ´ poss´ e e ivel. enviamos um email a de an´ncio nas listas de email mysql e announce. sempre tentamos fazer um caso de teste para ele e inclu´ i-lo em nosso sistema de teste para assegurar que o erro nunca retornar´. n˜o liberamos uma unica vers˜o do MySSQL com qualquer erro conhecido a ´ a ’fatal’. c N´s temos documentados todos os problemas conhecidos.mysql. recebermos qualquer relat´rio que houve (deca o pois de tudo) qualquer coisa criticamente errada com a constru¸˜o em uma plataforma ca . P´gina 53.

Estes bin´rios s˜o configurados e constru´ a a idos com os seguintes compiladores e op¸˜es.1 [Quick Standard Installation].0-alpha espec´ ifica.xx alpha com ccc (Compaq C V6. 2./configure -prefix=/usr/local/mysql --with-extra-charsets=complex --enablethread-safe-client --enable-local-infile Linux 2.0. problemas s˜o encontrac a a dos rapidamente.gz).0) CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2 -tpp2 -ip -nolib_inline" .3-006) CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="fast -arch generic -noexceptions -nortti" . e Estas distribui¸˜es s˜o geradas usando o script Build-tools/Do-compile que compila co a o c´digo fonte e cria o arquivo bin´rio em tar.tar. Nas ultimas 150 distribui¸˜es. corrigiremo-na imediatamente e liberaremos um nova distribui¸˜o ’a’ para ca aquela plataforma.4.3 CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 mcpu=pentiumpro -felide-constructors" . co Bin´rios constru´ a idos no sistema de desenvolvimento da MySQL AB: Linux 2.xx Intel Itanium 2 com ecc (Intel C++ Itanium Compiler 7.2-505 / Compaq C++ V6./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile Linux 2.86 MySQL Technical Reference for Version 5./configure -prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --withmysqld-ldflags=-non_shared --with-client-ldflags=-non_shared --disable-shared . oferecemos distribui¸˜es bin´rios para ca a co a outras plataformas atrav´s de arquivos tar compactados (.8 Bin´rios MySQL compilados pela MySQL AB a Como um servi¸o.xx x86 com gcc 2. P´gina 60). n´s na MySQL AB fornecemos um conjunto de distribui¸˜es bin´rias do c o co a MySQL que s˜o compiladas no nosso site ou em sites onde os clientes cordialmente nos d˜o a a acesso as suas m´quinas./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --withclient-ldflags=-all-static --with-mysqld-ldflags=-all-static Linux 2.0) CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 . Gra¸as aos nosso grande base de usu´rios. o erro era uma biblioteca glibc com problema em uma de nossas m´quinas que a levamos um longo tempo para encontrar. • Nosso registro para boas distribui¸˜es feitas ´ muito boa.4.xx Intel Itanium com ecc (Intel C++ Itanium Compiler 7. co e ´ co tivemos que fazer uma nova contru¸˜o para menos de 10 distribui¸˜es (em 3 destes ca co casos.4.4. a Em adi¸˜o aos bin´rios forncedios em formatos de pacotes espec´ ca a ificos da plataforma (veja Se¸˜o 2.95.2.gz usando scripts/make_binary_ o a distribution.

3 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="O3 -fno-omit-frame-pointer -felide-constructors -fnoexceptions -fno-rtti" .95.0) CC=cc-5.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 87 Linux 2./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --enable-thread-safeclient --disable-shared ./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-curses-libs=-lcurses --disableshared Sun Solaris 9 sparc com cc-5.xx x86 64 (AMD64) com gcc 3.2./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curseslibs=-lcurses --disable-shared Sun Solaris 8 sparc 64bit com gcc 3.3 CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors" .95./configure --prefix=/usr/local/mysql -localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb Sun Solaris 8 sparc com gcc 3.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst -mt -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_ -xarch=v9" .0 (Sun Forte 5.2./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared Sun Solaris 8 x86 com gcc 3.2 CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -m64 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" .3 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" .xx s390 com gcc 2./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-allstatic Linux 2.4.1 CXX=gcc .4.2 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared Sun Solaris 9 sparc com gcc 2.

11 pa-risc2.0.1 com gcc 3.33) CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --prefix=/usr/local/mysql --with-extracharsets=complex --with-server-suffix="-pro" --enable-threadsafe-client --enable-local-infile --with-named-z-libs=no --disable-shared HP-UX 10.-many -felide-constructors -fno-exceptions -fno-rtti" .03.33) CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable" .20 pa-risc1.3 CFLAGS="-O2 -mcpu=powerpc -Wa.-many -felide-constructors -fno-exceptions -fno-rtti" .0) CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" .0-alpha IBM AIX 4.11 pa-risc2.2.3 ppc com xlC_r (IBM Visual Age C/C++ 6./configure -prefix=/usr/local/mysql --with-extra-charsets=complex --enablethread-safe-client --enable-local-infile --disable-shared HP-UX 11.2 ppc com gcc 3.0 ppc com gcc 3.2 powerpc com gcc 3.88 MySQL Technical Reference for Version 5.0 32bit com aCC (HP ANSI C++ B3910B A.-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client -enable-local-infile --with-pthread --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared HP-UX 11.3./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb Apple Mac OS X 10.1.0 64 bit com aCC (HP ANSI C++ B3910B A.3 CFLAGS="-O2 -mcpu=powerpc -Wa./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared IBM AIX 4./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared .-many " CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-zlibs=no --disable-shared --with-innodb IBM AIX 5.03.1 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" .1 CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="DHPUX -I/opt/dce /include -felide-constructors -fno-exceptions -fno-rtti -O3 -fPIC" .3.

7 i386 com gcc 2. note que eles s´ s˜o fornecidos como cortesia.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 89 FreeBSD 4.6 i386 com gcc 2.3qnx-nto 20010315 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" .5 IP32 com gcc 3.4 CFLAGS=-DHAVE_BROKEN_REALPATH .1 i386 with gcc 2. a o a Uma vez que a MySQL AB n˜o tem total controle sobre estes sistemas.2.1 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" . SCO Unix 3.0.0.1-027) CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast inline speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -fast -inline speed -speculate all -noexceptions -nortti" . n´s podemos fornecer a o apenas suporte limitado para os bin´rios constru´ a idos nestes sistemas./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=notused --disable-shared QNX Neutrino 6.3 CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 mpentium -felide-constructors" .1 732 alpha com cc/cxx (Compaq C V6.0.95./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --with-prefix=/usr/local/mysql --with-named-thread-libs="lpthread -lmach -lexc -lc" --disable-shared --with-mysqld-ldflags=all-static SGI Irix 6.95.95.3-029i / DIGITAL C++ V6./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safeclient --disable-shared SCO OpenUnix 8. Pou favor./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safeclient --disable-shared Compaq Tru64 OSF/1 V5.0 i386 com CC 3.2 CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared Os seguintes bin´rios s˜o contru´ a a idos em sistemas de terceiros gentilmente cedidos para a MySQL AB pou outros usu´rios.2v5./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared .

90.2.1 i386 com gcc 2.xx sparc com egcs 1.2.90 MySQL Technical Reference for Version 5.1 (e acima) sun4u com egcs 1.7.1 CC=gcc CXX=gcc CXXFLAGS=-O3 . P´gina 33.2 CC=gcc CXX=gcc CXXFLAGS=-O3 .0.0 sparc64 com gcc 3.2 e mais novo CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" .6 i86pc com gcc 2.2 CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" .7.2.1 i386 com gcc 2.95.1 a ca [Mailing-list].7.1 CFLAGS=-DHAVE_BROKEN_REALPATH .1.5./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex BSDI BSD/OS 3./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex --enable-assembler SunOS 5.7./configure --prefix=/usr/local/mysql --disable-shared --with-extracharsets=complex --enable-assembler SunOS 5.2. Veja Se¸˜o 1.1.1 CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" .2./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb As seguintes op¸˜es de compila¸˜o foram usadas nos pacotes bin´rios que a MySQL AB co ca a costumava fornecer no passado. Estes bin´rios n˜o s˜o mais atualizados.1 CC=gcc CXX=gcc CXXFLAGS=-O . a ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex BSDI BSD/OS 2.3a ou 2.27 ou gcc 2.x com x686 com gcc 2.2 CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" .0./configure --prefix=/usr/local/mysql --with-extra-charsets=complex AIX 2 4 com gcc 2.4 2 sun4c com gcc 2.1.95./configure --prefix=/usr/local/mysql --with-extra-charsets=complex Qualquer que tenha mais op¸˜es otimizadas para qualquer das configura¸˜es listadas acima co co pode sempre envi´-los para a lista de email “internals” do MySQL.8. ca a o e Linux 2.0-alpha FreeBSD 5.7.2 CC=gcc CXX=gcc CXXFLAGS=-O3 . mas as op¸˜es de a a a co compila¸˜o s˜o mantidas aqui com o prop´sito de referˆncia./configure --prefix=/usr/local/mysql --with-extracharsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared Linux 2.2./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqldldflags=-all-static --disable-shared --with-extra-charsets=complex SunOS 4.

a co a As distribui¸˜es gen´ricas do MySQL est˜o empacotados com arquivos GNU tar com comco e a pacta¸˜o gzip (. tamb´m oferecemos bin´rios em formatos de pacote ca e e a espec´ ificos da plataforma para plataformas selecionadas.9 Instalando uma Distribui¸˜o Bin´ria do MySQL ca a Este cap´ itulo cobre a instala¸˜o da distribui¸˜o bin´ria do MySQL (. Os co a a co a RPMs gerados por n´s da MySQL AB s´ come¸aram a ser fornecidos a partir da vers˜o o o c a 3.tar. e Se vocˆ tiver problemas.22 do MySQL. a 2. vocˆ ter´ diminu´ a a e a ida a probabilidade de conseguir a solu¸˜o do seu problema.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 91 Distribui¸˜es RPM que anteceda o MySQL vers˜o 3.1 [Windows installation]. co e e Sun tar) possuem problemas (com nome de arquivos grandes. P´gina 60 para mais informa¸˜es sobre como\ intal´-los. Se n˜o usar mysqlbug.3 [Relato de erros]. ca • Um tar razo´vel para descompactar a distribui¸˜o. mysqlbug colhe informa¸˜es do sistema que a co ajudar˜o os outros a solucionar o seu problema. shell> bin/mysqld_safe --user=mysql & Se a sua vers˜o do MySQL ´ mais antiga que a 4. Sabemos que o GNU tar funciona. Mesmo se o problema n˜o for um bug.gz). Vocˆ encontrar´ o mysqlbug no ca e a diret´rio ‘bin’ depois de descompactar a distribui¸˜o. a Os comando b´sicos que vocˆ deve executar para instalar e usar uma distribui¸˜o bin´ria a e ca a do MySQL s˜o: a shell> groupadd mysql shell> useradd -g mysql mysql shell> cd /usr/local shell> gunzip < /path/to/mysql-VERSION-OS.1. Veja Se¸˜o 2. vocˆ deve instalar o GNU tar primeiro. Se vocˆ deseja compilar uma vers˜o para depura¸˜o do MySQL.gz Archives) para ca ca a v´rias plataformas (veja MySQL binaries para uma lista detalhada).tar. Veja Se¸˜o 1. ca Para distribui¸˜es do Windows. por favor. veja Se¸˜o 2.7.1 [Quick Standard ca Installation]. Vocˆ precisa das seguintes ferramentas para instalar um disca e tribui¸˜o bin´ria do MySQL: ca a • GNU gunzip para descompactar a distribui¸˜o.1. substitua bin/safe_mysqld por a e bin/mysqld_safe no comando final. vocˆ deve adicionar --withe a ca e debug ou --with-debug=full para as linhas de configura¸˜o acima e remover qualquer ca op¸˜o -fomit-frame-pointer. por exemplo) Neste caso.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 . a Em adi¸˜o a estes pacotes gen´ricos. o ca ca P´gina 36.22 s˜o contribui¸˜es dos usu´rios.0. sempre use mysqlbug ao enviar d´vidas para a lista de email do e u MySQL.tar. shell> chown -R mysql data shell> chgrp -R mysql . a ca Algumas implementa¸˜es tar que vˆm pr´-instaladas como o sistema operacional (ex. .2. co ca P´gina 60.

ent˜o proceda com a Se¸˜o 2. vocˆ precisar´ realizar a o e e a instala¸˜o como root. 3.5 a ca [mysqld-max]. Altere para p diret´rio de instala¸˜o: o ca shell> cd mysql Vocˆ encontrar´ diversos arquivos e subdiret´rios no diret´rio mysql.4 ca a a ca [P´s Instala¸˜o]. Vocˆ pode desejar criar o grupo e usu´rio com outro e a nome. Isto torna a referˆncia ao diret´rio de o o e o instala¸˜o mais f´cil. descompactamos a distribui¸˜o sob ‘/usr/local’ e ca criamos um diret´rio ‘/usr/local/mysql’ dentro do qual o MySQL ´ instalado. O mais impore a o o tante para prop´sitos de instala¸˜o s˜o os subdiret´rios ‘bin’ e ‘scripts’. P´gina 344. Veja Se¸˜o 4. A sintaxe para useradd a e groupadd podem diferir um pouco nas diversas vers˜es de Unix. Escolha o diret´rio sob o qual vocˆ deseja descompactar a distribui¸˜o e a mova para o e ca dentro dele. siga estes passos. o ca a o ‘bin’ Este diret´rio cont´m o programa cliente e o servidor. chamado como ‘/usr/local/mysql’.) ca 2.0-alpha Vocˆ pode adicionar novos usu´rios usando o script bin/mysql_setpermission se vocˆ e a e instalar os m´dulos Perl DBI e DBD-mysql. Chame o diret´rio no qual se pretende fazer a instala¸˜o: o ca shell> cd /usr/local 6. pc-linux-gnu-i586).15) e SO indica o tipo de sistema operacional para o qual a distribui¸˜o ´ ca e pretendida (por exemplo.8. ca 4. Descompacte a distribui¸˜o.gz’. Adicione um usu´rio e grupo para o mysqld ser executado: a shell> groupadd mysql shell> useradd -g mysql mysql Estes comandos adicionam o grupo mysql e o usu´rio mysql. para a configura¸˜o da p´s istala¸˜o e testes: o ca a ca o ca 1.21. ca a 7. (As o e seguintes instru¸˜es. significa que o e ca a bin´rio tem suporte para tabelas transacionais e outros recursos. Vocˆ deve adicionar o e e o caminho completo deste diret´rio a sua vari´vel de ambiente PATH e o a .tar. Obtenha um arquivo de distribui¸˜o de um dos sites listados em Se¸˜o 2. O segundo coo A mando cria um link simb´lico para o diret´rio. No exemplo a seguir.tar. o Uma descri¸˜o mais detalhada ´ apresentada a seguir. consequentemente. a As distribui¸˜es bin´rias do MySQL s˜o fornecidas como arquivos tar compactados e co a a tem nomes como ‘mysql-VERS~O-SO. assumem que vocˆ tem permiss˜o para criar co e a arquivos em ‘/usr/local’.1 [Getting ca ca MySQL].0. diferente de mysql.gz | tar xvf A shell> ln -s full-path-to-mysql-VERS~O-SO mysql A O primeiro comando cria um diret´rio chamado ‘mysql-VERS~O-SO’. Se vocˆ ver uma distribui¸˜o bin´ria marcada com o sufixo -max.92 MySQL Technical Reference for Version 5. P´gina 75. 3. Eles tamb´mpodem o e ser chamado adduser e addgroup. P´gina 111. ca e Para instalar uma distribui¸˜o bin´ria. 5.2. Se este diret´rio ´ protegido. que criar´ o diret´rio de instala¸˜o. Note que todos os bin´rios s˜o contru´ a a a idos a partir da mesma distribui¸˜o fonte do MySQL. Ent˜o crie um link ca a o ca a simb´lico para aquele diret´rio: o o shell> gunzip < /path/to/mysql-VERS~O-SO. onde VERS~O ´ um n´mero (por exemA A e u plo.

vocˆ pode copiar support-files/mysql. # path to mysql executable Altere o caminho para o local onde o mysql atualmente est´ armazaenado em seu a sistema. Caso vocˆ desejasse usar o mysqlaccess e a distribui¸˜o do MySQL est´ em um local e ca a diferente do padr˜o.4 [P´s instala¸˜o]. a 12. a 10. P´gina 332 e Veja Se¸˜o 2. O primeiro comando altera o atributo owner dos arquivos para o usu´rio root.0. ca Vocˆ pode iniciar o servidor MySQL com o seguinte comando: e shell> bin/mysqld_safe --user=mysql & Se a sua vers˜o do MySQl for mais antiga do que a 4. Isto n˜o ocorre mais. a Veja Apˆndice E [Vari´veis de ambiente]. Se vocˆ desejasse que o MySQL seja iniciado automaticamente quando vocˆ iniciar a e e sua m´quina. shell> chown -R mysql /usr/local/mysql/data shell> chgrp -R mysql /usr/local/mysql/. ca a ca o ca P´gina 111.2 [mysqld_safe]. o a segundo altera o atributo owner do diret´rio de dados para o usu´rio mysql e o terceiro o a altera o atributo group para o grupo mysql. Edite o script ‘bin/mysqlaccess’ aproximadamente na linha 18. 11. Se vocˆ quiser instalar o suporte para a interface Perl DBI/DBD.22. P´gina 165.4. Procure pela linha que se parece com a apresentada abaixo: $MYSQL = ’/usr/local/bin/mysql’.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 93 assim a sua shell encontrar´ o programa MySQL de forma apropriada. o 8. Mais informa¸˜es podem ser encontradas no ca co script support-files/mysql. Crie as tabelas de permiss˜o do MySQL (necess´rio apenas se vocˆ n˜o tiver instalado a a e a o MySQL anteriormente): shell> scripts/mysql_install_db Note que as vers˜es mais antigas que a 3. a . P´gina 118. veja Se¸˜o 2. 9. Agora prossiga com Se¸˜o 4.server para o local onde o seu a e sistema tem os arquivos de inicializa¸˜o.7 [Perl e ca support]. vocˆ deve inicializar e testar a sua dise tribui¸˜o. P´gina 1083. substitua bin/safe_mysqld por a bin/mysqld_safe no comando.8. e a a ‘scripts’ Este diret´rio cont´m o script mysql_install_db usado para inicializar o o e banco de dados mysql contendo a tabela de permiss˜es que armazenam o o servidor de permiss˜es de acesso.3 [Automatic start]. vocˆ deve alterar a localiza¸˜o para onde o mysqlaccess espera a e ca encontrar o cliente mysql. Altere o propriet´rio dos bin´rios para o root e o propriet´rio do diret´rio de dados a a a o para o usu´rio com o quel vocˆ executar´ o mysqld: a e a shell> chown -R root /usr/local/mysql/.server e em Se¸˜o 2. ca a Depois de tudo estar descompactado e instalado.10 iniciam o servidor MySQL quando vocˆ o e executa o mysql_install_db. Se vocˆ n˜o fizer isto receber´ uma mensagem de erro Broken pipe quando e a a executar o mysqlaccess.

3 Instalando uma distribui¸˜o com fontes do MySQL ca Antes de vocˆ continuar com as instala¸˜es dos fontes. Se vocˆ possui somente o gcc 2.0. e a • Um bom programa make.91. Por n˜o suar mysqlbug. SGI C++.0. gcc >= 2. gcc >= 2.66.95.1.7.cc’. Se estiver com d´vidas. ´ MUITO IMPORTANTE que vocˆ a use.95. confira antes se nosso bin´rio est´ e co a a dispon´ para sua plataforma e se ela funcionar´ para vocˆ. e SunPro C++ s˜o alguns dos compiladores que sabemos que funcionam.75 ou mais a e novo.2 ou egcs 2. Veja Se¸˜o 1. e • Um compilador ANSI C++ funcional. a a vocˆ perde a vantagem de ter seu problema resolvido! Vocˆ ir´ encontrar mysqlbug no e e a diret´rio ‘scripts’ depois de desempacotar a distribui¸˜o. co e e Sun tar) possuem problemas (com nome de arquivos grandes. GNU make ´ sempre recomendado e ´ algumas vezes e e necess´rio.1 ´ tamb´m conhecido por ter problemas em e e algumas plataformas portanto ele deve ser evitado se existir um novo compilador para a plataforma.x vocˆ deve atualiza-lo para e e conseguir compilar o MySQL. o ca ca P´gina 36. a . recente o bastante para entender a op¸˜o e a ca -fno-exceptions.23. ca • Um tar razo´vel para desempacotar a distribui¸˜o. gcc 2. u fa¸a o seguinte: c CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions \ -fno-rtti" .0-alpha 2.x. a ca Algumas implementa¸˜es tar que vˆm pr´-instaladas como o sistema operacional (ex. por exemplo) Neste caso. Se vocˆ tiver problemas. recomendamos tentar o GNU make 3./configure --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static Na maioria dos sistemas vocˆ ir´ obter um bin´rio r´pido e est´vel com essas op¸˜es.3 [Bug reports]. e a a a a co Se vocˆ tiver problemas.94 MySQL Technical Reference for Version 5.x tem um bug que a e a torna imposs´ ivel compilar alguns arquivos C++ perfeitamente corretos. vocˆ pode e e e compilar um bin´rio que quebra randomicamente. De outra forma.2 ´ recomendado quando compilar o MySQL Vers˜o 3. Sabe-se que o GNU tar funciona. Vocˆ precisa das seguintes ferramentas para contruir e instalar o MySQL a partir do c´digo e o fonte: • GNU gunzip para descompactar a distribui¸˜o.7. gcc 2. a A libg++ n˜o ´ necess´ria quando o gcc for usado. N´s colocamos muito esfor¸o ivel a e o c para ter certeza que nossos bin´rios s˜o contru´ a a idos com as melhores op¸˜es poss´ co iveis. vocˆ deve instalar o GNU tar primeiro.2. egcs >= 1. N´s tamb´m recomendamos que vocˆ use a o e e -felide-constructors e -fno-rtti juntas com -fno-exception. mysqlbug recolhe informa¸˜es a co do sistema que facilitar´ aos outros resolverem seu problema. como o ‘sql/sql_base.8. SEMPRE USE mysqlbug quando postar quest˜es para a lista de e o email do MySQL Mesmo se o problema n˜o for um bug. Se vocˆ estiver usando uma vers˜o recente de gcc.7.

3. P´gina 75.2 a ca [Option files]. a a e Vocˆ pode adicionar novos usu´rios utilizando o script bin/mysql_setpermission se vocˆ e a e instalar os m´dulos Perl DBI e DBD-mysql. P´gina 695.cnf e e e remover o caractere # antes dos parˆmetros que iniciam com innodb_. Adicione um usu´rio e grupo para o mysql executar assim: a shell> groupadd mysql shell> useradd -g mysql mysql Estes comandos adicionam o grupo mysql e o usu´rio mysql.rpm Isto ir´ criar um RPM bin´rio que vocˆ pode instalar. ca a Distribui¸˜es fontes do MySQL s˜o fornecidas como arquivos tar compactados e tem co a nomes como ‘mysql-VERSION.src. P´gina 643.6 [BDB].1 Vis˜o geral da instala¸˜o r´pida a ca a Os comandos b´sicos que vocˆ deve executar para instalar o MysQL a partir da distribui¸˜o a e ca fonte s˜o: a shell> groupadd mysql shell> useradd -g mysql mysql shell> gunzip < mysql-VERSION.3 [InnoDB start]. siga os passos a seguir. Escolha o diret´rio sobre o qual vocˆ deseja descompactar a distribui¸˜o e v´ para ele.tar..cnf shell> /usr/local/mysql/bin/mysqld_safe --user=mysql & Se a sua vers˜o do MySQL ´ mais antiga que a 4.gz’. onde VERSION ´ um n´mero como 5.0.0-alpha. Se vocˆ deseja ter suporte para tabelas InnoDB. A sintaxe para useradd e a groupadd podem mudar um pouco em diferentes vers˜es de Unix.1 [Getting ca ca MySQL]. para inicializa¸˜o do p´s-instala¸˜o e testes: a ca o ca 1. vocˆ precisar´ obter e e a uma vers˜o com o patch do c´digo fonte do Berkeley DB. ent˜o prossiga para Se¸˜o 2.tar.gz | tar -xvf shell> cd mysql-VERSION shell> . ca Para instalar uma distribui¸˜o fonte.4 ca a ca [Post-installation].cnf /etc/my. Veja Se¸˜o 7. o Segue uma descri¸˜o mais detalhada. ent˜o fa¸a o seguinte: e a c shell> rpm --rebuild --clean MySQL-VERSION. Se vocˆ esta interessado em usar tabelas Berkeley DB com MySQL.. substitua bin/safe_mysqld por a e bin/mysqld_safe no comando final. Por favor leia o cap´ a o itulo sobre tabelas Berkeley DB antes de continuar.0. vocˆ deve editar o arquivo /etc/my.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 95 2./configure --prefix=/usr/local/mysql shell> make shell> make install shell> scripts/mysql_install_db shell> chown -R root /usr/local/mysql shell> chown -R mysql /usr/local/mysql/var shell> chgrp -R mysql /usr/local/mysql shell> cp support-files/my-medium. P´gina 111. o e ca a 2. Veja Se¸˜o 4. Veja Se¸˜o 7. e u 4.5. a 3. Elas podem tamb´m o e . Obtenha um arquivo de distribui¸˜o de algum dos sites listados em Se¸˜o 2. P´gina 217.1. a ca a Se vocˆ iniciar de um RPM fonte.2..

Instalar tudo: shell> make install Vocˆ deve executar este comando como root.0.3 [Bug reports].log’ que vocˆ acha e que pode ajudar a resolver o problema. veja Se¸˜o 2.0-alpha 5. a o segundo altera o atributo de propriedade do diret´rio de dados para o usu´rio mysql.7 [Perl e ca support].96 MySQL Technical Reference for Version 5. P´gina 103. veja Se¸˜o 2./configure --help para uma lista das op¸˜es. 7. Se¸˜o 2. Envie o relat´rio de erros usando o script o mysqlbug. Isto n˜o acontece mais! e a Altere o dono dos bin´rios para root e do diret´rio dados para o usu´rio que ir´ a o a a executar o mysqld: shell> chown -R root /usr/local/mysql shell> chown -R mysql /usr/local/mysql/var shell> chgrp -R mysql /usr/local/mysql O primeiro comando altera o atributo de proriedade dos arquivos para o usu´rio root. 11. a Se vocˆ deseja que o MySQL inicie automaticamente quando vocˆ ligar sua m´quina. Vocˆ pode escolher outros nomes para o usu´rio e e a grupo em vez de mysql.7. co ca P´gina 97.10 iniciam o servidor MySQL o a a quando vocˆ executa mysql_install_db. 10. e Crie as tabelas de permiss˜es do MySQL (necess´rias s´ se vocˆ n˜o tiver instalado o o a o e a MySQL anteriormente): shell> scripts/mysql_install_db Note que as vers˜es do MySQL anteriores ` vers˜o 3. por favor. Vocˆ n˜o pode constru´ em um diret´rio diferente.1. ser chamadas adduser e addgroup. Descompacte a distribui¸˜o para o diret´rio corrente: ca o shell> gunzip < /path/to/mysql-VERSION. e e a vocˆ pode copiar support-files/mysql.3 [configure options]. 8. 6. o Mude para o diret´rio da distribui¸˜o descompactada: o ca shell> cd mysql-VERSION Note que agora vocˆ deve configurar e construir o MySQL a partir deste diret´rio raiz e o da distribui¸˜o.tar. a co Se o configure falhar. 9. P´gina 165. para uma ca ca a ajuda com um varios problemas comuns. ca e a i-lo o Configure o release e compile tudo: shell> . inclua qualquer linhas de ‘config. Exee e co cute . ca a Se a compila¸˜o falhar. P´gina 36. o a e o terceiro altera o atributo de grupo para o grupo mysql. Tamb´m inclua as ultimas linhas da sa´ e ´ ida de configure se o configure abortar.3./configure --prefix=/usr/local/mysql shell> make Quando vocˆ executar configure. Se vocˆ deseja instalar suporte para a interface Perl DBI/DBD. discute algumas das op¸˜es mais usadas. vocˆ pode desejar especificar algumas op¸˜es.server para o local onde seu sistema tem seus e . e vocˆ for enviar uma mensagem para lista de email do MySQL e para pedir ajuda.3. Veja Se¸˜o 1.5 [Compilation problems].gz | tar xvf Este comando cria um diret´rio com o nome ‘mysql-VERSION’. 12.22.

cache shell> make clean Patches do site FTP s˜o distribu´ a idos como arquivos texto ou como arquivos compactados com gzip.4 [Post-installation]. vocˆ deve iniciar e testar sua distribui¸˜o usando este e ca comando: shell> /usr/local/mysql/bin/mysqld_safe --user=mysql & Se a sua vers˜o do MySQL for mais antiga do que 4. (Use mysqladmin shutdown para fazer isto.mysql.3. Para aplicar um patch compactado. mude para o diret´rio raiz da ´rvore o a fonte do MySQL e execute estes comandos: shell> gunzip < patch-file-name. P´gina 220. P´gina 1083.0. a Veja Se¸˜o 2.2 [Mule a ca tiple servers]. Vocˆ tamb´m pode alterar configure usando algumas vari´veis de ambiente. Depois de executar o passo make install.4. a ca 2. P´gina 111. Veja Se¸˜o 4.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 97 arquivos de incializa¸˜o. Para aplicar um patch da lista de mensagens. substitua safe_mysqld por mysqld_ a safe no comando: Se o comando falhar imediatamente com mysqld daemon ended ent˜o vocˆ pode achar ala e guma informa¸˜o no arquivo ‘diret´rio-dados-mysql/’nome_maquina’.err’. salve a mensagem em que o patch aparece em um arquivo.3. c reinicie seu servidor MySQL. Para uma lista de op¸˜es suportadas e a co pelo configure. Mais informa¸˜es podem ser encontradas no pr´prio script ca co o support-files/mysql. A raz˜o ca o a pode ser que vocˆ j´ possua outro servidor mysqld sendo executado.2 Aplicando patches Algumas vezes patches aparecem na lista de mensagens ou s˜o colocados na ´rea de patches a a do MySQL./configure.server e em Se¸˜o 2. execute este comando: .html).gz | patch -p1 shell> rm config. Vocˆ pode precisar derrubar algum servidor atualmente em execu¸˜o antes de executar make e ca install. mude para o diret´rio raiz da sua distribui¸˜o fonte de seu MySQL e execute o ca estes comandos: shell> patch -p1 < patch-file-name shell> rm config.) Alguns sistemas n˜o lhe permitem a instalar uma nova vers˜o do programa se ele substitui agum que estiver em execu¸˜o. Normalmente vocˆ faz isto usando op¸˜es na linha de comando do ca e co configure. ca a Depois de tudo ter sido instalado. Aplique um patch no formato texto como mostrado acima para patches da lista de mensagens.3 [Automatic start].3 Op¸oes t´ c˜ ipicas do configure O script configure fornece uma grande gama de controle sobre como vocˆ configura sua e distribui¸˜o MySQL. (http://www. P´gina 118.cache shell> make clean Depois de aplicar um patch siga as instru¸˜es para uma instala¸˜o normal a partir dos co ca fontes come¸ando com o passo . e e a Veja Apˆndice E [Environment variables]. ca a 2.com/downloads/patches.

vocˆ pode alterar estas op¸˜oes com arquivos de e ca op¸˜es. ca a • Se vocˆ deseja compilar programas linkeditados estaticamente (por exemplo. Neste caso.sock’ usando os arquivos de op¸˜es do ca co MySQL. algo parecido com um destes: shell> .98 MySQL Technical Reference for Version 5.0./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql. tente make -k para continuar com o e resto da compila¸˜o mesmo se erros ocorrerem. mas vocˆ pode ignorar as ca a e advertˆncias sobre ‘mysql./configure --without-server Se vocˆ n˜o possui um compilador C++. ou evitar problemas com algumas ca a distribui¸˜es Red Hat Linux). ele n˜o tentar´ ligar com o libg++ ou e a a libstdc++. Depois de ter compilado o MySQL. mas altera a localiza¸˜o padr˜o para diret´rios de bano ca a ca a o cos de dados (normalmente ‘/usr/local/var’) e altera para /usr/local/mysql/data. P´gina 217.sock Perceba que o arquivo fornecido deve ter um caminho absoluto ! Vocˆ tamb´m pode. j´ que algumas vers˜es destas bibliotecas tem causado problemas estranhos a o para usu´rios do MySQL no passado. O segundo comando preserva o a diret´rio da instala¸˜o padr˜o.cc’. vocˆ pode remover o c´digo no configure que e o testa pelo compilador C++ e executar .0-alpha shell> . use a op¸˜o --without-server: ca shell> . co ca a • Se vocˆ estiver usando Unix e deseja que o arquivo socket do MySQL fique em um e diret´rio diferente do padr˜o (normalmente no diret´rio ‘/tmp’ ou ‘/var/run’) use o o a o comando configure da seguinte forma: shell> . obter mais velocidade./configure Quando vocˆ usar como seu compilador C++. alterar a localiza¸˜o de ‘mysql.) ca • Se vocˆ quiser uma biblioteca embutida do MySQL (libmysqld./configure --with-client-ldflags=-all-static \ --with-mysqld-ldflags=-all-static • Se vocˆ estiver usando gcc e n˜o tem libg++ ou libstdc++ instalados vocˆ pode dizer e a e ao configure para usar o gcc como seu compilador C++: shell> CC=gcc CXX=gcc . P´gina 925. use o comando configure. para criar e uma distribui¸˜o bin´ria.1.5 [Problems with mysql. a . execute configure desta forma: co shell> .4./configure --prefix=/usr/local \ --localstatedir=/usr/local/mysql/data O primeiro comando altera o diret´rio instala¸˜o para que tudo seja instalado sobre o ca ‘/usr/local/mysql’ em vez do padr˜o ‘/usr/local’.2 [Option files]. mysql n˜o ir´ compilar (ele ´ o programa e a a a e cliente que exige C++)./configure --prefix=/usr/local/mysql shell> ./configure --help Algumas das op¸˜es mais usadas normalmente com o configure est˜o descritas a seguir: co a • Para compilar apenas as bibliotecas clientes do MySQL e programas clientes e n˜o o a servidor. Veja Se¸˜o 4. Isto pode ser uma boa id´ia para se fazer se vocˆ tiver as bibliotecas acimas e e instaladas.sock]. (Se o make parar. Veja Se¸˜o A. ca • Se vocˆ n˜o deseja que seus arquivos de logs e diret´rios de bancos de dados fiquem e a o localizados sobre ‘/usr/local/var’.a) vocˆ deve usar a e e op¸˜o --with-embedded-server. ca O passo da compia¸˜o continuar´ tentaindo construir mysql./configure com a op¸˜o --without-server. e e mais tarde.

90. euc_kr.5. koi8_ru.8.0. Neste caso. ou win1251ukr. dos. Veja Se¸˜o 5.7.2 [Restri¸˜es NOT a e a ca co NULL].r#’ (‘r#’ ´ um n´mero de vers˜o). P´gina 86. koi8_ukr. algo como o seguinte ca a para todas as vers˜es recentes do gcc: o CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti" .29 or CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc newer \ CXXFLAGS="-O3 -mpentiumpro -mstack-align-double -felide-constructors \ -fno-exceptions -fno-rtti" Na maioria dos casos vocˆ pode obter um bin´rio MySQL razoavelmente otimizado e a usando as op¸˜es acima e adicionar as seguintes op¸˜es para a linha de configura¸˜o: co co ca --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static A linha completa de configura¸˜o dever´ ser. Existem algumas defini¸˜es de ca a a co configura¸˜o que vocˆ pode alterar para criar um bin´rio ainda mais r´pido. Para alterar a o conjunto padr˜o.2. use a op¸˜o --with-charset: a ca shell> ./configure --with-charset=CHARSET CHARSET pode ser um de big5. a . a Se a constru¸˜o falhar e produzir erros sobre seu compilador ou linkeditor n˜o ca a estarem aptos para criarem a biblioteca compartilhada ‘libmysqlclient. german1. tis620.1 [Conjunto de carca acteres]. cp1251. e a c ca P´gina 457. ca a Veja Se¸˜o 2. o MySQL usa o conjunto de caracteres ISO-8859-1 (Latin1).2. dependendo do compico a lador que vocˆ estiver usando: e Compiler gcc 2.95. czech./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static Os bin´rios que fornecemos no site Web MySQL em http://www.8 [Bin´rios do MySQL].3a Recommended options CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fnoexceptions -fno-rtti" gcc 2. swe7. latin2.so. Veja Se¸˜o 4. usa7. latin1.* compartilhada. P´gina 326.1 egcs 1. cp1257.5. dec8.so. a shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS . mas ca e a a isto ´ somente para usu´rios avan¸ados.3 [Compile and link options]. campos que n˜o podem ser NULL). Veja Se¸˜o 1.7. gb2312. hebrew.2 CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti" pgcc 2. hungarian. hp8. vocˆ pode evitar este problema fornecendo a op¸˜o e u a e ca --disable-share para o configure. P´gina 53.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 99 Segue algumas configura¸˜es de vari´veis de ambiente comuns. configure n˜o construir´ uma a a biblioteca libmysqlclient. gbk. ujis.com s˜o toa a dos compilados com otimiza¸˜o plena e deve ser perfeito para a maioria dos usu´rios. danish. sjis.mysql. em outras palavras. • Vocˆ pode configurar o MySQL para n˜o usar valores de campos DEFAULT para campos e a n˜o-NULL (isto ´./configure • Por padr˜o.

a • Para configurar o MySQL com c´digo para depura¸˜o.5. Isto ir´ criar uma biblioteca libmysqlclient_r com o qual a vocˆ dever´ ligar suas aplica¸˜es que fazem uso de threads.com/cgi-bin/download. complex e c para incluir todos caracteres que n˜o podem ser carregados dinamicamente ou all a para incluir todos os conjuntos nos bin´rios. Veja Se¸˜o 12. P´gina 132. a Com a op¸˜o --with-extra-charset=LISTA vocˆ pode definir qual conjunto de carca e acteres adicionais deve ser compilado no servidor. vocˆ deve dar uma e e olhada no comando SET OPTION CHARACTER SET. vocˆ deve executar myisamchk -r -q --set-character--set=charset em e cada tabela. c Vocˆ precisar´ do Bitkeeper 3.0 Para clonar o ramo 4.bitmover. P´gina 859. e a o 2. Depois que o BitKeeper estiver instalado. vocˆ precisar´ tamb´m compilar uma vers˜o e a e a thread-safe da biblioteca cliente do MySQL com as op¸˜es do configure --enableco thread-safe-client. Veja Se¸˜o 5./configure --with-debug Isto inclui uma aloca¸˜o segura de mem´ria que pode encontrar alguns erros e ca o ´ sobre o que est´ acontecendo. Veja Se¸˜o D. use este comando: .1 alfa. Seus ´ indices podem ser ordenados incorretamente. a Cuidado: Se vocˆ alterar o conjunto de caracteres depois de ter criado qualquer e tabela. ca P´gina 461. Fa¸a download do BitKeeper em http://www. (Isto pode acontecer se vocˆ instalar o MySQL.23 mysql-3. a • Op¸˜es que perten¸am a sistemas particulares podem ser encontrados na se¸˜o com co c ca detalhes espec´ ificos de sistemas neste manual.4 Instalando pela ´rvore de fontes do desenvolvimento a CUIDADO: Vocˆ deve ler esta se¸˜o somente se vocˆ estiver interessado em nos ajudar a e ca e testar nossos novos c´digos.cgi.100 MySQL Technical Reference for Version 5. Se vocˆ s´ deseja deixar o MySQL funcionando em seus sistema. a • Se seus programas clientes usam threads. use este comando: shell> bk clone bk://mysql.23 Para clonar o ramo 4.23 (antigo). o e o vocˆ deve usar uma distribui¸˜o padr˜o (pode ser uma distribui¸˜o bin´ria ou fonte).14 [Clientes e a co ca em threads]. Siga as instru¸˜es para instal´-lo.0-alpha Se vocˆ desja converter os caracteres entre o servidor e o cliente. Aqui LISTA ´ uma lista de conjuntos de caracteres separados por espa¸os.net/mysql-4. a 2. e ca a ca a Para obter noss mais nova ´rvore de desenvolvimento. Veja Se¸˜o 2.bkbits.6 [SET OPTION].0 (est´vel/produ¸˜o).bkbits. co a 3. depois reconfigurar o MySQL para e usar um conjunto diferente de caracteres e reinstal´-lo).1.0.3. use a op¸˜o --with-debug: o ca ca shell> .net/mysql-3.0 mysql-4. criar algumas tabelas.0 ou posterior para acessar nosso reposit´rio. use estas instru¸˜es: a co 1. fornecer saida a ca P´gina 1070. primeiro v´ ao diret´rio no qual vocˆ deseja a o e trabalhar e ent˜o use um dos seguintes comandos para clonar o ramo da vers˜o MySQL a a de sua escolha: Para clonar o ramo 3.1 [Depurando o servidor].6 [Notas espec´ ca ificas do Sistema Operacional]. use este comando: a ca shell> bk clone bk://mysql.

org/software/automake/ • http://www.bkbits. simplesmente substitua o bk:// com o http:// ao fazer um clone. ‘mysql-4.1 Para clonar o ramo de desenvolvimento 5. autoconf 2. e a libtool 1.0 Nos exemplos anteriores a ´rvore bin´ria ser´ configurada no subdiret´rio a a a o ‘mysql-3. ‘mysql-4.servidor. Para vers˜es posteriores. autoheader.bkbits. autoconf. Vers˜es mais antigas do bison podem exiobir este erro: sql_yacc. Vers˜es do MySQL anteriores a 4. BSD yacc 91. ou ‘mysql-5.1/’. automake) # for InnoDB (cd bdb/dist. simplesmente configure a vari´vel de ambiente a http_proxy para apontar para o seu proxy: shell> export http_proxy="http://seu. um grande n´mero de sistemas operacionais j´ vem com a ferramente GNU u a pr´ instalada ou s˜o fornecidos pacotes de instala¸˜o da mesma.gnu.0 mysql-5.1 mysql-4./configure # Adicione suas op¸~es favoritas aqui co . e a ca elas podem ser encontradas nos seguintes locais: • http://www.1 O download inicial da ´rvore fonte pode demorar um pouco.23/’. Vocˆ precisar´ do GNU make. aclocal.0/’.75. automake (cd innobase.7. ˆ Se vocE precisa usar um servidor proxy.0.proxy:8080/" Agora. e Felizmente.yy:#####: o fatal error: maximum table size (32767) exceeded. as a o co chances de que a sua compila¸˜o falhe com mensagens de erros estranhas s˜o altas. De qualquer forma. e O comando comum para fazer em uma shell ´: e cd mysql-4.org/software/make/ Se vocˆ estiver tentando configurar o MySQL 4.0 bk -r edit aclocal. Nota: o tamanho m´ximo da a tabela n˜o ´ realmente excedido.bkbits. automake 1.1 podem tamb´m compilar com outras impleo e menta¸˜es yacc (e. vocˆ tamb´m pode e a a o o e e o BitKeeper via HTTP. sh s_all ) # for Berkeley DB . use este comando: shell> bk clone bk://mysql.org/software/libtool/ • http://www.1 vocˆ tamb´m precisar´ do bison e e e a 1.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 101 shell> bk clone bk://mysql. Embora muitos o sistemas operacionais j´ venham com suas pr´prias implementa¸˜es do make.net/mysql-4. autoheader. GNU bison ´ uma co o e exigˆncia.net/mysql-4. Exemplo: shell> bk clone http://mysql.1 mysql-4. o Se vocˆ est´ atr´s de um firewall e s´ pode iniciar conex˜es HTTP. a 4.5. ca a Consequentemente ´ altamente recomendado usar o GNU make (algumas vezes e tamb´m chamado gmake).gnu. autoconf.4 e m4 para executar o pr´ximo conjunto de comandos. dependendo da velocidade a de sua conex˜o.g.net/mysql-5.gnu.0/’ do diret´rio atual.30). o erro ´ causado por um bug nas vers˜es mais novas a e e o do bison.gnu.53 (ou posterior).org/software/autoconf/ • http://www. seja paciente.

o comando pode sobrescrever sua vers˜o atual instaa ca a lada.net:8080/mysql-4. apenas envie uma descri¸˜o. respectivamente: Para clonar o MySQL Control center. Eles podem ser clonados da seguintes forma.2 [MySQL test suite]. tcp-port e unix-socketco path que as usadas pelo seu servidor em produ¸˜o.bkbits. mas ´ prefer´ usar o m´todo a a u a a e ivel e bk diffs descrito arteriormente. envie um email para o mesmo endere¸o com um patch. Vocˆ tamb´m pode procurar altera¸˜es.1. Seja r´ igido com sua nova instala¸˜o e tente fazer com que os novos recursos falhem. bk c diffs ir´ produzir um patch para vocˆ ap´s fazer as altera¸˜es no c´digo fonte./configure com valores diferentes para as op¸˜es prefix. n´s recomendamos que vocˆ execute e ca o e . Se vocˆ tem outra instala¸˜o do MySQL. BitKeeper tem um ´timo utilit´rio de ajudar que vocˆ pode acessar via bk helptool. Entretanto. ca 6. Para compilar e em uma arquitetura diferente. se vocˆ pensar que tem uma id´ia ca a e e e melhor em como fazer algo. Se a e o co o vocˆ n˜o tiver tempo para codificar sua id´ia. a 8.1.7. ca a 7. coment´rios e c´digo fonte online procurando por e e co a o ex. vocˆ pode usar ‘BUILD/compile-pentium-debug’. Se vocˆ instalou as ultimas vers˜es das ferramentas GNU e ´ o exigidas.1 [Mailing-list].Tenha certeza que todas as ferramentas necess´rias a a estejam instaladas e que sua vari´vel PATH esteja corretamente configurada para que a sua shell possa encontr´-la. Vocˆ pode examinar o hist´rico de altera¸˜es para a ´rvore com todos os diffs usando bk e o co a sccstool.bkbits.mysql. http://mysql. por faca vor informe isto tamb´m. Al´m disso. use o seguinte comando: . Veja Se¸˜o 14. n˜o hesite em enviar um e-mail para lista de email “internals” do MySQL. e elas falharam tentando processar nossos arquivos de configura¸˜o.1. Geralmente vocˆ n˜o precisar usar a ca e a commit (j´ que o ´rvore p´blica n˜o permitir´ bk push). co 9. por favor relate-o para e a ca a bugs@lists. O manual est´ em uma ´rvore separad que pode ser clonada com: a a shell> bk clone bk://mysql. se vocˆ executar aclocal e obtˆm um erro de e e e command not found n˜o o reporte. Depois da opera¸˜o inicial bk clone para obter a ´rvore fonte. bem como a submiss˜o openlogging. modifique o script removendo op¸˜es que s˜o espec´ co a ificas da arquitetura Pentium. o a e 11. 5.0.com. P´gina 33.net/mysqldoc mysqldoc Existe tamb´m um ´rvore p´blica do BitKeeper para o MySQL Control Center e Connece a u tor/ODBC. Quando a constru¸˜o estiver pronta. Veja u a Se¸˜o 1. confira se vocˆ realmente c a e tem a libtool instalada! Uma cole¸˜o de nossos scripts de configura¸˜o padr˜es est´ localizada no subdiret´rio ca ca o a o ‘BUILD/’.0-alpha make Caso apare¸am alguns erros estranhos durantes este est´gio. execute make install. vocˆ deve executar bk ca a e pull periodicamente para obter as atualiza¸˜es.1 para MySQL 4. Se vocˆ chegar ao est´gio make e a distribui¸˜o n˜o compilar. Note que qualquer commit (bk ci ou bk citool) ir´ disparar o envio da mensagem com a as altera¸˜es paa nossa lista de email internos. Se vocˆ ver alguns diffs estranhos ou c´digo sobre o qual vocˆ tenha alguma e o e d´vida. e a e ca 10. Se preferir. P´gina 892.102 MySQL Technical Reference for Version 5.org co a usual apenas com os coment´rios da altera¸˜o. Seja cuidadoso com isto ca em uma m´quina de produ¸˜o. ca Inicie executando make test.

seria executar make distclean 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.net/myodbc3 myodbc3 2.6 [MIT-pthreads]./configure --with-low-memory Esta op¸˜o adiciona -fno-inline na a linha de compila¸˜o se vocˆ estiver usando ca ca e gcc e -O0 se vocˆ estiver usando outro programa. Quando configure inicia. confira a lista abaixo. se ele existir.cc’ com fun¸˜es inline. vocˆ pode desejar remover primeiro antigos arquivos objeto de e constru¸˜es anteriores. P´gina 106 para avisos que podem ocorrer ca a usando MIT-pthreads. Esta informa¸˜o ´ armazenada no arca e quivo ‘config. e a e • Cada vez que vocˆ executa configure. porque eles foram compilados usando diferentes op¸˜es de conco co figura¸˜o. A solu¸˜o para v´rios problemas envolve reconfigura¸˜o. Essa conu ca jetura ´ inv´lida quando vocˆ reconfigurar. co co execute estes comandos antes de re-executar configure: shell> rm config. Em outros sistemas. ele procura por este arquivo. Se vocˆ precisa reconfigurar.3. assumindo que aquela informa¸˜o continua correta.5 Lidando com Problemas de Compila¸˜o ca Todos programas MySQL compilam de forma limpa sem alertas no solaris usando gcc. vocˆ provavele e e mente tem de falta de mem´ria ou espa¸o de swap: o c Internal compiler error: program cc1plus got fatal signal 11 ou Out of virtual memory ou Virtual memory exhausted O problema ´ que gcc necessita de grande quantidade de mem´ria para compilar e o ‘sql_yacc. vocˆ deve executar make de novo para ree e compilar.bkbits.cache shell> make clean Uma alternativa. alertas podem ocorrer devido a diferen¸as em arquivos include dos c sistemas.cc’ como os mostrados abaixo.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 103 shell> bk clone http://mysql.3. lˆ seu e conte´do. use o seguinte comando: shell> bk clone http://mysql. Veja Se¸˜o 2. ca Para prevenir antigas informa¸˜es de configura¸˜es ou arquivos objetos de serem usados. ele pode usar informa¸˜o e a ca que foi colhida durante a chamada anterior. Entretanto. Vocˆ deve tentar a op¸˜o --withe e ca low-memory mesmo se vocˆ tiver muita mem´ria e espa¸o de swap que vocˆ ache ser e o c e suficieente para n˜o ocorrer erros.cache’. fa¸a ca a ca e c notas do seguinte: • Se configure ´ executado depois dele j´ ter sido chamado. Tente executando configure com a op¸˜o --withco ca low-memory: shell> .net/mysqlcc mysqlcc Para clonar o Connector/ODBC.bkbits. Para outros problemas. Este problema tem ocorrido mesmo em sistemas a .

Vocˆ podem tamb´m ter problemas durante a compila¸˜o relacionados ` g++.a .o)(..text+0x129): In function ‘my_raid_open’: : undefined reference to ‘operator new(unsigned)’ .a .5.text+0x189): In function ‘my_raid_open’: : undefined reference to ‘operator delete(void*)’ .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.a(raid.a -lpthread -lz -lcrypt -lnsl -lm -lpthread . vocˆ pode usar gcc como seu compilador C++.. vocˆ deve atualizar sua ca e vers˜o de make para GNU make: a making all in mit-pthreads ./mysys/libmysys. De uma olhada no arquivo ‘config.. se vocˆ quiser compilar o MySQL e e e com a funcionalidade RAID (veja Se¸˜o 6..a .text+0x79): In function ‘my_raid_create’: : undefined reference to ‘operator new(unsigned)’ . este comportamento pode causar problemas durante e a compila¸˜o.. configure escolhe c++ como o nome do compilador e GNU c++ liga com a lg++.o)(.o)(. com certeza.log’. libg++ e e libstdc++./mysys/libmysys. No entanto gostariamos de lhe recomendar a n˜o usar libg++ ou a libstdc++ com o MySQL j´ que isto ir´ aumentar o tamanho do bin´rio do mysqld a a a sem lhe trazer nenhum benef´ icio.. Algumas vers˜es destas bibliotecas tamb´m tem o e causado problemas estranhos para os usu´rios MySQL no passado. • Por padr˜o./strings/libmystrings.3 [CREATE TABLE].104 MySQL Technical Reference for Version 5./mysys/libmysys. Ele deve conter a raz˜o exata do porque seu compilador C++ n˜o funciona! Para trabalhar evitando a a estes problemas. como um dos seguintes. ´ instalando g++.o libnisam.0-alpha com boas configura¸˜es de hardware e a op¸˜o --with-low-memory geralmente corrige co ca isto.o sort. mas n˜o o a a ifaz a liga¸˜o em libg++ ou libstdc++ por padr˜o. libg++ e e ca a ou libstdc++.a(raid. Uma causa destes problemas ´ que vocˆ pode n˜o ter g++ ou vocˆ pode ter g++ mas n˜o e e a e a ter o libg++ ou o libstdc++../configure Isto funciona porque gcc compila c´digo fonte C++ t˜o bem quanto g++ faz. como o seguinte: ca configure: error: installation or configuration problem: C++ compiler cannot create executables. P´gina 597 para ca a mais informa¸˜es sobre tipos de tabela RAID) e vocˆ estiver usando o GNU gcc vers˜o co e a 3 e acima./mysys/libmysys.o)(. Se vocˆ estiver usando gcc.a(raid. Por exemplo: a shell> CXX="gcc -O3" .0.a(raid./dbug/libdbug. Se vocˆ obter erros como estes abaixo durante o est´gio de liga¸˜o quando e a ca vocˆ configurar o MySQL para compilar com a op¸˜o --with-raid. tente usar o gcc e ca como o seu compilador C++ definindo a vari´vel de ambiente CXX mencionada acima: a gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk./mysys/libmysys. a Usar gcc como compilador C++ tamb´m ´ exigido. Tente configurar a e vari´vel de ambiente CXX para "gcc -O3"./mysys/libmysys.a(raid.text+0xdd): In function ‘my_raid_create’: : undefined reference to ‘operator delete(void*)’ . ca a Outra forma de corrigir estes problemas..o)(.

8.3a em seu lugar.2.. (struct sockaddr *)&cAddr. line 645: In this statement. porque configure e a e regenera ‘config. a O GNU make vers˜o 3. which is not compatible with "int". P´gina 86 para uma lista de defini¸˜o de op¸˜es ca a ca co que tenham sido uteis em v´rios sistemas.yy".0. mas recomendamos o uso do gcc 2.cc’.cc’ ´ gerado pelo ‘sql_yacc. line 18: Badly formed macro assignment or make: file ‘Makefile’ line 18: Must be a separator (: or pthread. Isto ´ um ind´ de que sua vers˜o do yacc ´ deficiente. the referenced type of the pointer value "&length" is "unsigned long". (Perceba que vocˆ dever´ fazer isto cada vez que vocˆ executar configure. Normalmente o processo de e constru¸˜o n˜o necessita criar ‘sql_yacc.cc.h’. &length). ´ a • Se vocˆ recebeu uma mensagem de erro como esta.yy’. dependendo de seu sistema operacional. Procure e por estas linhas: /* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX Altere XXX para size_t ou int.95. edite o arquivo ‘config.1 funciona. Exemplo: shell> shell> shell> shell> shell> CC=gcc CFLAGS=-O3 CXX=gcc CXXFLAGS=-O3 export CC CFLAGS CXX CXXFLAGS Olhe em Se¸˜o 2. Vocˆ pode co a e tamb´m especificar os nomes do compilador a ser usado da mesma forma utilizando CC e e CXX.2 ou egcs 1. adicione as op¸˜es para as vari´veis de ambiente CFLAGS e CXXFLAGS. line xxx fatal: default action causes potential. e o configure n˜o detectou corretamente o tipo do ultimo argumento para accept(). a a • Se vocˆ deseja definir algumas op¸˜es que devem ser usadas pelo seu compilador C ou e co C++. Para corrigir isto. new_sock = accept(sock.75 ir´ funcionar.h’ (que ´ gerado pelo configure). ´ necess´rio atualizar o compilador e e a gcc: O gcc 2.h: No such file or directory O Solaris e o FreeBSD s˜o conhecidos por terem alguns problemas com o make. a a .Cap´ ıtulo 2: Instala¸˜o do MySQL ca 105 make: Fatal error in reader: Makefile. a ´ getsockname() ou getpeername(): cxx: Error: mysqld. porque o MySQL j´ vem com uma c´pia ca a a o pr´-gerada. Provavelmente vocˆ precisar´ e icio a e e a instalar o bison (a vers˜o GNU de yacc) e us´-lo no lugar do yacc..) • O arquivo ‘sql_yacc. se vocˆ necessita recri´-lo vocˆ pode encontrar este erro: e e a e "sql_yacc.8 [MySQL binaries]. Entretanto. • Se vocˆ obtem erros como estes vistos abaixo enquanto estiver compilando o mysqld.

0-alpha • Se vocˆ necessita depurar mysqld ou um cliente MySQL. extraia este arquivo fonte no n´ mais alto do diret´rio de fontes do ivel o MySQL. o co o • As verifica¸˜es que determinam se MIT-pthreads ser´ usado ou n˜o. Em algumas distribui¸˜es a co Linux.2 [Linux].3. Veja Se¸˜o 2. P´gina 1076. ca Note que no Linux vocˆ N~O deve usar MIT-pthreads mas instalar LinuxThreads! Veja e A Se¸˜o 2. Ele testa os resultados errados permitidos. Isto inclui antigos sistemas FreeBSD.106 MySQL Technical Reference for Version 5.c:1329: warning: assignment makes pointer from integer without a cast make[2]: *** [libmysql. Ele criar´ um novo subdiret´rio mit-pthreads. MIT-pthreads n˜o fazem mais parte da distribui¸˜o a ca fonte. Existem dois modos de contornar este problema: a a • Certifique-se de que o GNU C++ g++ est´ instalado. vocˆ precisa fazer o download dele separadamente em e e http://www. P´gina 137.4 e anteriores entre outros. isto a a significa que vocˆ precisar´ usar -h ou --host quando executar programas clientes. e a . ca a • Se vocˆ tem um erro de compila¸˜o no Linux (ex. e e • Use o gcc como o seu compilador C++ configurando a vari´avel de ambiente CXX a para gcc: export CXX="gcc" Note que vocˆ precisa executar o configure novamente ap´s isto. Se vocˆ ca o e configurou a distribui¸˜o usando --without-server para construir somente o c´digo ca o cliente. em outro ele ´ chamado gcc-c++. clientes n˜o ir˜o saber se o MIT-pthreads est´ sendo usado e ir´ usar conex˜es a a a a o socket Unix por padr˜o.2. execute configure com a e op¸˜o --with-debug. ca a Note que a partir do MySQL 4./configure --with-mit-threads Constru¸˜o em um diret´rio n˜o fonte n˜o ´ suportado com o uso de MIT-pthreads. ca a Se seu sistema n˜o fornece suporte nativo a thread.2 [Debugging client]. SuSE Linux 8. a o • Na maioria dos sitemas. se o g++ n˜o est´ instalado. vocˆ precisar´ construir o MySQL a e a usando o pacote MIT-pthreads. Se vocˆ precisar deste pacote. P´gina 78.0.gz Depois do download.0. SunOS 4. ca a Veja Se¸˜o D.2. e o 2. o pacote exigido ´ chamado gpp. o script configure tenta determinar o n´mero correto de argumentos a u usando o compilador GNU C++ g++.lo] Error 1 Por padr˜o.6. vocˆ pode for¸ar o uso de MIT-pthreads executando o e c configure com a op¸˜o --with-mit-threads: ca shell> . ca o a a e porque n´s queremos minimizar nossas altera¸˜es para este c´digo. Como os sockets Unix n˜o funcionam sob MIT-pthreads.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.1 ou Red Hat Linux e ca 7.c:1329: warning: passing arg 5 of ‘gethostbyname_r’ from incompatible p libmysql.3) parecido com o seguinte: libmysql.X. Solaris 2. ent˜o recompile e ligue seus clientes com a nova biblioteca cliente.mysql.tar. ocorrer´ somente co a a a durante a parte do processo de configura¸˜o que trata com o c´digo do servidor.c:1329: too few arguments to function ‘gethostbyname_r’ libmysql.3 [Qual SO].6 Notas MIT-pthreads Esta se¸˜o descreve alguns dos detalhes envolvidos no uso de MIT-pthreads.

3. • Na liga¸˜o. Isto s´ aconteceu conosco ca e a o quando for¸amos uma queda do servidor e fizemos uma reinicializa¸˜o imediata.)’ implicit declaration of function ‘int strtoul(.o) value=0x4.. ca e elas podem ser ignoradas: ld: warning: symbol ‘_iob’ has differing sizes: (file /my/local/pthreads/lib/libpthread. travas de sistema s˜o desabile a itadas por padr˜o por raz˜es de performance.so value=0x140).a(findfp.a(findfp. a a e a mas pode ser interessante para alguns.7 Instalando o MySQL a partir do Fonte no Windows Estas instru¸˜es descrevem como construir o bin´rio do MySQL a partir do fonte paras co a vers˜es 4. error: ’Can’t connect to mysql server on localhost (146)’ A solu¸˜o para isto ´ matar o servidor mysqld e reinici´-lo. Isto s´ ´ percebido quando vocˆ executa mysqladmin --sleep. (Isto n˜o ´ necess´rio.)’ • N˜o colocamos readline para funcionar com MIT-pthreads. Por exemplo: shell> mysqladmin version mysqladmin: connect to server at ’’ failed. Vocˆ pode dizer ao servidor para usar a o e travas de sistema com a op¸˜o --external-locking.o) value=0x4. Isto s´ ´ necess´rio se vocˆ ca o e a e quiser executar dois servidores MySQL no mesmo diret´rio de dados (no que n˜o ´ o a e recomendado) • Algumas vezes o comando pthread bind() falha ao ligar a um socket sem nenhuma mensagem de erro (pelo menos no Solaris). Vocˆ deve esoe e e perar pela chamada sleep() para terminar.a(findfp. a MySQL AB n˜o aconselha que vocˆ utilize um servidor MySQL ca a e constru´ por vocˆ mesmo a partir de um fonte. vocˆ pode receber mensagens de alerta como estes (pelo menos no Solaris)..o) definition taken • Alguns outros alertas tamb´m podem ser ignorados: e implicit declaration of function ‘int strtoll(.) 2.o) definition taken ld: warning: symbol ‘__iob’ has differing sizes: (file /my/local/pthreads/lib/libpthread. antes da interru¸˜o ser servida e o processo ca parar.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 107 • Quando o MySQL ´ compilado usando MIT-pthreads. Nota: As instru¸˜es neste documento est˜o restritas aos usu´rios que queiram testar o co a a MySQL no Windows a partir da ultima distribui¸˜o fonte ou da ´rvore do BitKeeper. a chamada de sistema sleep() n˜o ´ interromp´ com SIGINT a e ivel (break). Normalmente ´ melhor usar uma disido e e ´ especificamente para desemtribui¸˜o bin´ria precompilada do MySQL que ´ construida ca a e .. file /usr/lib/libc.a(findfp. c ca • Com MIT-pthreads. O resultado ´ que todas conex˜es ao servidor e o falham. ´ ca a Para uso em produ¸˜o.. file /usr/lib/libc. /my/local/pthreads/lib/libpthread. /my/local/pthreads/lib/libpthread. As instru¸˜es s˜o fornecidas para construir bin´rios a o co a a partir de uma distribui¸˜o fonte padr˜o ou a partir da ´rvore do BitKeeper que cont´m o ca a a e fonte do desenvolvimento mais atuais.so value=0x140).1 e acima no Windows.

0-alpha penho otimizado no Windows pela MySQL AB. Instru¸˜es para instalar uma distribui¸˜o co ca bin´ria est´ dispon´ em Se¸˜o 2.) A abordagem do BitKeeper. Distribui¸˜es fontes empacotadas e a co est˜o dispon´ a iveis para vers˜es distribu´ o idas do MySQ e podem ser obtidas em http://www.1 e acima: ca a 1. Obtenha um pacote de uma distribui¸˜o fonte pela MySQL AB para a vers˜o do ca a MySQL que vocˆ est´ particularmente interessado. e o .com/vstudio/downloads/updates/sp/vs6/sp5/faq. P´gina 108. Se vocˆ estiver usando uma distribui¸˜o fonte do Windows. (A raz˜o para isto ´ a i-lo a e que alguns dos passos de configura¸˜o e constru¸˜o exigem ferramentas que funcionam ca ca apenas no Unix.3. a a ivel ca a Para construir o MySQL no Windows a partir do fonte.7.1 [Mailing-list].2 [Windows BitKeeper Build]. 3.3. o 2. Mais detalhes em: e a http://msdn.108 MySQL Technical Reference for Version 5.bitkeeper.1 [Windows installation].7.1 e arquivos do espe¸o de trabalho do VC++ s˜o compat´ c a iveis com o Microsoft Visual Studio 6. Veja Se¸˜o 1. Se vocˆ planeja fazer isto. Inicie o compilador VC++ 6. 5. vocˆ pode ir diretamente para e ca e Se¸˜o 2. 4.aspx. ou tiver sugest˜es e a a o sobre o mode de melhorar o processo de constru¸˜o atual no Windows. vocˆ precisa dos seguintes compie ladores e recursos dison´ iveis em seu sistema Windows: • Compilador VC++ 6. No menu File. envie uma mensagem ca para a lista de email win32. • Aproximadamente 45 MB de espa¸o em disco.0 e as edi¸˜es acima (7. P´gina 33. selecione Open Workspace.0.0. c • 64 MB de RAM Vocˆ tamb´m precisar´ de um distribui¸˜o fonte para o Windows.: ‘workdir’). 2. Vocˆ pode empacotar um distribui¸˜o fonte vocˆ mesmo a partir da ultima ´rvore fonte e ca e a de desenvolvimento do BitKeeper. exige: • Um sistema executando Unix ou um sistema tipo Unix.microsoft. a ca a Se vocˆ encontrar alguma coisa que n˜o est´ funcionando como esperado. P´gina 60.1 [Windows VC++ Build].com/downloads/.0 (atualizado com o SP 4 ou 5 e pacote Pre-processador) O pacote Pre-processador ´ necess´rio para a macro assembler.1 Construindo o MySQL Usando VC++ Nota: O MySQL 4. P´gina 110.1.0/.zip’.7.7. ca a 2. Crie um diret´rio de trabalho (ex.NET) e testados pela equipe da MySQL co AB antes de cada distribui¸˜o.1. Para contruir a partir da ´rvore do ca a a BitKeeper. como o Linux • BitKeeper 3. Abra o workspace ‘mysql. vocˆ deve criar o pacote e e em um sistema Unix e ent˜o transfr´ para seu sistema Windows.3.dsw’ que vocˆ encontrar no diret´rio de trabalho. Vocˆ pode obter o BitKeeper em e http://www.mysql. Existem dois modos de e e a ca conseguir uma distribui¸˜o fonte do MySQL vers˜o 4. ca Siga este procedimento para construir o MySQL: 1. v´ para Se¸˜o 2.com/.0 instalado neste sistema. Descompacte a distribui¸˜o fonte no diret´rio mencionado acima usando Winzip ou ca o outra ferramenta que possa ler arquivos ‘.

o a Se vocˆ quiser testar o seu servidor usando o diret´rio raiz de uma ´rvore fonte e seu e o a diret´rio de dados como o diret´rio base e o diret´rio de dados. Ent˜o instale o MySQL da seguinte forma: a 1. P´gina 60. No menu Build. o Quando vocˆ estiver certo de que os programas que vocˆ construiu est˜o funcionando core e a retamente. 12.cnf’ ou ‘my. O instru¸˜es gerais de inicializa˜o do servidor e co a est˜o em Se¸˜o 2. Note que se vocˆ quiser o e construir tanto vers˜es liberadas quanto depuradas vocˆ pode selecionar a op¸˜o o e ca “build all” do menu Build. Clique sobre a tela selecionada mysqld . vocˆ precisar´ dizer ao o o o e a servidor os seus caminhos.1. Vers˜es liberadas dos programas e bibliotecas s˜o o a colocados nos diret´rios ‘client_release’ e ‘lib_release’. Vers˜es depuradas dos programas e bibliotecas s˜o colocados nos diret´rios o a o ‘client_debug’ e ‘lib_debug’. Vocˆ tamb´m pode fazer into na linha de comando com as e e op¸˜es --basedir e --datadir. O servidor constru´ usando as instru¸˜es anteriores ir´ esperar que ido co a o diret´rio base e de dados do MySQL seja ‘C:\mysql’ e ‘C:\mysql\data’ por padr˜o. bibliotecas e alguns ca ca aplicativos clientes. Pressione F7 para iniciar a constru¸˜o da depura¸˜o do servidor. Se vocˆ tiver um diret´rio o e o de dados existente em qualquer lugar que vocˆ queira usar.Win32 Debug e clique OK. 8. do mesmo modo. Por exemplo. vocˆ pode especific´-lo no e e a se caminho. 7.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 109 6. Teste o servidor. depeno dendo de qual servidor vocˆ queira usar. vocˆ tamb´m deve criar e a e e diversos diret´rios adicionais: o mkdir \mysql\include mkdir \mysql\lib mkdir \mysql\lib\debug mkdir \mysql\lib\opt Se vocˆ quiser fazer um benchamrk do MySQL. pare o servidor. ou colocar op¸˜es apropriadas no arquivo de op¸˜es (o co co co arquivo ‘C:\my. Quando o servidor est´ em execu¸˜o de modo independente ou como um servi¸o daseado a ca c em sua configura¸˜o. tente se conectar a ele pelo utilit´rio interativo mysql de linha de ca a comando que existe em seu diret´rio ‘client_release’ ou ‘client_debug’. e 10. Compile as vers˜es distribu´ o idas que vocˆ desejar. para instalar dentro o de ‘C:\mysql’). crie este diret´rio: e o . Vocˆ precisar´ adaptar as a ca a e a instru¸˜es de forma apropriada se vocˆ quiser usar um diret´rio base ou diret´rio de co e o o dados diferente.1 [Windows installation]. 13. selcione o menu Set Active Configuration. Inicie o ser servidor a partir do diret´rio ‘client_release’ ou ‘client_debug’. 11. 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. Crie o diret´rio para instalar os arquivos do MySQL. 9.ini’ no diret´rio do Windows).

0.* C:\mysql\lib\debug lib_release\mysqlclient. 2.def C:\mysql\include Se vocˆ quiser fazer um benchmark do MySQL. note que este procedimento deve ser realco izado em um sistema executando um sistema opercional Unix ou similar. Copie do diret´rio workdir para o diret´rio c:\mysql os seguintes diret´rios: o o o copy client_release\*. use as seguintes instru¸˜es.110 MySQL Technical Reference for Version 5. ca a 2. (Sabe-se que este procedimento funciona bem com o Linux.) 1.4 [Installing source tree].0-alpha mkdir \mysql\sql-bench Benchmark exigem suporte Perl. P´gina 100. to be used on your Windows system.3 [Windows prepare environment].3. vocˆ tamb´m deve fazer isto: e e e xcopy sql-bench\*. After making sure that the build process completed successfully. P´gina 62. ca a ´ 2.1 ou acima.1.* C:\mysql\bench /E Configure e inicie o servidor da mesma forma que a distribui¸˜o bin´ria do Windows. Por favor.* C:\mysql\lib\opt lib_release\zlib.exe xcopy scripts\*.* C:\mysql\lib\debug lib_debug\zlib.7.1. Para mais informa¸˜es sobre como clonar a ´rvore fonte veja as instru¸˜es em co a co Se¸˜o 2. Veja ca a Se¸˜o 2. Configure e construa as distribui¸˜es para que vocˆ tenha um bin´rio do servidor para co e a trabalhar.* C:\mysql\share /E Se vocˆ quiser compilar outros clientes e lig´-los ao MySQL. por exemplo.2 Criando um Pacote Fonte do Windows a partir da Ultima Fonte de Desenvolvimento Para construir o ultimo pacote fonte do Windows a partir da arvor´ fonte atual do Bit´ e Keeper.lib C:\mysql\lib\debug lib_debug\libmysql. vocˆ tamb´m deve fazer e a e e isto: copy copy copy copy copy copy copy copy lib_debug\mysqlclient. Um modo de se fazer isto ´ executar o seguinte comando no diret´rio de e o mais alto n´ de sua ´rvore fonte: ivel a shell> . como desea a jado).h C:\mysql\include libmysql\libmysql./BUILD/compile-pentium-max 3. Clone a ´rvore fonte do BitKeeper para o MySQL (vers˜o 4. run the following utility script from top-level directory of your source tree: shell> .* C:\mysql\lib\opt include\*.* C:\mysql\scripts /E xcopy share\*.exe C:\mysql\bin copy client_debug\mysqld. You can supply different options to the script based on your needs./scripts/make_win_src_distribution This script creates a Windows source package.exe C:\mysql\bin\mysqld-debug. It accepts the following options: .lib C:\mysql\lib\opt lib_release\libmysql.3.

7.gz package instead of . BINDIR ca a e o ca . To compile it. ca P´gina 108. este ´ o diret´rio principal da sua ca e o ´rvore fonte do MySQL. 4. BINDIR ´ o caminho ca co e para a localiza¸˜o na qual os programas como mysqladmin e mysqld_safe est˜o instalados./bin/mysqld_safe --user=mysql & Para uma distribui¸˜o bin´ria (sem ser pacotes RPM ou PKG). a o ca Para uma distribui¸˜o bin´ria. e e Testes s˜o geralmente facilmente feitos de um diret´rio raiz da distribui¸˜o MySQL. Para uma distrubui¸˜o fonte. Se vocˆ n˜o deseja ter o banco de dados a a e a test vocˆ pode removˆ-lo com mysqladmin -u root drop test depois de iniciar o servidor. Para uma distribui¸˜o fonte. As estrandas s˜o criadas sem senhas. Vocˆ pode tamb´m desejar que o servidor inicie e pare automaticamente quando seu e e sistema iniciar e desligar./bin/mysql_install_db shell> .Cap´ ıtulo 2: Instala¸˜o do MySQL ca 111 --debug Debug. iniciar o servidor e ter certeza que o servidor est´ funcionando o a bem. a (Se sua vers˜o for anterior a 4. a Nos comandos mostrados abaixo nesta se¸˜o e nas seguintes subse¸˜es.zip --help Show this help message By default. O script mysqld_safe inicia o servidor mysqld.zip’. ca a Para uma distribui¸˜o bin´ria este ´ o diret´rio ‘bin’. ent˜o deve a a e a ser seguro execut´-lo em quaisquer circunstˆncias. where VERSION represents the version of your MySQL source tree. este ´ seu diret´rio de instala¸˜o (normalmente algo como ca a e o ca ‘/usr/local/mysql’). fa¸a isto: ca a c shell> cd diretorio_instala¸~o_mysql ca shell> .3./scripts/mysql_install_db shell> cd diretorio_instala¸~o_mysql ca shell> . use the instructions in Se¸˜o 2.1 [Windows VC++ Build].) a mysql_install_db n˜o ir´ sobrescrever nenhuma tabela de privil´gios antiga./bin/mysqld_safe --user=mysql & O script mysql_install_db cria o banco de dados mysql que ir´ armazenar todos privil´gios a e do banco de dados. make_win_src_distribution creates a zipped archive with the name ‘mysql-VERSION-win-src.4 Configura¸˜es e Testes P´s-instala¸˜o co o ca Uma vez instalado o MySQL (de uma distribui¸˜o bin´ria ou fonte). use safe_mysqld em vez de mysqld_safe. a 2. Normalmente vocˆ instala as tabelas de concess˜es e inicia o servidor assim para instala¸˜es e o co baseadas em uma distribui¸˜o fonte: ca shell> . Copy or upload to your Windows machine the Windows source package that you have just created. vocˆ deve inicializar ca a e as tabelas de concess˜es. without creating the package --tmp Specify the temporary location --suffix Suffix name for the package --dirname Directory name to copy files (intermediate) --silent Do not list verbosely files processed --tar Create tar.0. o banco de dados test que vocˆ poder´ usar para testar o MySQL e e a tamb´m entradas de privil´gio para o usu´rio que usa o mysql_install_db e o usu´rio e e a a root.

se vocˆ e e preferir. mysql_install_db ´ realmente seguro de usar e e e n˜o ir´ atualizar nenhuma tabela que j´ exista.4. vocˆ pode executar mysql_install_db. P´gina 115. (entretanto. mysql_install_db precisa ser executado somente na primeira vez que vocˆ instala o MySQL. Isto ´ util se vocˆ e a o e´ e deseja instalar o MySQL em v´rias m´quinas com os mesmos privil´gios. inicie o servidor mysqld e configure as tabelas de concess˜es iniciais a o contendo os privil´gios que determinam como os usu´rios est˜o permitidos a conectar e a a ao servidor. a Vocˆ deve precisar executar mysql_install_db como root.frm’ O erro acima pode tamb´m ocorrer com uma distribui¸˜o bin´ria do MySQL se vocˆ e ca a e n˜o iniciar o MySQL executando o . • Se vocˆ deseja alterar o conte´do da tabelas de concess˜es depois de instal´e u o a las.8.) e mysql_install_db cria seis tabelas (user. veja Se¸˜o 2. a Existem algumas alternativas para executar o script mysql_install_db como ele ´ e fornecido na distribui¸˜o MySQL: ca • Vocˆ pode querer editar o mysql_install_db antes de execut´-lo. De forma resumidao. EXECDIR ´ provavelmente ‘/usr/local/libexec’. se vocˆ estiver atualizando uma instala¸˜o existente. vocˆ pode sempre executar mysql_install_db. e e ca vocˆ pode pular este passo. para alterar os e a privil´gios iniciais que s˜o instalados nas tabelas de concess˜es. Se necess´rio. EXECDIR ´ a localiza¸˜o na qual e e ca o servidor mysqld est´ instalado. columns_priv e func) no banco de dados mysql. P´gina 261. Isto ´ feito normalmente com o script mysql_install_db: e shell> scripts/mysql_install_db Normalmente.2 [Alterando usu´rios MySQL]. a menos que vocˆ especifique um diret´rio de instala¸˜o e e o ca diferente de ‘/usr/local’ quando vocˆ executa configure. tables_priv. Neste a a e caso. Para uma distribui¸˜o bin´ria. Se vocˆ n˜o configurar as tabelas de concess˜es. a . Uma descri¸˜o dos privil´gios iniciais ´ fornecido ca e e em Se¸˜o 4.0-alpha ´ provavelmente ‘/usr/local/bin’.0. Portanto. ent˜o usar mysql -u root mysql para e a conectar `s tabelas de concess˜es como o usu´rio root e usar instru¸˜es SQL para a o a co modific´-las diretamente. Instru¸˜es para executar o MySQL como um usu´rio sem privil´gios ´ co a e e detalhado em Se¸˜o A. isto ´ o mesmo que BINDIR./bin/mysqld_safe! Veja Se¸˜o 4.4. P´gina 332. ´ prov´vel que vocˆ s´ precise adicionar algumas instru¸˜es INSERT extras e a e o co para as tabelas mysql. e permitem a qualquer a c um a criar ou usar bancos de dados com o nome de ’test’ ou iniciando com ’test_’ .db. estes privil´gios ca a e permitem que o usu´rio root fa¸a qualquer coisa no MySQL. ent˜o se vocˆ n˜o tem certeza do que a a a a e a fazer. db. o seguinte erro ir´ aparecer no arquivo e a o a log quando vocˆ n˜o iniciar o servidor: e a mysqld: Can’t find file: ’host.112 MySQL Technical Reference for Version 5. pode executar o servidor MySQL como um usu´rio (n˜o-root) sem a a privil´gios. Entretanto. host.4 [Default privileges].2 [mysqld_ a ca safe].3. ca e Os testes s˜o descritos em detalhes abaixo: a 1. desde que o usu´rio possa ler e escrever arquivos no diret´rio de banco e a o de dados. P´gina 919 ca a a Se vocˆ tiver problemas com o mysql_install_db. a ca a e Para uma distribui¸˜o fonte.1 [mysql_install_ e ca db].user e mysql.

Verifique se vocˆ pode desligar o servidor: e shell> BINDIR/mysqladmin -u root shutdown 5. a 3. and you are welcome to modify and redistribute it under the GPL license. Verifique que vocˆ possa reiniciar o servidor. e ca P´gina 116. a 2.23. invoque-o com a e e op¸˜o --help.4 [Default privileges].sock 16 sec Threads: 1 Questions: 9 Slow queries: 0 Opens: 7 Flush tables: 2 Open tables: 0 Queries per second avg: 0. Server version Protocol version Connection TCP port UNIX socket Uptime: 3.32. a co Para maiores informa¸˜es sobre estas alternativas. for linux on i586 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This software comes with ABSOLUTELY NO WARRANTY.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 113 ´ • E poss´ recriar as tabelas de permiss˜es completamente depois delas j´ terem ivel o a sido criadas. Por exemplo: shell> BINDIR/mysqld_safe --log & Fa¸a isto usando mysqld_safe ou c .000 Memory in use: 132K Max memory used: 16773K Para ter uma id´ia do que vocˆ pode fazer com BINDIR/mysqladmin. e chamado o mysqld diretamente.23. co ca P´gina 261. mas deve ser similar a esta mostrada abaixo: a shell> BINDIR/mysqladmin version mysqladmin Ver 8. veja Se¸˜o 4. substitua bin/safe_mysqld por a bin/mysqld_safe no comando: Se vocˆ tiver problemas iniciando o servidor. Os seguintes comana ca dos fornecem um teste simples para conferir se o servidor est´ em funcionamento e a respondendo `s conex˜es: a o shell> BINDIR/mysqladmin version shell> BINDIR/mysqladmin variables A sa´ de mysqladmin version varia muito pouco dependendo de sua plataforma e ida vers˜o do MySQL. Vocˆ pode querer fazer isto se vocˆ j´ instalou as tabelas mas deseja e e a recri´-las depois das edi¸˜es mysql_install_db.14 Distrib 3.2 [Starting server].0. Use mysqladmin para verificar se o servidor est´ em execu¸˜o.4.32-debug 10 Localhost via Unix socket 3306 /tmp/mysql. veja Se¸˜o 2. This is free software.4. Inicie o servidor MySQL assim: shell> cd diretorio_instalacao_mysql shell> bin/mysqld_safe & Se a sua vers˜o do MySQL for mais antiga do que 4. ca 4.

Veja Se¸˜o 2.0-alpha Se o mysqld_safe falhar. P´gina 165. Execute alguns testes b´sicos para verificar se o servidor est´ funcionando.7.user FROM db" mysql +------+--------+------+ | host | db | user | +------+--------+------+ | % | test | | | % | test_% | | +------+--------+------+ Tamb´m existe uma suite de benchmark no diret´rio ‘sql-bench’ (sob o diret´rio de e o o instala¸˜o do MySQL) que vocˆ pode usar para comparar como o MySQL se comporta ca e em diferentes plataformas.114 MySQL Technical Reference for Version 5.1 o ca [Instala¸˜o Perl]. A sa´ a a ida deve ser similar ao mostrado abaixo: shell> BINDIR/mysqlshow +-----------+ | Databases | +-----------+ | mysql | +-----------+ shell> BINDIR/mysqlshow mysql Database: mysql +--------------+ | Tables | +--------------+ | columns_priv | | db | | func | | host | | tables_priv | | user | +--------------+ shell> BINDIR/mysql -e "SELECT host. ca a O diret´rio ‘sql-bench/Results’ cont´m os resultados de v´rias execu¸˜es em difero e a co entes bancos de dados e plataformas. e a a a a ca a 6. P´gina 116. Se n˜o funcionar. O diret´rio ‘sql-bench/Results’ cont´m os resultados de o e v´rias execu¸˜es em diferentes bancos de dados e plataformas.0. Os seguintes m´dulos a co o Perl adicionais s˜o necess´rios para executar o pacote de benchamrk: a a DBI DBD-mysql Data-Dumper Data-ShowTable Estes m´dulos podem ser obtidos em CPAN http://www. tente execut´-lo do diret´rio de instala¸˜o do MySQL (se a o ca vocˆ j´ n˜o estiver l´). execute estes comandos: .cpan.2 [Starting server]. Para executar todos testes.4. veja Se¸˜o 2.db.org/.

vocˆ deve desligar o servidor mysqld. ent˜o fa¸a assim: a a a c mv diretorio-dados-mysql/mysql diretorio-dados-mysql/mysql-old mysql_install_db Esta se¸˜o relaciona alguns problemas que podem ser encontrados ao executar mysql_ ca install_db: mysql_install_db n˜o instala as tabelas de permiss˜es a o Vocˆ pode descobrir que o mysql_install_db falha ao instalar as tabelas de e permiss˜es e termina depois de mostrar as seguintes mensagens: o starting mysqld daemon with databases from XXXXXX mysql daemon ended Neste caso. ca a J´ existe um daemon mysqld sendo executado a Neste caso. (Distribui¸˜es fontes RPMs incluem o diret´rio com os benchca a co o marks.tst Os resultados esperados s˜o mostrados no arquivo ‘. Se vocˆ n˜o entende o que aconteceu. come¸aram a existir arquivos a a c RPMs de benchmark chamados ‘mysql-bench-VERSION-i386. Se vocˆ deseja refazer suas tabelas de privil´gios.1 Problemas Executando o mysql_install_db O prop´sito do script mysql_install_db ´ gerar novas tabelas de privil´gios. A partir da vers˜o 3. ca para testes./tests/auto_imcrement. a e a inclua o log quando vocˆ postar um relato de erro usando mysqlbug! Veja e Se¸˜o 1. Instalair um segundo daemon mysqld n˜o funciona quando um daemon a estiver em execu¸˜o. a 2. ou talvez vocˆ simplesmente deseja executar duas instala¸˜es ao e co . e deve o indicar porque mysqld n˜o inicializa. vocˆ tamb´m pode executar os testes no subdie ca e e ret´rio ‘tests’.) Neste caso.res’. e a ca mas deseja colocar uma nova instala¸˜o em um diferente lugar (por exemplo. vocˆ provavelmente est´ usando uma dise a o e a tribui¸˜o bin´ria RPM. se e e e ele j´ est´ executando. vocˆ deve primeiramente instalar a suite de benchmark antes e de poder us´-lo.tst’. fa¸a isto: o c shell> BINDIR/mysql -vvf test < .Cap´ ıtulo 2: Instala¸˜o do MySQL ca 115 shell> cd sql-bench shell> run-all-tests Se vocˆ n˜o possui o diret´rio ‘sql-bench’. provavelmente n˜o ser´ necess´rio executar o mysql_install_db.4. quando vocˆ instae e lar o MySQL da primeira vez. Se vocˆ tem uma distribui¸˜o fonte.1. Por exemplo. vocˆ deve examinar o arquivo de log com muito cuidado! O log deve e se encontrar no diret´rio ‘XXXXXX’ nomeado pela mensagem de erro.rpm’ que cont´m c´digo e o ie dados de benchmark. para executar ‘auto_increment. ca Isto pode acontecer quando vocˆ j´ tiver uma instala¸˜o do MySQL existente. P´gina 36. a a a Vocˆ deve executar o mysql_install_db somente uma vez. Ele n˜o ir´ o e e a a afeter nenhum outro dado! Ele tamb´m n˜o far´ nada se vocˆ j´ tem a tabela de privil´gio e a a e a e do MySQL instalada.22 do MySQL.7.3 [Bug reports]./tests/auto_increment.

P´gina 925. P´gina 118.0. P´gina 220. primeiro deve-se criar e co um arquivo my.. Este script ´ usado primariamente na inicializa¸˜o e finale ca iza¸˜o do sistema. Veja tamb´m Se¸˜o 2. a .4.mysql.cnf e configurar op¸˜es de inicializa¸˜o para os tipos de tabelas que vocˆ co ca e planeja usar.com/.. ca u a Vocˆ n˜o tem direito de escrita no diret´rio ‘/tmp’ e a o Se vocˆ n˜o tem direito de escrita para criar um arquivo socket no local padr˜o e a a (em ‘/tmp’) ou permiss˜o para criar arquivos tempor´ris em ‘/tmp.4.5 [Problems with mysql.’ vocˆ ir´ a a e a obter um erro quando executar mysql_install_db ou quando iniciar ou usar mysqld. como segue: e o a shell> TMPDIR=/algum_dir_tmp/ shell> MYSQL_UNIX_PORT=/algum_dir_tmp/mysqld. execute manualmente os comandos SQL em mysql_install_db. ca a ‘algum_dir_tmp’ deve ser o caminho para o mesmo diret´rio no qual vocˆ tem o e permiss˜o de escrita.6. P´gina 629. Veja Apˆndice E [Environment variables].0 com uma vers˜o de glibc ane a a terior a 2. InnoDB). P´gina 137.server. e ca a Vocˆ pode tamb´m iniciar o mysqld manualmente usando a op¸˜o --skipe e ca grant-tables e adicionar a informa¸˜o de privil´gios usando o mysql: ca e shell> BINDIR/mysqld_safe --skip-grant-tables & shell> BINDIR/mysql -u root mysql Do mysql.2 Problemas Inicializando o Servidor MySQL Se vocˆ for usar tabelas que suportem transa¸˜es (BDB.4. Geralmente o problema que ocorre quando vocˆ tenta executar e o segundo servidor ´ que ele tenta usar o mesmo socket e porta que o outro. Vocˆ pode especificar socket e diret´rio tempor´rio diferentes.0-alpha mesmo tempo). Veja Cap´ “ptexi tulo 7 [Table types]. Links para os arquivos de correio est˜o dispon´ a iveis online em http://lists.7-5 vocˆ deve ter certeza que vocˆ instalou todos os patches para e e a glibc! Existe muita informa¸˜o sobre isto nos arquivos das listas de menca sagens do MySQL..sock shell> export TMPDIR MYSQL_UNIX_PORT Veja Se¸˜o A. a e a Depois disto vocˆ deve estar apto para executar mysql_install_db e iniciar o e servidor com estes comandos: shell> scripts/mysql_install_db shell> BINDIR/mysqld_safe & mysqld falha imediatamente Se vocˆ estiver executando RedHat Vers˜o 5. Veja Se¸˜o 4.0.2 [Linux]. Tenha certeza de executar mysqladmin flush_privileges ou mysqladmin reload ap´s dizer ao servidor para recarregar as tabelas de permiss˜es.116 MySQL Technical Reference for Version 5.3 [Automatic ca e ca start]. P´gina 1083.2 [M´ltiplos servidores]. o o 2. vocˆ inicia o servidor mysqld de uma das trˆs maneiras: e e • Invocando mysql. a Geralmente. e ´ descrito de forma mais completa em Se¸˜o 2.sock]. e Neste caso vocˆ ir´ obter a mensagem de erro: Can’t start server: Bind e a on TCP/IP port: Address already in use ou Can’t start server: Bind on unix socket.

a a co ca a • Para o Windows NT/2000/XP. Veja Se¸˜o 4.log’ onde nome_maquina ´ o e nome do servidor.2 [mysqld_safe]. Se isto ajudar. ‘/usr/local/var’ para uma distribui¸˜o fonte. ca e e Arquivos log est˜o localizados no diret´rio dados (normalmente ‘/usr/local/mysql/data’ a o para uma distribui¸˜o bin´ria. onde poder´ examin´-los posteriormente. ca a ca ‘\mysql\data\mysql. Por exemplo: ca shell> EXECDIR/mysqld --basedir=/usr/local --help Uma vez que vocˆ determina as configura¸˜es de caminho que vocˆ deseja.) Procure no diret´rio de dados por arquivos com o nomes no formato ‘nome_maquina.1. confira o arquivo de log para ver se vocˆ pode entender o porquˆ. P´gina 66. se houver falha e na inicializa¸˜o. ca Qualquer que tenha sido o m´todo utilizado para iniciar o servidor. Vocˆ pode co a ca e sobrescrever os padr˜es especificando os caminhos corretos como argumentos de linha de o comando ao mysqld. P´gina 332. Neste caso ca vocˆ pode tentar iniciar o mysqld com --bdb-no-recover.db: No such file or directory Can’t init databases Significa que vocˆ n˜o inicializou o mysqld com --bdb-no-recover e o Berkeley DB encone a trou algo errado com seus arquivos log quando ele tentou recuperar seus bancos de dados. Para poder continuar. inicie o servidor e co e sem a op¸˜o --help. o . co e Normalmente vocˆ precisaria indicar ao mysqld somente o diret´rio base sob o qual o e o MySQL ´ instalado. E neste o o diret´rio que ele espera gravar arquivos de log e o arquivo pid (com o ID do processo) e o onde ele espera encontrar os bancos de dados. vocˆ deve mover o antigo arquivo log Berkeley DB do diret´rio do e o banco de dados para outro lugar.log Se vocˆ encontrar algo como o seguinte no arquivo log: e 000729 14:50:10 000729 14:50:10 000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed bdb: warning: . Vocˆ pode tamb´m e e ca e e usar --help para conferir o efeito das ope¸˜es para se alterar o caminho (perceba que co --help deve ser a op¸˜o final do comando mysqld.8. onde o n´mero ir´ incrementar com o tempo. ele altera o diret´rio para o diret´rio de dados. Vocˆ pode fazer isso usando a op¸˜o --basedir.1. Se vocˆ tiver problemas a a a e com caminhos incorretos vocˆ pode encontrar quais op¸˜es o mysqld permite e quais s˜o e co a as configura¸˜es do caminho padr˜o chamando o mysqld com a op¸˜o --help./test/t1. se o mysqld espera encontrar o diret´rio de dados em lugar diferente de onde ele o realmente est´ no seu sistema. Os arquivos log a a s˜o nomeados ‘log. (Estas op¸˜es tamb´m podem ser usadas com o mysqld_safe). pode ser devido a alguns problemas com o arquivo de recupera¸˜o BDB. que tenta determinar as op¸˜es apropriadas para mysqld e co ent˜o execut´-lo com estas op¸˜es. ´ Quando o daemon mysqld inicia.err’ e ‘nome_maquina. veja Se¸˜o 2. Enca o e ca e tretanto. a u a Se vocˆ estiver executando o mysqld com suporte a tabelas BDB e o mysqld falhar no e in´ icio.*’ do diret´rio de dados e tentar iniciar o mysqld novamente. ent˜o vocˆ pode e a e remover todos os arquivos ‘log.0000000001’. A localiza¸˜o do diret´rio de dados ´ especificada quando a distribui¸˜o ´ compilada.err’ no Windows. Ent˜o confira as ultimas linhas destes arquivos: a ´ shell> tail nome_maquina.err shell> tail nome_maquina. ca a • Invocando o mysqld diretamente. ele n˜o funcionar´ corretamente.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 117 • Invocando mysqld_safe.7 [NT start].

O script mysql.server e mysqld_safe podem ser usados para iniciar o servidor automaticamente na inicializa¸˜o do sistema.4.0.0..118 MySQL Technical Reference for Version 5. a Se o mysqld_safe inicia o servidor mas vocˆ n˜o consegue se conectar a ele. Os scripts mysql.3 [BDB start]. a Se vocˆ estiver utilizando tabelas InnoDB.server tamb´m pode ser usado para parar o ca e servidor. ao iniciar o mysqld isto e significa que vocˆ n˜o pode ter o direito de leitura/cria¸˜o de arquivos no diret´rio do e a ca o banco de dados ou log.server pode ser usado para inicializar ou parar o servidor utilizando-o com os argumentos start ou stop: shell> mysql. Veja Se¸˜o 7. significa que algum outro programa (ou outro servidor mysqld) e j´ est´ usando a porta TCP/IP ou socket mysqld est´ tentando usar: a a a Can’t start server: Bind on TCP/IP port: Address already in use ou Can’t start server: Bind on unix socket.1. Se vocˆ e a ca e n˜o consegue encontrar outro servidor. vocˆ deve se familiarizar com as difere e entes op¸˜es especificas de inicializa¸˜o do BDB. P´gina 643. co ca ca a 2. que significa Permission denied. Se vocˆ n˜o obter uma a e a mensagem como telnet: Unable to connect to remote host: Connection refused.0-alpha Se vocˆ obter o seguinte erro. mysql..6.3 [InnoDB start].5. Neste caso vocˆ tamb´m deve iniciar o mysqld como usu´rio root e e a ou alterar a permiss˜o para os arquivos e diret´rios envolvidos para uqe vocˆ tenha o direito a o e de us´-los.server start shell> mysql. Use ps para ter certeza que vocˆ n˜o tem outro servidor mysqld em execu¸˜o. ca P´gina 1071.0. P´gina 115 e Se¸˜o 4.3 Inicializando e parando o MySQL automaticamente.4. vocˆ pode verificar as configura¸˜es que ele est´ a ca e co a usando executando este comando: shell> mysqladmin variables ou shell> mysqladmin -h ’your-host-name’ variables Se vocˆ obter o Errcode 13. Veja Se¸˜o D.server stop . Veja Se¸˜o 2. vocˆ pode tentar executar o comando telnet sua_ a e maquina numero_porta_tcp-ip e apertar ENTER v´rias vezes. tenha certeza e a que vocˆ tem uma entrada no arquivo ‘/etc/hosts’ que parece com isto: e 127.2 [Multiple servers].2 [Making trace files]. P´gina 220. Se¸˜o 7.1 a a ca a ca a [mysql install db]. ca a Se vocˆ estiver usando tabelas BDB (Berkeley DB). Se o mysqld est´ atualmente em execu¸˜o. algo est´ usando a mesma porta TCP/IP que o mysqld est´ tentando usar.1 localhost Este problema s´ ocorre em sistemas que n˜o possuem uma biblioteca thread funcional e o a para o qual o MySQL deve estar configurado para usar MIT-pthreads. procure pelas op¸˜es especificas de inicializa¸˜o e co ca do InnoDB. P´gina 696. Se vocˆ n˜o consegue iniciar o mysqld vocˆ pode tentar criar um arquivo para rastreae a e mento de erros (trace) para encontrar o problema.

ele vai para o diret´rio de instala¸˜o do MySQL. o ca e ent˜o chama o mysqld_safe. Se vocˆ deseja que o servidor seja exe ecutado com um usu´rio espec´ a ifico.1.server.server j´ estar´ instalada como ‘/etc/init.*’ quando vocˆ quiser iniciar o MySQL automaticamente no seu servidor. ca a Como uma alternativa para o exposto acima.d/init.d/’. Um t´ ipico arquivo ‘/etc/my.server into the ‘/etc/init.local’ para inicializar servi¸os adicionais durante c o boot. o a Note que se vocˆ usa o pacote RPM do Linux (MySQL-server-VERS~O. run the following command to enable the startup of MySQL on system bootup: shell> chkconfig --add mysql. Afterwards.cnf’.rpm).sh’ para habilitar a inicializa¸˜o autom´tica. it is sufficient to copy the file mysql. .d’ directory (or ‘/etc/rc.3 [Mac ca a ca OS X installation].d’ on older Red Hat systems). se o seu nome de base corresponder padr˜o global o o a a da sheel *.1.server] .server se tiver uma disa e tribui¸˜o bin´ria instalada em um local n˜o-padr˜o. Qualquer outro arquivo ou diret´rio presente dentro do diret´rio s˜o o o a silenciosamente ignorados.server No FreeBSD o script de inicializa¸˜o normalmente deve ir no diret´rio ca o ‘/usr/local/etc/rc.vocˆ n˜o precisa instal´a a e a a lo manualmente.d/mysql’ . Para iniciar o MySQL usando este m´todo. Vocˆ pode e desligar o servidor manualmente executando mysqladmin shutdown. o script e A mysql.server em um arquivo global e e co ‘/etc/my. Modifique-o para chamar o diret´rio ca a a a o (cd) apropriado antes de executar o safe_mysql. Em outra palavras.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 119 mysql.server iniciar o servidor. no FreeBSD vocˆ deve instalar o arquivo e ‘mysql. No Mac OS X. vocˆ poderia poderia adicionar algo e e como o seguinte a ele: /bin/sh -c ’cd /usr/local/mysql. P´gina 71 para maiores detalhes. e On most current Linux distributions. P´gina 69 para mais informa¸˜es sobre ca a co pacotes RPM Linux. a ca mysql. a Antes do mysql.cnf’.sh. Veja Se¸˜o 2./bin/mysqld_safe --user=mysql &’ Vocˆ tamb´m pode adicionar op¸˜es para mysql. A p´gina do manual rc(8) tamb´m diz que os scripts a e neste diret´rio s´ s˜o executados.sock port=3306 user=mysql [mysql. como ser´ visto posteriormente nesta se¸˜o. Veja Se¸˜o 2.cnf’ pode parecer com isto: [mysqld] datadir=/usr/local/mysql/var socket=/var/tmp/mysql.server stop desliga o servidor MySQL enviando um sinal para ele.local’ ou ‘/etc/init. vocˆ pode instalar um pacote do MySQL Startup Item separado para e habilitar a inicializa¸˜o autom´tica do MySQL no boot so sistema.2 [Linux-RPM]. alguns sistemas operacionais tamb´m usam e ‘/etc/rc. Vocˆ precisa adicionar estes comandos start e stop nos lugares apropriados de seus arquivos e ‘/etc/rc.d/boot.server pode ser encontrado no diret´rio ‘share/mysql’ sob o diret´rio de instala¸˜o o o ca do MySQL ou no diret´rio ‘support-files’ da ´rvore fonte do MySQL. adicione uma linha user apropriada para o arquivo ‘/etc/my. Vocˆ pode precisar editar o mysql.d/mysql.server’ como ‘/usr/local/etc/rc.

server]. vocˆ deve fazer o backup de seus bancos de dados antigos. como na inicializa¸˜o do novo servidor mysqld ou caso vocˆ n˜o e ca e a consiga conectar sem uma senha. O mesmo se aplica para outras interfaces MySQL. Neste caso c ca vocˆ deve conferir a data de seu arquivo ‘mysql.server tamb´m lˆ o grupo [mysql_ o e e server] e mysqld_safe tamb´m lˆ o grupo [safe_mysqld]. o mysql.1.0 e o MySQL 4.0. Se n˜o.120 MySQL Technical Reference for Version 5. Estas ivel a altera¸˜es podem afetar ` sua aplica¸˜o.cnf’ ´ o mesmo da antiga e instala¸˜o! Vocˆ pode conferir com isto: nome-programa --print-defaults.1 a Varias comportamentos vis´ iveis foram alteradas entre o MySQL 4.a’ e para verificar que eles s˜o da nova distribui¸˜o MySQL. e ca Se vocˆ tem receio de novas vers˜es. A vers˜o base o e a a atual ´ 4. Se isto n˜o ca e a produzir outra sa´ al´m do nome do programa.cnf ativo que ida e e est´ afetando a operacionalidade do servidor! a ´ E uma boa id´ia reconstruir e reinstalar o m´dulo Perl DBD-mysql sempre que instalar uma e o nova vers˜o do MySQL. vocˆ simplesmente pode desliga-lo e reiniciar com seu antigo mysqld! e Se depois de uma atualiza¸˜o. e [server] mysqld_safe [mysql. basedir e pid-file. vocˆ provavelmente usou um e arquivo de cabe¸alho ou de biblioteca antigo na compila¸˜o de seus programas. recompile seus a ca a programas! Se vocˆ tiver problemas.server].server [mysql.5 Atualizando/Desatualizando o MySQL Antes de fazer uma atualiza¸˜o. Se vocˆ alterar o conjunto de caracteres quando executar o MySQL. vocˆ deve e e e executar myisamchk -r -q --set-character--set=charset em todas tabelas. confira se o seu arquvo ‘my. [mysqld]. vocˆ tem um arquivo my. vocˆ sempre pode renomear seu antigo mysqld para e o e algo como mysqld-’n´mero-da-vers˜o-antiga’. como Python a MySQLdb.server entende as seguintes op¸˜es: datadir.h’ e da biblioteca ‘libmysqlclient. co A seguinte tabela mostra quais grupos de op¸˜es cada script de inicializa¸˜o lˆ dos arquivos co ca e de op¸˜es: co Script Grupos de op¸˜es co mysqld [mysqld]. ca co a 2. por favor.1 para corrigir erros cr´ iticos e tornar o MySQL mais compat´ com o padr˜o ANSI SQL. porque alterar o conjunto de a caracteres tamb´m pode alterar a ordena¸˜o. Se o seu novo mysqld comportar de maneira u a inesperada. No entanto. vocˆ deve atue e e alizar os seus arquivos de op¸˜es para usar os grupos [mysql. e [server] Para compatibilidade com vers˜es anteriores.2 [Arquivos de Op¸˜es]. co Veja Se¸˜o 4. ca e Vocˆ sempre pode mover os arquivos de formato e de dados do MySQL entre diferentes e vers˜es na mesma arquitetura enquanto vocˆ tiver vers˜o base do MySQL. co a ca . [mysqld].5.0-alpha basedir=/usr/local/mysql O script mysql.1 Atualizando da Vers˜o 4. 2. P´gina 217.server] e [mysqld_safe]. De outra forma seus ´ indices podem n˜o ser corretamente ordenados. [server] e [mysqld-major-version] mysql.0 para 4. vocˆ tiver problemas com programas clientes recompilados ca e como Commands out of sync ou “core dumps” inexperados.

1. uma altera¸˜o adicional ser´ feita (compat´ a ca a ivel com vers˜es anteriores com esta muda¸a). ou TIME. Vocˆ e tamb´m pode habilitar estes comportamentos para a conex˜o de uma determinado cliente e a com o comando SET @@new=1.1. Fazendo isto do modo acima ir´ assegurar que ca a vocˆ n˜o execute acidentalemte a vers˜o 4.0] new Deste modo vocˆ pode testar o novo comportamento com seus aplicativos na vers˜o 4.12 para fazer um servidor 4.1 o afetar˜o. e Esta mudan¸a era necess´ria para compatibilidade com os padr˜es SQL.0 podem ser testados antes de realizar uma atualiza¸˜o completa para a vers˜o 4.1 a partir da vers˜o 4.0. o (10) ´ ignorado. vocˆ fa¸a o download da ultima distribui¸˜o do MySQL a e c ´ ca 4. -> 1 Usando itens bin´rios em um contexto num´rico ou comparando-os usando o operador a e = deve funcionar como antes. Isto a a u corrige o problema com conjunto de caracteres onde ´ conveniente colocar a string como e um valor bin´rio.0 para e a certificar-se que eles funcionam. se vocˆ a a e declarar um coluna como TIMESTAMP(10). Por exemplo.1 no 4.0 ca a se comportar como 4.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 121 Alguns dos comportamentos do MySQL 4. a Se vocˆ acredita que algumas das altera¸˜es da vers˜o 4.1 para as altera¸˜es mais cr´ ca a a co iticas. ou desabilit´-lo se ele for iniciado com SET @@new=0. DATETIME. o resultado retornado co para o cliente agora est´ corrigido para ter um tipo temporal.12) a op¸˜o de inicializa¸˜o --new para o mysqld. e a a ca A seguinte lista descreve altera¸˜es que podem afetar aplica¸˜es e que vocˆ deve observar co co e ao atualizar para a vers˜o 4.0 faz) deve-se adicionar +0 a coluna TIMESTAMP a eles: a mysql> SELECT ts_col + 0 FROM tbl_name.0 ca a a ´ co (a paritr da 4. Por exemplo. e (A op¸˜o --new pode ser usada a partir da vers˜o 4.1: a • TIMESTAMP agora ´ retornado como uma string com o formato ’YYYY-MM-DD HH:MM:SS’.0.) Se vocˆ quiser tˆ-lo com um n´mero (como a e e u Vers˜o 4. ca ca Esta op¸˜o lhe d´ o comportamento da vers˜o 4.1 com a op¸˜o --new mais tarde. . Em uma vers˜o futura.0 ca se comportar como 4.1 a este respeito. Tamanhos de display para TIMESTAMP n˜o s˜o mais suportados. (A op¸˜o --new pode ser usado para fazer o servidor 4. permitindo que o tamanho do timestamp indique o c o n´mero desejado de d´ u igitos de fra¸˜es de um segundo. Em uma vers˜o c a o a futura.0 e o execute com a op¸˜o --new adicionando o seguinte ao seu arquivo de configura¸˜o: ca ca [mysqld-4. Com esta altera¸˜o vocˆ deve usar CAST() se vocˆ quiser comparar a ca e e valores bin´rios numericamente como inteiros: a SELECT CAST(0XFEFF AS UNSIGNED INTEGER) < CAST(0XFF AS UNSIGNED INTEGER) Se vocˆ n˜o usa CAST(). recomendamos que e co a a antes de atualizar para a vers˜o 4.) a • Para fun¸˜es que produzem um valor DATE. uma compara¸˜o lexicogr´fica da string ser´ feita: e a ca a a mysql> SELECT 0xFEFF < 0xFF.1. adicionamos `s ultimas distribui¸˜es do MySQL 4.13.1. co • Valores bin´rios (0xFFDF) agora s˜o assumidos como strings em vez de n´meros. Isto o ajudar´ a ter uma transi¸˜o suave quando realizar a ca uma atualiza¸˜o completa do MySQL 4.0. vocˆ tem este resultado: e mysql> SELECT CAST("2001-1-1" as DATETIME). no MySQL a 4.

P´gina 707. a e SERIALIZE n˜o ´ mais uma op¸˜o v´lida para sql_mode.0. para o a e a uma mais nova que a 4. P´gina 948. a Se vocˆ estiver executando v´rios servidores na mesma m´quina Windows. ca a ca O mecanismo de hashing da senha foi alterado na vers˜o 4.2 [Novidades na vers˜o 4. O procedimento usa mysql_ e a fix_privilege_tables e est´ descrito em Se¸˜o 2.1 para ver quais itens interessantes que vocˆ pode usar a e na vers˜o 4. Estrat´gias alternativas para tratamento de senhas depois de uma a e atualiza¸˜o est˜o descritos posteriormente nesta se¸˜o. Use --transaction-isolation=SERIALIZABLE ca Todas tabelas e colunas strings agora tˆm um conjunto de caracter. O MySQL 4.9.1. e ca P´gina 362. a ca P´gina 130.1 a partir de uma vers˜o mais nova do MySQL envolve a os serguintes passos: • Verifique na se¸˜o de altera¸˜es se houve alguma mudan¸a que pode afetar a sua ca co c aplica¸˜o. mas a e vers˜es mais antigas n˜o podem.5.0.5.0 em a e situa¸˜es onde o cliente conecta de uma m´quina remota que ainda n˜o tenha sido atualizada co a a para a vers˜o 4. Veja Se¸˜o C. vers˜es mais antigas n˜o podem. o resultado ´ diferente: e mysql> SELECT CAST("2001-1-1" as DATETIME). Nenhum comportamento ser´ alterado. a ca a a • Se vocˆ estiver executando o MySQL Server no Windows.0-alpha • • • • • • -> ’2001-01-01 00:00:00’ No MySQL 4. A seguinte lista indica algumas estrat´gias poss´ a e iveis de atualiza¸˜o. Veja Cap´ e “ptexi tulo 9 [Charset].6 [Upgrading-grant-tables].1.122 MySQL Technical Reference for Version 5. atualizar para o MySQL 4.1 ocorre um erro).7 [mysqldump]. ca ca Em geral.6 e acima pode ler o novo a arquivo dump. SERIALIZE tamb´m n˜o ´ mais v´lido e a e a para a op¸˜o --sql-mode do mysqld.0. P´gina 132. um valor DEFAULT ´ ignorado sem aviso.1 para fornecer maior seguran¸a.0. a e ca a Deve-se usar SET TRANSACTION ISOLATION LEVEL SERIALIZABLE.11 e adiante leˆm o novo formato ‘. vocˆ de usar mysqldump.1.frm’ diretamente. vocˆ deve e a a e usar uma op¸˜o --shared_memory_base_name diferentes para cada m´quina ca a A interface para agrupar fun¸˜es UDF alterou um pouco. ca • Leia os novos itens da vers˜o 4.8 e e ca [Windows upgrading].1.x]. -> ’2001-01-01’ Valores DEFAULT n˜o podem mais ser especificado para colunas AUTO_INCREMENT (Na a vers˜o 4. a • Ap´s o upgrade. Elas ca representam o que se deve fazer para escolher se ter compatibilidade com clientes antigos e ter maior seguran¸a. mas ´ claro a a a e que vocˆ n˜o poder´ usar qualquer um dos novos recursos fornecido pelo protocolo e a a .1.0. na 4. a c mas ele pode causar problemas de compatibilidade se vocˆ ainda tiver clientes que usam a e ´ biblioteca cliente 4.0. (E bastante indesej´vel que vocˆ tenha clientes 4.1). Veja Se¸˜o 4.0 ou anterior.frm’ mudaram um pouco na ca vers˜o 4.) o a O formato de defini¸˜o de tabela usado nos arquivos ‘. veja tamb´m Se¸˜o 2. Vocˆ deve agora declarar co e uma fun¸˜o xxx_clear() para cada fun¸˜o de agrupamento. A informa¸˜o do conjunto de caracteres ´ mostrada por a ca e SHOW CREATE TABLE e mysqldump. atualize a tabela de permiss˜es para gerar uma nova coluna Password o o maior que ´ necess´ria para tratamento seguro de senhas. (O MySQL vers˜o 4. c • N˜o atualizar para a vers˜o 4.11. Se vocˆ precisa mover tabelas da vers˜o 4.

atualize a tabela de permiss˜es para adicionar novos privil´gios e o o e recursos. ca a e Informa¸˜es adicionais sobre hashing de senha em rela¸˜o a autentica¸˜o no cliente e co ca ca opera¸˜es de altera¸˜o de senha podem ser encontrados em Se¸˜o 4. n˜o execute o servidor com a op¸˜o --olda a ca passwords. Vocˆ tamb´m pode executar uma instru¸˜o e e ca ALTER TABLE table_name TYPE=MyISAM para cada tabela ISAM para convertˆ-la para e MyISAM.2 Atualizando da Vers˜o 3.1. co ca ca P´gina 246. O mesmo se aplica a outras interfaces MySQL.1 e executar o script mysql_fix_privilege_tables para aua mentar a coluna Password na tabela user. altere a senha em todas as contas existentes para que elas tenham o novo formato. (Este ´ um script Perl.1 continuem a conectar o em suas contas de hash curto. Paa converter a tabela em um dado banco de dados.0 um vers˜o mais nova do e e a a MySQL: • Ap´s o upgrade.11 [Password hashing]. Para descobir o tipo de uma determinada tabela.4 [C API Prepared statements].so’ foram alteradas.1. ca a • Edite qualquer script de inicializa¸˜o ou arquivo de configura¸˜o para n˜o utilizar ca ca a nenhuma das op¸˜es obsoletas listadas posteriormente nesta se¸˜o.5.1 tem um protocolo cliente/servidor exa tendido que oferece tais recursos como instru¸˜es preparadas e conjuntos de m´ltiplos co u resultados. Se vocˆ sabe que todos os clientes tamb´m e e foram atualizados para a vers˜o 4. P´gina 824.1 ´ o mais seguro.0 a Em geral. ele exige que o DBI esteja e instalado).1. Mas execute o servidor com a op¸˜o --old-passwords para fornecer compatica bilidade com vers˜es anteriores que premitem que clientes pre-4. ca a • Atualizar para a vers˜o 4. Vocˆ tamb´m pode alterar as senhas em sua conta MySQL para usar o e e novo formato que ´ mais seguro. Se vocˆ tiver. a 2. use esta instru¸˜o: ca mysql> SHOW TABLE STATUS LIKE ’tbl_name’.1. O procedimento usa o script mysql_fix_privilege_tables e est´ descrito a em Se¸˜o 2. Para evitar a convers˜o de tabelas de outros tipos para a a MyISAM. P´gina 130. e • Atualizar para vers˜o 4. • Certifique-se de que vocˆ n˜o tem nenhum cliente MySQL que utiliza bibliotecas come a partilhadas (com o Perl DBD-mysql).1 e executar o script mysql_fix_privilege_tables para a aumentar a coluna Password na tabela user e assim poder guardar hashes de senhas longos.) Veja Se¸˜o 12. vocˆ pode listar explicitamente o nome de suas tabelas ISAM depois do nome e do banco de dados na linha de comando. co ca • Converta seua arquivos ISAM antigos para arquivos MyISAM com o comando: mysql_ convert_table_format database. . o que vocˆ deve fazer ´ atualizar para a vers˜o 4.5. Uma instala¸˜o pura da vers˜o 4. (O MySQL 4.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 123 cliente/servidor da vers˜o 4. como Python MySQLdb.6 [Upgrading-grant-tables].3. vocˆ deve recompil´-las j´ que e e a a as estruturas usadas em ‘libmysqlclient. use este comando: shell> mysql_convert_table_format database db_name Note que ele deve ser usado apenas se vocˆ usar se todas as tabelas em um dado banco e de dados s˜o ISAM ou MyISAM. vocˆ pode parar de usar a op¸˜o do servidor --olda e ca passwords.23 para 4. Em vez disso. Eventualmente. quando todos os seus clientes estiverem atualizados para a vers˜o 4.

0 tem v´rios novos privil´gios na tabela mysql. e a .0. o InnoDB est´ configurado por padr˜o. Se vocˆ n˜o usar a a e a o InnoDB e quiser economizar mem´ria ao executar o servidor que possui suorte a o InnoDB habilitado. Veja Se¸˜o 4. At´ a ca a e que este script esteja executando todos os usu´rios tˆm os privil´gios SHOW DATABASES. a e e CREATE TEMPORARY TABLES e LOCK TABLES. Em vez disso deve se usar tabelas MyISAM.4.user.124 MySQL Technical Reference for Version 5. incluir safe_mysqld como co a a um link simb´lico para mysqld_safe. a Para fazer estes novos privil´gios funcionarem. este e e a a ´ um bom momento para alterar os seus scripts e usar GRANT em vez de modificar a e tabela de permiss˜es diretamente. vocˆ precisar´ REPLICATION SLAVE (em vez de FILE) para novos slaves.0 usa um novo formato para ´ indices full-text). as distribui¸˜es bin´rias. Clientes antigos devem funcionar com um servidor vers˜o 4. e o O procedimento est´ descrito em Se¸˜o 2.3 [Op¸˜es de privil´gio]. Para compatibilidade com vers˜es e o anteriores. a O lock de sistema externo dos arquivos MyISAM/ISAM agora est´ desligado por a padr˜o. ir˜o.23 (pois o 4. e a • ‘safe_mysqld’ ´ renomeado para ‘mysqld_safe’.2 a op¸˜o --safe-show-database est´ obsoleta (e n˜o faz mais a ca a a nada). Para compilar o MySQL ca ca sem suporte ao InnoDB. Neste caso vocˆ deve e e e ´ usar o mysqldump para fazer um dump de qualquer tabela que use um indice full-text e recarregar o arquivo de dump no servidor 3.1. P´gina 231.52 ou e e mais novo se vocˆ encontrar problemas com o MySQL da s´rie 4. (eram dados em megabytes antes a da vers˜o 4.0-alpha O MySQL 4. o A partir da vers˜o 4.2. vocˆ deve e a a e verificar se vocˆ precisa de alguma das novas concess˜es que vocˆ n˜o precisava antes.0 funcionar´ mesmo se vocˆ n˜o fizer o acima. P´gina 130. O formato do arquivo ISAM ainda a funciona no MySQL 4.1 ou mais nova.3). a Mesmo se vocˆ fizer o indicado acima. REPLICATION SLAVE e REPLICATION CLIENT tiram o seu valor de FILE. A seguir est´ uma lista mais completa com o que deve ser observado para atualizar para a a vers˜o 4. e o e a Em particular. deve se atualizar a tabela de permiss˜es.0. Se vocˆ tiver qualquer script que crie novos usu´rios.6 [Upgrading-grant-tables].3. ca • O parˆmetro de inicializa¸˜o myisam_max_extra_sort_file_size e myisam_max_ a ca extra_sort_file_size s˜o dados agora em bytes. (Para a maioria dos usu´rios a a a isto nunca ´ necess´rio). Se vocˆ contruir o a ido ca a e MySQL a partir de um fonte.0. vocˆ ainda pode voltar para o MySQL 3.1 a e ca [GRANT]. execute configure com a op¸˜o --without-innodb. Os privil´gios SUPER e EXECUTE tiram o seu e valor de PROCESS.5.0.0. Pode se lig´-los fazendo --external-locking. Veja Se¸˜o 4. Se vocˆ n˜o est´ usando o comando GRANT nos scripts. por algum tempo. ca co e a Se vocˆ receber um erro Access denied para novos usu´rios na vers˜o 4. use a op¸˜o de inicializa¸˜o do servidor.0.0 mas est´ obsoleto e ser´ disabilitado (n˜o compilado por padr˜o) a a a a no MySQL 4. P´gina 255.23. a • O MySQL 4. mas vocˆ n˜o poder´ usar os a e a e a a novos privil´gios de seguran¸a pois o MySQL 4.0 e vocˆ podem encontrar problemas ao e c e atualizar o MySQL para a vers˜o 4.0 sem nenhum problema. o • Suporte para InnoDB agora est´ inclu´ na distribui¸˜o bin´ria. vocˆ pode querer alter´-los para e a e a usar os novos privil´gios.

P´gina 543.3.23 e anteriores da vers˜o 4. • SHOW MASTER STATUS agora retorna um conjunto vazio se o log bin´rio n˜o estiver haa a bilitado.3. o resultado ser´ sem sinal. SQL_BIG_TABLES BIG_TABLES SQL_LOW_PRIORITY_UPDATES LOW_PRIORITY_UPDATES SQL_MAX_JOIN_SIZE MAX_JOIN_SIZE SQL_QUERY_CACHE_TYPE QUERY_CACHE_TYPE Os nomes antigos ainda funcionam no MySQL 4. antes de atualizar para o a MySQL 4. • CHECK. • SHOW SLAVE STATUS agora retorna um conjunto vazio se o slave n˜o est´ inicializado.0. LOCALTIME e LOCALTIMESTAMP s˜o agora palavras reservadas.5 [Fun¸˜es de convers˜o]. isto nem sempre era consistente. a • As seguintes veri´veis SQL mudaram o nome. Na ´ vers˜o 3. como no MySQL 4. Isto a pode causar problemas se vocˆ estiver usando-as em um contexto onde vocˆ quer um e e resultado com sinal.23.11. a • O resultado de todos os operadores bitwise (|.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 125 • A seguintes vari´veis/op¸˜es de inicializa¸ao foram renomeadas: a co c Nome Antigo Novo Nome. sort_buffer e warnings ainda funcionar˜o co ca a no MySQL 4. Veja Se¸˜o 6. ca co a a • Nota: quando vocˆ usa subtra¸˜o entre valores inteiros onde um deles ´ do tipo e ca e UNSIGNED. Vocˆ pode disabilitar este e comportamento usando a op¸˜o --sql-mode=NO_UNSIGNED_SUBTRACTION ao iniciar o ca mysqld. SIGNED.5 [Fun¸˜es de Convers˜o]. vocˆ deve verificar sua aplica¸˜o para os casos onde vocˆ est´ subtraindo e ca e a um valor de uma entidade sem sinal e quer um n´mero negativo como resposta ou subu traindo um valor sem sinal de uma coluna do tipo inteiro. Veja Se¸˜o 6. • As op¸˜es de inicializa¸˜o --skip-locking e --enable-locking foram renomeadas co ca para --skip-external-locking e --external-locking.0 mas est˜o obsoletos. • ORDER BY coluna DESC ordena valores NULL por ultimo. a a • O mysqld agora tem a op¸˜o --temp-pool habilitada por padr˜o j´ que isto da melhor ca a a rendimento com alguns SO (Principalmente no Linux). • Colunas DOUBLE e FLOAT agora respeitam o parˆmetro UNSIGNED no armazenamento a (antes. a a • SHOW INDEX tem duas colunas a mais (Null e Index_type) que ele tinha nas vers˜es o 3. ca co a a .0. a • Vocˆ deve usar SET GLOBAL SQL_SLAVE_SKIP_COUNTER=# em vez de SET SQL_SLAVE_ e SKIP_COUNTER=#. P´gina 543.0 mas est˜p obsoletas. myisam_bulk_insert_tree_size bulk_insert_buffer_size query_cache_startup_type query_cache_type record_buffer read_buffer_size record_rnd_buffer read_rnd_buffer_size sort_buffer sort_buffer_size warnings log-warnings --err-log --log-error (para mysqld_safe) As op¸˜es de inicializa¸˜o record_buffer. &. <<. >> e ~) agora s˜o unsigned.0. a Nome Antigo Novo Nome. Em oyras palavras. UNSIGNED era ignortado por estas colunas).

.. Se vocˆ estiver usando replica¸˜o. (A ordem geral-para-especifco e Se vocˆ estiver executando o MySQL Server no Windows. mysql_create_db() e mysql_ co connect() n˜o s˜ mais suportadas a menos que vocˆ compile o MySQL com a a e ´ alterar o cliente para utilizar CFLAGS=-DUSE_OLD_FUNCTIONS. a e u o isto foi feito para uma diferencia¸˜o maior de RAND(seed) e RAND(seed+1). vocˆ deve conseguir o DBD-mysql e o e vers˜o 1. IN BOOLEAN MODE) com suas tabelas.0. co • Vocˆ deve usar TRUNCATE TABLE quando quiser deletar todos os registros de uma tabela e e vocˆ n˜o precisa obter uma contagen de quantas colunas forma deletadas. ca a • Se vocˆ quiser recompilar o m´dulo Perl DBD::mysql. • Clientes multi-thread devem usar mysql_thread_init() e mysql_thread_end(). Na vers˜o a a ´ 4. a co e • HEX(string) agora retorna os caracteres na string convertidos para hexadecimal. No entanto.2218 ou mais novo porque os m´dulos DBD mais antigos usam a chamada a o obsoleta mysql_drop_db(). vocˆ precisa e recontru´ i-las com REPAIR TABLE nome_tabela USE_FRM.126 MySQL Technical Reference for Version 5. INSERT INTO . Usar strings ainda funicona.11. ca a o • um erro se vocˆ n˜o especificar IGNORE..23). a e • Na vers˜o RAND(seed) retorna uma s´rie de n´mero randˆmicas diferente que na 3.23..0.23. length e max_length foram alterados de unsigned int para unsigned long. P´gina 859. P´gina 380.. P´gina 132.1022 ou mais nova ´ recomendada.0. Veja Se¸˜o 12. e • Na vers˜o 3.1. e • O formato de SHOW OPEN TABLE alterou. • Vocˆ deve usar inteiros para armazenar valores em colunas BIGINT (em vez de usar e strings. • LOCATE() e INSTR() s˜o caso sensitivo se um dos argumentos ´ uma string bin´ria. De a e a outra forma elas s˜o caso-insensitivo. a • STRCMP() agora usa o conjunto de caracteres atual ao fazer compara¸˜es. A vers˜o 2.8 [Atualizando o e ca Windows]. Por algum tempo incluiremos em nossa distribui¸˜o bin´ria o mysqld_safe como um link simb´lico para mysqld_safe. mas usar inteiros e ´ mais eficiente. ´ preferivel e a nova API 4. o MySQL ir´ parar (e possivelmente fazer um roll back) por padr˜o no caso de a a ‘mysqld_safe’ ser renomeado para ‘mysqld_safe’.. a . veja Se¸˜o 4. como vocˆ fez no MySQL 3. (DELETE e a FROM table_name retorna a contagem de linhas na vers˜o 4. e a • As fun¸˜es antigas da API C mysql_drop_db().1. exceto que eles podem gerar a mensagens de avisos quando quando usado como argumento em uma classe printf() de fun¸˜es.0-alpha • Para usar MATCH .5.2 [Replication a e ca ca Implementation]. Isto n˜o deve causar problemas. REAL ou INTEGER).14 [Clientes em threads]. e TRUNCATE TABLE ´ mais a e r´pido. dos tipos de A e B.B) agora est´ configurado para ser o mais ’geral’ a a ´ ´ string. ca • O tipo padr˜o retornado por IFNULL(A.) a • Vocˆ receber´ um erro se tiver um LOCK TABLES ativo ou transa¸˜es ao tentar executar e a co TRUNCATE TABLE ou DROP DATABASE. • Na estrutura MYSQL_FIELD.0. Se vocˆ quiser converter um n´mero para hexadecimal. AGAINST (. veja Se¸˜o 2. vocˆ deve se assugurar que vocˆ e u e e chama HEX() com um argumento num´rico. SELECT sempre tem o IGNORE habilitado. o que significa co que o comportamento padr˜o das compara¸˜es agora ´ caso-insensitivo.

FULLTEXT. vocˆ pode usar ALTER TABLE para otimizar a tabela. • Se vocˆ fizer um DROP DATABASE em um banco de dados ligado simbolicamente. A a u raz˜o para isto ´ que n´meros negativos causam problemas quando o -1 passa para 0. o argumento tamanho n˜o inclui mais um lugar para o s´ a imbolo do ponto decimal.21 ir˜o trabalhar sem quaisquer problemas com um servidor o a vers˜o 3. agora. u • Quando estiver declarando colunas usando o tipo DECIMAL(tamanho.23. tratado em um n´ mais baixo para tabelas MyISAM e ivel e ´ muito mais r´pido que antes. (No MySQL 3.3 Atualizando da vers˜o 3. agora. a • OPTIMIZE TABLE agora funciona somente para tabelas MyISAM.23 a A Vers˜o 3.23. • FLOAT(X) agora ´ um tipo de ponto flutuante verdadeiro e n˜o um valor com um e a n´mero fixo de decimais.22 estas fun¸˜es retornam NULL.23: e a • Todas tabelas que usam o conjunto de caracteres tis620 devem ser corrigidos com myisamchk -r ou REPAIR TABLE. Vocˆ a e n˜o necessita converter suas antigas tabelas para us´-las com a vers˜o 3.23 do MySQL suporta tabelas do novo tipo MyISAM e do antigo tipo ISAM.5. inicializado por padr˜o com a op¸˜o --no-namede a ca commands (-g). porque foram feitas altera¸˜es e co na sua ordem de classifica¸˜o! ca • O tipo padr˜o de retorno de IF() ir´ agora depender de ambos argumentos e n˜o a a a apenas do primeiro argumento. RIGHT. Isto pode causar problemas de imcompatibilidade em alguns casos. . por exemplo. DELAYED. ELSE.dec. a e liga¸˜o e o banco de dados original ser˜o apagados. e ca a vocˆ deve reparar todas suas tabelas com isamchk -r. CHECK TABLE ir´ e a e a reclamar sobre valores 0 porque eles podem alterar se vocˆ fizer um dump e restaurar a e tabela. (Isto n˜o acontece na 3.22 porque ca a a o configure n˜o detecta a disponibilidade da chamada de sistema readlink). a e u Vocˆ n˜o deve armazenar 0 em uma coluna AUTO_INCREMENT tamb´m. a a a a todas novas tabelas ser˜o criadas usando o tipo MyISAM (a menos que vocˆ inicie o mysqld a e com a op¸˜o --default-table-type=isam). AUTO_INCREMENT ´.) co • Se vocˆ estiver usando a ordem de classifica¸˜o de caracteres alem~ para tabelas ISAM. Para tabelas MyISAM n´meros antigos tamb´m n˜o e a u e a s˜o mais reusados. a e • CASE. THEN e WHEN agora s˜o palavras a reservadas. mesmo se vocˆ apagar algumas linhas da tabela. END. • Fun¸˜es de data que funcionam em partes de datas (como MONTH()) n˜o retornar´ 0 co a a para datas 0000-00-00. a As seguintes listas dizem o que vocˆ deve conferir quando atualizar para a vers˜o 3.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 127 2.22 e 3. INNER. agora. em scripts SQL que usam comandos sem ponto e v´ irgula! Comandos longos continuam funcionando. Os clientes vers˜es 3.22 para 3. Para outros tipos de tabelas. Por padr˜o. e • O cliente MySQL mysql ´. Esta op¸˜o pode ser desabilitada com --enable-named-commands ca (-G). • Colunas AUTO_INCREMENT n˜o devem ser usadas para armazenar n´meros negativos. Vocˆ pode converterr uma tabela ISAM para ca e uma formato MyISAM com ALTER TABLE nome_tabela TYPE=MyISAM ou com o script Perl mysql_convert_table_format. bloqueada para prevenir que seja usada por outras threads. Durante o OPTIMIZE e TABLE a tabela ´.

(Vers˜es mais antigas que o MySQL 3. use o ca comando isamchk • Se desejar que os arquivos mysqldump sejam compat´ iveis entre as vers˜es 3.22. Para tabelas ISAM (. 2.6 [Upgrading-granto a ca tables]. a A interface API C para mysql_real_connect() foi alterada. Isto adicionar´ os novos privil´gios que vocˆ prea e e cisar´ para usar o comando GRANT.5.22 aceitaivam esta o sintaxe. Vocˆ n˜o pode acessar esses novos campos com uma vers˜o antiga de e a a mysqld. e a • Quando for necess´rio dar manuten¸˜o ou reparar tabelas MyISAM ‘. • mysql_num_fields() n˜o pode mais ser usada em um objeto MYSQL* (agora ´ uma a e fun¸˜o que obtem valores MYSQL_RES* como um argumento). Com um objeto MYSQL* ca agora voce deve usar mysql_field_count().ISM).) • mysql_fetch_fields_direct() agora ´ uma fun¸˜o (era uma macro) e ela retorna um e ca ponteiro para um MYSQL_FIELD no lugar de um MYSQL_FIELD.fraction] ou [[[[[H]H]H]H]MM]SS[.22 e 3.5. vocˆ pdoe compilar o e e MySQL com a op¸˜o CXXFLGAS=-DLIKE_CMP_TOUPPER.. vocˆ deve colocar um 0 para o novo argumento db (ou ca e . Se vocˆ tem um programa e cliente antigo que chama essa fun¸˜o.23. • Um AND ou OR com valores NULL agora retornam NULL no lugar de 0. Na Vers˜o 3. era na maioria das vezes a ida ordenada.. sera retornado o erro Access a e denied quando vocˆ tentar usar ALTER TABLE. O procedie mento para atualizar a tabela de permiss˜es est´ descrito em Se¸˜o 2. vocˆ deve iniciar o novo servidor e depois executar a e o script mysql_fix_privilege_tables. em vez de 0 se n˜o existir registros coincidentes. pesquisas que usam NOT em uma express˜o AND/OR como NOT NULL = a NULL.0. • No MySQL Vers˜o 3. • SUM() agora retorna NULL. P´gina 130. Isto ´ de a e acordo com o ANSI SQL. • LPAD() e RPAD() reduzir˜o a string resultante se ela for maior que o tamanho do a argumento.23 o do MySQL.21 para 3. Se vocˆ precisa do antigo compartamento.fraction] • LIKE agora compara strings usando as mesmas regras de compara¸˜o de caracteres ca que o operador ’=’. ca • REGEXP agora ´ caso insensitivo se nenhuma das strings forem bin´rias. a sa´ de SELECT DISTINCT .MYI’ deve ser usado a ca a instru¸˜o CHECK TABLE ou o comando myisamchk. em a grande parte.22. Se vocˆ se esquecer disto.0-alpha • Uma string TIME agora deve estar em um dos seguintes formatos: [[[DAYS] [H]H:]MM:]SS[.4 Atualizando da vers˜o 3. A unica difia ´ culdade ´ que novas tabelas que s˜o criadas com colunas do tipo DATE usar˜o a nova forma e a a de armazenar a data. Depois de instalar o MySQL vers˜o 3. vocˆ deve usar GROUP BY ou ORDER BY para obter a sa´ a e ida ordenada. Isto afetar´.22 a Nada que afetaria a compatibilidade foi alterada entre a vers˜o 3. a co • Confira todas suas chamadas ` DATE_FORMAT() para ter certeza que exista um ‘%’ antes a de cada caractere formatador. n˜o deve ser usados as op¸˜es --opt ou --full com o mysqldump. CREATE INDEX ou DROP INDEX.21 e 3.22.128 MySQL Technical Reference for Version 5.

user (para obter 62-bits no lugar de senhas 31-bits). a O novo c´digo cliente trabalha com um servidor mysqld 3.20.2 [Perl DBI Class]. A vari´vel key_buffer do mysqld foi renomeada para key_buffer_size. Se vocˆ tem uma vers˜o do MySQL mais nova que 3. portanto se houver probleo mas com 3.20 para 3.28 e deseja mudar e a a para a vers˜o 3. • Todas as senhas devem ser reatribuidas na tabela mysql. Se vocˆ usa o ODBC. ent˜o n˜o ´ preciso converter nenhuma tabela.20. a nova fun¸˜o cliente mysql_errno() n˜o ca a ca a ir´ retornar erro do servidor.x sem a necessidade de recompilar os e clientes novamente. Os novos argumentos s˜o: host. user. a a a e A vers˜o do MySQL 3. Veja Se¸˜o 12. • O script scripts/add_long_password deve ser executado para converter o campo Password na tabela mysql.x vocˆ deve usar o antigo servidor 3.28 e superiores podem manipular o novo formato da tabela de a usu´rios sem afetar os clientes.20. Por seguran¸a. A unica e ´ altera¸˜o que deve ser feita se vocˆ usa o mysqlperl ´ alterar os argumentos para a fun¸˜o ca e e ca connect(). • O formato das tabelas n˜o foi alterado. ca 2.20. Server Version = 10 Client Version = 9 A nova interface PERL DBI/DBD tamb´m suporta a antiga interface mysqlperl. database. ca P´gina 877.20 Neste caso.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 129 recodificar o cliente para enviar o elemento db para conex˜es mais r´pidas).5. a e a senhas n˜o ir˜o mais funcionar se vocˆ converter a tabela de usuaios. deve obter o novo o e driver MyODBC 2. a As seguintes altera¸˜es podem afetar consultas em antigas aplica¸˜es: co co • HAVING deve ser especificada antes de qualquer cl´usula ORDER BY.5.28. a . vocˆ a a e c e primeiro deve fazer uma atualiza¸˜o para a vers˜o 3. ao ca ca inv´s do novo m´todo.21.user para CHAR(16). e e ˜ estiver usando a op¸˜o --old-protocol para mysqld. mas vocˆ ainda a e pode usar o antigo nome nos seus arquivos de inicializa¸˜o. password (note que os a argumentos user e password foram alterados de lugar).x. e ent˜o atualizar ca a a para a vers˜o 3. pelo menos.20. antigos clientes n˜o e a a ca a poder˜o se conectar e exibir˜o a seguinte mensagem de erro: a a ERROR: Protocol mismatch. Vocˆ tamb´m o a e e deve chamar mysql_init() antes de chamar mysql_real_connect()! Esta altera¸˜o foi ca feita para permitir ` nova fun¸˜o mysql_options() salvar op¸˜es na estrutura do manipua ca co lador do MYSQL.21 a Se vocˆ estiver executando uma vers˜o mais antiga que a Vers˜o 3.28. somente CR_UNKNOWN_ERROR (mas isto funciona para erros de a clientes) e o servidor usa a forma fun¸˜o password() anterior a 3.5 Atualizando da vers˜o 3.21. vocˆ precisar´ fazer as Se vocˆ NAO e ca e a seguir altera¸˜es: co • Todo o c´digo cliente deve ser recompilado.21 para verifica¸˜o.21 com a op¸˜o --old-protocol para us´-lo com clientes a ca a de uma distribui¸˜o da vers˜o 3. Se vocˆ n˜o est´ usando a op¸˜o --old-protocol para o mysqld.21 vocˆ deve fazer o seguinte: a e Inicie o servidor mysqld vers˜o 3.20.x.

frm. Ele tenta se conectar e a ca ao servidor na m´quina local como root. ajuste o caminha apropriadaca a o mente.0. O comando ir´ lhe pedir a senha do root. a Como no procedimento com o Unix. 2.sql.15. Se sua ine stala¸˜o do MySQL est´ localizada em ‘C:\mysql’. as distribui¸˜es do MySQL incluem um script SQL mysql_ a co fix_privilege_tables. durante a execu¸˜o.5.MYI e a e e . o comando se parecer´ com este: ca a a C:\mysql\bin> mysql -u root -p mysql mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables. vocˆ pode copiar os arquivos . pare o servidor e o reinicie. n˜o existe uma modo f´cil de se atualizar a tabela de permiss˜es at´ o MySQL a a o e 4. . vocˆ pode ver alguns avisos Duplicate column name e enquanto o mysql processa as instru¸˜es no script mysql_fix_privilege_tables. Se sua conta root exige uma senha.130 MySQL Technical Reference for Version 5.sql que vocˆ pode executar usando o cliente mysql. especifique a senha desta forma: shell> mysql_fix_privilege_tables senha_root O script realiza mysql_fix_privilege_tables qualquer a¸˜o necess´ria para converter sua ca a tabela de permiss˜es para o formato atual.sql Se sua instala¸˜o est´ localizada em algum outro diret´rio.5. eles co podem ser ignorados. No Windows. atualize a tabela de permiss˜es executando o script o mysql_fix_privilege_tables: shell> mysql_fix_privilege_tables Vocˆ deve executar este script enquanto o servidor est´ em execu¸˜o. digite-a quando pedido.7 Atualizando para outra arquitetura Se vocˆ estiver usando o MySQL Vers˜o 3. especifique a senha assim: shell> mysql_fix_privilege_tables --password=senha_root Antes do MySQL 4. a e a e Em sistemas Unix ou semelhantes. indique a a senha na linha de comando. A partir desta vers˜o.0-alpha • Os parˆmetros para LOCATE() foram trocados. para o servidor e reinicie-o. Depois de executar o script.1 e acima. As mais not´veis s˜o DATE TIME e a a TIMESTAMP. Vocˆ pode ver alguns avisos Duplicate column o e name.6 Atualizando a Tabela de Permiss˜es o Algumas distribui¸˜es introduzem altera¸˜es a estrutura da tabelas de permiss˜es (a tabela co co o no banco de dados mysql) para adicionar novos privil´gios ou recursos. eles podem ser ignorados. ca Depois de executar o script.0.MYD para tabelas MyISAM entre diferentes arquiteturas que suportem o mesmo formato . a • Agora existem algumas palavras reservadasi novas. Para o MySQL 4. Para ter certeza e de que as suas tabelas de permiss˜es est˜o corretas quando vocˆ atualizar para uma nova o a e vers˜o do MySQL.23. 2. vocˆ deve atualizar a sua tabela de permiss˜o tamb´m.1.

Para grandes tabelas. a Os arquivos ISAM de dados e ´ indices (‘*. Use o mysqldump. Vocˆ pode ent˜o a a co e a transferir o arquivo para a outra m´quina e aliment´-la como uma entrada para o cliente a a mysql. a Por padr˜o. depois transfira o arquivo para a e m´quina destino e carregue o arquivo no banco de dados.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 131 de ponto flutuante.ISM’ respectivamente) s˜o dependentes a da arquitetura e em alguns casos dependentees do Sistema Operacional. crie o diret´rio para os arquivos de sa´ e descarregue o banco de dados: o ida shell> mkdir DUMPDIR shell> mysqldump --tab=DUMPDIR nome_bd Depois transfira os arquivo no diret´rio DUMPDIR para algum diret´rio correspondente na o o m´quina destino e carregue os arquivos no MySQL assim: a shell> mysqladmin create nome_bd shell> cat DUMPDIR/*. Se vocˆ est´ movendo e a os dados para uma vers˜o mais nova do MySQL. e a Nos comandos abaixo.) Veja Se¸˜o 7.sql | mysql nome_bd # cria o banco de dados # cria tabelas no banco de dados . vocˆ n˜o deve tentar mover um banco de dados simplesmente copiando a e a os arquivos para a outra m´quina.contents. e a pode ser usado: shell> mysqladmin create nome_bd shell> mysqldump -h ’nome de outra maquina’ --opt --compress nome_bd \ | mysql nome_bd O resultado pode tamb´m ser armazenado em um arquivo.gz (O arquivo criado neste exemplo est´ compactado.1 ca [MyISAM Tables]. Utilize mysqldump --help para ver quais op¸˜es est˜o dispon´ co a iveis. P´gina 630. Por exemplo vocˆ pode descarregar a e um banco de dados para um arquivo na m´quina origem desta forma: a shell> mysqldump --quick nome_bd | gzip > nome_bd. DUMPDIR representa o caminho completo do diret´rio que vocˆ utiliza o e para armazenar a sa´ de mysqldump. isto ´ muito mais r´pido do que usar simplesmente mysqldump.contents. a a A mais f´cil (mas n˜o a mais r´pida) forma para mover um banco de dados entre duas a a a m´quinas ´ executar os seguintes comandos na m´quina em que o banco de dados se ena e a contra: shell> mysqladmin -h ’nome da outra maquina’ create nome_bd shell> mysqldump --opt nome_bd \ | mysql -h ’nome da outra maquina’ nome_bd Se vocˆ deseja copiar um banco de dados de um m´quina remota sobre uma rede lenta. (O MySQL cuida de cada detalhe de troca de bytes. ida Primeiro. Se vocˆ deseja e mover suas aplica¸˜es para outra m´quina que tem uma arquitetura ou SO diferentes da co a sua m´quina atual.) Transfria o arquivo contendo o conte´do a u do banco de dados para a m´quina destino e execute estes comandos: a shell> mysqladmin create nome_bd shell> gunzip < nome_bd.gz | mysql nome_bd Tamb´m pode ser usado mysqldump e mysqlimport para ajudar na transferˆncia do banco de e e dados. vocˆ deve usar mysqldump --opt com a a e nova vers˜o para obter uma descarga r´pida e compacta. o mysqldump ir´ criar um arquivo contendo declara¸˜es SQL.ISD’ e ‘*.

ca 6. para ‘my_cnf.0. ca e 8. clicando no ca ca bot˜o "Install" no WinZip e seguindo os passos da instala¸˜o do script. a a ca 4.5. Reinicie o servi¸o MySQL Server (por exemplo.cnf’ renomeado.132 MySQL Technical Reference for Version 5.cnf’) cont´m uma op¸˜o a e ca que n˜o pode ser reconhecido pela MySQL. Depois de importar o banco de dados mysql para a nova m´quina. System error 1067 has occurred. Vocˆ pode sobrescrever a sua instala¸˜o antiga do MySQL (normalmente em e ca ‘C:\mysql’). The process terminated unexpectedly. Este erro significa que seu arquivo ‘my.cnf’ (por padr˜o ‘C:\my. vocˆ precisa identificar qual a e parˆmetro ´ o culpado.8 Atualizando o MySQL no Windows Qaundo atualizar o MySQL no Windows. Uma vez verificado isto. onde a parada para manuten¸˜o ´ aceit´vel. execute mysqladmin a flush-privileges para que o servidor recarregue as informa¸˜es das tabelas de permiss˜es. db e host) s˜o armazenadas. c ´ ca 2. ca e a 3. porque ´ nele que as tabelas a c e e de permiss˜es (user. Atualize a tabela de permiss˜es. com NET STOP mysql ou com o ca utilit´rio de Servi¸os se vocˆ estiver exeutando MySQL como um servi¸o. co o 2. por exemplo.0-alpha shell> mysqlimport nome_bd DUMPDIR/*. Crie um novo arquivo ‘my.old’ para prevenirt o servidor de us´-lo.6 Notas espec´ ificas para os Sistemas Operacionais . Vocˆ pode verificar que este ´ o caso tentando a e e reiniciar o MySQL com o arquivo ‘my. ou instal´-la em um diret´rio diferente. Pare o Servidor MySQL em execu¸˜o (por exemplo.5. Fa¸a o download do ultima distribui¸˜o MySQL do Windows. Vocˆ pode ter que executar comandos o a e como o usu´rio root do MySQL na nova m´quina at´ que vocˆ tenha o banco de dados a a e e mysql no lugar.cnf’ e mova as partes do arquivo antigo a e para ele (reiniciando o servidor depois de mover cada parte) at´ que vocˆ determine qual e e op¸˜o est´ fazendo a inicializa¸˜o do servidor falhar. O procedimento est´ descrito em Se¸˜o 2. ou com a c e c mysqladmin shutdown).txt # carrega dados nas tabelas N˜o se esque¸a de copiar o banco de dados mysql tamb´m. ou chamado o mysqld diretamente). P´gina 130. como C:\mysql4. Execute o script de instala¸˜o do arquivo de distribui¸˜o do Windows. com NET START mysql se vocˆ executar c e o MySQL como um servi¸o. c 9. Alerte os usu´rios que ainda est˜o ativos para sua parada de manuten¸˜o. ca a ca 2. a ca 7.6 o a ca [Upgrading-grant-tables]. Sobrescrever a a o instala¸˜o antiga ´ o recomendado. 5. Escolha uma hora do dia com pouco uso. Finalize o programa WinMySQLAdmin se ele estiver em execu¸˜o. a Situa¸˜es de erros poss´ co iveis: A system error has occurred. siga os passo abaixo: 1.

Depois disto.google. o melhor op¸˜o a a ca paga que encontrei ´ o SecureCRT da http://www.1.f-secure.2 Distribuindo Dados Entre Diferentes Discos no Win32 A partir do MySQL vers˜o 3.1 Conectando em um MySQL Rematamente a Windows Utilizando SSH Aqui temos notas sobre como conectar a um servidor MySQL atrav´s de uma conex˜o e a remota e segura usando o SSH (por David Carlson dcarlson@mplcomm.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 133 2. Inicie seu cliente SSH Windows. se o diret´rio de dados do MySQL ´ ‘C:\mysql\data’ e vocˆ precisa o e e ter o banco de dados foo localizado em ‘D:\data\foo’. a a Vocˆ agora deve ter uma conex˜o ODBC ao MySQL. onde nome_bd ´ o nome do banco de e dados. 4. Este valor userid n˜o pode a ser o mesmo do nome do usu´rio se sua conta MySQL. Configure Host_Name = IP_ou_Nome_servidormysql. remote_port: 3306 ) ou um acesso local (configure port: 3306. Por exemplo. 2. remote port: 3306).vandyke.com/Top/Computers/Security/Products_ and_Tools/Cryptography/SSH/Clients/Windows/. remote_host: ip_ou_nomeservidormysql.com: 1. Crie um novo arquivo no Windows e ligue ao MySQL usando o driver ODBC da mesma forma que vocˆ normalmente faz. embora o procedimento e o para configurar o link seja diferente). a 6. E tamb´m fa¸a um acesso remoto (Configure local_ e c port: 3306. a 3. a e a o 5.com/. a co 7. criptografada com SSH. sen˜o vocˆ ter´ que refazer tudo da pr´xima vez. Logue ao seu servidor com a sess˜o SSH que acabou de ser criada. o mysqld-max e servidores mysql-max-nt na distribui¸˜o a ca MySQL s˜o compilados com a op¸˜o -DUSE_SYMDIR. Outra op¸˜o ´ o fe ca e secure da http://www.16. Na sua m´quina Windows. EXCETO pelo fato de digitar localhost para a e m´quina servidora MySQL — n˜o nomeservidormysql. vocˆ deve criar o arquivo e ‘C:\mysql\data\foo. e a 2. Como um usu´rio. vocˆ cria um link simb´lico para um banco de dados MySQL criando um e o arquivo que contem o caminho para o diret´rio de destino.6.sym’. Salve tudo. Vocˆ tamb´m pode encontrar algumas vers˜es e e o livres no Google em http://directory. Isto permite que vocˆ coloque um dia ca e ret´rio de banco de dados em discos diferentes adicionando um link simb´lico para ele. Note tamb´m que o link simb´lico n˜o ser´ e o a a . todas e tabelas criadas no banco de dados foo ser˜o criadas no ‘D:\data\foo’.com/. Salve o arquivo no diret´rio o o de dados usando o nome de arquivo ‘nome_bd.23.1 Notas Windows Esta se¸˜o descreve assuntos espec´ ca ificos para usar MySQL no Windows.6. (Isto o o ´ parecido com o a com que links simb´licos funcionam no Unix.1.sym’ que contˆm o caminho D:\data\foo\. host: localhost. O diret´rio a o ‘D:\data\foo’ deve existir para ele funcionar. Instale um cliente SSH na sua m´quina Windows. Configure a porta de acesso. inicie algumas aplica¸˜es ODBC (como o Access).6. Configure userid=seu_userid para logar no seu servidor. 2. No Windows.

h’ inclui qualquer outro arquivo necess´rio para compatibilidade de Windows a (como o ‘windows. mesmo se vocˆ compilar o MySQL com suporte o a ca a e a isto.4 MySQL para Windows Comparado com o MySQL para Unix O MySQL para Windows tem provado ser muito est´vel.lib’.cnf ou my.3 Compilando clientes MySQL no Windows Em seus arquivos fontes. a Perceba que como as bibliotecas clientes do MySQL s˜o compiladas como bibliotecas a threaded. Para habilitar links simb´licos vocˆ deve colocar no seu arquivo my.1. vocˆ deve incluir ‘my_global. trocar o n´ da interface de o ivel arquivos com uma interface virtual para que n´s possamos usar a interface o readfile()/writefile() no NT/2000/XP para obter mais velocidade.lib’.h’: e #include <my_global. que ´ apenas e e o a e um wrapper para carregar em ‘libmysql. a o a Leituras simultˆneas a O MySQL depende das chamadas pread() e pwrite() para estar apto a misturar INSERT e SELECT. Atualmente n´s usamos mutexes para emular o pread()/pwrite(). A implementa¸˜o atual limita o n´mero de arquivos abertos que o MySQL ca u . Se vocˆ n˜o precisa us´-lo a a e a a vocˆ pode usar a op¸˜o skip-symbolic-linkd.h> #include <mysql. ou ligar com a biblioteca est´tica ‘mysqlclient. Esta vers˜o do MySQL tem os a a mesmos recursos que sua vers˜o correspondente Unix com as seguintes exce¸˜es: a co Win95 e threads O Win95 perde aproximadamente 200 bytes de mem´ria principal para cada o thread criada. o servidor n˜o deve estar executando quando vocˆ mover o diret´rio do a e o banco de dados.h’ antes de ‘mysql. e n´s n˜o habilitamos esta op¸˜o por padr˜o. (Para e e o evitar problemas.0-alpha usado se um diret´rio com o nome do banco de dados existe no diret´rio de dados MySQL. vocˆ deve movˆ-lo para ‘D:\data’ antes do link simb´lico ser efetivado.134 MySQL Technical Reference for Version 5. e ca 2. o o Isto significa que se vocˆ j´ tem um diret´rio de banco de dados chamado ‘foo’ no direorio e a o de dados.ini o e a seguinte entrada: [mysqld] symbolic-links No MySQL 4. N´s iremos. Cada conex˜o no MySQL cria uma nova thread.h> ‘my_global. a longo prazo.1.) Note que devido a penalidade que vocˆ tem na velocidade quando abre todas as tabelas. e Vocˆ tamb´m pode ligar seu c´digo coma biblioteca dinˆmica ‘libmysq.0.h’) se o arquivo ´ compilado no Windows.6. vocˆ tamb´m deve compilar seu c´digo para ser multi-threaded! e e o 2.dll’ sobre demanda.6.0 --simbolic-links est´ habilitado por padr˜o. portanto vocˆ a e n˜o deve executar o mysqld por um longo tempo no Win95 se seu servidor lida a com v´rias conex˜es! WinNT e Win98 n˜o sofrem deste bug.

mysql> SELECT * INTO OUTFILE ’C:/tmp/skr.txt" INTO TABLE skr.txt’ FROM skr. a O caracter de diret´rio ‘\’ o Componentes de nomes de caminho no Win95 s˜o separados pelo caracter ‘\’ o a qual tamb´m ´ o caractere de escape no MySQL. mysql> SELECT * INTO OUTFILE ’C:\\tmp\\skr. Veja Se¸˜o 6. Se vocˆ estiver usando LOAD e e e DATA INFILE ou SELECT . Uma alternativa ´ dobrar o caracter ‘/’: e mysql> LOAD DATA INFILE "C:\\tmp\\skr. o que significa que vocˆ n˜o conseguir´ executar tantas e a a threads simultˆneas no NT/2000/XP como no Unix. portanto.3 [Name case c ca sensitivity]. Problems with pipes. INTO OUTFILE. a a a • mysqladmin shutdown n˜o pode abortar enquanto existirem conex˜es a o adormecidas. use nomes de arquivo no estilo Unix com caracteres ‘/’: mysql> LOAD DATA INFILE "C:/tmp/skr. que tem as seguintes a implica¸˜es: co • Uma conex˜o n˜o ir´ ser disconectada automaticamente depois de 8 horas. e a a Matando o MySQL do gerenciador de tarefas Vocˆ n˜o pode matar o MySQL do gerenciador de tarefas ou com o utilit´rio e a a shutdown no Win95. e a Nomes case-insensitivo Nomes de arquivos n˜o s˜o caso sensitivo no Windows. a Leitura de blocos O MySQL usa uma leitura de blocos para cada conex˜o. a a a como acontece com a vers˜o Unix do MySQL.txt" INTO TABLE skr. o Windows achar´ que ele encontrou o a fim de um arquivo e abortar´ o programa. A unica restri¸˜o ´ que os nomes de bancos de dados e tabelas devem ´ ca e usar o mesmo caso em uma senten¸a fornecida. Se o a c pipe incluir o caracter ^Z / CHAR(24). a • Se uma conex˜o trava. ca DROP DATABASE Vocˆ n˜o pode remover um banco de dados que est´ em uso por alguma thread.txt’ FROM skr. Vocˆ deve deslig´-lo com mysqladmin shutdown.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 135 pode usar para 1024. Pipes n˜o funcionam com confian¸a na linha de comando do Windows. ´ imposs´ a finaliza-la sem matar o MySQL. nomes de a a bancos de dados e tabelas do MySQL tamb´m n˜o s˜o caso sensitivo no Wine a a dows.1. P´gina 473. a e ivel • mysqladmin kill n˜o ir´ funcionar em uma conex˜o adormecida.. a Isto ´ um problma principalmente quando se tenta aplicar um log bin´rio como e a a seguir: mysqlbinlog binary-log-name | mysql --user=root Se vocˆ obter um problema aplicando o log e suspeitar que seja devido a um e caracter ^Z/CHAR(24) vocˆ pode usar a seguinte alternativa: e . Planejamos corrigir este problema quando nossos desenvolvedores Windows tiverem conseguido um boa solu¸˜o..

136 MySQL Technical Reference for Version 5. vocˆ primeiro deve descarregar e a e todas as tabelas MERGE (com FLUSH TABLES) ou apagar a tabela MERGE antes de deletar a tabela.0.0. DROP TABLE DROP TABLE em uma tabela que est´ em uso por uma tabela MERGE n˜o funa a cionar´ no Windows porque o manipulador do MERGE faz o mapeamento da a tabela escondido da camada superior do MySQL. a o Aqui est˜o alguns assuntos em aberto para qualquer um que queira melhorar o MySQL no a Windows: • Adicionar alguns ´ icones agrad´veis para o start e shutdown na instala¸˜o do MySQL. pipe. Isto ocorre devido ao fato de que no Windows.sql mysql --user=root --eexecute "source /tmp/bin.50.23. nas obtem o erro Access denied for ca a user: ’some-user@unknown’ to database ’mysql’ quando acessar um servidor MySQL na mesma m´quina. a Para corrigir isto.0. Isto ocorre porque a vers˜o do MySQL usa named pipes no NT por padr˜o.0-alpha mysqlbinlog binary-log-file --result-file=/tmp/bin. named pipes s˜o habilitados somente se o mysqld-nt a a ou mysqld-nt-max for iniciado com a op¸˜o --enable-name-pipe.22 no NT com o os programas e a clientes MySQL mais novos. a tabela est´ bloe a ca a queada para ser usado por outras threads.. e a a No futuro. Corrigiremos isto assim que introduzirmos views. ca Erro Access denied for user Se vocˆ tenta executar um programa cliente MySQL para conectar a um servie dor em execu¸˜o na mesma m´quina.. vocˆ n˜o pode deletar um aruivo que est´ em uso por outra threads. a a Vocˆ pode evitar este erro usando a op¸˜o --host=localhost para os novos e ca clientes MySQL ou criar um arquivo de op¸˜es ‘c:\my.sql" O ultimo comando pode tamb´m ser usado para leitura em qualquer arquivo ´ e sql que contenha dados bin´rios. Como o Windows n˜o pera mite que vocˆ delete arquivos que est˜o abertos.cnf’ que contenha a co seguinte informa¸˜o: ca [client] host = localhost A partir da vers˜o 3. DATA DIRECTORY e INDEX DIRECTORY As op¸˜es DATA DIRECTORY e INDEX DIRECTORY para CREATE TABLE s˜o ignoco a radas no Windows. signifca que o MySQL n˜o pode resolver seu a a nome de m´quina corretamente. a erro: Can’t open named pipe Se vocˆ utiliza um servidor MySQL vers˜o 3. vocˆ deve criar um arquivo ‘\Windows\hosts’ com a seguinte e informa¸˜o: ca 127. porque ele n˜o suporta links simb´licos. a ca . podemos encontrar algum modo de contornarmos este problema.1 localhost ALTER TABLE Enquanto vocˆ est´ executando uma instru¸˜o ALTER TABLE. ser´ apresentado o seguinte erro: a error 2017: can’t open named pipe to host: .

mysql. nosso bin´rio ´. mysqlshow. 2.a’. N´s ligamos nossos bin´rios e e a o a com a melhor vers˜o alterada da glibc. a co em uma tentativa de torn´-la funcional para um servidor muito exigido. a Se vocˆ planeja ter mais de 1000 conex˜es simultˆneas. NOTA: Temos visto alguns problemas estranhos com o Linux 2.html. co Aumente PTHREAD_THREADS_MAX em ‘sysdeps/unix/sysv/linux/bits/local_lim. a a a Perceba que as vers˜es da glibc iguais ou anteriores ` Vers˜o 2. Portanto se vocˆ a e e ler o texto abaixo. Se vocˆ est´ executando Linux em uma m´quina x86. • Portar o readline para Windows para uso na ferramenta de linha de comando mysql. ir´ iamos apreciar se fosse feito uma observa¸˜o sobre isto.h’ para 256KB.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 137 • Seria muito interessante conseguir matar o mysqld do gerenciador de tarefas.1 tem um bug fatal no o a a tratamento do pthread_mutex_timedwait. • Adicionar macros para usar os m´todos mais r´pidos de incremento/decremento de e a threads seguras fornecidos pelo Windows.com/downloads/os-linux.1. mesmo para configura¸˜es com v´rias conex˜es concorrentes e/ou tabelas excedendo co a o o limite de 2 GB. na maioria das vezes. deve ser usado o mysqladmin shutdown.2 Notas Linux (Todas as vers˜es) o As notas abaixo a respeito da glibc aplicam-se somente na situa¸˜o quando o MySQL ´ ca e construido por vocˆ mesmo. para que possamos fazer ca uma melhor vers˜o bin´ris da pr´xima vez. mysqladmin e o o mysqldump) seria ´timo. na e e a a maioria dos casos ´ muito melhor para vocˆ usar nosso bin´rio. e preocupe-se com uma constru¸˜o ca pr´pria apenas se vocˆ descobrir que nosso bin´rio n˜o ´ bom o suficiente para vocˆ. • Vers˜es GUI dos clientes MySQL padr˜es (mysql. Para o momento. Neste o e a a e e caso. que ´ usado quando vocˆ executar instru¸˜es e e co INSERT DELAYED. e est´ em d´vida sobre o que deve fazer.2.c’ fosse interco ´ rompiveis. Vocˆ pode e e obter o LinuxThreads em http://www.h’ para 4096 e abaixe o STACK_SIZE no ‘linuxthreads/internals. pode ser que vocˆ n˜o tenha configurado o Linux para lidar com o n´mero de o e a u arquivos suficiente. recomendamos a atualiza¸˜o para o Linux 2. Os caminhos s˜o relativos ` raiz da glibc. a a o O MySQL usa LinuxThreads no Linux. Se vocˆ usa uma vers˜o do Linux que n˜o tenha e a a a glibc2. vocˆ pode conferir o valor para a aloca¸˜o dos arquivos fazendo: e ca .4! Seu e ca sistema ficar´ mais r´pido e mais est´vel.14 e MySQL em sistemas SMP. No Linux 2. podemos escolher as melhores op¸˜es do compilador.6. recompile-a e religue o MySQL ao novo ‘libpthread. Se vocˆ tem um sistema SMP.2 e posteriores. no qual ele n˜o consiga abrir v´rios arquivos ou e a a conex˜es. Note que o MySQL n˜o ser´ est´vel com cerca de a a a a a 600-1000 conex˜es se o valor de STACK_SIZE for o padr˜o de 2MB. o a Se vocˆ tiver um problema com o MySQL. Para um usu´rio a a comum. ser´ necess´rio fazer algumas e o a a a altera¸˜es na LinuxThreads. a melhor escolha. Isto tornaria poss´ ivel matar threads abertas com mysqladmin kill no Windows. o • Seria muito bom se as fun¸˜es de leitura e escrita no socket em ‘net. Recomendamos n˜o usar INSERT DELAYED antes de atualizar a glibc. vocˆ deve instalar LinuxThreads antes de tentar compilar o MySQL. tente usar o nosso bin´rio a u a primeiro para ver se ele preenche suas necessidades.

deve ser adicionado o seguinte no seu script de e o boot (ex. O o usu´rio deve tomar medidas para certirficar-se que o n´mero de threads em funcionamento a u em qualquer hora seja suficientemente baixo para que as pilhas das threads permane¸am c longe do monte global. mas e e neste caso. ou outras coisas que e fazem o mysqld alocar muita mem´ria ou se vocˆ estiver executando um kernel 2. vocˆ pode configurar estes parˆmteros durante a inicializa¸˜o usando a e a ca ferramenta sysctl. e e Recomendamos os valores entre 128K e 256K.conf’: # Aumente alguns valores para o MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.0-alpha cat /proc/sys/fs/file-max cat /proc/sys/fs/dquot-max cat /proc/sys/fs/super-max Se vocˆ possui mais de 16M de mem´ria.local’ no SuSE Linux): echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max Vocˆ tamb´m pode executar os comandos acima da linha de comando como root. Apenas grave os seguintes valores em um arquivo chamado ‘/etc/sysctl.138 MySQL Technical Reference for Version 5. a a Se vocˆ mesmo construiu o MySQL e n˜o deseja confus˜es corrigindo LinuxThreads. ‘/etc/rc/boot. vocˆ pode sofrer com um "recurso" do kernel e a o a e 2. Se vocˆ usa v´rias conex˜es simultˆneas. que ´ usada por muitas distribui¸˜es Linux (No SuSE a partir da vers˜o e co a 8.0). como descobrimos em experiˆncias.super-max = 1024 You should also add the following to ‘/etc/my.2 que penaliza um processo por bifurcar-se ou clonar um filho na tentativa de prevenir . Com mysqld vocˆ deve refor¸ar este comportamento "gentil" cone c figurando um valor razo´vel para a vari´vel max_connections. Quanto mais vocˆ reduz STACK_SIZE em LinuxThreads mais threads vocˆ pode criar seguramente. mas pequena o bastante para manter a pilha de alguma thread executando dos dados globais mysqld. a implementa¸˜o Linux de ca mmap().0. Ela necessita ser grande o bastante para que tenha espa¸o o c c c suficiente para a pilha de cada thread. Se vocˆ estiver usando nosso bin´rio ou RPM vers˜o 3. De forma alternativa.2 com o o e patch de 2GB. e a a vocˆ pode seguramente configurar max_connections para 1500.23. Infelizmente.cnf’: [mysqld_safe] open-files-limit=8192 Os parˆmetros acima permitem o MySQL criar at´ 8192 conex˜es + arquivos. assumindo que n˜o h´ e a a uma grande chave de buffer ou tabelas heap com grande quantidade de dados. a e o A constante STACK_SIZE na LinuxThreads controla o espa¸amento das pilhas threads no c espa¸o de endere¸amento. um erro. zerando os dados de toda a p´gina ao c a a inv´s de retoernar. Ele ainda deve ser menor a se vocˆ tiver uma chave grande para o buffer. ir´ desmapear uma regi˜o j´ mapeada se vocˆ e a a a e solicitar o mapeamento de um endere¸o j´ em uso. os antigos limites voltar˜o a ser usados na pr´xima vez que o computador for a o reiniciado. Portanto a seguran¸a do mysqld ou qualquer outra aplica¸˜o e c ca baseada em threads depende do comportamento gentil do c´digo que cria as threads. vocˆ e a o e deve configurar max_connections para um valor m´ximo de 500.25 ou posterior. grandes tabelas heap.

2. ironicamente.1-patch) Com a glibc-2. temos observado a u uma queda gradual na velocidade das consultas quando o n´mero de clientes aumenta.1-patch ( http://www. especialmente em sistemas multi processados. entretando. removendo processadores da m´quina. e o fator da escala do e MySQL (computado com a raz˜o do throughput m´ximo para o thoughput de cada cliente. N´s tamb´m corrigimos o comportamento overspin com um patch. Estamos testando o MySQL no kernel 2. que ´ muito a a e melhor. n˜o h´ nenhuma perda de a a desempenho no throughput das consultas at´ cerca de 1000 clientes.iremos inclu´ i-los neste manual.) a a foi de 180%. Isto faz com que o MySQL n˜o consiga fazer uma bom ca a escalonamento.2. em linuxthreads-2. co o A chance desta condi¸˜o pode ser reduzida mudando a prioridade do processo mysqld para ca a prioridade mais alta. ca A performance do MySQL obtem uma melhora significativa. Temos observado resultados similares em sistemas com 4 processadores .1 ´ muito ruim para programas com v´rias threads que travam o mutex e a por um tempo curto. se vocˆ liga o MySQL e com LinuxThreads sem modifica¸˜es. sem causar problemas e atualmente o recomendamos para nossos usu´rios que continuando trabalhando com a servidores muito carregados em kernels 2. Em sistemas de m´ltiplas CPUs.patch). Nos a nossos testes em uma m´quina com 4 processadores.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 139 um ataque de separa¸˜o.1.patch.mysql. pode ser mais f´cil simplesmente atualizar para o a 2. u No processo de tentar encontrar uma solu¸˜o.virtualmente.2 overspins. a co a performance do MySQL ´ melhorada em alguns casos. Avisamos. Em sistemas com CPU u a unica.3.2. Atualmente temos feito testes extensivos deste patch nos sistemas de desenvolvimento e produ¸˜o.1. o c´digo mutex no glibc-2.23.virtualmente n˜o h´ perda de desempenho quando o n´mero de clientes ´ incrementado at´ a a u e e 1000 e o fator da escala foi de 300%. que prejudica a performance do MySQL. O patch est´ dispon´ a c a ivel aqui (http://www. Existe outro detalhe que afeta muito a performance do MySQL. tornando ´ ca a conex˜o ao MySQL muito lenta.com/Downloads/Linux/linuxthreads-2. Para corrigir este compore tamento.com/Downloads/Linux/linuxthreads-2.mesmo que o patch na glibc-2. A implementa¸˜o de mutex em LinuxThreads na ca glibc-2.mysql. N´s descobrimos que ´ essencial executar o o e processo mysqld com a mais alta prioridade poss´ no kernel 2. Este detalhe foi corrigido no kernel 2.com/Downloads/Patches/linux-fork. .3. que sobre algumas condi¸˜es. o e ´ disponivel em http://www. se vocˆ n˜o est´ satisfeito com a performance atual do seu sistema. quando o n´mero de clientes simultˆneos cresce. Isto pode ser feito adicionando o comando renice -20 $$ ao mysqld_safe.2. temos visto isto se manifestar em uma cria¸˜o muito lenta das threads. melhor do e a a que aplicar um patch ao seu kernel 2. recebemos um patch do kernel de um de ca nossos usu´rios. Portanto para um servidor SMP muito carregado n´s o definitivamente recomendamos o kernel 2.4.2.2.mysql.2. Atualmente estamos tentando coletar mais informa¸˜es sobre como o MySQL atua no kernel co 2.4.4 em sistemas com 4 e 8 processadores.4 para obter performance ivel m´xima. Se vocˆ tem acesso a um sistema deste porte e tem e feito alguns benchmarks. o aumento da prioridade nos deu 60% a de aumento no throughput com 400 clientes.4. que lhe dar´ tamb´m uma melhora em seu sistemas SMP em adi¸˜o ` corre¸˜o do bug a e ca a ca discutido aqui.36 ir´ usar o mutex adaptativo. o MySQL vers˜o 3. que alega fazer muita diferen¸a para seu site. por favor envie um email para docs@mysql. Em um sistema SMP. portanto. disponibilizamos um patch para glibc 2.com com os resultados .4 em uma m´quina com 2 processadores e descoa brimos que o MySQL escalona muito melhor .

html cont´m informa¸˜es sobre ca a e co como contornar este limite. a Se vocˆ estiver ligando seu pr´prio cliente MySQL e obter o erro: e o ld. • Copie libmysqclient. se vocˆ ligar com glibc-2. A p´gina http://www. Recomendamos que vocˆ use os patches acima para construir uma vers˜o est´tica especial e a a de libpthread. o uso de nosso bin´rio ser´ a solu¸˜o.so. vocˆ estar´ fazendo por sua conta e risco e tenha aten¸˜o com outras aplica¸˜es e a ca co que dependem de LinuxThreads. ca P´gina 332. Existir´ uma thread para o gerenciador LinuxThreads.patch. P´gina 921./my: fatal: libmysqlclient.so para ‘/usr/lib’.so. -Wl. Se vocˆ ver um processo mysqld daemon finalizado com ps. mas n˜o a a podemos dizer nada sobre outras aplica¸˜es.a e use-a somente para liga¸˜es est´ticas com o MySQL. Isto significa que vocˆ pode ter at´ 1021 conex˜es ao MySQL em um sistema sem e e o corre¸˜o. ca ca a ´ Quando estiver usando LinuxThreads vocˆ ver´ um minimo de trˆs processos em execu¸˜o.2 [safe_mysqld]. threads. o Perceba que o kernel Linux e a biblioteca LinuxThread pode por padr˜o ter apenas 1024 a threads.1 e ca [Crashing]. vocˆ e pode iniciar o mysqld com a op¸˜o --core-file. Temos esperan¸as que a a c os padr˜es ser˜o corrigidos para valores mais aceit´veis para configura¸˜es pesadasa do o a a co MySQL no futuro. isto normalmente significa que e vocˆ encontrou um bug no MySQL ou que tenha uma tabela corrompida.2.140 MySQL Technical Reference for Version 5./configure. a Para obter um descarga do core no Linux se o mysqld finalizar com um sinal SIGSEGV. P´gina 141.0-alpha Ele combina a corre¸˜o do overspin. Se vocˆ ligar outras aplica¸˜es coma a vers˜o co e co a modificada da biblioteca ou construir uma vers˜o alterada compartilhada e instal´-la no seu a a sistema. n´mero m´ximo de threads e espa¸amento das pilhas ca u a c em um unico patch. Vocˆ precisar´ aplic´-lo no diret´rio linuxthreads com patch -p0 ´ e a a o </tmp/linuxthreads-2.1 [Binary notes-Linux]. make a ca a install. Esperamos que seja inclu´ de alguma forma nos ido futuros lan¸amentos da glibc-2.com/linuxnotes. Perceba que provavelmente vocˆ tamb´m ca e e precisar´ aumentar o core file size adicionando ulimit -c 1000000 para mysqld_safe a ou iniciar mysqld_safe com --core-file-sizes=1000000.2. Veja Se¸˜o 4.6. Veja Se¸˜o 2.2.volano.0.8. Sabemos que os co a patches s˜o seguros para o MySQL e pode melhorar significamente sua performance. c e ainda ser´ necess´rio corrigir STACK_SIZE e PTHREAD_THREADS_MAX.so.2.x ou Slackware). vocˆ obter´ alguns problemas n˜o fatais e a a com resolu¸˜o de nomes.2. ´ muito prov´vel que eles s˜o relacionados a problemas de a e a a bibliotecas ou compilador. Veja Se¸˜o A.4: open failed: No such file or directory Quando execut´-los. make. Se for este o caso. uma a a thread para lidar com conex˜es e uma thread para tartar de alarmes e sinais.r/path- . e a e ca Estes s˜o de fato. ent˜o sua constru¸˜o poder´ ser reduzida a . a a ca Um problema conhecido com a distribui¸˜o bin´ria ´ que com antigos sistemas Linux que ca a e usam libc (como o RedHat 4.1: .4. Se vocˆ passar por problemas estranhos durante a instala¸˜o do MySQL ou com travamentos e ca de alguns utilit´rios comuns. De qualquer forma.2. o problema pode ser evitado com um dos seguintes m´todos: a e • Ligue o cliente com a seguinte op¸˜o (no lugar de -Lpath): ca libmysqlclient.

Um problema. usando liga¸˜es dinamicas. Se vocˆ o e u e . e e provavelmente. Se vocˆ for escrever ou usar fun¸˜es UDF (isto ´ algo para e co e programadores C ou C++). Se vocˆ estiver usando este kernel vocˆ deve e e atualiz´-lo para o 2.0 a Aviso: Percebemos que alguns usu´rios do MySQL tiveram serios problemas de estabilidade a com o MySQL e o kernel 2. Um programa ligado com a op¸˜o -static ´ um pouco maior que um ca e programa ligado dinamicamente e tamb´m um pouco mais r´pido (3-5%).so est´ localizado para a o a vari´vel de ambiente LD_RUN_PATH antes de executar seu cliente. ter´ alguns problemas com resolu¸˜o de nomes de m´quinas e getpwnam() a ca a com a vers˜o bin´ria./configure --prefix=/usr/local/mysql \ --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory 2. mesmo quando compilado com a -static).19 (ou posterior) ou para o kernel 2. O lado ruim ´ que vocˆ n˜o poder´ usar nomes de m´quinas nas tabelas e e a a a de permiss˜es.14 do Linux. Neste caso. que significa que vocˆ normalmente n˜o precisa se a a e e a preocupar com qual vers˜o das bibliotecas do sistema vocˆ tem. e a entretanto.2. (Isto ´ porque o glibc infelizmente depende de algumas bibliotecas a a e externas para resolver nomes de m´quinas e getpwent(). vocˆ. ´ que vocˆ n˜o pode usar fun¸˜es definidas pelo usu´rio (UDF) com um proe e a co a grama ligado estaticamente. Isto n˜o executar´ o teste resolveip no mysql_ a a install_db. vocˆ deve usar n´meros IP no lugar (exceto para localhost).4. vocˆ provavelmente obter´ a seguinte mensagem de erro quando e a executar mysql_install_db: Sorry. Vocˆ n˜o precisa instaa e e a lar LinuxThreads. e co Se vocˆ estiver usando um sistema baseado em libc (em vez de um sistema glibc2).1 Notas Linux para distribui¸˜es bin´rias co a O MySQL necessita pelo menos do Linux vers˜o 2. a Se vocˆ estiver usando o compilador Fujitsu (fcc / FCC) vocˆ ter´ alguns problemas come e a pilando o MySQL porque os arquivos de cabe¸alho Linux s˜o muito orientados ao gcc.4 uma vez que ele lhe a e trar´ uma melhora significante na velocidade. • Execute mysql_install_db --force. ent˜o vocˆ deve considerar seriamente o uso do kernel 2. a A vers˜o bin´ria ´ ligada com -static.gz) e a ca ca instale.6.2.2.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 141 • Adicione o caminho do diret´rio onde libmysqlclient. the host ’xxxx’ could not be looked up ou o seguinte erro quando vocˆ tentar executar mysqld com a op¸˜o --user: e ca getpwnam: No such file or directory Vocˆ pode resolver este problema usando de um dos modos seguintes: e • Obtenha uma distribui¸˜o fonte do MySQL (uma distribui¸˜o RPM ou tar. vocˆ deve compilar o MySQL. c a A seguinte linha configure deve funcionar com fcc/FCC: CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const \ -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ ’-D_EXTERN_INLINE=static __inline’" . Se vocˆ tiver um gabinete a e multi-cpu.

0. Fa¸a apenas o que a mensagem de erro diz e adicione um caractere sublinhado para a macro c _P que tem somente um caractere sublinhado e ent˜o tente novamente. Existem alguns proba e lemas com os RPMs glibc da RedHat. ca Se vocˆ estiver usando o Red Hat 8. se vocˆ estiver executando o servidor de banco de dados e clientes e na mesma m´quina. vocˆ deve a e remover o teste resolveip no mysql_install com um editor.6. a Em algumas vers˜es 2. Change _P to __P in the /usr/include/sched. Sabe-se que funciona com a libc a 5.4. O problema ´ que o Linux tem um atraso entre o momento em que vocˆ fecha um socket e e TCP/IP at´ que ele seja realmente liberado pelo sistema. N´s sempre tentamos usar o compilador mais r´pido e est´vel o a a dispon´ ivel. configure pode produzir um erro como este: co Syntax error in sched. e a Se vocˆ est´ usando o gcc 3.4.7-29 funcionam. Este tamanho de pilha o ´ o padr˜o agora no MySQL 4.0. • Inicie mysqld com su no lugar de usar --user. os mostrados abaixo podem ser e ignorados: . vocˆ ir´ obter o erro acima se vocˆ tentar fazer muitas novas u e a e conex˜es TCP/IP durante um pequeno tempo.4 corrija este problema no futuro. a Vocˆ pode obter alguns aviso quando estiver compilando.7-19 e 2.004 03 ou mais novo.x. N´s enviamos emails sobre este problema v´rias vezes para diferentes listas de discuss˜o o a a Linux mas nunca conseguimos resolver este problema apropriadamente. a o 2.2 do kernel Linux. ca Em algumas distribui¸˜es Linux mais antigas.h. vocˆ deve iniciar o e e mysqld com a op¸˜o --thread-stack=192K (Use -O thread_stack=192K antes do MySQL ca 4). See the Installation chapter in the Reference Manual. se vocˆ n˜o fizer isto.vocˆ pode obter o erro Resource temporarily o e unavailable quando vocˆ faz v´rias novas conex˜es para um servidor mysqld sobre e a o TCP/IP. A vers˜o 2.2 Notas Linux x86 O MySQL exige a vers˜o 5. vocˆ obter´ um e a e a erro sobre um s´ imbolo __cxa_pure_virtual perdido durante a liga¸˜o.12 ou mais nova da libc. N´s experamos que o kernel Linux 2.0-alpha estiver usando uma release antiga do MySQL que n˜o suporte --force.0. Como s´ existe espa¸o para um e o c n´mero finito de slots TCP/IP. como quando vocˆ executa o benchmark do o e MySQL ‘test-connect’ sobre TCP/IP.2. Suporte MySQL ao Perl exige Perl Vers˜o 5. Se vocˆ n˜o fizer isto o mysqld finlizar´ em gethostbyaddr() porque a nova biblioteca e a a glibc exige mais de 128K de mem´ria na pilha para esta chamada.46.6 e posterior da glibc tamb´m deve funcionar. A unica ’corre¸˜o’ conhecida . vocˆ deve instalar a e a e biblioteca libstdc++v3 antes de compilar o MySQL.0 e acima para compilar o MySQL. para este problema ´ usar conex˜es persistentes nos seus ´ ca e o clientes ou usar sockets. As distribui¸˜es bin´rias Linux-Intel e RPM do MySQL s˜o configuradas para o m´ximo co a a a ´ de desempenho possivel.10 e acima.142 MySQL Technical Reference for Version 5.2.0 ou uma nova biblioteca glibc 2. confira se existe e alguma atualiza¸˜o! Sabemos que os RPMs glibc 2.0.0.h file. portanto se vocˆ tiver problemas.

a’ n˜o est´ e a a instalado corretamente: /usr/lib/libc.2.h’ depois de configurar e antes de compilar.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 143 mysqld.2. significa que seu ‘libg++. readdir_r() est´ quebrada. N´s tamb´m compilamos estaticamente para evitar problemas de bibliotecas. Se vocˆ obter o seguinte erro quando ligar o mysqld. A partir das pr´ximas distribui¸˜es adicionamos o parˆmetro -arch generic em nossas o co a op¸˜es de compila¸˜o. 2. Tente renome´-lo depois remova ‘sql/mysqld’ e fa¸a um a c novo make install e tente novamente. o qual assegura que o bin´rio execute em todos os processadores co ca a Alpha.o mysqld. o problema pode ser que vocˆ ca e tenha um antigo ‘/lib/libc. Este problema foi relatado em algumas instala¸˜es co Slackware.13-SMP.a’ executando configure desta forma: e shell> CXX=gcc .o(.4.2-504) e compilador C++ Compaq (V6.6.6.12 ´ a primeira vers˜o do MySQL que ´ testada no Linux-Alpha. Se a e a e vocˆ planeja usar o MySQL no Linux-Alpha.3-005) em uma m´quina Compaq DS20 com um processador Alpha EV6.2. obtemos 9-14 % de melhora na performance com MySQL./configure 2.cc -o objs-thread/mysqld.a(putc. kernel o a o o a 2. a Vocˆ pode encontrar os compiladores acima em http://www.support. ca o a Se o mysqld sempre descarregar um core na inicializa¸˜o.a’.cc:346: warning: assignment of negative value ‘-1’ to ‘long unsigned int’ O mysql.o): In function ‘_IO_putc’: putc.4 Notas Linux Alpha O MySQL Vers˜o 3.cc:315: warning: assignment of negative value ‘-1’ to ‘long unsigned int’ mysqld. em vez do gcc.3 Notas Linux SPARC Em algumas implementa¸˜es. Temos testado o MySQL no Alpha com nossos pacotes de benchmarks e testes. O sintoma ´ que SHOW co a e DATABASES sempre retorna um conjunto vazio.cc: In function ‘void init_signals()’: mysqld. vocˆ deve ter certeza que possui esta vers˜o e e a ou mais nova.cc: In function ‘void * signal_hand(void *)’: mysqld. Compilador C Compaq (V6. N´s tamb´m e o a e o e compilamos estaticamente para evitar problemas de bibliotecas.server pode ser encontrado no diret´rio ‘share/mysql’ sob o diret´rio de ino o stala¸˜o MySQL ou no diret´rio ‘support-files’ da ´rvore fonte MySQL.compaq.23. n´s est´vamos usando SuSE 6. Quando n´s compilamos o bin´rios MySQL padr˜es. isto significa que ca a vocˆ s´ pode utilizar nosso bin´rio se vocˆ tiver um processador Alpha EV6. Note que a linha de configura¸˜o otimiza o bin´rio para a CPU atual. Isto pode ser corrigido removendo HAVE_READDIR_R do ‘config.text+0x0): multiple definition of ‘_IO_putc’ Vocˆ pode evitar o uso de ‘libg++. e Usando estes compiladores.com/alpha-tools. o e . e ele parece funcinar muito bem.

usamos a seguinte linha de compila¸˜o: ca Usando gcc-2.0-alpha CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \ CXXFLAGS="-fast -arch generic -noexceptions -nortti" \ .0! e • Se vocˆ tentar ligar o mysqld estaticamente quando usar o gcc. vocˆ precisar´ das bibliotecas e a glibc mais novas (Sabemos que glibc-2./configure --prefix=/usr/local/mysql --disable-shared \ --with-extra-charsets=complex --enable-thread-safe-client \ --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared Se vocˆ deseja usar egcs a seguinte linha de configura¸˜o funcionou para n´s: e ca o CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" . Vocˆ deve fazer download e usar o gdb 5.conf’ ou adicionar o caminho e da o diret´rio onde est´ localizado o ‘libmysqlclient.0. Vocˆ tamb´m deve usar o e e compilador egcs C++ (egcs-1.5 Notas Linux PowerPC O MySQL deve funcionar no MkLinux com o mais novo pacote glibc (testado com glibc 2. NAO use --with-mysqldldflags=-all-static com gcc.0. Em outras palavras.18.0.95./configure --prefix=/usr/local/mysql \ --disable-shared Alguns problemas conhecidos quando executamos o MySQL no Linux-Alpha: • Debugar aplica¸˜es baseadas em threads como o MysQL n˜o ir´ funcionar com gdb co a a 4.7.7).6.3. P´gina 918.2.2 ou mais nova).96: CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" .144 MySQL Technical Reference for Version 5.6./configure --prefix=/usr/local/mysql \ "--with-comment=Official MySQL binary" --with-extra-charsets=complex No Ia64 os bin´rios do cliente MySQL est˜o usando bibliotecas compartilhadas. 2.1 [Erros de liga¸˜o]. (Linux Mips). a imagem resultante ir´ e a ˜ descarregar um arquivo core no in´ icio. gcc 2. ca ca a . Isto a a significa se vocˆ instalar nossa distribui¸˜o bin´rias em algum outro lugar diferente de e ca a ‘/usr/local/mysql’ vocˆ precisa modificar o ‘/etc/ld.7 Notas Linux IA-64 Para conseguir compilar o MySQL no Linux Ia64.29C2 funciona). 2.2-9.6 Notas Linux MIPS Para ter o MySQL funcionando no Qube2.0. Veja Se¸˜o A.6.so.2.2. 2.so’ na vari´vel de ambiente LD_ o a a LIBRARY_PATH.

vocˆ deve ter problemas mesmo antes de descompactar a distribui¸˜o MySQL! e ca O tar do Solaris n˜o pode tratar grandes nomes de arquivos.-xarch=v8plusa" para a CFLAGS e CXXFLAGS.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 145 2.4 a e anteriores./configure --prefix=/usr/local/mysql --enable-assembler Para criar um bin´rio de 64 bits do Solaris usando gcc.o MySQL 3.1. o compilador recomendado ´ o gcc 2.3. configure: error can not run test programs while cross compiling Isto significa que alguma coisa est´ errada com a instala¸˜o de seu compilador! Neste caso a ca vocˆ deve atualizar seu compilador para uma vers˜o mais nova.12-beta/bench/Results/ATIS-mysql_odbc-NT_4. Perceba que egcs 1.ms-sql./configure --prefix=/usr/local/mysql --enable-assembler Vocˆ pode criar um bin´rio de 64 bits usando o compilador Forte da Sun com os seguintes e a parˆmetros de compila¸˜o: a ca CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \ CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \ .cache’: ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls=’no’} Se vocˆ est´ usando Solaris em um SPARC.3 (ou mais novo). vocˆ pode executar e e configure da seguinte forma: CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \ .6.8.my tar: directory checksum error Neste caso.95. e -m64 para CFLAGS e CXXFLAGS.5 e superior. ca Vocˆ pode encontrar uma c´pia pr´-compilada para Solaris em e o e http://www./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler Se vocˆ possui um ultra sparc. Se vocˆ possui o compilador Sun Workshop (Fortre) 5. a Se vocˆ obter o seguinte erro de configure: e checking for restartable system calls.1 n˜o s˜o a a a est´veis no SPARC! a A linha do configure recomendado quando usando gcc 2. o MySQL ir´ automaticamente usar MIT-pthreads. portanto vocˆ pode ver um a e erro deste tipo quando descompactar o MySQL: x mysql-3. Para a vers˜o 2. P´gina 106. Veja Se¸˜o 2.23 n˜o inclui as modio a fica¸˜es exigidas para suportar isto. Vocˆ e a e e pode encontr´-lo em http://gcc. a Note que isto s´ funciona com o MySQL 4.html...95.0-cmp-db2. Vocˆ tamb´m pode resolver e a e e este problema inserindo a seguinte linha no arquivo ‘config. vocˆ deve usar o GNU tar (gtar) para desempacotar a dise tribui¸˜o. vocˆ pode obter 4% a mais de performance adicionando e e "-mcpu=v8 -Wa.gnu.2.0 e acima . As threads nativas da Sun funcionam somente no Solaris 2.org/.com/downloads/os-solaris.1 e gcc 2.6 [MITa ca pthreads]. co .3 Notas Solaris No Solaris.mysql.2 ´: e CC=gcc CFLAGS="-O3" \ CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \ .informix.22.

a o Se vocˆ tiver um problema com fdatasync ou sched_yield.c: In function ‘signal_hand’: .h’ do Solaris.0-alpha No benchmark do MySQL. Se vocˆ tentar fazer e a e isto.2 com o ca parametro -mcpu.. vocˆ pode ter muitos probe ivel e lemas.146 MySQL Technical Reference for Version 5. vocˆ deve e a e tentar compilar o MySQL com o compilador Sun sem habilitar a op¸˜o multi-thread (-mt): ca libc internal error: _rmutex_unlock: rmutex not held Adicione -mt a CFLAGS e CXXFLAGS e tente novamente. a maioria das vers˜es bin´rias o a de gcc tem arquivos in´teis e antigos que ir˜o quebrar todos programas que usam threads u a (e possivelmente outros programas)! O Solaris n˜o fornece vers˜es est´ticas de todas bibliotecas de sistema (libpthreads) e a o a libdl). Isto ´ um bug da Sun (compilador corrompido ou c e arquivo include corrompido).0.0 no modo 32 bit em compara¸˜o com o uso do gcc 3.3: Vocˆ tamb´m pode ter que editar o script configure para alterar esta linha: e e #if !defined(__STDC__) || __STDC__ != 1 para isto: #if !defined(__STDC__) Se vocˆ ligar __STDC__ com a op¸˜o -Xc. vocˆ pode corrigir isto adicioe e nando LIBS=-lrt para a linha de configura¸˜o ca O seguinte paragr´fo ´ relevante somente para compiladores mais antigos que o WorkShop a e 5./thr_alarm. receber´ o erro: a ld: fatal: library -ldl: not found ou undefined reference to ‘dlopen’ . Se vocˆ estiver usando a vers˜o SFW do gcc (que vem com o Solaris 8). vocˆ deve adicionar e a e ‘/opt/sfw/lib’ a vari´vel de ambiente LD_LIBRARY_PATH antes de executar a configura¸˜o. mas o e a a a mysqld poder´ tratar mais threads e mem´ria.. Se vocˆ obter o seguinte erro quando estiver compilando o MySQL com gcc. conseguimos um aumento de velocidade de 4% em um UltraSPARC usando o Forte 5.c:556: too many arguments to function ‘sigwait’ A coisa apropriada para fazer neste caso ´ obter a vers˜o mais nova do gcc e compil´-lo e a a com seu compilador gcc atual! Ao menos para o Solaris 2. Se o mysqld emitir a mensagem de erro mostrada abaixo quando vocˆ execut´-lo. ele ser´ 4$ mais lento que o bin´rio de 32 bits. Vocˆ deve recompilar o gcc e GNU binutils na m´quina que vocˆ o executar´ para e a e a evitar qualquer problema. a ca Se vocˆ estiver usando o gcc dispon´ em sunfreeware. . o compilador Sun n˜o pode compilar com o arquivo e ca a de cabe¸alho ‘pthread.5. significa que e seu gcc n˜o est´ configurado para sua vers˜o de Solaris: a a a shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm . Se vocˆ criar um bin´rio de 64 bits. portanto vocˆ n˜o pode compilar o MySQL com --static./thr_alarm.com.

e ‘support-files/mysql.1 Notas Solaris 2. Vocˆ pode ver o seguinte erro quando e vocˆ usa o gcc: e .8 tem alguns bugs nos arquivos include.so’ para ‘/usr/lib’. vocˆ deve obter o seguinte erro quando e a o e tentar execut´-lo: a ld. Veja Se¸˜o 4. A maioria dos e a detalhes do Solaris 2. vocˆ ter´ duas op¸˜es: e a co • Se vocˆ deseja usar o protocol de comuni¸˜o de compactado vocˆ precisar´ obter e e ca e a instalar a zlib from ftp.8 Vocˆ pode utilizar normalmente um bin´rio Solaris 2.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 147 ou cannot find -lrt Se v´rios processos tentar conectar muito rapidamente ao mysqld. Se vocˆ tiver problemas com o configure tentando ligar com -lz e vocˆ n˜o tem a zlib e e a instalada. a Se vocˆ est´ ligando seu pr´prio cliente MySQL.server’ para ‘/etc/init.r/full-path-toca libmysqlclient. • Copie o arquivo ‘libmysqclient.gnu.#: open failed: No such file or directory O problema pode ser evitado por um dos seguintes m´todos: e • Ligue o cliente com a seguinte op¸˜o (em vez de -Lpath): -Wl.23.8. Se vocˆ estiver usando o gcc e tiver problemas carregando fun¸˜es UDF no MySQL.3.8. e ca 2.1: .6. • Configure com --with-named-z-libs=no.1. Use apenas --back_log=50.org. P´gina 208.d’ e criar para ele. • Adicione o caminho do diret´rio onde ‘libmysqlclient. vocˆ pode copiar e um link simb´lico o Como o Solaris n˜o suporta core files para aplica¸˜es setuid(). chamado ‘/etc/rc.7 e 2. e Note que o MySQL vers˜o 3. vocˆ n˜o pode obter um a co e a core file do mysqld se vocˆ estiver usando a op¸˜o --user.so.3.so.6 tamb´m se aplicam ao Solaris 2.7 / 2. ca ca Se vocˆ deseja que o MySQL inicie automaticamente.1 [Op¸˜es da ca co linha de comando].d/S99mysql.0. vocˆ ver´ este erro no a e a log do MySQL: Error in accept: Protocol error Vocˆ deve tentar iniciar o servidor com a op¸˜o --set-variable back_log=50 como uma e ca solu¸˜o para esta situa¸˜o.4 e superiores devem estar aptos para autodetectar novas a vers˜es do Solaris e habilitar solu¸˜es para os problemas seguintes! o co Solaris 2.7/2.so’ est´ localizado ` vari´vel o a a a de ambiente LD_RUN_PATH antes de executar seu cliente. tente e co adicionar -lgcc para a linha de liga¸˜o para a fun¸˜o UDF.so.6 no Solaris 2. Note que --set-variable=nome=valor e -O nome=valor est´ ca ca a obsoleto desde o MySQL 4./my: fatal: libmysqlclient.server’.7 e 2.

h:42: warning: ‘getwc’ redefined /usr/include/wchar. vocˆ deve utilizar o seguinte comando configure: e CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \ CXX=gcc \ CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -D ..h:1060: syntax error before ‘.so’ est´ instalado em ‘/usr/local/lib’.6./configure. vocˆ pode fazer o seguinte para corrigir o problema: e Copie /usr/include/widec. provavelmente o problema ´ que seu arquivo ‘libz.0.h para . e a Vocˆ pode corrigir isto usando um dos seguintes m´todos: e e • Adicione ‘/usr/local/lib’ ao LD_LIBRARY_PATH. a co .h’ e execute make novamente. a e Se vocˆ estiver usando gcc ou egcs no Solaris X86 e vocˆ tiver problemas com descarregos e e de core.h:326: warning: this is the location of the previous definition Se isto ocorrer.h’ como indicado acima e re-execute o configure. Se o seu ligador tiver problemas para encontrar o -lz quando ligar ao seu programa cliente. ca 2. ´ porque o configure e e e n˜o encontrou o arquivo ‘curses..3. ca • Configure o MySQL com a op¸˜o --with-named-z-libs=no. • Remova a linha #define HAVE_TERM do arquivo ‘config. • Adicione um link para ‘libz. depois de e fazer a corre¸˜o.h:1081: syntax error before ‘.0-alpha /usr/include/widec.so’ a partir de ‘/lib’./lib/gcc-lib/os/gcc-version/include e mude a linha 41 : #if para #if !defined(lint) && !defined(__lint) && !defined(getwc) !defined(lint) && !defined(__lint) Uma alternativa ´ editar o ‘/usr/include/widec.’ A solu¸˜o para isto ´ fazer uma das seguintes op¸oes: ca e c˜ • Configure com CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H .148 MySQL Technical Reference for Version 5.cache’ e executar o configure novamente ! ca e Se vocˆ obter erros como estes quando vocˆ executar o make. vocˆ pode instalar a zlib opcional do CD de dise e tribui¸˜o do Solaris 8.’ /usr/include/term. • Se vocˆ estiver usando o Solaris 8./configure --prefix=/usr/local/mysql Isto ir´ evitar problemas com a biblioteca libstdc++ e com exce¸˜es C++. vocˆ deve remover o ‘config. Desta forma.h’): In file included from mysql. • Edite o ‘/usr/include/widec. mysqld ir´ descarregar um core se vocˆ executar um ’strip’ no mesmo.2 Notas Solaris x86 No Solaris 8 no x86.cc:50: /usr/include/term.h’ diretamente.h’ (provavelmente devido ao erro no arquivo a ‘/usr/include/widec.

x e threads nativas nas Vers˜es e o ´ 3 e superiores. Usando-as vocˆ obtem: e • Um MySQL funcional. ca ca a • Scripts de inicializa¸˜o instalados em /usr/local/etc/rc.html Os problemas conhecidos usando LinuxThreads na FreeBSD s˜o: a • wait_timeout n˜o est´ funcionando (provavemente problema de manipula¸˜o do signal a a ca em FreeBSD/LinuxThreads).3 [Using gdb on mysqld].x com a biblioteca Linuxe Threads.6. Se vocˆ deseja e compilar o MySQL. De outra forma ca ca vocˆ vai ter atrasos na resolu¸˜o ou falhas quando conectar ao mysqld. o O ‘Makefile’ do MySQL necessita o GNU make (gmake) para funcionar. e a Tenha certeza que sua configura¸˜o de resolu¸˜o de nomes esteja correta. antes vocˆ precisar´ instalar o GNU make.x) ivel o mas vocˆ pode encontrar problemas ao finalizar o mysqld.com/blog/archives/000697. principalmente a fun¸˜o gethostbyname(). que evita uns poucos problemas que a implementa¸˜o da thread nativa do FreeBSD ca tem. com todas as otimiza¸˜es conhecidas para trabalhar na sua co vers˜o habilitada do FreeBSD.4 Notas BSD Esta se¸˜o fornece informa¸˜o para os v´rios tipos de BSD. assim como a vers˜o espec´ ca ca a a ifica para eles. a • Configura¸˜o e constru¸˜o autom´tica. ca • Habilidade para ver quais arquivos est˜o instalados com pkg info -L.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 149 Se isto n˜o ajudar.d. que ´ usada pelo MySQL para ca e converter nomes de m´quinas em endere¸os IPs. ca a 2. e a a ´ E recomendado que vocˆ utilize MIT-pthreads no FreeBSD 2. threads nativas dˆ uma olca e hada no artigo "FreeBSD or Linux for your MySQL Server?" de Jeremy Zawodny em http://jeremy. Isto deveria ter sido corrigido no FreeBSD 5. o processo a c a mysqld ir´ criar repentinamente um carga de CPU de 100% e ficar´ sem resposta. E para remover a todos com pkg delete se vocˆ n˜o quiser mais o MySQL na m´quina.1 Notas FreeBSD FreeBSD 4. P´gina 1072. 2. e ca .6. tente iniciar o MySQL usando a op¸˜o --skip-name-resolve. Veja Se¸˜o D. e Infelizmente algumas chamadas de fun¸˜es no FreeBSD ainda n˜o s˜o totalmente seguras co a a com threads.2. Se vocˆ a a e se deparar com isto.x ou mais novo ´ recomendado para executa¸˜o do MySQL uma vez que o pacote e ca thread ´ muito mais integrado.0. vocˆ pode ligar o MySQL no FreeBSD 4.org. Para uma compara¸˜o muito boa do LinuxThreads vs. Sob certas circunstˆncias. ca Alternativamente.freebsd. E poss´ executar com threads nativas em algumas vers˜es antigas (2. e A mais f´cil e portanto a forma preferida para instal´-lo ´ usar as portas mysql-server e a a e mysql-client dispon´ iveis em http://www.1.zawodny. O sintome a ´ que conex˜es persistentes podem se manter por um longo tempo sem serem fechadas.4. vocˆ pode compilar uma vers˜o com debug e execut´-lo com um arquivo a e a a de ratreamento (trace) ou sob gdb.

Tamb´m tenha certeza que vocˆ configurou e e a classe apropriada para este usu´rio no arquivo de senhas (password) se vocˆ n˜o estiver a e a usando o padr˜o (use: chpass nome usuario mysqld). Dˆ uma olhada na op¸~o MAXDSIZ na arquivo de e ca configura¸˜o LINT para maiores informa¸˜es. ca co Se vocˆ tiver problemas com a data atual no MySQL. De outra forma o compilador quee braria quando o make tentasse executar lint em arquivos C++.0.dominio O modo recomendado de compilar e instalar o MySQL no FreeBSD com gcc (2. .6.0. P´gina 917./configure --prefix=/usr/local/mysql --enable-assembler gmake gmake install ./bin/mysqld_safe & Se vocˆ percber que o configure usar´ MIT-pthreads.0-alpha Tenha certeza que a entrada localhost no arquivo ‘/etc/hosts’ esteja correta (de outra forma vocˆ ir´ ter problemas conectando ao banco de dados).conf). a ca P´gina 332. vocˆ de ler as notas sobre MITe a e pthreads.150 MySQL Technical Reference for Version 5.seu. a Se vocˆ tiver muita mem´ria vocˆ deve considerar em reconstruir o Kernel para permitir o e o e MySQL de usar mais de 512M de RAM.8. Veja Apˆndice E [Environment variables]. P´gina 106. Veja Se¸˜o 2. Veja Se¸˜o 4./configure --with-mit-threads O FreeBSD ´ tamb´m conhecido por ter um limite muito baixo para o manipulador de e e arquivos. P´gina 1083.1 localhost localhost.0.4. Isto ´ corrigido executando estes comana e e dos: shell> rm config. Descomente a se¸˜o ca a ca ulimit -n no mysqld safe ou aumente os limites para o usu´rio mysqld no /etc/login.17 [Not enough file handles].conf (e a reconstrua-o com cap mkdb /etc/login.cache shell> . a e a Para obter um sistema seguro e est´vel vocˆ deve usar somente kernels FreeBSD que estejam a e marcados com -STABLE.2. configurar a vari´vel TZ provavelmente e a ajudar´.2 Notas NetBSD Para compilar no NetBSD vocˆ precisa do GNU make.95.2 [mysqld_safe]. O arquivo ‘/etc/hosts’ deve e a iniciar com a linha: 127. 2./scripts/mysql_install_db cd /usr/local/mysql . Veja Se¸˜o A. ca a Se o make install n˜o puder encontrar ‘/usr/include/pthreads’.6 [MIT-pthreads]. ´ porque o configure a e n˜o detectou que vocˆ precisava de MIT-pthreads.2 e acima) ´: e CC=gcc CFLAGS="-O2 -fno-strength-reduce" \ CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions -felide-constructors \ -fno-strength-reduce" \ .3.

vocˆ pode compilar o MySQL com threads nativas com as a e seguintes op¸˜es: co CFLAGS=-pthread CXXFLAGS=-pthread . configurar a vari´vel TZ provavelmente e a ajudar´. instale BSDIpatch M300-038.8 Nossos usu´rios relataram que o OpenBSD 2. Os desenvolvedores do OpenBSD j´ corrigiram o problema. Use o seguinte comando quando configurar o MySQL: shell> env CXX=shlicc++ CC=shlicc2 \ . vocˆ pode tamb´m ter de usar a op¸˜o --with-low-memory para o e e e ca configure estar apto a compilar o ‘sql_yacc.4 Notas OpenBSD 2.o] Error 1 Tente usar ulimit -v 80000 e executar o make novamente.4.5 Notas BSDI Vers˜o 2. alguns usu´rios BSDI relataram problemas a com bash e ulimit.x a Se vocˆ obter o seguinte erro quando estiver compilando o MySQL. Neste caso tente iniciar o mysqld_safe como root com as seguintes op¸˜es: co shell> mysqld_safe --user=mysql --open-files-limit=2048 & 2. Se isto n˜o funcionar e vocˆ esa e tiver usando o bash. alto uso de CPU e quedas do servidor. mas em 25 de a Janeiro de 2001 a corre¸˜o foi dispon´ ca ivel apenas no ramo “-current”. tente trocar para csh ou sh.5.h:28: virtual memory exhausted make[2]: *** [item_func.h: In method ‘Item_func_ge::Item_func_ge(const Item_func_ge &)’: item_func. Se isto n˜o for poss´ a a ivel. a e a 2. a Se vocˆ obter um erro como Error in accept:: Bad file descriptor ou erro 9 ao tene tar abrir tabelas ou diret´rios.6.3 Notas OpenBSD No OpenBSD Vers˜o 2.4.4./configure \ --prefix=/usr/local/mysql \ --localstatedir=/var/mysql \ --without-perl \ --with-unix-socket-path=/var/mysql/mysql.8 tem um bug nas threads que causa problemas a com o MySQL. Os sintomas deste bug nas threads s˜o: resposta lenta. o problema ´ provavelmente que vocˆ n˜o alocou mem´ria o e e a o suficiente para os descritores de arquivo do MySQL.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 151 2.cc’.4.6.1. alta carga. Veja Apˆndice E [Environment variables]. Se vocˆ tiver problemas com a data atual no MySQL.6. P´gina 1083.6.x a Atualize para BSD/OS Vers˜o 3./configure --with-mit-threads=no 2.6 Notas BSD/OS Vers˜o 3. Se vocˆ utiliza gcc. seu valor ulimit para e mem´ria virtual ´ muito baixo: o e item_func.sock O comeando seguinte tamb´m funciona: e .

x (Darwin).h antes de executar o make.0. e e a mysqladmin. tente usar a op¸˜o --skip-threade ca priority para mysqld! Isto ir´ executar todas as threads com a mesma prioridade. deve tentar e usar ulimit -v 80000 e executar make novamente. Isto tamb´m se aplica ao Mac OS X 10. para ele n˜o usar bibliotecas e a compartilhadas.34 ou depois de executar configure remova a linha ca e $define HAVE_REALPATH de config. Se vocˆ obter o erro virtual memory exhausted enquanto estiver compilando.1.x. O sintoma ´ que vocˆ n˜o pode executar nenhum programa cliente.5 Notas Mac OS X 2. Pelo menos a a e co a M400-23 deve estar instalada. ou apenas usar os padr˜es e co o e o n˜o especificando nenhuma localiza¸˜o. com a op¸˜o --disable-shared. A compila¸˜o para a plataforma Server ´ a e ca e mesma para a vers˜o cliente do Mac OS X.5.152 MySQL Technical Reference for Version 5. 2.23./configure \ --prefix=/usr/local/mysql \ --with-unix-socket-path=/var/mysql/mysql.4. isto fornece melhor performance (pelo menos at´ o BSDI corrigir seu organizador a e de threads). no BSDI a vers˜o 3. alguns usu´rios BSDI relataram problemas com a bash e ulimit. a ca Se vocˆ tiver problemas com performance sob alta carga.6. Perceba que com isso vocˆ n˜o pode fazer um link simb´lico de um diret´rio de banco de e a o o dados para outro diret´rio ou fazer um link simb´lico a uma tabela para outro banco de o o dados no BSDI! (Criar um link simb´lico para outro disco funciona).sock Vocˆ pode alterar as localiza¸˜es dos diret´rios se vocˆ desejar. vocˆ pode ter problemas com bibliotecas compartila e hadas. Em alguns sistemas BSDI vers˜o 4. o 2.x a O BSDI Vers˜o 4.7 Notas BSD/OS Vers˜o 4. por exemplo. Neste caso vocˆ precisa reconfigurar o MySQL.6. tente trocar para csh ou sh. Se vocˆ deseja usar o MySQL a a e nesta vers˜o.6.x tem alguns bugs relacionados `s threads. ca Alguns clientes tiveram problemas no BSDI 4.1 Mac OS X 10.0-alpha shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 \ .x Server. Vocˆ n˜o precisa e a dos patches pthread para este SO.1 que o bin´rio do mysqld n˜o conseguia a a abrir tabelas depois de um tempo em funcionamento. Isto ´ porque alguns bugs relacionae dos a biblioteca/sistema fazem com que o mysqld altere o diret´rio atual sem nenhuma o informa¸˜o! ca A corre¸˜o ´ atualizar para a 3.0. vocˆ deve instalar todas as corre¸˜es relacionadas `s threads.x O MySQL deve funcionar sem problemas no Mac OS X 10. Se isto n˜o funcionar e vocˆ estiver a e usando bash. No entanto note que o MySQL vem preinstalado a no Servidor ! .

Sob esta configura¸˜o o MySQL funciona bem.20. Para usar o arquivo depot vocˆ deve estar executando e pelo menos o HP-UX 10.22. a usando MIT-pthreads.30 As seguintes configura¸˜es definitivamente n˜o funcionar˜o: co a a • HP 9000/7xx ou 8xx executando HP-UX 10. Veja Se¸˜o 2. O MySQL Vers˜o ca a 3.2 Mac OS X Server 1./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --disable-shared Veja Se¸˜o 2.1 Notas HP-UX para distribui¸˜es bin´rias co a Alguma das distribui¸˜es bin´rias do MySQL para HP-UX ´ distribuida como um arquivo co a e depot da HP e como um arquivo tar.2 (Rhapsody) Antes de tentar configurar o MySQL no MAC OS X server 1.2 (aka Rhapsody).Cap´ ıtulo 2: Instala¸˜o do MySQL ca 153 Nosso bin´rio para Mac OS X ´ compilado no Darwin 6.6.3 [Instala¸˜o do Mac OS X]. incluindo o servidor. primeiro vocˆ deve instalar o pacote pthread encontrado em: e http://www.6.5.3 [Instala¸˜o do Mac OS X].server • Para instalar somente o pacote cliente: shell> /usr/sbin/swinstall -s /path/to/depot mysql. onde /path/to/depot ´ o ca e caminho completo do arquivo depot: • Para instalar tudo.3 com a seguinte linha de cona e figura¸˜o: ca CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" .x para ter acesso `s ferramentas de arquivos depot da HP.x Para instalar a distribui¸˜o.6. e Outras configura¸˜es que podem funcionar: co • HP 9000/7xx executando HP-UX 10. a A vers˜o HP do MySQL foi compilada em um servidor HP 9000/8xx sob HP-UX 10.full • Para instalar somente o servidor: shell> /usr/sbin/swinstall -s /path/to/depot mysql.x where x < 2 • HP 9000/7xx ou 8xx executando HP-UX 9. ca ca a 2.20+ • HP 9000/8xx executando HP-UX 10.prnet. P´gina 71. utilze um dos comandos abaixo.26 e mais novas tamb´m podem ser construidas com o pacote thread nativo da HP.client • Para instalar somente as ferramentas de desenvolvimento: .de/RegEx/mysql. P´gina 71.6 Notas de Outros Unix 2. ca ca a 2.6.1.html.1. cliente e ferramentas de desenvolvimento: shell> /usr/sbin/swinstall -s /path/to/depot mysql.

ca e o 2.x sem corre¸˜es.1 em um sistema HP-UX 11.developer O depot copia os bin´rios e bibliotecas em ‘/opt/mysql’ e dados em ‘/var/opt/mysql’.0-alpha shell> /usr/sbin/swinstall -s /path/to/depot mysql.95 no HP-UX.2 Notas HP-UX Vers˜o 10./configure --with-pthread \ --with-named-thread-libs=’-ldce’ --prefix=/usr/local/mysql --disable-shared A seguinte linha do configure deve funcionar com o gcc 3.x a Para HP-UX Vers˜o 11. Para instalar a distribui¸˜o HP-UX tar.gz. Obviamente. a A seguine linha do configure deve funcionar com o gcc 2. item.0.6.154 MySQL Technical Reference for Version 5. co Se vocˆ estiver usando gcc 2.15 ou posterior. vocˆ obter´ e co e a o erro: In file included from from from from /usr/include/unistd. .1: CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \ CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti -O3 -fPIC" . O a depot tamb´m cria as entradas apropriadas em ‘/etc/init.3 Notas HP-UX Vers˜o 11. vocˆ deve instalar as a e seguintes corre¸˜es antes de tentar executar o MySQL no HP-UX 11.20 a Existem alguns pequenos problemas quando compilamos o MySQL no HP-UX.h:11. para instalar o usu´rio deve ser a o root.95: CFLAGS="-I/opt/dce/include -fpic" \ CXXFLAGS="-I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti" CXX=gcc . N˜o utilize op¸˜es de alta otimiza¸˜o o a co ca (como -O6) ja que isto pode n˜o ser seguro no HP-UX.95.d’ e ‘/etc/rc2.6. vocˆ deve ter uma c´pia do GNU tar.6. a o a Por causa de alguns bugs cr´ iticos nas bibliotecas padr˜o do HP-UX. porque o gcc e produz um c´digo melhor! o N´s recomendamos o uso do gcc 2.d’ para iniciar e o servidor automaticamente na hora do boot..0: co PHKL_22840 Streams cumulative PHNE_22397 ARPA cumulative Isto ir´ resolver um problema que tem como retorno EWOLDBLOCK de recv() e EBADF de a accept() em aplica¸˜es threads.x n´s recomendamos o MySQL Vers˜o 3.h:125.h:15. mysql_priv.23./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --with-pthread \ --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared 2.6./include/global.cc:19: . N´s reo comendamos que vocˆ use o gcc no lugar do compilador nativo do HP-UX.

4 Notas IBM-AIX Detec¸˜o autom´tica de xlC est´ faltando no Autoconf.. e ivel 2./configure --with-extra-character-set=com Vocˆ pode ignorar qualquer erro do tipo: e aCC: warning 901: unknown option: ‘-3’: use +help for online documentation Se vocˆ obter o seguinte erro do configure e checking for cc option to accept ANSI C.6.h:440: previous declaration . Try gcc.20. < void (*child)()). verifique o n´ do pacth de seu HP-UX.. Ela tem prot´tipos coflitantes em ‘/usr/include/sys/unistd.h’ em ‘mysql/include’ e editar ca e ‘unistd.cc:19: O problema ´ que o HP-UX n˜o define consistentemente a pthreads_ e a atfork(). from mysql_priv. Depois disto. > void (*child)(void)).Cap´ ıtulo 2: Instala¸˜o do MySQL ca 155 /usr/include/sys/unistd.6.h’.00. a a e e a a Outra possibilidade para o HP-UX 11 ´ usar o bin´rio MySQL para HP-UX 10. no configure: error: MySQL requires a ANSI C compiler (and a C++ compiler).184c183. Aqui est´ o diff: ca a 183.x nos enviou sobre comco a a pila¸˜o do MySQL com o compilador HP-UX: ca CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 .. void (*parent)(void). Outra raz˜o para n˜o estar compilando ´ vocˆ n˜o definir o parˆmetro +DD64 acima.184 < extern int pthread_atfork(void (*prepare)(). /usr/include/sys/pthread. Uma solu¸˜o ´ copiar ‘/usr/include/sys/unistd.h:184: declaration of C function .h’ alterando-o para coincidir com a defini¸˜o em ‘pthread. Se a a vocˆ encontrar problemas.h:306.. Confira se vocˆ n˜o tem o caminho para o compilador K&R antes do caminho para o e a compilador C e C++ do HP-UX.. from item. See the Installation chapter in the Reference Manual. Recebee a mos relatos de alguns usu´rios de que esses bin´rios funcionam bem no HP-UX 11./configure --prefix=/usr/local/mysql --disable-shared Segue algumas inforama¸˜es que um usu´rio do HP-UX Vers˜o 11.h’:184 o e ‘/usr/include/sys/pthread. a seguinte linha configure deve funcionar: CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \ . --> extern int pthread_atfork(void (*prepare)(void).h:158..h’:440 (detalhes abaixo). portando um comando configure ca a a deste tipo ´ necess´rio quando estiver compilando o MySQL (Este exemplo usa o compilador e a IBM): export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 " export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192" . void (*parent)(). In file included from item.

yyyyyy ´ o ID unico do sistema e mm ´ o ID da CPU Planar. N˜o tenho certeza mas acredito que usar e a "power" deve satisfazer a maioria dos casos.1). power ou powerpc podem ser usados. o N´s recomendamos a seguinte linha do configure com egcs e gcc 2.9. mas o a e a como o MySQL n˜o utiliza exce¸˜es e a op¸˜o acima gera c´digo mais r´pido./configure --prefix=/usr/local/mysql --with-low-memory O -Wa. com um formato de xxyyyyyymmss onde e xx e ss s˜o sempre 0s. ca e ca Se vocˆ estiver usando gcc ou egcs para compilar o MySQL. a Se vocˆ n˜o sabe qual ´ o seu processador.156 MySQL Technical Reference for Version 5. Isto ir´ lhe fornecer um tipo de a m´quina e um modelo de m´quina que vocˆ pode usar para determinar que tipo de cpu a a e vocˆ tem. e ca Se vocˆ tiver algum problema com c´digo assembler tente alterar o -mcpu=xxx para o seu e o processador. N´s n˜o sabemos se o -fno-exceptions ´ necess´rio com gcc 2.ibm.0-alpha export export export export CFLAGS="-I /usr/local/include" LDFLAGS="-L /usr/local/lib" CPPFLAGS=$CFLAGS CXXFLAGS=$CFLAGS .boulder.htm. utilize o comando "uname -m".0. Existem tamb´m alguns problemas conhecidos com o assembler e da IBM que pode gerar c´digo errado quando usado com gcc. Normalmente power2.bull. recomendamos a co ca o a que vocˆ sempre use esta op¸˜o com o egcs/gcc. IBM est´ ciente deste e a a ´ devido ao fato do problema poder ser problema mas n˜o est´ com pressa de corrigi-lo a a contornado. Uma a e ´ e tabela destes valores podem ser encontrados em http://publib.-many" \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \ . mesmo em uma m´quina power2. isto ir´ fornecer a e a e a vocˆ uma string que parece com "000514676700"./configure --prefix=/usr/local \ --localstatedir=/var/mysql \ --sysconfdir=/etc/mysql \ --sbindir=’/usr/local/bin’ \ --libexecdir=’/usr/local/bin’ \ --enable-thread-safe-client \ --enable-large-files Acima est˜o as op¸˜es usadas para compilar a distribui¸˜o MySQL que pode ser encontrada a co ca em http://www-frec.-many" \ CXX="gcc -pipe -mcpu=power -Wa.-many ´ necess´rio para o compilador ser bem sucedido. e Se vocˆ tiver problemas com sinais (MySQL finaliza sem notifica¸˜o sob alta carga) vocˆ e ca e pode ter encontrado um bug de SO com threads e sinais.com/doc_ link/en_US/a_doc_lib/cmds/aixcmds5/uname. j´ que o manipulador de exce¸˜es no gcc/egcs n˜o ´ seguro para threads! (Isto a co a e foi testado com egcs 1. Se vocˆ alterar o -O3 para -O2 na linha de configura¸˜o acima.5. Neste caso vocˆ pode dizer ao e MySQL para n˜o usar sinais configurando-o com: a . de uma maneira alternativa vocˆ pode precisar usar 604 ou 604e. vocˆ tamb´m deve remover e ca e e a op¸˜o -qstrict (isto ´ uma limita¸˜o no compilador C da IBM). vocˆ DEVE usar a op¸˜o -fnoe e ca exceptions.95 no AIX: o CC="gcc -pipe -mcpu=power -Wa.com/.

/configure --disable-shared --with-mysqld-ldflags=-all-static Quando compilando readline. a o Em algumas vers˜es do AIX. vocˆ atualizar par o gcc 2./configure --prefix=/usr/local/mysql --with-debug --with-low-memory Isto n˜o afeta a performance do MySQL.95.6.h’ e ‘include/my_config. e Para o AIX 4. e o #ifdef _AIX41 extern "C" int initgroups(const char *. Vocˆ pode a e usar a seguinte linha do configure para evitar este problema: shell> .com/pseries e o US/aixprggd/genprogc/lrg_prg_support. ligando com libbind. j´ que o e a e a egcs no DEC tem v´rios erros graves ! a Quando compilando programas com threads no Digital Unix.2. vocˆ pode obter alguns avisos sobre defini¸˜es duplicadas e co que podem ser ignoradas. a documenta¸˜o recomenda ca usar a op¸˜o -pthread para cc e cxx e as bibliotecas -lmach -lexc (em adi¸˜o para ca ca lpthread).boulder. #endif Se vocˆ precisar se alocar muita mem´ria para o processo mysqld. e co Depois de configurar.1.5 Notas SunOS 4 No SunOS 4. edite o ‘config.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 157 shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \ -DDONT_USE_THR_ALARM" \ . o cliente morrer´ quando ele chegar no pr´ximo comando. 2.h’ e altere a linha que diz #define HAVE_SNPRINTF 1 para #undef HAVE_SNPRINTF E finalmente. Vocˆ deve executar o configure parecido com isto: e .6. o Isto ´ erro no AIX e deve ser relatado para a IBM. Ao compilar o mysqld.htm.a faz o getservbyname descarregar core.cc’ vocˆ precisa adicionar um prot´tipo para initgroups.6 Notas Alpha-DEC-UNIX (Tru64) Se vocˆ est´ usando o egcs 1. n˜o ´ suficiente apenas e o a e definir ’ulimit -d unlimited’. e 2. Alguns sistemas SunOS 4 tem problemas com bibliotecas dinˆmicas e libtool.6. Neste caso.6. o que significa que vocˆ e a e precisa do GNU make.2 no Digital Unix. mas tem o efeito colateral que vocˆ n˜o pode a e a matar clientes que est˜o “dormindo” em uma conex˜o com mysqladmin kill ou mysqladmin a a shutdown.2. v˜o existir alguns alertas sobre implicit declaration of function a que tamb´m podem ser ignoradas.1 e gcc vocˆ tem que fazer as seguintes altera¸˜es.int).ibm. Vocˆ tamb´m deve configurar no mysqld_safe algo do tipo: e e export LDR_CNTRL=’MAXDATA=0x80000000’ Vocˆ pode encontrar mais sobre o uso de muita mem´ria em: http://publib16. no ‘mysqld. ´ necess´rio a MIT-pthreads para compilar o MySQL.

e ca a Se vocˆ tiver problemas quando compilar mysys/get opt.o sql_string. vocˆ pode ter problemas com e e a finaliza¸˜o do servidor ao sair (log out).0-alpha CC="cc -pthread" CXX="cxx -pthread -O" \ . apenas remova a linha #define e NO PROTO do inicio do arquivo! Se vocˆ estiver utilizando o compilador CC da Compac./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc" Quando compilando o mysqld.o \ .libs/libmysqlclient.0.a -lcurses \ . gnumake . inicie o servidor executando mysqld_safe./libtool --mode=link cxx -pthread -O3 -DDBUG_OFF \ -O4 -ansi_alias -ansi_args -fast -inline speed \ -speculate all \ -arch host -DUNDEF_HAVE_GETHOSTBYNAME_R \ -o mysql mysql.o completion_hash.c...2 [mysqld_safe]. Veja Se¸˜o 4. ao compilar com bibliotecas compartilhadas como e no exemplo acima.cc: In function void handle_connections()’: mysqld. a seguinte linha de configura¸˜o e ca dever´ funcionar: a CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host \ -noexceptions -nortti" export CC CFLAGS CXX CXXFLAGS .o readline. Eles ocorrem porque o configure s´ pode e c o detectar erros e n˜o alertas. quando estiver ligando ao mysqld./configure \ --prefix=/usr/local/mysql \ --with-low-memory \ --enable-large-files \ --enable-shared=yes \ --with-named-thread-libs="-lpthread -lmach -lexc -lc" gnumake Se vocˆ tiver problemas com a libtool. De forma alternativa.. tente iniciar o servidor desta forma: shell> nohup mysqld [options] & nohup faz com que o comando que o segue ignore qualquer sinal SIGHUP enviado pelo terminal.so -lm cd .158 MySQL Technical Reference for Version 5..sockadddr *. P´gina 332. o qual invoca o mysqld usando nohup por vocˆ. seu processo superior recebe ca e um sinal SIGHUP. int *)’ Vocˆ pode ignorar estes altertas com seguran¸a. vocˆ deve ver alguns avisos como estes: e mysqld. a Se vocˆ inicia o servidor diretamente da linha de comando.cc:626: passing long unsigned int *’ as argument 3 of accept(int. vocˆ deve conseguir contornar este e problema usando: cd mysql /bin/sh .) Se isto acontecer./libmysql/.8./readline/libreadline. (Quando vocˆ sai.

6.1-029". Com o OSF1 V4./include \ CXX=gcc CXXFLAGS=-O3 \ .com/public/unix/.h’ ’burro’ com: touch include/c_asm. /bin/ld tamb´m aparece estar quebrado (problemas com erros _exit undefined ocorrendo ao ligar e no mysqld). 878)" o compilador tem alguns comportamentos estranhos (simbolos asm indefinidos). Quando usar o gcc.support.7 Notas Alpha-DEC-OSF1 Se vocˆ tiver problemas com compila¸˜o e tem o DEC CC e o gcc instalados./configure --prefix=/usr/local/mysql Com o compilador da Digital "C++ V6. vocˆ pode criar e usar um arquivo e e ‘c_asm. temos compilado o MySQL com a seguinte linha configure. A fun¸˜o alloca() pode tamb´m ter um prot´tipo incorreto em /usr/include/alloca.h’.compaq.h’ que define ’HAVE_ALLOCA’. vocˆ tamb´m pode tentar executar configure desta forma: e e shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 . ./configure .0 (Rev. depois de substituir /bin/ld com a vers˜o do OSF 4.0C: a CC=gcc CXX=gcc CXXFLAGS=-O3 .0D e o compilador "DEC C V5./configure --prefix=/usr/local/mysql Perceba que os seguintes problemas com o programa ld pode ser corrigido fazendo o download do ultimo kit de atualiza¸˜o da DEC (Compaq) de ´ ca http://ftp. tente executar e ca o configure desta forma: CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \ .6-071 no Digital Unix V4.6.. o seguinte deve funcionar: CC=cc -pthread CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all \ -arch host CXX=cxx -pthread CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all \ -arch host -noexceptions -nortti export CC CFLAGS CXX CXXFLAGS . ca e o O alerta resultante deste erro pode ser ignorado.. Corrija isto removendo a o ca a linha no ‘config. a fun¸˜o alloca() est´ quebrada.h CC=gcc CFLAGS=-I. Neste sistema./configure --prefix=/usr/local/mysql Se vocˆ tiver problemas com o arquivo ‘c_asm.h./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static \ --disable-shared --with-named-thread-libs="-lmach -lexc -lc" Em algumas vers˜es do OSF1..Cap´ ıtulo 2: Instala¸˜o do MySQL ca 159 gnumake install scripts/mysql_install_db 2. configure ir´ usar a seguinte biblioteca thread automaticamente: --with-named-threada libs="-lpthread -lmach -lexc -lc".

95.rps. Se o servidor mysqld co ca a morrer em alguma instru¸˜o SELECT.html Se vocˆ obter o seguinte erro quando estiver compilando o ‘mysql.h".h’ que definem HAVE_ ca ALLOC e HAVE_ALLOC_H. o 2. Definitivamente vocˆ precisar´ de todos patches POSIX nesta p´gina.h’ a que define HAVE_READDIR_R.0.. Vocˆ tamb´m deve precisar remover a linha HAVE_TERM_H. Para corrigir isto vocˆ deve alterar para o diret´rio sql e fazer um “corta e cola” da ultima e o ´ linha gcc./configure .sgi. at except.sgi. remova as linhas de ‘config. mas tem efeitos colaterais que n˜o permitem a a finalizar clientes que est˜o “dormindo” em uma conex˜o com mysqladmin kill ou a a mysqladmin shutdown. Com gcc 2.2. e e A SGI recomenda que vocˆ instale todos os patches desta p´gina: http://support.com/surfzone/patches/patchset/6. vocˆ provavelmente encontrar´ o seguinte erro de compila¸˜o: e a ca sql_acl.h \ > include/curses. mas altere -O3 para -O0 (ou adicione -O0 imediatamente depois de gcc se vocˆ e n˜o tiver algumas op¸˜o -O na sua linha de compila¸˜o. remova a linha do ‘config.h shell> make . Isto n˜o afeta a performance do MySQL.h’ depois de executar configure e e antes de compilar. o ultimo rollup rld. line 82: error(1084): invalid combination of type Digite o seguinte no diret´rio topo da sua ´rvore fonte do MySQL: o a shell> extra/replace bool curses_bool < /usr/include/curses. a fun¸˜o alloca() est´ quebrada.8 Notas SGI Irix Se vocˆ estiver usando Irix Vers˜o 6.) Depois disto feito vocˆ deve apenas a ca ca e voltar ao diret´rio superior e executar make novamente. Se mysqladmin create n˜o funciona. Em algumas implementa¸˜es Irix.5.3 ou mais novo.cc:1456: Internal compiler error in ‘scan_region’.6.com/surfzone/patches/ e a No m´ inimo.0-alpha Se vocˆ tiver problemas com sinais (MySQL finalzar inesperadamente sobre alta carga).160 MySQL Technical Reference for Version 5. para suporte e a a pthreads: http://support. vocˆ deve instalar o ultimo rollup do kernel. o mysqld s´ ir´ conseguir criar threads e a o a se vocˆ execut´-lo como um usu´rio com privil´gios de CAP_SCHED_MGT (como root) ou dar e a a e ao servidor mysqld este privil´gio com o seguinte comando shell: e shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld Vocˆ pode precisar indefinir alguns simbolos em ‘config.cc’: e "/usr/include/curses. e vocˆ pode ter encontrado um erro com threads e sinais no SO..6.c:2566 Please submit a full bug report. e o ultimo e ´ ´ ´ rollup libc. Neste caso vocˆ pode dizer e e ao MySQL para n˜o usar sinais configurando-o com: a shell> CFLAGS=-DDONT_USE_THR_ALARM \ CXXFLAGS=-DDONT_USE_THR_ALARM \ . Neste caso o cliente ir´ morrer quando ele receber o pr´ximo a o comando.2_posix.

edu/~schmidt/ACE_wrappers/FSU-threads..6.x. Pode se evitar isto iniciando outro cliente.5.5.SCO.4” e “sco3.2v4.2.2” tamb´m tem tido muito progresso.0.2. Se somente uma thread estiver ca executando. o 2. 2.SCO. Vocˆ n˜o pode usar apenas o sistema a a a e a GCC Dev. Execute .2 com tcpip.cs.0 ODT 3. Isto pode acarretar num crescimento de 2 para 10 vezes na velocidade de execu¸˜o para a outra ca thread. FSU Pthreads pode ser compilado com SCO Unix 4. Para construir a FSU Pthreads no seu sistema. o seguinte ir´ funcionar a CC=cc CXX=CC CFLAGS=’-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \ -L/usr/local/lib’ CXXFLAGS=’-O3 -n32 -TARG:platform=IP22 \ -I/usr/local/include -L/usr/local/lib’ .0. o sistema fica lento.5”..0 (OS 3. e a ca a 5. Execute make. 7. Para o OpenServer 5. Vocˆ e pode tamb´m obter um pacote precompilado de http://www.gz. e a Eles s˜o necess´rios nesta vers˜o do SCO Unix.x para este produto e do sistema de desenvolvimento.com/skunkware/ e ecolher o pacote OpenServer browser ou por ftp em ftp to ftp2.0). Este comando copia ‘Makefile. com o Sistema de Desenvolvimento da SCO instalado usando uma boa vers˜o do GCC 2.3. e At´ o momento o compilador recomendado no OpenServer ´ o gcc 2. Sem ele. Pode ser obtido em e a http://www.6.95. Com isto vocˆ e e e deve estar apto a compilar o MySQL apenas com: CC=gcc CXX=gcc .com no diret´rio pub/skunkware/osr5/devtools/gcc. (op¸~es) co 1.95./configure \ --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \ --with-libwrap=/usr/local \ --with-named-curses-libs=/usr/local/lib/libncurses./configure no diret´rio ‘threads/src’ e selecione a op¸˜o SCO o ca OpenServer./configure . co e Se vocˆ estiver compilando com gcc. Isto ´ um problema n˜o compreendido com threads Irix.tar.5.9 Notas SCO A vers˜o atual foi testado somente nos sistemas “sco3. Vocˆ precisa do GCC vers˜o 2. 3. ou OpenServer 3.com/Downloads/SCO/FSU-threads e 4.5.0 ou OpenDesktop 3.2v5. A vers˜oo a a para o “sco 3.11 com Irix C nativo e compiladores C++ ver. vocˆ pode usar o seguinte comando configure: e e CC=gcc CXX=gcc CXXFLAGS=-O3 \ .0. no qual vocˆ necessia e tar´ de uma boa vers˜o do GCC 2./configure --prefix=/usr/local/mysql --enable-thread-safe-client \ --with-named-thread-libs=-lpthread No Irix 6.SCO5’ para ‘Makefile’. vocˆ deve improvisar para e a e encontrar solu¸˜es at´ que isto seja resolvido. a vocˆ estar´ perdendo as bibliotecas e o editor de liga¸˜o necess´rio. e http://www.X vocˆ precisa usar gcc-2.2v5. Vocˆ deve obter o pacote FSU Pthreads e instal´-lo primeiro.Cap´ ıtulo 2: Instala¸˜o do MySQL ca 161 Existem relatos de problemas com organiza¸˜o de threads. Existem v´rios problemas sem uma boa vers˜o.a 2. a a a a Esta vers˜o do produto necessita do sistema de Desenvolvimento SCO Unix. fa¸a o seguinte: c 1. .0.1.mysql.x ODT ou OS 3.2p1 ou mais novo da Skunkware.wustl.

162

MySQL Technical Reference for Version 5.0.0-alpha

3. Para instalar no diret´rio padr˜o ‘/usr/include’, use o usu´rio root, depois mude o a a para o diret´rio ‘thread/src’ e execute make install o 6. Lembre de usar o GNU make quando estiver construindo o MySQL. 7. Se vocˆ n˜o iniciou o mysqld_safe como root, vocˆ provavelmente s´ ir´ obter, por e a e o a padr˜o, os 110 arquivos abertos por processo. O mysqld ir´ gravar uma nota sobre isto a a no arquivo log. 8. Com o SCO 3.2V5.0.5, vocˆ deve usar o FSU Pthreads vers˜o 3.5c ou mais nova. Vocˆ e a e deve tamb´m usar o gcc 2.95.2 ou mais novo. e O seguinte comando configure deve funcionar: shell> ./configure --prefix=/usr/local/mysql --disable-shared 9. Com SCO 3.2V4.2, vocˆ deve usar FSU Pthreads vers˜o 3.5c ou mais nova. O seguinte e a comando configure deve funcionar: shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \ ./configure \ --prefix=/usr/local/mysql \ --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \ --with-named-curses-libs="-lcurses" Vocˆ pode ter alguns problemas com alguns arquivos de inclus˜o. e a Neste caso, vocˆ pode encontrar novos arquivos de inclus˜o espec´ e a ificos do SCO em http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. Vocˆ deve e descompactar este arquivo no diret´rio ‘include’ da sua ´rvore fonte do MySQL. o a Notas de desenvolvimento SCO: • O MySQL deve detectar automaticamente FSU Pthreads e ligar o mysqld com lgthreads -lsocket -lgthreads. • As bibliotecas de desenvolvimento SCO s˜o re-entrantes nas FSU Pthreads. A SCO a diz que suas bibliotecas de fun¸˜es s˜o re-entrantes, ent˜o elas devem ser re-entrantes co a a com as FSU-Pthreads. FSU Pthreads no OpenServer tentam usar o esquema SCO para criar bibliotecas re-entrantes. • FSU Pthreads (ao menos a vers˜o em http://www.mysql.com) vem ligada com GNU a malloc. Se vocˆ encontrar problemas com uso de mem´ria, tenha certeza que o e o ‘gmalloc.o’ esteja inclu´ em ‘libgthreads.a’ e ‘libgthreads.so’. ido • Na FSU Pthreads, as seguintes chamadas de sistema s˜o compat´ a iveis com pthreads: read(), write(), getmsg(), connect(), accept(), select() e wait(). • O CSSA-2001-SCO.35.2 (O patch ´ listado de costume como patch de seguran¸a e c erg711905-dscr remap ver 2.0.0) quebra FSU threads e deixa o mysqld inst´vel. Vocˆ a e deve remove-lo se vocˆ deseja executar o mysqld em uma m´quina OpenServer 5.0.6. e a • A SCO fornece Patches do Sistema Operacional em ftp://ftp.sco.com/pub/openserver5 para OpenServer 5.0.x

• A SCO fornece corre¸˜es de seguran¸a e libsocket.so.2 em ftp://ftp.sco.com/pub/security/OpenSer co c e ftp://ftp.sco.com/pub/security/sse para OpenServer 5.0.x

• Corre¸˜es de seguran¸a pre-OSR506. co c Tamb´ a corre¸˜o do telnetd em e ca ftp://stage.caldera.com/pub/security/openserver/ ou ftp://stage.caldera.com/pub/securi

Cap´ ıtulo 2: Instala¸˜o do MySQL ca

163

com a libsocket.so.2 e libresolv.so.1 com instru¸˜es para instalar em sistemas preco OSR506. ´ E provavelmente uma boa id´ia para instalar os patches acima tentando compilar/usar e o MySQL. Se vocˆ deseja instalar o DBI no SCO, vocˆ deve editar o ‘Makefile’ em DBI-xxx e cada e e subdiret´rio. o Note que o exemplo abaixo considera o gcc 2.95.2 ou mais novo: OLD: CC = cc CCCDLFLAGS = -KPIC -W1,-Bexport CCDLFLAGS = -wl,-Bexport LD = ld LDDLFLAGS = -G -L/usr/local/lib LDFLAGS = -belf -L/usr/local/lib LD = ld OPTIMISE = -Od NEW: CC = gcc CCCDLFLAGS = -fpic CCDLFLAGS = LD = gcc -G -fpic LDDLFLAGS = -L/usr/local/lib LDFLAGS = -L/usr/local/lib LD = gcc -G -fpic OPTIMISE = -O1

OLD: CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include NEW: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include Isto ´ porque o carregador dinˆmico Perl n˜o ir´ carregar os m´dulos DBI se elas foram e a a a o compiladas com icc ou cc. Perl trabalha melhor quando compilado com cc.

2.6.6.10 Notas SCO Unixware Version 7.0
Vocˆ deve usar uma vers˜o de MySQL pelo menos t˜o recente quando a Vers˜o 3.22.13 e a a a e UnixWare 7.1.0 porque esta vers˜o corrige alguns problemas de portabilidade sob o a Unixware. N´s temos compilado o MySQL com o seguinte comando configure no UnixWare Vers˜o o a 7.1.x: CC=cc CXX=CC ./configure --prefix=/usr/local/mysql Se vocˆ deseja usar o gcc, dever´ ser usado o gcc 2.95.2 ou mais novo. e a CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql 1. A SCO fornece Patches do Sistema Operacional em ftp://ftp.sco.com/pub/unixware7 para UnixWare 7.1.1 e 7.1.3 ftp://ftp.sco.com/pub/openunix8 para OpenUNIX 8.0.0 2. A SCO fornece informa¸˜o sobre Security Fixes em ftp://ftp.sco.com/pub/security/OpenUNIX ca para OpenUNIX ftp://ftp.sco.com/pub/security/UnixWare para UnixWare

164

MySQL Technical Reference for Version 5.0.0-alpha

2.6.7 Notas OS/2
O MySQL usa poucos arquivos aberto. Por isto, vocˆ deve adicionar uma linha parecida e com a abaixo em seu arquivo ‘CONFIG.SYS’: SET EMXOPT=-c -n -h1024 Se vocˆ n˜o fizer isto, provavelmente vai ter o seguinte erro: e a File ’xxxx’ not found (Errcode: 24) Quando usar o MysQL com OS/2 Warp 3, o FixPack 29 ou superior ´ necess´rio. Com OS/2 e a Warp 4, FixPack 4 ou acima ´ necess´rio. Isto ´ uma exigˆncia da biblioteca Pthreads. O e a e e MySQL deve estar instalado em uma parti¸˜o que suporta nomes longos de arquivos como ca no HPFS, FAT32, etc. O script ‘INSTALL.CMD’ deve ser executado pelo pr´prio ‘CMD.EXE’ do OS/2 e opde n˜o o a funcionar com shells substitutas como o ‘4OS2.EXE’. O script ‘scripts/mysql-install-db’ foi renomeado. Agora ele ´ chamado ‘install.cmd’ e e ´ um script REXX, que ir´ atualizar as configura¸˜es padr˜es de seguran¸a do MySQL e e a co o c criar os ´ icones na WorkPlace Shell para o MySQL. Suporte a m´dulos dinˆmicos ´ compilado mas n˜o totalmente testado. M´dulos dinˆmicos o a e a o a devem ser compilados usando a biblioteca run-time Pthreads. gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \ -o example udf_example.cc -L../lib -lmysqlclient udf_example.def mv example.dll example.udf Nota: Devido a limita¸˜es no OS/2, o nome do m´dulo UDF n˜o deve esceder 8 caracteres. co o a M´dulos s˜o armazenados no diret´rio ‘/mysql2/udf’; o script safe-mysqld.cmd ir´ coloo a o a car este diret´rio na vari´vel de ambiente BEGINLIBPATH. Quando usando m´dulos UDF, o a o extens˜es espec´ o ificas s˜o ignoradas — consuidera-se que seja ‘.udf’. Por exemplo, no Unix, a o m´dulo compartilhado deve ser nomeado ‘example.so’ e vocˆ deve carregar uma fun¸˜o o e ca dele desta forma: mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so"; No OS/2, o m´dulo deve ter o nome de ‘example.udf’, mas vocˆ n˜o deve especificar a o e a extens˜o do m´dulo: a o mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example";

2.6.8 Notas Novell NetWare
Portar o MySQL para NetWare foi um grande esfor¸o da Novell. Os clientes da Novell estar˜o c a satisfeitos ao notarem que o NetWare 6.5 vir´ com os bin´rios do MySQL, completa com a a uma licen¸a de uso comercial automatica para todos os servidores executando esta vers˜o c a do NetWare. Veja Se¸˜o 2.1.4 [Instala¸˜o NetWare], P´gina 74. ca ca a MySQL para NetWare ´ compilado usando um combina¸˜o do Metrowerks CodeWarrior e ca for NetWare e uma vers˜o especial de compila¸˜o cruzada do GNU autotools. Verifique a ca esta se¸˜o no futuro para mais informa¸˜es sobre constru¸˜o e otimiza¸˜o do MySQL para ca co ca ca NetWare.

Cap´ ıtulo 2: Instala¸˜o do MySQL ca

165

2.6.9 Notas BeOS
N´s j´ falamos com alguns desenvolvedores BeOS que disseram que o MySQL est´ 80% o a a portado para o BeOS, mas n´s n˜o sabemos qual a situa¸˜o no momento. o a ca

2.7 Coment´rios de Instala¸˜o do Perl a ca
2.7.1 Instalando Perl no Unix
O suporte Perl para o MySQL ´ fornecido pela interface cliente DBI/DBD. Veja Se¸˜o 12.5 e ca [Perl], P´gina 877. O c´digo do cliente Perl DBD/DBI exige Perl Vers˜o 5.004 ou posterior. a o a A interface n˜o funcionar´ se vocˆ tiver uma vers˜o mais do Perl. a a e a O suporte MySQL Perl tamb´m exige que vocˆ tenha instalado o suporte a programa¸˜o e e ca do cliente MySQL. Se vocˆ instalou o MySQL a partir de arquivos RPM, os programas e cliente est˜o no cliente RPM, mas o suporte a programa¸˜o do cliente est´ no RPM de a ca a desenvolvimento. Certifique de se instalar este RPM posteriormente. Na Vers˜o 3.22.8, o suporte Perl ´ distribu´ separadamente do dsitribui¸˜o principal do a e ido ca MySQL. Se vocˆ quiser instalar o suporte Perl, os arquivos que vocˆ precisr´ pode ser e e a obtidos em http://www.mysql.com/downloads/api-dbi.html. As distribui¸˜es Perl s˜o fornecidas como arquios tar compactados e s˜o chamados co a a ‘MODULE-VERSION.tar.gz’, onde MODULE ´ o nome do modulo e VERSION ´ o n´mero da e e u vers˜o. Vocˆ deve conseguir as distribui¸˜es Data-Dumper, DBI, e DBD-mysql e instal´-las a e co a nesta ordem. O procedimento de instala¸˜o ´ mostrado aqui. O exemplo mostrado ´ para ca e e o m´dulo Data-Dumper, mas o procedimento ´ o mesmo para todas as distribui¸˜es: o e co 1. Descompacte as distribui¸˜es no diret´rio atual: co o shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf Este comando cria um diret´rio chamado ‘Data-Dumper-VERSION’. o 2. Entre no diret´rio principal da distribui¸˜o descompactada: o ca shell> cd Data-Dumper-VERSION 3. Contrua a dsitribui¸˜o e compile tudo: ca shell> perl Makefile.PL shell> make shell> make test shell> make install O comando make test ´ importante porque verifica que o m´dulo est´ funcionando. Note e o a que ao executar este comando durante a instala¸˜o do DBD-mysql para exercitar o c´digo ca o da interface, o servidor MySQL deve estar em execu¸˜o ou teste ir´ falhar. ca a ´ E uma boa id´ia reconstruir e reinstalar a distribui¸˜o DBD-mysql mesmo se vocˆ instalar e ca e uma nova distribui¸˜o do MySQL, particularmente se vocˆ notar simntomas como se todos ca e os seus scripts DBI realizarem dump core depois de vocˆ atualizar o MySQL. e Se vocˆ n˜o tem o direito para instalar os m´dulos Perl no diret´rio de sistema ou se vocˆ e a o o e quiser instalar m´dulos Perl locais, a seguinte referˆncia pode ajud´-lo: o e a

166

MySQL Technical Reference for Version 5.0.0-alpha

http://servers.digitaldaze.com/extensions/perl/modules.html#modules Procure sob o t´ itulo Installing New Modules that Require Locally Installed Modules.

2.7.2 Instalaando ActiveState Perl no Windows
Para instalar o m´dulo DBD do MySQL com ActiveState Perl no Windows, vocˆ deve fazer o e o seguinte: • Obter o ActiveState Perl em http://www.activestate.com/Products/ActivePerl/ e instal´-lo. a • Abrir um prompt do DOS. • Se exigido, configurar a vari´vel HTTP_proxy. Por exemplo, vocˆ pode tentar: a e set HTTP_proxy=my.proxy.com:3128 • Inicie o progrma PPM: C:\> c:\perl\bin\ppm.pl • Se vocˆ j´ n˜o o fez, instale o DBI: e a a ppm> install DBI • Se der tudo certo, execute o seguinte comando: install \ ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd O acima deve funcionar pelo menos com o ActiveState Perl Vers˜o 5.6. a Se vocˆ n˜o puder fazer o mostrado acima funcionar, vocˆ deve instalar o driver MyODBC e e a e conectar ao servidor MySQL atrav´s do ODBC: e use DBI; $dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) || die "Got error $DBI::errstr when connecting to $dsn\n";

2.7.3 Problemas Usando a Interface Perl DBI/DBD
Se Perl informar que n˜o pode encontrar o m´dulo ‘../mysql/mysql.so’, ent˜o o a o a problema mais prov´vel ´ que o Perl n˜o pode localizar a biblioteca compartilhada a e a ‘libmysqlclient.so’. Vocˆ pode corrigir isto por qualquer um dos seguintes m´todos: e e • Compile a distribui¸˜o DBD-mysql com perl Makefile.PL -static -config em vez ca de perl Makefile.PL. • Copie ‘libmysqlclient.so’ para a diret´rio onde sua bibliotecas compartilhadas est˜o o a localizadas (provavelmente ‘/usr/lib’ ou ‘/lib’). • No Linux vocˆ pode adicionar o caminho do diret´rio onde ‘libmysqlclient.so’ est´ e o a localizado ao arquivo ‘/etc/ld.so.conf’. • Adicione o caminho do diret´rio onde ‘libmysqlclient.so’ est´ localizada ` vari´vel o a a a de ambiente LD_RUN_PATH.

Cap´ ıtulo 2: Instala¸˜o do MySQL ca

167

Se voce receber os seguintes erros de DBD-mysql, vocˆ provavelmente est´ usando gcc (ou e a usando um bin´rio antigo compilado com gcc): a /usr/bin/perl: can’t resolve symbol ’__moddi3’ /usr/bin/perl: can’t resolve symbol ’__divdi3’ Adicione -L/usr/lib/gcc-lib/... -lgcc ao comando de liga¸˜o quando a biblioteca ca ‘mysql.so’ estiver constru´ (verifique a sa´ de make para ‘mysql.so’ quando vocˆ ida ida e compilar o cliente Perl). A op¸˜o -L deve especificar o caminho do diret´rio onde ca o ‘libgcc.a’ est´ localizada no seu sistema. a Outra causa deste problema pode ser que Perl e o MySQL n˜o s˜o compilados com gcc. a a Neste caso, vocˆ pode resolver o problema compilando ambos com gcc. e Se vocˆ receber o seguinte erro de DBD-mysql quando executar o teste: e t/00base............install_driver(mysql) failed: Can’t load ’../blib/arch/auto/DBD/mysql/mysql.so’ for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169. significa que vocˆ precisa adicionar a biblioteca compactada, -lz, a sua linha de liga¸˜o. e ca Isto pode ser feito com a seguinte altera¸˜o no arquivo ‘lib/DBD/mysql/Install.pm’: ca $sysliblist .= " -lm"; Altere esta linha para: $sysliblist .= " -lm -lz"; Depois disto, vocˆ deve executar ’make realclean’ e proceder com o instala¸˜o desde o in´ e ca icio. Se vocˆ quiser usar o m´dulo Perl em um sistema que n˜o suporta liga¸˜o dinˆmica (como e o a ca a SCO) vocˆ pode gerar uma vers˜o est´tica do Perl que inclui DBI e DBD-mysql. O modo e a a que isto funciona ´ que vocˆ gera uma vers˜o do Perl com o ¸odigo DBI ligado e instalado e e a c no topo do seu Perl atual. Entao vocˆ o utiliza para construir uma vers˜o do Perl que e a adicionalmente tem o c´digo DBD ligado em si, e instale-o. o No SCO, vocˆ deve ter as seguintes vari´veis de ambiente configuradas: e a shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib ou shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\ /usr/skunk/man: Primeiro crie um Perl que inclui um m´dulo DBI ligado estaticamente executando estes o comandos no diret´rio onde a sua distribui¸˜o DBI est´ localiada: o ca a shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl Ent˜o vocˆ deve intalar o novo Perl. A sa´ de make perl indicar´ o comando make a e ida a exato que vocˆ precisar´ executar para realizar a instala¸˜o. No SCO, isto ´ make -f e a ca e Makefile.aperl inst_perl MAP_TARGET=perl.

168

MySQL Technical Reference for Version 5.0.0-alpha

A seguir use o Perl r´cem criado para criar outro Perl que tamb´m inclui uma DBD::mysql e e estaticamente ligado rodando estes comandos no diret´rio onde sua distribui¸˜o DBD-mysql o ca est´ localizada: a shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl Finalmente vocˆ deve instalar este novo Perl. Novamente, a sa´ de make perl indica o e ida comando a usar.

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

169

3 Tutorial de Introdu¸˜o Do MySQL ca
Este cap´ itulo fornece um tutorial de introdu¸˜o ao MySQL demonstrando como usar o ca programa cliente mysql para criar e usar um banco de dados simples. mysql (algumas vezes apresentado como o “terminal monitor” ou apenas “monitor”) ´ um programa interativo que e lhe permite conectar a um servidor MySQL, executar consultas e visualizar os resultados. mysql pode tamb´m ser executado em modo batch: vocˆ coloca suas consultas em um e e arquivo, depois diz ao mysql para executar o conte´do do arquivo. Cobrimos aqui ambas u as formas de utilizar o mysql. Para ver uma lista de op¸˜es conhecidas pelo mysql, chame-o com a op¸˜o --help: co ca shell> mysql --help Este cap´ itulo presume que o mysql est´ instalado na sua m´quina e que um servidor MySQL a a est´ dispon´ a ivel para quem puder conectar. Se isto n˜o for verdade, contate seu admina istrador MySQL. (Se vocˆ ´ o administrador, vocˆ precisar´ consultar outras se¸˜es deste e e e a co manual.) Este cap´ itulo descreve todo o processo de configura¸˜o e uso de um banco de dados. Se ca vocˆ estiver interessado em apenas acessar um banco de dados j´ existente, podera pular e a as se¸˜es que descrevem como criar o banco de dados e suas respectivas tabelas. co Como este cap´ itulo ´ um tutorial, v´rios detalhes s˜o necessariamente omitidos. Consulte e a a as se¸˜es relevantes do manual para mais informa¸˜es sobre os t´picos cobertos aqui. co co o

3.1 Conectando e Desconectando do Servidor
Para conectar ao servidor, normalmente vocˆ precisar´ fornecer um nome de usu´rio quando e a a o mysql for chamado e, na maioria dos casos, uma senha. Se o servidor executa em uma m´quina diferente de onde vocˆ est´, vocˆ tamb´m precisar´ especificar um nome a e a e e a de m´quina. Contate seu administrador para saber quais parˆmetros de conex˜o vocˆ deve a a a e usar para conectar (isto ´, qual m´quina, usu´rio e senha usar). Uma vez que vocˆ saiba e a a e quais os parˆmetros corretos, vocˆ deve estar pronto para conectar da seguinte forma: a e shell> mysql -h servidor -u usuario -p Enter password: ******** Os asteriscos (********) representam sua senha; digite-a quando o mysql mostrar o prompt Enter password:. Se isto funcionar, vocˆ deve ver algumas informa¸oes iniciais seguidas de um prompt mysql> e c˜ shell> mysql -h host -u user -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25338 to server version: 4.0.14-log Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer. mysql> O prompt lhe diz que o mysql est´ pronto para que vocˆ digite os comandos. a e

170

MySQL Technical Reference for Version 5.0.0-alpha

Algumas instala¸˜es MySQL permitem aos usu´rios de se conectarem como usu´rios co a a anˆnimos ao servidor executando na m´quina local. Se isto ´ o caso na sua m´quina, vocˆ o a e a e deve conseguir conectar ao servidor chamando o mysql sem qualquer op¸˜o: ca shell> mysql Depois de vocˆ conectar com sucesso, vocˆ pode disconectar a qualquer hora digitando QUIT e e (ou \q) no prompt mysql>: mysql> QUIT Bye No Unix, vocˆ tamb´m pode desconectar pressionando Control-D. e e A maioria dos exemplos nas se¸˜es seguintes assumem que vocˆ j´ est´ conectado ao servidor. co e a a Isto ´ indicado pelo prompt mysql>. e

3.2 Fazendo Consultas
Tenha certeza que vocˆ est´ conectado ao servidor, como discutido na se¸˜o anterior. Isto e a ca feito, n˜o ser´ selecionado nenhum banco de dados para trabalhar, mas n˜o tem problemas. a a a Neste momento, ´ mais importante saber um pouco sobre como fazer consultas do que j´ e a criar tabelas, carregar dados para elas, e recuperar dados delas. Esta se¸˜o descreve os ca princ´ ipios b´sicos da entrada de comandos, usando diversas consultas vocˆ pode tentar se a e familiarizar com o funcionamento do mysql. Aqui est´ um comando simples que solicita ao servidor seu n´mero de vers˜o e a data atual. a u a Digite-o como visto abaixo seguindo o prompt mysql> e digite a tecla RETURN: mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | version() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) mysql> Esta consulta ilustra v´rias coisas sobre o mysql: a • Um comando normalmente consiste de uma instru¸˜o SQL seguida por um ponto e ca v´ irgula. (Existem algumas exce¸˜es onde um ponto e v´ co irgula podem ser omitidos. QUIT mencionado anteriormente, ´ um deles. Saberemos de outros mais tarde.) e • Quando vocˆ emite um comando, o mysql o envia para o servidor para execu¸˜o e e ca mostra os resultados, depois imprime outro prompt mysql> para indicar que est´ pronto a para outro comando. • O mysql mostra a sa´ da consulta em forma tabular (linhas e colunas). A primeira ida linha cont´m r´tulos para as colunas. As linhas seguintes s˜o o resultado da consulta. e o a Normalmente, r´tulos de colunas s˜o os nomes das colunas que vocˆ busca das tabelas o a e do banco de dados. Se vocˆ est´ recuperando o valor de uma express˜o no lugar de e a a uma coluna de tabela (como no exemplo j´ visto), o mysql rotula a coluna usando a a pr´pria express˜o. o a

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

171

• O mysql mostra quantas linhas foram retornadas e quanto tempo a consulta levou para executar, o que lhe d´ uma vaga id´ia da performance do servidor. Estes valores a e s˜o impreciso porque eles representam tempo de rel´gio (N˜o tempo de CPU ou de a o a m´quina), e porque eles s˜o afetados pelos fatores como a carga do servidor e latˆncia a a e de rede. (Para resumir, a linha “rows in set” n˜o ´ mostrada nos exemplos seguintes a e deste cap´ itulo.) Palavras Chave podem ser entradas em qualquer caso de letra. As seguintes consultas s˜o a equivalentes: mysql> SELECT VERSION(), CURRENT_DATE; mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE; Aqui est´ outra consulta. Ela demonstra que vocˆ pode usar o mysql como uma calculadora a e simples: mysql> SELECT SIN(PI()/4), (4+1)*5; +-------------+---------+ | SIN(PI()/4) | (4+1)*5 | +-------------+---------+ | 0.707107 | 25 | +-------------+---------+ As consultas mostradas at´ agora tˆm sido instru¸˜es relativamente pequenas, de uma linha. e e co Vocˆ pode tamb´m entrar com m´ltiplas instru¸˜es em uma unica linha. Basta finalizar e e u co ´ cada uma com um ponto e v´ irgula: mysql> SELECT VERSION(); SELECT NOW(); +--------------+ | VERSION() | +--------------+ | 3.22.20a-log | +--------------+ +---------------------+ | NOW() | +---------------------+ | 1999-03-19 00:15:33 | +---------------------+ Um comando n˜o necessita estar todo em uma unica linha, ent˜o comandos extensos que a ´ a necessitam de v´rias linhas n˜o s˜o um problema. O mysql determina onde sua instru¸˜o a a a ca termina atrav´s do ponto e v´ e irgula terminador, e n˜o pelo final da linha de entrada. (Em a outras palavras, o myqsl aceita entradas de livre formato: Ele coleta linhas de entrada mas n˜o as executa at´ chegar o ponto e v´ a e irgula.) Aqui est´ uma instru¸˜o simples usando m´ltiplas linhas: a ca u mysql> SELECT -> USER() -> , -> CURRENT_DATE; +--------------------+--------------+

172

MySQL Technical Reference for Version 5.0.0-alpha

| USER() | CURRENT_DATE | +--------------------+--------------+ | joesmith@localhost | 1999-03-18 | +--------------------+--------------+ Neste exemplo, note como o prompt altera de mysql> para -> depois de vocˆ entrar a e primeira linha de uma consulta com m´ltiplas linhas. Isto ´ como o mysql indica que ainda u e n˜o achou uma instru¸˜o completa e est´ esperando pelo resto. O prompt ´ seu amigo, a ca a e porque ele fornece um retorno valioso. Se vocˆ usa este retorno, vocˆ sempre estar´ ciente e e a do que o mysql est´ esperando. a Se vocˆ decidir que n˜o deseja executar um comando que est´ no meio do processo de e a a entrada, cancele-o digitando \c: mysql> SELECT -> USER() -> \c mysql> Note o prompt aqui tamb´m. Ele troca para o mysql> depois de vocˆ digitar \c, fornecendo e e retorno para indicar que o mysql est´ pronto para um novo comando. a A seguinte tabela mostra cada dos prompts que vocˆ pode ver e resume o que ele significa e sobre o estado em que o mysql se encontra: Prompt Significado mysql> Pronto para novo comando. -> Esperando pela pr´xima linha de comando com m´ltiplas linhas. o u ’> Esperando pela pr´xima linha, coletando uma string que comece com o uma aspas simples (‘’’). "> Esperando pela pr´xima linha, coletando uma string que comece com o aspas duplas (‘"’). ‘> Esperando pela pr´xima linha, coletando uma string que comece com o crase (‘‘’). ´ muito comum instru¸˜es multi-linhas ocorrerem por acidente quando vocˆ pretende pubE co e licar um comando em uma unica linha, mas esquece o ponto e v´ ´ irgula terminador. Neste caso,o mysql espera por mais entrada: mysql> SELECT USER() -> Se isto ocorrer com vocˆ (acha que entrou uma instru¸˜o mas a unica resposta ´ um prompt e ca ´ e ->), o mais prov´vel ´ que o mysql est´ esperando pelo ponto e v´ a e a irgula. Se vocˆ n˜o e a perceber o que o prompt est´ lhe dizendo, vocˆ pode parar por um tempo antes de entender a e o que precisa fazer. Entre com um ponto e v´ irgula para completar a instru¸˜o, e o mysql ca ir´ execut´-la: a a mysql> SELECT USER() -> ; +--------------------+ | USER() | +--------------------+ | joesmith@localhost | +--------------------+

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

173

O prompt ’> e "> ocorrem durante a coleta de strings. No MySQL, vocˆ pode escrever e strings utilizando os caracteres ‘’’ ou ‘"’ (por exemplo, ’hello’ ou "goodbye"), e o mysql permite a entrada de strings que consomem m´ltiplas linhas. Quando vocˆ ver um prompt u e ’> ou ">, significa que vocˆ digitou uma linha contendo uma string que come¸a com um e c caracter de aspas ‘’’ ou ‘"’ mas ainda n˜o entrou com a aspas que termina a string. Isto a ´ bom se vocˆ realmente est´ entrando com uma string com m´ltiplas linhas, mas qual ´ e e a u e a probalidade disto acontecer ? N˜o muita. Geralmente, os prompts ’> e "> indicam que a vocˆ, por algum descuido, esqueceu algum caracter de aspas. Por exemplo: e mysql> SELECT * FROM minha_tabela WHERE nome = "Smith AND idade < 30; "> Se vocˆ entrar esta senten¸a SELECT, apertar ENTER e esperar pelo resultado, nada ir´ e c a acontecer. Em vez de se perguntar o porquˆ desta query demorar tanto tempo, perceba a e pista fornecida pelo prompt ">. Ele lhe diz que o mysql espera pelo resto de uma string n˜o terminada. (Vocˆ ve o erro na declara¸˜o? Falta a segunda aspas na string "Smith.) a e ca O que fazer neste ponto ? A coisa mais simples ´ cancelar o comando. Entretanto, vocˆ e e n˜o pode simplesmente digitar \c neste caso, porque o mysql o intrerpreta como parte da a string que est´ coletando! Digite o caracter de aspas para fechar (ent˜o o mysql sabe que a a vocˆ fechou a string), ent˜o digite \c: e a mysql> SELECT * FROM minha_tabela WHERE nome = "Smith AND idade < 30; "> "\c mysql> O prompt volta para mysql>, indicando que o mysql est´ pronto para um novo comando. a O prompt ‘> ´ similar aos prompts ’> e ">, mas indica que vocˆ come¸ou mas n˜o completou e e c a um identificados citado com o sinal de crase. ´ E importante saber o que os prompts ’>, "> e ‘> significam, porque se vocˆ entrar sem e querer com uma string sem termina¸˜o, quaisquer linhas seguintes que forem digitadas ca ser˜o ignoradas pelo mysql — incluindo uma linha contendo QUIT! Isto pode ser um pouco a confuso, especialmente se vocˆ n˜o sabe que vocˆ precisa fornecer as aspas finais antes poder e a e cancelar o comando atual.

3.3 Cria¸˜o e Utiliza¸˜o de um Banco de Dados ca ca
Agora que vocˆ j´ sabe como entrar com os comandos, ´ hora de acessar um banco de dados. e a e Suponha que vocˆ tenha diversos animais de estima¸˜o em sua casa (menagerie) e vocˆ e ca e gostaria de ter o registro de v´rios tipos de informa¸˜es sobre eles. Vocˆ pode fazer isto a co e criando tabelas para armazenar seus dados e carreg´-los com a informa¸˜o desejada. Depois a ca vocˆ pode responder diferentes tipos de quest˜es sobre seus animais recuperando dados das e o tabelas. Esta se¸˜o mostrar´ como: ca a • • • • • Criar um banco de dados Criar uma tabela Carregar dados na tabela Recuperar dados de uma tabela de v´rias maneiras a Usar m´ltiplas tabelas u

174

MySQL Technical Reference for Version 5.0.0-alpha

O banco de dados menagerie ser´ simples (deliberadamente), mas n˜o ´ dif´ a a e icil pensar em situa¸˜es na vida real em que um tipo similar de banco de dados pode co ser usado. Por exemplo, um banco de dados deste tipo pode ser usado por um fazendeiro para gerenciar seu estoque de animais, ou por um veterin´rio para a gerenciar registros de seus pacientes. Uma distribui¸˜o do menagerie contendo ca algumas das consultas e dados de exemplos usados nas se¸˜es seguintes podem ser co obtidas do site Web do MySQL. Est˜o dispon´ a iveis tanto no formato tar comprimido (http://www.mysql.com/Downloads/Contrib/Examples/menagerie.tar.gz) como no formato Zip (http://www.mysql.com/Downloads/Contrib/Examples/menagerie.zip). Utilize a instru¸˜o SHOW para saber quais bancos de dados existem atualmente no servidor: ca mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | | tmp | +----------+ A lista de bancos de dados provavelmente ser´ diferente na sua m´quina, mas os bancos de a a dados mysql e test provavelmente estar˜o entre eles. O banco de dados mysql ´ necess´rio a e a porque ele descreve privil´gios de acessos de usu´rios. O banco de dados test ´ geralamente e a e fornecido como um espa¸o para que os usu´rios possam fazer testes. c a Note que vocˆ n˜o pode ver todos os banco de dados se vocˆ n˜i tiver o privil´gio SHOW e a e a e DATABASES. Veja Se¸˜o 4.4.1 [GRANT], P´gina 255. ca a Se o banco de dados test existir, tente acess´-lo: a mysql> USE test Database changed Perceba que o USE, como o QUIT, n˜o necessitam de um ponto e v´ a irgula. (Vocˆ pode e terminar tais declara¸˜es com uma ponto e v´ co irgula se gostar; isto n˜o importa) A instru¸˜o a ca USE ´ especial em outra maneira, tamb´m: Ela deve ser usada em uma unica linha. e e ´ Vocˆ opde usar o banco de dados test (Se vocˆ tiver acesso a ele) para os exemplos que e e seguem mas qualquer coisa que vocˆ criar neste banco de dados pode ser removido por e qualquer um com acesso a ele. Por esta raz˜o, vocˆ provavelmente deve pedir permiss˜o a e a ao seu administrador MySQL para usar um banco de dados pr´prio. Suponha que vocˆ o o e chame de menagerie. O administrador precisar executar um comando como este: mysql> GRANT ALL ON menagerie.* TO ’your_mysql_name’@’your_client_host’; onde seu_usu´rio_mysql ´ o nome do usu´rio MySQL atribuido a vocˆ e your_client_ a e a e host ´ a m´quina da qual vocˆ se conecta ao servidor. e a e

3.3.1 Criando e Selecionando um Banco de Dados
Se o administrador criar seu banco de dados quando configurar as suas permiss˜es, vocˆ o e pode come¸ar a us´-lo. Sen˜o, vocˆ mesmo precisa cri´-lo: c a a e a

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

175

mysql> CREATE DATABASE menagerie; No Unix, nomes de bancos de dados s˜o caso sensitivo (ao contr´rio das palavras chave a a SQL), portanto vocˆ deve sempre fazer referˆncia ao seu banco de dados como menagerie e e e n˜o Menagerie, MENAGERIE ou outra varia¸˜o. Isto tamb´m ´ verdade para nomes de a ca e e tabelas. (No Windows, esta restri¸˜o n˜o se aplica, entiretanto vocˆ deve referenciar os ca a e bancos de dados e tabelas usando o mesmo caso em toda a parte da consulta.) Criar um bancos de dados n˜o o seleciona para o uso; vocˆ deve fazer isso de forma expl´ a e icita. Para fazer o menagerie o banco de dados atual, use o comando: mysql> USE menagerie Database changed Seu banco de dados necessita ser criado somente uma unica vez, mas vocˆ deve selecion´-lo ´ e a para o uso cada vez que vocˆ iniciar uma se¸˜o mysql. Vocˆ pode fazer isso usando a e ca e instru¸˜o USE como visto no exemplo. Uma forma alternativa ´ selecionar o banco de dados ca e na linha de comando quando vocˆ chamar o mysql. Apenas especifique seu nome depois de e qualquer parˆmetro de conex˜o que vocˆ pode precisar fornecer. Por exemplo: a a e shell> mysql -h servidor -u usuario -p menagerie Enter password: ******** Perceba que menagerie n˜o ´ sua senha no comando mostrado. Se vocˆ precisar passar sua a e e senha na linha de comando depois da op¸˜o -p, vocˆ deve fazˆ-lo sem usar espa¸os (por ca e e c exemplo, -pminhasenha e n˜o como em -p minhasenha). Entretando, colocando sua senha a na linha de comando n˜o ´ recomendado, porque isto exp˜e sua senha permitindo que outro a e o usu´rio utilize a sua m´quina. a a

3.3.2 Criando uma Tabela
Criar o banco de dados ´ a parte f´cil, mas neste ponto ele est´ vazio, como o SHOW TABLES e a a mostrar´: a mysql> SHOW TABLES; Empty set (0.00 sec) A parte mais dif´ ´ decidir qual a estrutura que seu banco de dados deve ter: quais tabelas icil e vocˆ precisar´ e que colunas estar˜o em cada uma delas. e a a Vocˆ ir´ precisar de uma tabela para guardar um registro para cada um de seus animais e a de estima¸˜o. Esta tabela pode ser chamada pet, e ela deve conter, pelo menos, o nome ca de cada animal. Como o nome por si s´ n˜o ´ muito interessante, a tabela dever´ conter o a e a outras informa¸˜es. Por exemplo, se mais de uma pessoa na sua fam´ tamb´m tem co ilia e animais, vocˆ pode desejar listar cada dono. Vocˆ pode tamb´m desejargravar algumas e e e informa¸˜es descritivas b´sicas como esp´cie e sexo. co a e Que tal a idade? Pode ser do interesse, mas n˜o ´ uma boa coisa para se armazenar em um a e banco de dados. A idade muda ` medida em que o tempo passa, o que significa que vocˆ a e sempre ter´ de atualizar seus registros. Em vez disso, ´ melhor armazenar um valor fixo a e como a data de nascimento. Ent˜o, sempre que vocˆ precisar da idade, basta vocˆ calcul´-la a e e a como a diferen¸a entre a data atual e a data de anivers´rio. O MySQL fornece fun¸˜es para c a co fazer aritm´tica de datas, ent˜o isto n˜o ´ dif´ e a a e icil. Armazenando datas de anivers´rio no a lugar da idade tamb´m oferece outras vantagens: e

176

MySQL Technical Reference for Version 5.0.0-alpha

• Vocˆ pode usar o banco de dados para tarefas como gerar lembretes para anivers´rios e a que est˜o chegando. (Se vocˆ pensa que este tipo de query ´ algo bobo, perceba que a e e ´ a mesma quest˜o que vocˆ perguntar no contexto de um banco de dados comercial e a e para identificar clientes para quais vocˆ precisar´ enviar cart˜o de anivers´rio, para um e a a a toque pessoal assistido pelo computador.) • Vocˆ pode calcular a idade em rela¸˜o a outras datas diferente da data atual. Por e ca exemplo, se vocˆ armazenar a data da morte no banco de dados, vocˆ poder´ facilmente e e a calcular qual a idade que o bicho tinha quando morreu. Vocˆ provavelmente pode pensar em outros tipos de informa¸˜es que poder˜o ser uteis e co a ´ na tabela pet, mas as identificadas at´ o momento s˜o suficientes por agora: nome(name), e a dono(owner), esp´cie(species), sexo(sex), data de nascimento(birth) e data da morte(death). e Utilize a sente¸a CREATE TABLE para especificar o layout de sua tabela: c mysql> CREATE TABLE pet (nome VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); VARCHAR ´ uma boa escolha para os campos name, owner, e species porque os valores da e coluna s˜o de tamanho vari´vel. Os tamanhos destas colunas n˜o precisam necess´riamente a a a a de ser os mesmos e n˜o precisam ser 20. Vocˆ pode escolher qualquer tamanho de 1 a 255, a e o que vocˆ achar melhor. (Se vocˆ n˜o fizer uma boa escolha e depois precisar de um campo e e a maior, o MySQL fornece o comando ALTER TABLE.) O sexo dos animais podem ser representados em v´rias formas, por exemplo, "m" e "f" ou a ´ mesmo "macho" e "f^mea". E mais simples usar os caracteres "m" e "f". e O uso do tipo de dados DATE para as colunas birth e death s˜o obviamente a melhor a escolha. Agora que vocˆ criou uma tabela, a instru¸˜o SHOW TABLES deve produzir alguma sa´ e ca ida: mysql> SHOW TABLES; +---------------------+ | Tables in menagerie | +---------------------+ | pet | +---------------------+ Para verificar se sua tabela foi criada da forma que vocˆ esperava, utilize a instru¸˜o e ca DESCRIBE: mysql> DESCRIBE pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ Vocˆ pode usar DESCRIBE a qualquer hora, por exemplo, se vocˆ esquecer os nomes das e e colunas na sua tabela ou de que tipos elas tˆm. e

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

177

3.3.3 Carregando dados em uma tabela
Depois de criar sua tabela, vocˆ precisar´ povo´-la. As instru¸˜es LOAD DATA e INSERT s˜o e a a co a uteis para isto. ´ Suponha que seu registro de animais possa ser descrito como ´ abaixo: (Observe que o e MySQL espera datas no formato AAAA-MM-DD; isto pode ser diferente do que vocˆ est´ e a acostumado.) name Fluffy Claws Buffy Fang Bowser Chirpy Whistler Slim owner Harold Gwen Harold Benny Diane Gwen Gwen Benny species cat cat dog dog dog bird bird snake sex f m f m m f m birth 1993-02-04 1994-03-17 1989-05-13 1990-08-27 1979-08-31 1998-09-11 1997-12-09 1996-04-29 death

1995-07-29

Como vocˆ est´ come¸ando com uma tabela vazia, uma forma simples de povo´-la ´ criar e a c a e um arquivo texto contendo uma linha para cada um de seus animais, e depois carregar o conte´do do arquivo para a tabela com uma simples instru¸˜o. u ca Vocˆ pode criar um arquivo texto ‘pet.txt’ contendo um registro por linha, com valores e separado por tabula¸˜es e na mesma ordem em que as colunas foram listadas na instru¸˜o co ca CREATE TABLE. Para valores em falta (como sexo desconhecido ou data da morte para animais que ainda est˜o vivos), vocˆ pode usar valores NULL. Para represent´-lo em seu a e a ´ arquivo texto, use \N (barra invertidam N maiusculo). Por exemplo, o registro para Whistler the bird podem parecer com isto (onde o espa¸o em branco entre os valores ´ um simples c e caractere de tabula¸˜o): ca name owner Whistler Gwen species sex birth bird \N 1997-12-09 death \N

Para carregar o arquivo texto ‘pet.txt’ na tabela pet, use este comando: mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet; Vocˆ pode especificar o valor do separador de colunas e o marcador de final de linha explicie tamente na instru¸˜o LOAD DATA se vocˆ desejar. Mas os valores omitidos s˜o suficientes ca e a para a instru¸˜o ler o arquivo ‘pet.txt’ corretamente. ca Se a instru¸˜o falhar, ´ desej´vel que a sua instala¸˜o do MySQL n˜o tenha a capacidade ca e a ca a do arquivo local habilitada por padr˜o. Veja Se¸˜o 4.3.4 [LOAD DATA LOCAL], P´gina 232 a ca a para informa¸˜es sobre como alterar isto. co Quando vocˆ desejar adicionar novos registros um a um, a instru¸˜o INSERT ´ usada. Na e ca e sua forma mais simples, vocˆ fornece valores para cada coluna, na ordem em que as colunas e foram listadas na instru¸˜o CREATE TABLE. Suponha que Diane tenha um novo hamster ca chamado Puffball. Vocˆ pode adicionar um registro utilizando uma instru¸˜o INSERT desta e ca forma: mysql> INSERT INTO pet -> VALUES (’Puffball’,’Diane’,’hamster’,’f’,’1999-03-30’,NULL);

178

MySQL Technical Reference for Version 5.0.0-alpha

Perceba que os valores de string e datas s˜o especificados aqui como strings com aspas. a Com o INSERT vocˆ tamb´m pode inserir NULL diretamente para representar um valor em e e falta. N˜o pode ser usado \N como vocˆ fez com LOAD DATA. a e A partir deste exemplo, vocˆ dever´ perceber que existem v´rias outras formas envolvidas e a a para carregar seus registros inicialmente utilizando diversas instru¸˜es INSERT do que uma co simples instru¸˜o LOAD DATA. ca

3.3.4 Recuperando Informa¸oes de uma Tabela c˜
A instru¸˜o SELECT ´ usada para recuperar informa¸˜es de uma tabela. A forma geral da ca e co instru¸˜o ´: ca e SELECT o_que_mostrar FROM de_qual_tabela WHERE condi¸~es_para_satisfazer; co o_que_mostrar indica o que vocˆ deseja ver. Isto pode ser uma lista de colunas ou * para e indicar “todas colunas.” de_qual_tabela indica a tabela de onde vocˆ deseja recuperar e os dados. A cl´usula WHERE ´ opcional. Se estiver presente, condi¸~es_para_satisfazer a e co especificam as condi¸˜es que os registros devem satisfazer para fazer parte do resultado. co

3.3.4.1 Selecionando Todos os Dados
A forma mais simples do SELECT recuperar tudo de uma tabela: mysql> SELECT * FROM pet; +----------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+--------+---------+------+------------+------------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+--------+---------+------+------------+------------+ Esta forma do SELECT ´ util se vocˆ deseja ver sua tabela inteira como agora, depois de e ´ e vocˆ acabar de carreg´-la com os dados iniciais. Por exempo, vocˆ pode pensar que a data e a e de nascimento do Bowser n˜o est´ correta. Consultando seus pap´is originais de pedigree, a a e descobriu que o ano correto do nascimento deve ser 1989, n˜o 1979. a Existem pelo menos duas formas de corrigir isto: • Edite o arquivo ‘pet.txt’ para corrigir o erro, depois limpe a tabela e recarregue-o usando DELETE e LOAD DATA: mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

179

Entretanto, se vocˆ fizer isto, vocˆ tamb´m deve refazer a entrada para Puffball. e e e • Corrigir somente o registro errado com uma instru¸˜o UPDATE: ca mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser"; O UPDATE altera apenas o registro em quest˜o e n˜o exige que vocˆ recarregue a tabela. a a e

3.3.4.2 Selecionando Registros Espec´ ificos
Como foi mostrado na se¸˜o anterior, ´ f´cil recuperar uma tabela inteira. Apenas omita ca e a a cl´usula WHERE da instru¸˜o SELECT. Mas normalmente vocˆ n˜o quer ver toda a tabela, a ca e a particularmente quando a tabela ficar grande. Em vez disso, vocˆ estar´ mais interessado em e a ter a resposta de uma quest˜o em particular, no qual vocˆ especifica detalhes da informa¸˜o a e ca que deseja. Vamos ver algumas consultas de sele¸˜o nos termos das quest˜es sobre seus ca o animais. Vocˆ pode selecionar apenas registros espec´ e ificos da sua tabela. Por exemplo, se vocˆ deseja e verificar a altera¸˜o que fez na data de nascimento do Bowser, selecione o registro desta ca forma: mysql> SELECT * FROM pet WHERE name = "Bowser"; +--------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+-------+---------+------+------------+------------+ | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+-------+---------+------+------------+------------+ A sa´ confirma que o ano foi gravado corretamente agora como 1989 e n˜o 1979. ida a Compara¸˜es de strings normalmente s˜o caso insensitivo, ent˜o vocˆ pode especificar o co a a e nome como "bowser", "BOWSER", etc. O resultado da pesquisa ser´ o mesmo. a Vocˆ pode especificar condi¸˜es em qualquer coluna, n˜o apenas no name. Por exemplo, e co a se vocˆ deseja saber quais foram os animais que nasceram depois de 1998, teste o campo e birth: mysql> SELECT * FROM pet WHERE birth >= "1998-1-1"; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+ Vocˆ pode combinar condi¸˜es, por exemplo, para encontrar cadelas (dog/f): e co mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ A consulta anterior utiliza o operador l´gico AND (e). Existe tamb´m um operador OR (ou): o e

180

MySQL Technical Reference for Version 5.0.0-alpha

mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird"; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | +----------+-------+---------+------+------------+-------+ AND e OR podem ser misturados, embora AND tem maior precedˆncia que OR. Se vocˆ usar e e ambos os operadores, ´ uma ´tima id´ia usar parˆnteses para indicar explicitamente quais e o e e condi¸˜es devem ser agrupadas: co mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") -> OR (species = "dog" AND sex = "f"); +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+

3.3.4.3 Selecionando Colunas Espec´ ificas
Se vocˆ n˜o desejar ver todo o registro de sua tabela, especifique as colunas em que vocˆ e a e ´ estiver interessado, separado por virgulas. Por exemplo, se vocˆ deseja saber quando seus e animais nasceram, selecione as colunas name e birth: mysql> SELECT name, birth FROM pet; +----------+------------+ | name | birth | +----------+------------+ | Fluffy | 1993-02-04 | | Claws | 1994-03-17 | | Buffy | 1989-05-13 | | Fang | 1990-08-27 | | Bowser | 1989-08-31 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | | Slim | 1996-04-29 | | Puffball | 1999-03-30 | +----------+------------+ Para saber quem s˜o os donos dos animais, use esta consulta: a mysql> SELECT owner FROM pet; +--------+ | owner | +--------+ | Harold |

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

181

| Gwen | | Harold | | Benny | | Diane | | Gwen | | Gwen | | Benny | | Diane | +--------+ Entretanto, perceba que a query simplesmente retornou o campo owner de cada registro, e alguns deles apareceram mais de uma vez. Para minimizar a sa´ ida, recupere cada registro apenas uma vez, adicionando a palavra chave DISTINCT: mysql> SELECT DISTINCT owner FROM pet; +--------+ | owner | +--------+ | Benny | | Diane | | Gwen | | Harold | +--------+ Vocˆ pode usar uma cl´usula WHERE para combinar sele¸˜o de registros com sele¸˜o de e a ca ca colunas. Por exemplo, para obter a data de nascimento somente dos gatos e cachorros, utilize esta query: mysql> SELECT name, species, birth FROM pet -> WHERE species = "dog" OR species = "cat"; +--------+---------+------------+ | name | species | birth | +--------+---------+------------+ | Fluffy | cat | 1993-02-04 | | Claws | cat | 1994-03-17 | | Buffy | dog | 1989-05-13 | | Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | +--------+---------+------------+

3.3.4.4 Ordenando Registros
Vocˆ deve ter percebido nos exemplos anteriores que os registros retornados n˜o s˜o mostrae a a ´ da consulta quando os dos de forma ordenada. Normalmente ´ mais f´cil examinar a saida e a registros s˜o ordenados com algum sentido. Para ordenar o resultado, utilize uma cl´usula a a ORDER BY. Aqui est´ o dia de nascimento dos animais, ordenado por data: a mysql> SELECT name, birth FROM pet ORDER BY birth; +----------+------------+

182

MySQL Technical Reference for Version 5.0.0-alpha

| name | birth | +----------+------------+ | Buffy | 1989-05-13 | | Bowser | 1989-08-31 | | Fang | 1990-08-27 | | Fluffy | 1993-02-04 | | Claws | 1994-03-17 | | Slim | 1996-04-29 | | Whistler | 1997-12-09 | | Chirpy | 1998-09-11 | | Puffball | 1999-03-30 | +----------+------------+ Em colunas de tipo de caracter, ordenai¸˜o como qualquer outra opera¸˜o de compara¸˜o ca ca ca ´ normalmente realizada no modo caso insensitivo. Isto significa que a ordem ser´ ine a definida para colunas que s˜o idˆnticas exceto quanto ao caso da letra. Vocˆ pode for¸ar a e e c uma ordena¸˜o em caso senitivo para uma coluna usando a coer¸˜o BINARY: ORDER BY ca ca BINARY(campo). A ordena¸˜o padr˜o ´ crescente, com os valores menores em primeiro. Para ordena¸˜o na ca a e ca ordem reversa, adicione a palavra chave DESC (descendente) ao nome da coluna que deve ser ordenada: mysql> SELECT name, birth FROM pet ORDER BY birth DESC; +----------+------------+ | name | birth | +----------+------------+ | Puffball | 1999-03-30 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | | Slim | 1996-04-29 | | Claws | 1994-03-17 | | Fluffy | 1993-02-04 | | Fang | 1990-08-27 | | Bowser | 1989-08-31 | | Buffy | 1989-05-13 | +----------+------------+ Vocˆ pode ordenar por m´ltiplas colunas e vocˆ pode classificar colunas em dire¸˜es difere u e co entes. Por exemplo, para ordenar o tipo de animal em ordem crescente, depois por dia de nascimento dentro do tipo de animal em ordem decrescente (com os mais novos primeiro), utilize a seguinte consulta: mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC; +----------+---------+------------+ | name | species | birth | +----------+---------+------------+ | Chirpy | bird | 1998-09-11 | | Whistler | bird | 1997-12-09 | | Claws | cat | 1994-03-17 | | Fluffy | cat | 1993-02-04 |

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

183

| Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | | Buffy | dog | 1989-05-13 | | Puffball | hamster | 1999-03-30 | | Slim | snake | 1996-04-29 | +----------+---------+------------+ Perceba que a palavra chave DESC aplica somente para o nome da coluna precedente (birth); ela n˜o afeta a ordena¸˜o da coluna species. a ca

3.3.4.5 C´lculo de Datas a
O MySQL fornece v´rias fun¸˜es que vocˆ pode usar para realizar c´lculos em datas, por a co e a exemplo, para calcular idades ou extrair partes de datas. Para determinar quantos anos cada um do seus animais tem, compute a diferen¸a do ano c da data atual e a data de nascimento (birth), depois subtraia se a o dia/mˆs da data atual e for anterior ao dia/mˆs da data de nascimento. A consulta seguinte, mostra, para cada e animal, a data de nascimento, a data atual e a idade em anos. mysql> SELECT name, birth, CURDATE(), -> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) -> AS age -> FROM pet; +----------+------------+------------+------+ | name | birth | CURDATE() | age | +----------+------------+------------+------+ | Fluffy | 1993-02-04 | 2003-08-19 | 10 | | Claws | 1994-03-17 | 2003-08-19 | 9 | | Buffy | 1989-05-13 | 2003-08-19 | 14 | | Fang | 1990-08-27 | 2003-08-19 | 12 | | Bowser | 1989-08-31 | 2003-08-19 | 13 | | Chirpy | 1998-09-11 | 2003-08-19 | 4 | | Whistler | 1997-12-09 | 2003-08-19 | 5 | | Slim | 1996-04-29 | 2003-08-19 | 7 | | Puffball | 1999-03-30 | 2003-08-19 | 4 | +----------+------------+------------+------+ Aqui, YEAR() separa a parte do ano de uma data e RIGHT() separa os cinco caracteres mais a direita que representam a parte da data MM-DD. A parte da express˜o que compara os a valores MM-DD resulta em 1 ou 0, o qual ajusta a diferen¸a do ano um ano abaixo se CURDATE c ocorrer mais cedo, no ano, que birth. A express˜o completa ´ um tanto deselegante, ent˜o a e a um apelido (age) ´ usado para obter uma sa´ mais significativa. e ida A consulta funciona, mas o resultado pode ser mais compreens´ ivel se os registros forem apresentados em alguma ordem. Isto pode ser feito adicionando uma cl´usula ORDER BY a ´ pelo nome: name para ordenar a saida mysql> SELECT name, birth, CURDATE(),

184

MySQL Technical Reference for Version 5.0.0-alpha

-> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) -> AS age -> FROM pet ORDER BY name; +----------+------------+------------+------+ | name | birth | CURDATE() | age | +----------+------------+------------+------+ | Bowser | 1989-08-31 | 2003-08-19 | 13 | | Buffy | 1989-05-13 | 2003-08-19 | 14 | | Chirpy | 1998-09-11 | 2003-08-19 | 4 | | Claws | 1994-03-17 | 2003-08-19 | 9 | | Fang | 1990-08-27 | 2003-08-19 | 12 | | Fluffy | 1993-02-04 | 2003-08-19 | 10 | | Puffball | 1999-03-30 | 2003-08-19 | 4 | | Slim | 1996-04-29 | 2003-08-19 | 7 | | Whistler | 1997-12-09 | 2003-08-19 | 5 | +----------+------------+------------+------+ Para ordenar a sa´ por age em vez de name, ´ s´ utilizar uma cl´usua ORDER BY diferente: ida e o a mysql> SELECT name, birth, CURDATE(), -> (YEAR(CURDATE())-YEAR(birth)) -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) -> AS age -> FROM pet ORDER BY age; +----------+------------+------------+------+ | name | birth | CURDATE() | age | +----------+------------+------------+------+ | Chirpy | 1998-09-11 | 2003-08-19 | 4 | | Puffball | 1999-03-30 | 2003-08-19 | 4 | | Whistler | 1997-12-09 | 2003-08-19 | 5 | | Slim | 1996-04-29 | 2003-08-19 | 7 | | Claws | 1994-03-17 | 2003-08-19 | 9 | | Fluffy | 1993-02-04 | 2003-08-19 | 10 | | Fang | 1990-08-27 | 2003-08-19 | 12 | | Bowser | 1989-08-31 | 2003-08-19 | 13 | | Buffy | 1989-05-13 | 2003-08-19 | 14 | +----------+------------+------------+------+ Uma consulta similar pode ser usada para determinar a idade na morte para animais que morreram. Para determinar quais s˜o os animais, confira se o valor de death n˜o ´ NULL. a a e Depois para estes com valores n˜o-NULL, compute a diferen¸a entre os valores dos campos a c death e birth: mysql> SELECT name, birth, death, -> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5)) -> AS age -> FROM pet WHERE death IS NOT NULL ORDER BY age; +--------+------------+------------+------+ | name | birth | death | age |

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

185

+--------+------------+------------+------+ | Bowser | 1989-08-31 | 1995-07-29 | 5 | +--------+------------+------------+------+ A consulta usa death IS NOT NULL em vez de death != NULL porque NULL ´ um valor ese pecial que n˜o pode ser comparada usando operadores comuns de compara¸˜o. Isto ser´ a ca a explicado depois. Veja Se¸˜o 3.3.4.6 [Working with NULL], P´gina 186. ca a E se vocˆ desejar saber quais animais fazem anivers´rio no pr´ximo mˆs? Para este tipo e a o e de c´lculo, ano e dia s˜o irrelevantes; vocˆ simplesmente deseja extrair a parte do mˆs da a a e e coluna birth. O MySQL fornece diversas fun¸˜es para extrair partes da data, como em co YEAR(), MONTH() e DAYOFMONTH(). MONTH ´ a fun¸˜o apropriada aqui. Para ver como ela e ca funciona, execute uma consulta simples que mostre o valor de birth e MONTH(birth): mysql> SELECT name, birth, MONTH(birth) FROM pet; +----------+------------+--------------+ | name | birth | MONTH(birth) | +----------+------------+--------------+ | Fluffy | 1993-02-04 | 2 | | Claws | 1994-03-17 | 3 | | Buffy | 1989-05-13 | 5 | | Fang | 1990-08-27 | 8 | | Bowser | 1989-08-31 | 8 | | Chirpy | 1998-09-11 | 9 | | Whistler | 1997-12-09 | 12 | | Slim | 1996-04-29 | 4 | | Puffball | 1999-03-30 | 3 | +----------+------------+--------------+ Encontrar animais com an´ ivers´rio no pr´ximo mˆs tamb´m ´ f´cil. Suponha que o mˆs a o e e e a e atual ´ abril. Ent˜o o valor do mˆs ´ 4 e vocˆ procura por animais nascidos em Maio (mˆs e a e e e e 5) assim: mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; +-------+------------+ | name | birth | +-------+------------+ | Buffy | 1989-05-13 | +-------+------------+ Existe uma pequena complica¸˜o se o mˆs atual ´ Dezembro, ´ claro. Vocˆ n˜o pode apenas ca e e e e a adicionar um para o n´mero do mˆs (12) e procurar por animais nascidos no mˆs 13, porque u e e n˜o existe tal mˆs. O certo seria procurar por animais nascidos em Janeiro (mˆs 1). a e e Vocˆ pode tamb´m escrever uma consulta para que funcione sem importar qual ´ o mˆs e e e e atual. Assim vocˆ n˜o tˆm quee usar um n´mero de mˆs em particular na consulta. DATE_ e a e u e ADD() permite adicionar um intervalo de tempo para uma data fornecida. Se vocˆ adicionar e um mˆs para o valor de CURDATE, ent˜o extrair a parte do mˆs com MONTH(), o resultado ´ e a e e o mˆs no qual vocˆ deseja procurar por anivers´rios: e e a mysql> SELECT name, birth FROM pet -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH));

186

MySQL Technical Reference for Version 5.0.0-alpha

Uma maneira diferente para realizar a mesma tarefa ´ adicionar 1 para obter o mˆs seguinte e e ao atual (depois de usar a fun¸˜o m´dulo (MOD) para o valor do mˆs retornar 0 se ele for ca o e 12): mysql> SELECT name, birth FROM pet -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1; Perceba que MONTH retorna um n´mero entre 1 e 12. E MOD(alguma_coisa,12) retorna um u n´mero entre 0 e 11. Ent˜o a adi¸˜o tem que ser feita depois do MOD(), sen˜o ir´ u a ca a iamos de Novembro (11) para Janeiro (1).

3.3.4.6 Trabalhando com Valores Nulos (NULL)
O valor NULL pode ser supreendente at´ vocˆ us´-lo. Conceitualmente, NULL significa valor e e a em falta ou valor desconhecido e ´ tratado de uma forma diferente de outros valores. Para e testar o valor NULL, vocˆ n˜o pode usar os operadores de compara¸˜es aritm´ticas como em e a co e =, <, ou !=. Para demonstrar para vocˆ mesmo, tente executar a seguinte consulta: e mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+ Claramente vocˆ n˜o obter´ resultados significativos destas compara¸˜es. Utilize os opere a a co adores IS NULL e IS NOT NULL no lugar: mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ No MySQL, 0 ou NULL significa falso e o resto ´ verdadeiro. O valor verdadeiro por o padr˜o e a em uma opera¸˜o booleana ´ 1. ca e Este tratamento especial de NULL ´ porque, na se¸˜o anterior, foi necess´rio determinar e ca a quais animais n˜o estavam mais vivos usando death IS NOT NULL no lugar de death <> a NULL. Dois valores NULL s˜o considerados como iguais em um GROUP BY. a Ao fazer um ORDER BY, valores NULL s˜o apresentados primeiro se vocˆ fizer ORDER BY ... a e ASC e por ultimo se vocˆ fizer ORDER BY ... DESC. ´ e Note que o MySQL 4.0.2 a 4.0.10 sempre ordenam, incorretamente, valores NULL em primeiro independente da ordem escolhida.

3.3.4.7 Combina¸˜o de padr˜es ca o
O MySQL fornece combina¸˜o de padr˜es do SQL bem como na forma de combina¸˜o ca o ca de padr˜es baseado nas express˜es regulares extendidas similares `quelas usadas pelos o o a utilit´rios Unix como o vi, grep e sed. a

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

187

A combina¸˜o de padr˜es SQL lhe permite vocˆ usar _ para coincidir qualquer caractere ca o e simples e % para coincidir um n´mero arbitr´rio de caracteres (incluindo zero caracter). u a No MySQL, padr˜es SQL s˜o caso insensitivo por padr˜o. Alguns exemplos s˜o vistos o a a a abaixo. Perceba que vocˆ n˜o usa = ou != quando usar padr˜es SQL; use os operadores de e a o compara¸˜o LIKE ou NOT LIKE neste caso. ca Para encontrar nomes come¸ando com ‘b’: c mysql> SELECT * FROM pet WHERE name LIKE "b%"; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ Para encontrar nomes com o final ‘fy’: mysql> SELECT * FROM pet WHERE name LIKE "%fy"; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ Para encontrar nomes contendo um ‘w’: mysql> SELECT * FROM pet WHERE name LIKE "%w%"; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+ Para encontrar nomes contendo exatamente cinco caracteres, use cinco instˆncias do caraca ter ‘_’: mysql> SELECT * FROM pet WHERE name LIKE "_____"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ O outro tipo de combina¸˜o de padr˜es fornecido pelo MySQL usa express˜es regulares ca o o extendidas. Quando vocˆ testa por uma combina¸˜o para este tipo de padr˜o, utilize os e ca a operadores REGEXP e NOT REGEXP (ou RLIKE e NOT RLIKE, que s˜o sinˆnimos). a o Algumas caracter´ isticas das express˜es regulares extendidas s˜o: o a • ‘.’ combina qualquer caractere unico ´

188

MySQL Technical Reference for Version 5.0.0-alpha

• Uma classe de caracteres ‘[...]’ combina qualquer caractere que consta dentro dos colchetes. Por exemplo, ‘[abc]’ combina com ‘a’, ‘b’, ou ‘c’. Para nomear uma sequˆncia de caracteres utilize um tra¸o. ‘[a-z]’ combina com qualquer letra e ‘[0-9]’ e c combina com qualquer d´ igito. • ‘*’ combina com nenhuma ou mais instˆncias de sua precedˆncia. Por exemplo, ‘x*’ a e combina com qualquer n´mero de caracteres ‘x’, ‘[0-9]*’ combina com qualquer u n´mero de d´ u igitos e ‘.*’ combina com qualquer n´mero de qualquer coisa. u • Um padr˜o REGEXP casa com sucesso se ele ocorre em algum lugar no valor sendo a testado. (Ele difere do padr˜o LIKE, que s´ obtem suceeso se eles combinarem com a o todo o valor.) • Para fazer com que um padr˜o deva combinar com o come¸o ou o fim de um valor a c sendo testado, utilize ‘^’ no come¸o ou ‘$’ no final do padr˜o. c a Para demonstrar como express˜es regulares extendidas funcionam, as consultas com LIKE o mostradas acima foram reescritas abaixo usando REGEXP. Para encontrar nomes come¸ando com ‘b’, utilize ‘^’ para combinar com o come¸o do nome: c c mysql> SELECT * FROM pet WHERE name REGEXP "^b"; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ Antes da vers˜o 3.23.4 do MySQL, REGEXP era caso sensitivo, e a consulta anterior n˜o iria a a retornar nenhum registro. Neste caso, para combinar letras ‘b’ mai´sculas e min´sculas, u u utilize esta consulta: mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; A partir do MySQL 3.23.4, se vocˆ realmente deseja for¸ar uma compara¸˜o REGEXP com e c ca caso sensitivo, utilize a palavra-chave BINARY para tornar uma das strings em uma string bin´rias. Esta consulta ir´ combinar somente com ‘b’s min´sculos no come¸o de um nome: a a u c mysql> SELECT * FROM pet WHERE name REGEXP BINARY "^b"; Para encontrar nomes finalizados com ‘fy’, utilize ‘$’ para combinar com o final do nome: mysql> SELECT * FROM pet WHERE name REGEXP "fy$"; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ Para encontrar nomes contendo um ‘w’, utilize esta consulta: mysql> SELECT * FROM pet WHERE name REGEXP "w"; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

189

| Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+ Como uma express˜o regular extendida encontra padr˜es coincidentes se eles ocorrem em a o qualquer lugar no valor comparado, n˜o ´ necess´rio utiliar, na consulta anterior, nenhum a e a metacaracter em nenhum dos lados do padr˜o para fazˆ-lo coincidir com todo o valor, como a e seria feito se fosse utilizado o padr˜o SQL. a Para encontrar nomes contendo exatamente cinco caracteres, utilize ‘^’ e ‘$’ para combinar com o come¸o e fim do nome e cinco instˆncias de ‘.’ entre eles. c a mysql> SELECT * FROM pet WHERE name REGEXP "^.....$"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ Vocˆ pode tamb´m escrever a consulta anterior utilizando o operador ‘{n}’ “repete-n-vezes”: e e mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+

3.3.4.8 Contando Registros
Bancos de dados normalmente s˜o usados para responder a perguntas, “Qual a frequˆncia a e que certo tipo de dados ocorre em uma tabela?” Por exemplo, vocˆ deve querer saber e quantos animais tem, ou quantos animais cada dono tem, ou vocˆ pode querer fazer v´rios e a outros tipos de opera¸˜es de censo com seus animais. co Contando o n´mero total de animais que vocˆ tem ´ a mesma quest˜o como em “Quantos u e e a registros existem na tabela pet?” porque existe um registro por animal. COUNT(*) conta o n´mero de resultados n˜o-NULL, portanto a pesquisa para contar seus animais parecer´ u a a com isto: mysql> SELECT COUNT(*) FROM pet; +----------+ | COUNT(*) | +----------+ | 9 | +----------+ Logo, vocˆ recuperar´ os nomes das pessoas que possuam animais. Vocˆ pode usar COUNT() e a e se vocˆ desejar encontrar quantos animais cada dono possui: e

190

MySQL Technical Reference for Version 5.0.0-alpha

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner; +--------+----------+ | owner | COUNT(*) | +--------+----------+ | Benny | 2 | | Diane | 2 | | Gwen | 3 | | Harold | 2 | +--------+----------+ Perceba o uso de GROUP BY para agrupar todos os registros para cada owner (dono). Sem ele, vocˆ teria uma mensagem de erro: e mysql> SELECT owner, COUNT(*) FROM pet; ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause COUNT() e GROUP BY s˜o uteis para personalizar seus dados de diversas maneiras. Os a ´ seguintes exemplos mostram diferentes maneiras para realizar opera¸˜es de censo nos anico mais. N´mero de animais por esp´cie: u e mysql> SELECT species, COUNT(*) FROM pet GROUP BY species; +---------+----------+ | species | COUNT(*) | +---------+----------+ | bird | 2 | | cat | 2 | | dog | 3 | | hamster | 1 | | snake | 1 | +---------+----------+ N´mero de animais por sexo: u mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex; +------+----------+ | sex | COUNT(*) | +------+----------+ | NULL | 1 | | f | 4 | | m | 4 | +------+----------+ (Nesta sa´ ida, NULL indica que o sexo ´ desconhecido.) e N´mero de animais combinando esp´cie e sexo: u e mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | NULL | 1 | | bird | f | 1 |

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

191

| cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+ N˜o ´ necess´rio selecionar uma tabela inteira quando estiver usando COUNT(). Por exemplo, a e a a consulta anterior, quando realizada apenas procurando por cachorros e gatos, se parece com isto: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE species = "dog" OR species = "cat" -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | +---------+------+----------+ Ou se vocˆ desejar saber o n´mero de animais por sexo somente de animais com sexo e u conhecido: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE sex IS NOT NULL -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | f | 1 | | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+

3.3.4.9 Utilizando M´ ltiplas Tabelas u
A tabela pet mant´m informa¸˜es de quais animais vocˆ tem. Se vocˆ deseja gravar outras e co e e informa¸˜es sobre eles como eventos em suas vidas, tais como visitas ao veterin´rio ou sobre co a suas crias, vocˆ necessitar´ de outra tabela. Como esta tabela deve se parecer ? Ela precisa: e a • Conter o nome do animal para que vocˆ saiba a qual animal pertence o evento. e • Uma data para que vocˆ saiba quando ocorreu o evento. e

192

MySQL Technical Reference for Version 5.0.0-alpha

• Um campo para descrever o evento. • Um campo com o tipo de evento, se vocˆ desejar classific´-los por categoria. e a Dadas estas considera¸˜es, a instru¸˜o CREATE TABLE para a tabela event deve se parecer co ca com isto: mysql> CREATE TABLE event (name VARCHAR(20), date DATE, -> type VARCHAR(15), remark VARCHAR(255)); Como na tabela pet, ´ mais f´cil carregar os registros iniciais criando um arquivo texto e a delimitado por tabula¸˜es contendo a informa¸˜o: co ca name Fluffy Buffy Buffy Chirpy Slim Bowser Fang Fang Claws Whistler date 1995-05-15 1993-06-23 1994-06-19 1999-03-21 1997-08-03 1991-10-12 1991-10-12 1998-08-28 1998-03-17 1998-12-09 type litter litter litter vet vet kennel kennel birthday birthday birthday remark 4 kittens, 3 female, 1 male 5 puppies, 2 female, 3 male 3 puppies, 3 female needed beak straightened broken rib

Gave him a new chew toy Gave him a new flea collar First birthday

Carregue os registros usando: mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event; Baseado no que vocˆ j´ aprendeu com as consultas realizadas na tabela pet, vocˆ deve estar e a e apto para realizar pesquisas na tabela event; os princ´ ipios s˜o o mesmo. Mas quando a a tabela event, sozinha, ´ insuficiente para responder `s suas quest˜es? e a o Suppose you want to find out the ages at which each pet had its litters. We saw earlier how to calculate ages from two dates. The litter date of the mother is in the event table, but to calculate her age on that date you need her birth date, which is stored in the pet table. This means the query requires both tables: Suponha que vocˆ deseje descobrir as idades de cada animal quando eles tiveram cria. N´s e o vemos logo que ´ poss´ calcular a idade a partir das duas datas. A idade dos filhotes est´ e ivel a na tabela event, mas para calcular a idade da m˜e, vocˆ precisar´ da data de nascimento a e a dela, que est´ armazenado na tabela pet. Isto significa que vocˆ precisar´ das duas tabelas a e a para a consulta: mysql> SELECT pet.name, -> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age, -> remark -> FROM pet, event -> WHERE pet.name = event.name AND type = "litter"; +--------+------+-----------------------------+ | name | age | remark | +--------+------+-----------------------------+ | Fluffy | 2 | 4 kittens, 3 female, 1 male | | Buffy | 4 | 5 puppies, 2 female, 3 male | | Buffy | 5 | 3 puppies, 3 female |

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

193

+--------+------+-----------------------------+ Existem v´rias coisas que devem ser percebidas sobre esta consulta: a • A cl´usula FROM lista as duas tabelas porque a consulta precisa extrair informa¸˜o de a ca ambas. • Quando combinar (unir) informa¸˜es de m´ltiplas tabelas, vocˆ precisa especificar como co u e registros em uma tabela podem ser coincididas com os registros na outra. Isto ´ simples e porque ambas possuem uma coluna name. A consulta utiliza a cl´usula WHERE para a coincidir registros nas duas tabelas baseadas nos valores de name. • Como a coluna name ocorre em ambas tabelas, vocˆ deve especificar qual a tabela a que e vocˆ est´ se referindo. Isto ´ feito usando o nome da tabela antes do nome da coluna e a e separados por um ponto (.). Vocˆ n˜o precisa ter duas tabelas diferentes para realizar uma uni˜o. Algumas vezes ´ util e a a e´ unir uma tabela a ela mesma, se vocˆ deseja comparar registros em uma tabela com outros e registros na mesma tabela. Por exemplo, para encontrar pares entre seus animais, vocˆ e pode unir a tabela pet com ela mesma para produzir pares candidatos de machos e fˆmeas e de acordo com as esp´cies: e mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species -> FROM pet AS p1, pet AS p2 -> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m"; +--------+------+--------+------+---------+ | name | sex | name | sex | species | +--------+------+--------+------+---------+ | Fluffy | f | Claws | m | cat | | Buffy | f | Fang | m | dog | | Buffy | f | Bowser | m | dog | +--------+------+--------+------+---------+ Nesta consulta, n´s especificamos apelidos para os nomes das tabelas para conseguir refo erenciar `s colunas e manter com qual instˆncia da tabela cada coluna de referˆncia est´ a a e a associdada.

3.4 Obtendo Informa¸oes Sobre Bancos de Dados e Tabelas c˜
E se vocˆ esquecer o nome de um banco de dados ou tabela, ou como ´ a estrutura de e e uma certa tabela (por exemplo, como suas colunas s˜o chamadas)? O MySQL resolve este a problema atrav´s de diversas instru¸˜es que fornecem informa¸˜es sobre os bancos de dados e co co e as tabelas que ele suporta. Vocˆ j´ viu SHOW DATABASES, que lista os bancos de dados gerenciados pelo servidor. Para e a saber qual banco de dados est´ sendo usado atualmente, utilize a fun¸˜o DATABASE(): a ca mysql> SELECT DATABASE(); +------------+ | DATABASE() | +------------+ | menagerie | +------------+

194

MySQL Technical Reference for Version 5.0.0-alpha

Se vocˆ ainda n˜o selecionou nenhum banco de dados ainda, o resultado ´ NULL. (ou a e a e string vazia antes do MySQL 4.1.1). Para saber quais tabelas o banco de dados atual contˆm (por exemplo, quando vocˆ n˜o e e a tem certeza sobre o nome de uma tabela), utilize este comando: mysql> SHOW TABLES; +---------------------+ | Tables in menagerie | +---------------------+ | event | | pet | +---------------------+ Se vocˆ deseja saber sobre a estrutura de uma tabela, o comando DESCRIBE ´ util; ele mostra e e´ informa¸˜es sobre cada uma das colunas da tabela: co mysql> DESCRIBE pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ A coluna Field (campo) indica o nome da coluna, Type ´ o tipo de dados para a coluna, e Null indica se a coluna pode conter valores nulos (NULL), key indica se a coluna ´ indexada e ou n˜o e Default especifica o valor padr˜o da coluna. a a ´ Se vocˆ tem indices em uma tabela, SHOW INDEX FROM tbl_nome traz informa¸˜es sobre eles. e co

3.5 Utilizando mysql em Modo Batch
Nas se¸˜es anteriores, vocˆ usou mysql interativamente para fazer consultas e ver os reco e sultados. Vocˆ pode tamb´m executar mysql no modo batch. Para fazer isto, coloque os e e comando que vocˆ deseja executar em um arquivo, e diga ao mysqld para ler sua entrada e do arquivo: shell> mysql < batch-file Se vocˆ estiver executando o mysql no Windows e tiver algum caracter especial no arquivo e que provocou o problema, vocˆ pode fazer: e dos> mysql -e "source batch-file" Se vocˆ precisa especificar parˆmetros de conex˜o na linha de comando, o comando deve e a a parecer com isto: shell> mysql -h host -u user -p < batch-file Enter password: ********

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca

195

Quando vocˆ utilizar o mysql desta forma, vocˆ estar´ criando um arquivo script, depois e e a executando o script. Se vocˆ quiser que o script continue mesmo se hopuver erros, vocˆ deve usar a op¸˜o de e e ca linha de comando --force. Por que usar um script? Existem v´rias raz˜es: a o • Se vocˆ executa uma query repetidamente (digamos, todos os dias ou todas as semanas), e transform´-lo em um script permite que vocˆ n˜o o redigite toda vez que o executa. a e a • Vocˆ pode gerar novas consultas a partir das j´ existentes copiando e editando os e a arquivos de script. • O modo batch pode tamb´m ser util quando vocˆ estiver desenvolvendo uma consulta, e ´ e particularmente para comandos de m´ltiplas linhas ou sequˆncias de comandos com u e v´rias instru¸˜es. Se vocˆ cometer um erro, n˜o ser´ necess´rio redigitar tudo. Apenas a co e a a a edite seu arquivo script e corrija o erro, depois diga ao mysql para execut´-lo novamente. a ´ • Se vocˆ tem uma query que produz muita saida, vocˆ pode encaminhar a sa´ atrav´s e e ida e de um p´ginador. a shell> mysql < batch-file | more • Vocˆ pode capturar a sa´ em um arquivo para processamento posterior: e ida shell> mysql < batch-file > mysql.out • Vocˆ pode distribuir seu script para outras pessoas para que elas possam executar os e comandos tamb´m. e • Algumas situa¸˜es n˜o permitem uso interativo, por exemplo, quando vocˆ executa co a e uma consulta atrav´s de um processo autom´tico (cron job). Neste caso, vocˆ deve e a e usar o modo batch. A formato padr˜o de sa´ ´ diferente (mais conciso) quando vocˆ executa o mysql no modo a ida e e batch do que quando vocˆ o usa interativamente. Por exemplo, a sa´ de SELECT DISTINCT e ida species FROM pet se parece com isto quando vocˆ o executa interativamente: e +---------+ | species | +---------+ | bird | | cat | | dog | | hamster | | snake | +---------+ Mas fica assim quando vocˆ o executa no modo batch: e species bird cat dog hamster snake Se vocˆ desejar obter o formato de sa´ interativa no modo batch, utilize mysql -t. Para e ida ´ dos comandos que s˜o executados, utilize mysql -vvv. mostrar a saida a

196

MySQL Technical Reference for Version 5.0.0-alpha

Vocˆ tamb´m pode utilizar scripts no prompt de linha de comando mysql usando o comando e e source: mysql> source filename;

3.6 Exemplos de Consultas Comuns
Aqui est˜o os exemplos de como resolver problemas comuns com o MySQL. a Alguns dos exemplos usam a tabela shop para armazenar o pre¸o de cada ´ c item (article) para certas revendas (dealers). Supondo que cada revenda tenha um pre¸o fixo por artigo, c ent˜o (article, dealer) ´ uma chave prim´ria para os registros. a e a Inicie a ferramenta de linha de comando mysql e selecione um banco de dados: shell> mysql o-nome-do-seu-banco-de-dados (Na maioria das instala¸˜es do MySQL, vocˆ pode usar o banco de dados test). co e Vocˆ pode criar e popular a tabela exemplo assim: e mysql> CREATE TABLE shop ( -> article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL, -> dealer CHAR(20) DEFAULT ’’ NOT NULL, -> price DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL, -> PRIMARY KEY(article, dealer)); mysql> INSERT INTO shop VALUES -> (1,’A’,3.45),(1,’B’,3.99),(2,’A’,10.99),(3,’B’,1.45),(3,’C’,1.69), -> (3,’D’,1.25),(4,’D’,19.95); Depois de executar as instru¸˜es a tabela deve ter o seguinte conte´do: co u mysql> SELECT * FROM shop; +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | A | 3.45 | | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | B | 1.45 | | 0003 | C | 1.69 | | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+

3.6.1 O Valor M´ximo para uma Coluna a
“Qual ´ o maior n´mero dos ´ e u itens?” SELECT MAX(article) AS article FROM shop; +---------+ | article |

price -> FROM shop -> WHERE price=19. +------------+ | MAX(price) | +------------+ | 19. +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0004 | D | 19.6. No MySQL (que ainda n˜o suporta sub-selects).95 | +------------+ 2. fa¸a isto em dois passos: a c 1. fornecedor e pre¸o do ´ u c item mais caro. Usando o valor 19. price FROM shop ORDER BY price DESC LIMIT 1.95 | +---------+--------+-------+ Outra solu¸˜o ´ ordenar todos os registros por pre¸o de forma descendente e obtenha soca e c mente o primeiro registro utilizando a cl´usula espec´ a ifica do MySQL LIMIT: SELECT article.95. NOTA: Se existir diversos ´ itens mais caros. c a grave uma consulta para localizar e mostrar o registro correspondente: mysql> SELECT article.95 mostrado pela consulta anterior como o pre¸o m´ximo do artigo. price FROM shop WHERE price=(SELECT MAX(price) FROM shop).6. dealer. Obtenha o valor do pre¸o m´ximo da tabela com uma instru¸˜o SELECT. dealer.2 O Registro que Armazena o Valor M´ximo para uma Coluna a Determinada “Encontre o n´mero.95. dealer. a solu¸˜o c ca LIMIT mostra somente um deles ! 3.Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 197 +---------+ | 4 | +---------+ 3. cada um com um pre¸o de 19.” No SQL ANSI isto ´ feito f´cilmente com uma sub-consulta: e a SELECT article.3 M´ximo da Coluna por Grupo a “Qual ´ o maior pre¸o por ´ e c item?” . c a ca mysql> SELECT MAX(price) FROM shop.

99 | | 0003 | 1.4 As Linhas Armazenando o Group-wise M´ximo de um Certo a Campo “Para cada ´ item.00’ NOT NULL).95 | +---------+-------+ 3. INSERT INTO tmp SELECT article.99 | | 0002 | 10. o problema pode ser solucionado com uma subconsulta como esta: SELECT article. mas somente com um truque ineficiente chamado “truque MAX-CONCAT”: . UNLOCK TABLES. price DOUBLE(16. Para cada ´ item.1 ´ melhor fazˆ-lo em diversos passos: o e e 1.price) FROM shop s2 WHERE s1. obtenha os registros correspondentes que tenham o maior pre¸o.0-alpha SELECT article. encontre o(s) fornecedor(s) com o maior pre¸o.” c No SQL-99 (e MySQL 4. e a A e e “Posso fazer isto com uma unica query?” ´ Sim. Se vocˆ n˜o usar uma tabela TEMPOR´RIA.price.0. Obtenha a lista de pares (article.198 MySQL Technical Reference for Version 5. LOCK TABLES shop READ.maxprice). price FROM shop s1 WHERE price=(SELECT MAX(s2. c Isto pode ser feito facilmente com uma tabela tempor´ria e um join: a CREATE TEMPORARY TABLE tmp ( article INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL. DROP TABLE tmp.article.2) DEFAULT ’0. MAX(price) AS price FROM shop GROUP BY article +---------+-------+ | article | price | +---------+-------+ | 0001 | 3.6. 2.article AND shop. MAX(price) FROM shop GROUP BY article. Em vers˜es anteriores a do MySQL 4. SELECT shop.price=tmp.1 ou superior). vocˆ deve bloquear tamb´m a tabela tmp.article). shop.69 | | 0004 | 19. dealer.article = s2.price FROM shop. tmp WHERE shop.article=tmp. dealer.

95 | +---------+--------+-------+ 3.4.’0’). 6) AS price FROM shop GROUP BY article.Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 199 SELECT article.23. 0. ser feito de uma maneira mais eficiente fazendo a separa¸˜o ´ e ca da coluna concatenada no cliente.95 | +---------+--------+-------+ O ultimo exemplo pode. a Vocˆ n˜o precisa de chaves estrangeiras para unir 2 tabelas. a a ca a Por exemplo.8. ´ claro. tabelas InnoDB suportam verifica¸˜o de restri¸˜es de chaves ca co estrangerias. Veja Se¸˜o 7. +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | B | 3.44 e acima. select * from shop where price=@min_price or price=@max_price. 3.00+LEFT( MAX( CONCAT(LPAD(price. Para outros tipos de tabela e a diferentes de InnoDB. ca Usando suas chaves para unir a tabela funcionar´ bem: a CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT.99 | | 0003 | C | 1.25 | | 0004 | D | 19.6.4 [Variables].69 | | 0004 | D | 19. As unicas coisas que o MySQL atualmente n˜o faz s˜o 1) CHECK.6. P´gina 50. Veja tamb´m Se¸˜o 1.dealer) ).6.5 [ANSI diff ca a e ca Foreign Keys]. +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0003 | D | 1.’0’).dealer) ). para ´ a a ter certeza que as chaves que vocˆ usa realmente existem na tabela ou tabelas referenciadas e e 2) apagar automaticamente registros da tabela com uma defini¸˜o de chave estrangeira.@max_price:=max(price) from shop.5 [InnoDB]. P´gina 474.1.5 Utilizando Vari´veis de Usu´rio a a Vocˆ pode usar vari´veis de usu´rios no MySQL para lembrar de resultados sem a necessie a a dade de armazen´-las em vari´veis no cliente.6. P´gina 642.6 Utilizando Chaves Estrangeiras No MySQL 3. para encontrar os ´ itens com os pre¸os mais altos e mais baixos vocˆ pode fazer c e isto: select @min_price:=min(price). Veja Se¸˜o 6.99 | | 0002 | A | 10. 7) AS dealer. SUBSTRING( MAX( CONCAT(LPAD(price. .

’dress’. ’red’.200 MySQL Technical Reference for Version 5. ’dress’) NOT NULL.0-alpha name CHAR(60) NOT NULL. ’Lilliana Angelovska’). INTO shirt VALUES ’polo’. owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id). PRIMARY KEY (id) ). INTO shirt VALUES ’dress’. colour ENUM(’red’. ’black’) NOT NULL. ’orange’. LAST_INSERT_ID()). INSERT INTO person VALUES (NULL. ’polo’. +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+ SELECT * FROM shirt. INSERT (NULL. (NULL. LAST_INSERT_ID()). ’Antonio Paz’). SELECT * FROM person. (NULL. LAST_INSERT_ID()). ’t-shirt’. ’white’. (NULL. CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT. PRIMARY KEY (id) ). ’white’. LAST_INSERT_ID()). ’blue’. (NULL. ’orange’. ’t-shirt’. ’blue’. style ENUM(’t-shirt’. ’dress’. INSERT INTO person VALUES (NULL. LAST_INSERT_ID()). LAST_INSERT_ID()). (NULL. +----+---------+--------+-------+ | id | style | colour | owner | +----+---------+--------+-------+ | 1 | polo | blue | 1 | | 2 | dress | white | 1 | | 3 | t-shirt | blue | 1 | | 4 | dress | orange | 2 | | 5 | polo | red | 2 | . ’polo’. ’blue’.0. LAST_INSERT_ID()). INSERT (NULL. ’blue’. ’white’.

+----+-------+--------+-------+ | id | style | colour | owner | +----+-------+--------+-------+ | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | +----+-------+--------+-------+ 3. em compara¸˜o. field2_index FROM test_table WHERE field2_index = ’1’. field2_index FROM test_table WHERE field2_index = ’1’.colour <> ’white’.name LIKE ’Lilliana%’ s. Este tipo de otimiza¸˜o tamb´m ´ muito co ca e e boa se vocˆ estiver utilizando consultas muito complicadas no qual o servidor SQL faz as e otimiza¸˜es na ordem errada. shirt s p. (A manipula¸˜o do AND ´. e a . A maneira descrita acima para resolver esta consulta ´ uma uni˜o (UNION) de duas consultas.owner = p. Cada SELECT busca apenas uma chave e pode ser otimizada. No MySQL 4. completamente geral e ca e ca funciona muito bem). field2_index FROM test_table WHERE field1_index = ’1’.2 [UNION]. co CREATE TEMPORARY TABLE tmp SELECT field1_index. Em vers˜es do MySQL anteirores a 4.Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 201 | 6 | dress | blue | 2 | | 7 | t-shirt | white | 2 | +----+---------+--------+-------+ SELECT WHERE AND AND s.7 Pesquisando em Duas Chaves O MySQL ainda n˜o otimiza quando vocˆ pesquisa em duas chaves diferentes combinadas a e com OR (Pesquisa em uma chave com diferentes partes OR ´ muito bem otimizadas). vocˆ pode conseguir o mesmo efeito usando uma o e tabela TEMPORARY e instru¸˜es SELECT separadas.0.1. field2_index FROM test_table WHERE field1_index = ’1’ UNION SELECT field1_index.0 e acimo. a SELECT field1_index.4. e SELECT field1_index. field2_index FROM test_table WHERE field1_index = ’1’ OR field2_index = ’1’ A raz˜o ´ que n´s ainda n˜o tivemos tempos para fazer este tratamento de uma maneira a e o a eficiente no caso geral. DROP TABLE tmp. INSERT INTO tmp SELECT field1_index.id s.6. SELECT * from tmp. ida co ca P´gina 569. Veja Se¸˜o 6. vocˆ pode solucionar este problema eficientemente usando um UNION e que combina a sa´ de duas instru¸˜es SELECT separadas.* FROM person p.

month. Nota: para uma inser¸˜o de v´rias ca ca a .1). Para determinar quantos quantos dias diferentes em cada mˆs estas visitas ocorriam.month. e ca a 3. que retornar´: a +------+-------+------+ | year | month | days | +------+-------+------+ | 2000 | 01 | 3 | | 2000 | 02 | 2 | +------+-------+------+ O exemplo acima calcula quantos dias diferentes foram usados para uma combina¸˜o ca fornecida de mˆs/ano.23).BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year. SELECT * FROM animals.9 Usando AUTO_INCREMENT O atributo AUTO_INCREMENT pode ser usado para gerar uma identifica¸˜o unica para um ca ´ novo registro: CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT.1.2.20). com remo¸˜o autom´tica de entradas duplicadas.("cat").202 MySQL Technical Reference for Version 5. u e a a CREATE TABLE t1 (year YEAR(4).(2000. day INT(2) UNSIGNED Z INSERT INTO t1 VALUES(2000.("whale"). ("lax").8 Calculando Visitas Di´rias a O seguinte exemplo mostra como vocˆ pode usar as fun¸˜es bin´rias de agrupamento para e co a calcular o n´mero de dias por mˆs que um usu´rio tem visitado uma p´gina web.6. PRIMARY KEY (id) ).1. Que retorna: +----+---------+ | id | name | +----+---------+ | 1 | dog | | 2 | cat | | 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+ Vocˆ pode recuperar o valor AUTO_INCREMENT mais recente com a fun¸˜o SQL LAST_INSERT_ e ca ID() ou a fun¸˜o da API C mysql_insert_id(). name CHAR(30) NOT NULL.(2000 A tabela exemplo cont´m valores ano-mˆs-dia representando visitas feitas pelos usu´rios a e e a p´gina.("penguin").2).6.0-alpha 3.0.2.(2000.("ostrich").(2000.30).(2000.1. month INT(2) UNSIGNED ZEROFILL. INSERT INTO animals (name) VALUES ("dog"). a e use esta consulta: SELECT year.

Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 203 linhas LAST_INSERT_ID()/mysql_insert_id() retornar´ atualmente a AUTO_INCREMENT a chave da primeira linha inserida. para as quais os valores AUTO_INCREMENT normalmente n˜o s˜o reusados. name CHAR(30) NOT NULL.id) ). n´s estamos fazendo os sistemas e trabalho de campo para um o grande projeto de pesquisa. ("bird". Gˆmeos que preenchem certos crit´rios passam para a e e o pr´ximo est´gio. gˆmeos que desejam participar s˜o visitados o a a e a por uma equipe de doutores/enfermeiros.id.("mammal". imagem neural.’bird’) NOT NULL. ca ca Para tabelas MyISAM e BDB vocˆ pode especificar AUTO_INCREMENT em uma coluna secund´ria e a em um ´ indice multi-coluna."whale").’mammal’.("mammal". PRIMARY KEY (grp. ("bird". Isto ´ e util quando vocˆ quer colocar dados em grupos ordenados. Isto caontece mesmo para tabelas MyISAM. O projeto envolve uma parte de sele¸˜o onde todos os gˆmeos na Su´cia mais velhos que 65 ca e e anos s˜o entrevistados por telefone.) a a 3. ´ e CREATE TABLE animals ( grp ENUM(’fish’. Alguns dos consultas incluem exames f´ isicos e neuropsicol´gico."cat"). Neste caso. determina¸˜o do estado psicol´gico o o ca o . id MEDIUMINT NOT NULL AUTO_INCREMENT.("fish". Isto permite que inser¸˜es multi-linhas sejam reproduzidas co corretamente em outros servidores em uma configra¸˜o de replica¸˜o.name) VALUES("mammal". o valor gerado para a coluna AUTO_INCREMENT ´ e calculado como MAX(auto_increment_column)+1) WHERE prefix=given-prefix. testes de laborat´rio."ostrich"). SELECT * FROM animals ORDER BY grp.7 Consultas de Projetos Gˆmeos e Em Analytikerna e Lentus. INSERT INTO animals (grp."penguin")."lax"). Este projeto ´ uma colabora¸˜o entre o Institudo de Medicina e ca Ambiental em Karolinksa Institutet Stockholm e a Se¸˜o de Pesquisa Cl´ ca inica em Envelhecimento e Psicologia na University of Southern California. o valor de AUTO_INCREMENT ser´ reutilizado se vocˆ deletar a linha com o maior valor AUTO_ a e INCREMENT em qualquer grupo."dog"). Que retorna: +--------+----+---------+ | grp | id | name | +--------+----+---------+ | fish | 1 | lax | | mammal | 1 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+ Note que neste caso (quando o valor AUTO_INCREMENT ´ parte de um ´ e indice multi-coluna). Neste est´gio posterior.

severe AS isevere2.tvab) + 0 AS tvid.1 Encontrando Todos Gˆmeos N˜o-distribu´ e a idos A seguinte consulta ´ usada para determinar quem vai na segunda parte do projeto: e SELECT CONCAT(p1. td2. Adicionalmente. p1.suspect AS tsuspect1. id.event AS event1.suspect AS isuspect1.dead AS dead1. " ".html A parte posterior do projeto ´ administrada com uma interface Web escrita utilizando a e linguagem Perl e o MySQL.ki. h2. pg.tvab = td.suspect AS isuspect2.id = id.se/twinreg/index_en.0. p1.tvab = id. h2.severe AS tsevere2.finish_date FROM twin_project AS tp /* For Twin 1 */ LEFT JOIN twin_data AS td ON tp. "A". p1.city AS City.tvab LEFT JOIN informant_data AS id ON tp.surname) AS Name.tvab /* For Twin 2 */ LEFT JOIN twin_data AS td2 ON p2.204 MySQL Technical Reference for Version 5.event AS event2.id = td.id = l.tvab = l. dados s˜o coletados em fatores de riscos o a m´dicos e ambientais.christian_name. id2.tvab LEFT JOIN lentus AS l ON tp.7.nurse AS nurse2. Cada noite todos dados das entrevistas s˜o movidos para um banco de dados MySQL.severe AS tsevere1. id2.id AND tp.abrev AS Area.id AND tp.id AND tp. p1.participation = "Aborted".0-alpha e coletas de hist´rico familiar. p1.tvab LEFT JOIN harmony AS h ON tp.mep. e Mais informa¸˜es sobre o estudos dos gˆmeos pode ser encontrados em: co e http://www. IF(td. l. id. CONCAT(p1.dead AS dead2. a 3.id. td. l2.tvab = h.doctor AS doctor2.suspect AS tsuspect2.severe AS isevere1. p2. " ") AS A.id = h. td2.id .postal_code AS Code.id = td2. l. td.id AND tp.

dead = 0)) AND l.future_contact = ’Yes’ AND td. 2) = pg.future_contact = ’Yes’) OR /* Twin broken off .dead = 9 OR (p2.id AND p2.event = ’Finished’ /* Get at area code */ AND SUBSTRING(p1.tvab.code /* Not already distributed */ AND (h. person_data AS p2. person_data AS p1.id AND p1.future_contact = ’Yes’) OR /* Twin broken off .Informant is Blessed */ (ISNULL(td.suspect = 1 AND id.dead = 0 OR p2.TO_DAYS(p2.suspect = 2) OR /* Twin is suspect .tvab AND /* Just the sceening survey */ tp.tvab LEFT JOIN harmony AS h2 ON p2.ptvab = p1.Informant is Blessed */ (td. */ /* ptvab is a field inverted from tvab */ p1.Have partner */ (td.survey_no = 5 AND /* Skip if partner died before 65 but allow emigration (dead=9) */ (p2.nurse=00 OR h.birthday)) / 365) >= 65)))) AND ( /* Twin is suspect */ (td.death_date) .tvab = id2.suspect = 1) OR /* No twin .suspect) AND p2.dead = 1 AND (p2.No inform .participation = ’Aborted’ AND id.participation = ’Aborted’ AND ISNULL(id.tvab = tp.id = l2.id = tp.postal_code.suspect) AND id.tvab LEFT JOIN informant_data AS id2 ON p2.suspect = 1 AND id. postal_groups AS pg WHERE /* p1 gets main twin and p2 gets his/her twin.death_date = 0 OR (((TO_DAYS(p2.tvab AND p2.nurse IS NULL OR h.Informant is Blessed */ (td.status = ’Aborted’ .tvab = l2.id AND p2.tvab LEFT JOIN lentus AS l2 ON p2.id AND p2.id = p1.tvab = h2.id = id2.Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 205 AND p2.tvab = td2.suspect = 1 AND id.future_contact = ’Yes’ AND td.status = ’Refused’ OR h.doctor=00) /* Has not refused or been aborted */ AND NOT (h.id = h2. 1.id AND p2.

Quando tvab ´ 1 este campo ´ 2 e vice versa. Se for verdade. Algumas explica¸˜es: co CONCAT(p1. e column ptvab Esta ´ o inverso de tvab.0-alpha OR h. O n´mero atual de registros nas tabelas usadas acima: u Tabela Registros person_data 71074 lentus 5291 twin_project 5286 twin_data 2012 informant_data 663 harmony 381 postal_groups 100 3. Ela ´ uma chave em todas as tabelas.7. e a e Tudo acima existe em todas as tabelas com informa¸˜es relacionada aos gˆmeos. em quantos pares um gˆmeo tere e minou e o outro foi recusado e assim por diante. No exemplo.event. e e Ela indica em quantos pares ambos gˆmeos terminaram.status = ’Died’ OR h.2 Mostrando uma Tabela sobre a Situa¸˜o dos Pares Gˆmeos ca e Cada entrevista termina com um c´digo da situa¸˜o chamado event. a Na nossa m´quina de produ¸˜o (Um UltraSPARC 200MHz).event. Adicioe nando 0 ao resultado faz o MySQL tratar o resultado como um n´mero. p1. N´s temos co e o uma chave em ambos id.tvab) + 0 AS tvid N queremos ordenar o id e o tvab concatenados na ordem num´rica.0. Ela pode ter um valor de 1 ou 2.ptvab (person_data) para tornar as consultas mais r´pidas. entre outras coisas. A consulta mostrada o ca abaixa ´ usada para mostrar uma tabela sobre todos pares gˆmeos combinados por evento. a linha n˜o ´ retornada. t2.206 MySQL Technical Reference for Version 5.tvab (todas as tabelas) e id. e e column tvab Esta identifica um gˆmeo em um par. isto ´ usado para conferir se um par e de um gˆmeo morreu antes de 65 anos.status = ’Other’) ORDER BY tvid. esta consulta retorna entre a ca 150-200 linhas e gasta menos que um segundo. como fazer buscas em uma tabela a partir da mesma tabela com uma uniao (p1 e p2). COUNT(*) FROM lentus AS t1.id. Ela e e e existe para poupar digita¸˜o e tornar mais f´cil para o MySQL otimizar a query. ca a Esta consulta demonstra. SELECT t1. u coluna id Esta identifica um par de gˆmeos. .

\"%b\".\"%{Content-Type}o\".%{%Y%m%d%H%M%S}t.tvab AND t1. \ \"%U\".%>s.survey_no = 5 /* This makes each pair only appear once */ AND t1.event.\"%{User-Agent}i\"" Para carregar uma arquivo de log naquele formato dentro do MySQL.tvab=tp.id /* Just the sceening survey */ AND tp.tvab=’2’ GROUP BY t1. e Vocˆ pode alterar o formato de log do Apache para ser facilmente lido pelo MySQL coloe cando o seguinte no arquivo de configura¸˜o do Apache: ca LogFormat \ "\"%h\".Cap´ ıtulo 3: Tutorial de Introdu¸˜o Do MySQL ca 207 lentus AS t2.id AND t1. t2. vocˆ pode usar uma e instru¸˜o deste tipo: ca LOAD DATA INFILE ’/local/access_log’ INTO TABLE nome_tabela FIELDS TERMINATED BY ’.\"%{Referer}i\".8 Utilizando MySQL com Apache Existem programas que lhe permite autenticar seus usu´rios a partir de um banco de dados a MySQL e tamb´m permite gravar seus arquivos de log em uma tabela MySQL.tvab=’1’ AND t2.id = t2.id = tp. twin_project AS tp WHERE /* We are looking at one pair at a time */ t1. 3. .event.’ OPTIONALLY ENCLOSED BY ’"’ ESCAPED BY ’\\’ A tabela chamada deve ser criada para ter colunas que correpondem a aquelas que a linha LogFormat gravam no arquivo de log.

As op¸˜es usadas para replica¸˜o co ca est`o listadas em uma se¸˜o separada.2.23 n˜o est´ apto a c a a fornecer um chroot 100% fechado. P´gina 42. quando for necess´rio.8. .0 (MySQL 3.1 Op¸˜es de Linha de Comando do mysqld co Na maioria dos casos vocˆ deve gerenciar as op¸˜es do mysqld por meio dos arquivos de e co op¸˜es. P´gina 326. a -b. co ca co a mysqld e mysqld. e ca mysqld aceita os seguintes op¸˜es de linha de comando.11.2 [ANSI ca mode]. onde xxxxx e co ´ o nome da aplica¸˜o.2 [Arquivos de op¸˜es]. P´gina 393. veja Se¸˜o 4. o MySQL ´ capaz de resolver isto aua e tomaticamente usando mem´ria para pequenas tabelas tempor´rias e trocando o a para o disco as tabelas. mysqld_safe e mysqld_safe. Veja Se¸˜o 4. Ele resolve a maioria dos erros ’table full’. P´gina 217. embedded e xxxxx_SERVER. Medida ca de seguran¸a recomendada desde o MySQL 4.1 Configurando o MySQL 4.0. a --bind-address=IP Endere¸o IP para ligar. Desde a Vers˜o 3. a ca ca a --ansi Utilizar a sintaxe ANSI SQL no lugar da sintaxe MySQL Veja Se¸˜o 1.. Veja Se¸˜o 4. --character-sets-dir=path Diret´rio onde est˜o os conjuntos de caracteres. mas a tamb´m abaixa a velocidade das consultas nas quais as tabelas em mem´ria e o seriam suficientes.1 [Conjunto de o a ca caracteres]..1. Para uma lista completa execute mysqld --help. INTO OUTFILE. ca --big-tables Permite grandes conjuntos de resultados salvando todos os conjuntos tempor´rios em um arquivo.7.23.6 [Replication Options]. server.1. a --chroot=path Coloca o daemon mysqld no diretorio chroot durante a inicializa¸˜o.208 MySQL Technical Reference for Version 5. c --console Grava a mensagem de erro no stderr/stdout mesmo se --log-error ´ espefie cado. Todos os caminhos normalmente s˜o o ca a resolvidos em rela¸˜o a este.0-alpha 4 Administra¸˜o do Bancos de Dados MySQL ca 4. Um servidor MySQL co embutido normalmente lˆ op¸˜es do grupos server. Aqui est´ uma lista das mais co a comuns. Limita os comandos LOAD DATA INFILE e SELECT . No Windows o mysqld n˜o fechar´ a tela de console se esta op¸˜o ´ a a ca e usada. mysqld_safe lˆ as e co e op¸˜es dos grupos mysqld.server lˆem op¸˜es dos grupos mysqld e server. --basedir=path Encaminho para o diret´rio de instala¸˜o.

Veja Se¸˜o A. Esta op¸˜o n˜o deve ser usada por algu´m que n˜o ca a e a a conhe¸a muito bem! c --flush Atualiza todas as altera¸˜es no disco depois de cada comando SQL. a a Veja Se¸˜o 5. Veja Cap´ a “ptexi tulo 7 [Tipos de tabelas]. --datadir=caminho Encaminha para o diret´rio raiz dos bancos de dados. No MySQL 4.1 [Conjunto de a ca caracteres].1 [Falhas]. P´gina 1071. Perceba que se usar esta op¸˜o em um sistema ca que n˜o possui um lockd() completamente funcional (como no Linux) vocˆ pode a e fazer com que o mysqld entre em deadlock.2 ca --delay-key-write-for-all-tables. a --default-table-type=tipo Configura o tipo de tabela padr˜o. Normalco mente o MySQL s´ faz a escrita de todas as altera¸˜es no disco depois de cada o co comando SQL e deixa o sistema operacional lidar com a sincroniza¸˜o com o ca disco. Veja Se¸˜o 4. P´gina 629. --enable-named-pipe Habilita suporte para named pipes (somente no NT/Win2000/XP). vocˆ pode usar esta op¸˜o a e ca para obter um arquivo de rastreamento indicando o que o mysqld est´ fazendo. P´gina 326.. como Solaris.8. P´gina 332. ca a .7. Note que em alguns sistemas.3 voc^ deve usar e --delay-key-write=ALL. o --debug[. -T.2 [Parˆmetros do servidor]. a Veja Se¸˜o 5. P´gina 455.5. Veja Se¸˜o 4. --enable-external-locking (era --enable-locking) Habilita o bloqueio do sistema. vocˆ a e n˜o consiguir´ um arquivo core se vocˆ tamb´m estiver usando a op¸˜o --user. a --delay-key-write[= OFF | ON | ALL] Como o DELAYED KEYS do MyISAM deve ser usado.0. P´gina 921.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 209 --core-file Grava um arquivo core se o mysqld morrer. Para alguns sistemas vocˆ deve e tamb´m especificar --core-file-size para mysqld_safe. [Parˆmetros do servidor].2 e ca [mysqld_safe]. a a e e ca -h. ca a a --des-key-file=filename Read the default keys used by DES_ENCRYPT() and DES_DECRYPT() from this file.]= Se o MySQL est´ configurado com --with-debug.5. N˜o descarrega buffers das chaves entre escritas em nenhuma tabela MyISAM.4.1.2 [Criando arquivos trace].. ca a --default-character-set=conjunto_caracter Configura o conjunto de caracteres padr˜o. a Veja Se¸˜o D. P´gina 455. --exit-info Esta ´ uma m´scara bin´ria com diferˆntes parˆmetros que pode ser usada para e a a e a depurar o servidor mysqld.

. Usado para backup e replica¸˜o. a -l. Note que --log-long-format est´ obsoleto a partir do MySQL a vers˜o 4.10. P´gina 373. nome do usu´rio e timestamp s˜o registrados para a a a consulta. Esta op¸˜es a co est´ dispon´ a ivel a partir do MySQL 4. Note tamb´m que a partir do e ca a a e MySQL 4. --log[=arquivo] Log de conex˜es e consultas ao arquivo. Veja Se¸˜o 4. ca ca a --log-bin-index[=arquivo] Arquivo de ´ indice para nomes de arquivos de log binario.1.1. Veja Se¸˜o 4.2 [L´ ca inguas]. Por exemplo.10. a --log-isam[=arquivo] Log de todas altera¸˜es ISAM/MyISAM no arquivo (usado somente quando co estiver depurando bancos ISAM/MyISAM). independente de qual est´ a co a . P´gina 375.4 ca [Log bin´rio]. a op¸˜o --log-queries-not-using-indexes est´ dispon´ para ca a ivel prop´sito de registro de consultas que n˜o usam ´ o a indices para o log de consultas lentas. Veja Se¸˜o 4. log co co bin´rio de atualiza¸˜es e log de consultas lentas. a a --log-error[=arquivo] Registra mensagens de erro e inicializa¸˜o neste arquivo.1. Mensagens de erro do cliente na l´ ingua especificada. Pode ser fornecido como um caminho completo. --help Mostra uma pequena ajuda e sai. e ca -L. Veja Se¸˜o 4. Se vocˆ estiver usando --log-slow-queries e --log-long-format. P´gina 328. a --log-short-format Registra menos informa¸˜es extras nos aruivos de log (log de atualiza¸˜es. e ent˜o consultas que n˜o est˜o usando ´ a a a indices s˜o registradas ao log de cona sultas lentas..1). --log-long-format Registra algumas informa¸˜es extras nos aruivos de log (log de atualiza¸˜es. o ca P´gina 373.7. co co log bin´rio de atualiza¸˜es e log de consultas lentas.10.210 MySQL Technical Reference for Version 5. a --log-bin=[arquivo] Registra todas as consultas que alteram dados em arquivo. --init-file=arquivo Lˆ comandos SQL do arquivo especificado na inicializa¸˜o. quando --log-short-format foi introduzido (--log-long-format a ´ a configura¸˜o padr˜o desde a vers˜o 4. independente de qual est´ a co a ativado). Veja Se¸˜o 4.4 [Binary log]. P´gina 375.2 [Log de consultas].5 [Slow query log]. ent˜o consultas que n˜o est˜o e a a a ´ usando indices est˜o registradas no log de consultas lentas. --language=.10.10.0. Veja Se¸˜o 4.1 [Log ca ca de erro]. --log-queries-not-using-indexes Se vocˆ estiver usando --log-slow-queries.0-alpha -?. ca P´gina 378.

(A ultima op¸˜o funciona a ´ ca somente se vocˆ estiver executando com --skip-locking). a a a --low-priority-updates Opera¸˜es de altera¸˜es das tabelas (INSERT/DELETE/UPDATE) ir˜o ter priorico co a dade menor do que as selects.10.]]] onde op¸~o ´ qualquer combina¸~o ca ca ca e ca de DEFAULT.5 [Slow query log].. para baixar a prioridade de somente uma consulta. ca salve um backup do arquivo de dados ‘nome_tabela. ou SET OPTION SQL_LOW_PRIORITY_UPDATES=1 para alterar a prioridade em uma unica thread. Veja Se¸˜o 5.# onde # ´ um n´mero unico se n˜o for fornecido. a --memlock Bloqueia o processo mysqld na mem´ria. a e o mysqld ir´ tentar repar´-la.. P´gina 374.. c --myisam-recover [=op¸~o[.MYD. P´gina 375.MYD’ como ‘nome_tabela_dia_hora. o mysqld ir´ conferir na abertura se a tabela est´ marcada como quea a brada ou se a tabela n˜o foi fechada corretamente. co ca Op¸˜o ca Descri¸˜o ca DEFAULT O mesmo que n˜o fornecer uma op¸˜o para --myisama ca recover.1.4 [Log bin´rio]. Se este for o caso e mysqld ir´ executar uma conferˆncia na tabela. Isto pode ajudar se vocˆ tiver um problema no qual o sistema operacional faz com que e o mysqld fa¸a a troca em disco.3 [Log de atualiza¸˜o]. Veja Se¸˜o 4.BAK’. FORCE ou QUICK. co e u ´ a Veja Se¸˜o 4. O log de atualiza¸˜o ca ca a ca est´obsoleto e ser´ removido no MySQL 5. Veja Se¸˜o 4. ca P´gina 378.0. Isto funciona somente se o seu sistema o suportar a chamada de sistema mklockall() (como no Solaris). BACKUP Se os dados da tabela foram alterados durante a recupera¸˜o. a a As seguintes op¸˜es afetam no funcionamento da repara¸˜o. A partir ca a a da vers˜o 5. Isto tamb´m pode ser feito usando {INSERT | e REPLACE | UPDATE | DELETE} LOW_PRIORITY . . ca --log-slow-queries[=arquivo] Log de todas as consultas que levam mais de long_query_time segundos de execu¸˜o para um arquivo. FORCE Execute a recupera¸˜o mesmo se perdermos mais de uma ca linha do arquivo .. que normalmente n˜o ´ uma boa id´ia por raz˜es a e e o de seguran¸a.10. Note que o uso desta op¸˜o exige que vocˆ c ca e execute o servidor como root.0.10. vocˆ deve usar o log bin´rio em a a e a seu lugar (--log-bin). a --log-update[=arquivo] Log de atualiza¸˜es para file. Se esta op¸˜o for e ca ca usada. ´ ca P´gina 445. Note que o padr˜o para a quantidade de informa¸˜o ca a ca registrada alterou no MySQL 4. Esta op¸˜o foi introduzida no MySQL 4. BACKUP.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 211 ativado). Vocˆ tamb´m pode configurar isto exe e plicitamente para "" se vocˆ deseja desabilitar esta op¸˜o. Se a tabela estiver corrompida.3.1. Veja as op¸˜es --log-long-format e co -log-long-format para mais detalhes. Por exemplo. nome do usu´rio e timestamp s˜o registrados para a a a consulta.op¸~o. usar --log-update apenar ligar´ o log bin´rio.2 [Bloqueio de tabelas].

Por favor. --help lista as vari´veis. Se este valor ´ 0 ent˜o o e a mysqld reservar´ max_connections*5 ou max_connections + table_cache*2 a (que ´ sempre ´ maior) n´mero de arquivos. u o -o.212 MySQL Technical Reference for Version 5.2 pode-se definir uma vari´vel diretamente com --variablea name=op¸~o e set-variable n˜o ´ mais preciso no arquivo de op¸˜es.1: • TIMESTAMP ´ retornado com uma string com o formato ’YYYY-MM-DD e HH:MM:SSS. P´gina 461. o MySQL ir´ adicionar uma a nota no log de erros. Veja Se¸˜o 5. Veja Se¸˜o 4.8.12. P´gina 129.5 [Atualizando a vers˜o 3.FORCE. P´gina 455.4 [SHOW VARIABLES]. Veja Se¸˜o 6. --port=. facilitando a atualiza¸˜o da vers˜o ca a 4.0. devem ser usadas as op¸˜es a ca a co BACKUP.20 para compatibilidade com alguns clientes muito antigos. vocˆ pode defin´ usando a op¸˜o de linha de comando e i-la ca --maximum-variable-name. ca a . P´gina 1070. ca P´gina 310. mas ele manter´ o arquivo de dados antigo como um a backup para que vocˆ possa examinar posteriormente o que aconteceu. --set-variable=name=value Fornece um valor para uma vari´vel.0 para 4.5. Se isto n˜o estiver configurado com 0. N´mero da porta para conex˜es TCP/IP.6 [SET OPTION]. -P. Se vocˆ desejar que a recupera¸˜o da maioria dos probe ca lemas n˜o tenha a interven¸˜o de algum usu´rio. ca a --pid-file=caminho Encaminha para o arquivo pid usado pelo mysqld_safe.5. a op¸˜o --new pode ser usada para fazer o servidor a ca se comportar como 4.2 [Tipos de colunas]. ca a --open-files-limit= Para alterar o n´mero de descritores de arquivos dispon´ u iveis para o mysqld. Esta op¸˜o est´ ca ca a dispon´ ivel apenas se o servidor est´ constru´ com a depura¸˜o habilitada. ca a a --one-thread Usa somente uma thread (para depura¸˜o sobre Linux). ca a No MySQL 4. P´gina 482.. a ido ca Veja Se¸˜o D.5.6. note que --set-variable=name=value e a -O name=value est˜o obsoletos desde o MySQL 4. Veja Se¸˜o 2.0.1 em certos aspectos.1 [Depurando o servidor]. A se¸˜o de sintonia dos parˆmetros do servidor inclui informa¸˜es a ca a co sobre como otimiz´-los.0.0. Vocˆ deve tentar aumentar isto se e e u e o mysqld lhe retornar o erro ’Too many open files’.. ca a e co Se vocˆ quiser restringir o valor m´ximo uma op¸˜o de inicializa¸˜o pode ser e a ca ca definida com SET. --old-protocol Utilize o protocolo 3. Isto ir´ for¸ar um reparo de uma tabela mesmo se alguns rega c istros forem apagados. Vocˆ a a e pode encontrar uma descri¸˜o completa para todas as vari´veis na se¸˜o ca a ca SHOW VARIABLES deste manual. -O. ent˜o o mysqld usar´ este valor para reservar a a a descritores de arquivos para usar com setrlimit(). a ca Veja Se¸˜o 5. Antes da tabela ser reparada automaticamente. e --new A partir da vers˜o 4.20].0-alpha QUICK N˜o confira as linhas na tabela se n˜o existir nenhum bloco a a apagado. apenas use --var=op¸~o.2 [Server parameters].

23 do MySQL pode ser usado REPAIR e CHECK para reparar/conferir a tabelas MyISAM. (Isto s´ ´ usado se vocˆ achar que encontrou um erro neste recurso).0. um usu´rio n˜o pode criar novos usu´rios com o comando a a a GRANT. P´gina 460. espa¸o em a o c disco e aumentar a velocidade de algumas opera¸˜es. a --skip-innodb Disabilita o uso de tabelas Innodb. mas pesquisa o servidor DNS em todas conex˜es. Veja Se¸˜o 1. Para usar isamchk ou myisamchk vocˆ deve a e desligar o servidor.1 [GRANT]. co --skip-external-locking (era --skip-locking) N˜o utilizar bloqueio de sistema. Ignore a op¸˜o DELAY_ e ca KEY_WRITE para todas as tabelas.0.4. a e ca P´gina 255.2 [Parˆmetros do servidor]. --safe-mode Salta alguns est´gios de otimiza¸˜o. co --skip-concurrent-insert Desliga a habilidade de selecionar e inserir ao mesmo tempo em tabelas MyISAM. Veja Se¸˜o 4.2 a e a esta op¸˜o esta obsoleta e n˜o faz nada (a op¸˜o est´ habilitada por padr˜o) ca a ca a a j´ que agora temos o privil´gio SHOW DATABASES. a ca --safe-show-database Com esta op¸˜o. se o usu´rio n˜o ter o privil´gio de INSERT na tabela mysql.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 213 Note que quando um valor ´ atribu´ a uma vari´vel.3 vocˆ deve usar –delay-key-write=OFF. oe e --skip-delay-key-write. Veja Se¸˜o 5. Isto d´ a ca a e a todos acesso pleno a todos os bancos de dados! (Vocˆ pode dizer a um servidor e em execu¸˜o para iniciar a usar as tabelas de permiss˜o novamente executando ca a mysqladmin flush-privileges ou mysqladmin reload. Isto ir´ economizar mem´ria. Perceba que na ca a Vers˜o 3. . Veja Se¸˜o 5. a --skip-grant-tables Esta op¸˜o faz com que o servidor n˜o use o sistema de privil´gio.5 a o ca [DNS]. o MySQL pode carrig´ e ido a i-lo automaticamente para permanecer dentro de uma faixa dada e tamb´m ajusta e o valor um pouco para corrigir para o algoritmo usado. Isto economizar´ mem´ria e pode aumentar a o a velocidade de algumas opera¸˜es. o comando SHOW DATABASES retorna apenas aqueles bancos de ca dados para os quais o usu´rio tem algum tipo de privil´gio. No MySQL 4. --skip-bdb Disabilita o uso de tabelas BDB. P´gina 8. a --safe-user-create Se isto estiver ativo.3 [Stability].5.) --skip-host-cache Nunca utiliza cache para nomes de m´quina para resolu¸˜es de nomes mais a co r´pidos.5.user ou a a e em alguma coluna desta tabela. ca a P´gina 455.2. Desde a vers˜o 4.

Esta op¸˜o tem efeitos diferentes o ca no Windows e Unix.2 [Links simb´licos no e o ca o Windows]. --skip-symbolic-links Habilita ou desabilita suporte a link simb´lico. significa que vocˆ pode ligar uma tabela o e MyISAM ou um arquivo de dados em outro dirt´rio com as op¸˜es INDEX o co DIRECTORY ou DATA DIRECTORY da instru¸˜o CREATE TABLE. P´gina 460.6. a . a menos que o usu´rio tenha a a privil´gio SHOW DATABASES. habilitar links simb´licos.1. Esta consistˆncia ´ muito lenta. P´gina 460. os arquivos para o qual o link simb´lico aponta tamb´m o e ser´ deletado/renomeado. Todos os valores da coluna Host nas a a a tabelas de permiss˜es devem conter n´meros IP ou localhost. a e a ca --skip-show-database N˜o permite o comando ’SHOW DATABASE’.1 [Depurando o ca ca servidor]. Esta op¸˜o ´ altamente recomene ca e dada para sistemas onde requisi¸˜es locais s˜o permitidas. ca --symbolic-links. todos os programas vere ificam a mem´ria por erros para cada opera¸˜o de aloca¸˜o e libera¸˜o de o ca ca ca mem´ria. Veja Se¸˜o 2.5 co a ca [DNS]. use --skip-symbolic-links em seu lugar.0-alpha --skip-name-resolve Nomes de m´quinas n˜o s˜o resolvidos. Esta op¸˜o ´ util quando vocˆ estiver a ca e ´ e executando o mysqld sob um depurador. poss´ a ivelmente erradas. a --skip-new N˜o utilizar rotinas novas.0. --skip-symlink Op¸˜o obsoleta a partir da 4. a --skip-safemalloc Se o MySQL ´ configurado com --with-debug=full. habilitar links simb´ ilicos lhe permite estabelecer um link simb´lico o a um diret´rio de banco de dadosi criando um arquivo directory.5.0. El alguns sistemas vocˆ tamb´m deve e e usar esta op¸˜o para conseguir um arquivo core. Veja Se¸˜o D. Veja Se¸˜o 5. P´gina 133. assim para o servidor vocˆ pode o e e e evit´-la.sym que o cont´m o caminho para o diret´rio real.214 MySQL Technical Reference for Version 5. quando vocˆ n˜o precisar dela usando a op¸˜o --skip-safemalloc. a No Unix. Toda intera¸˜o com mysqld deve ser feito a o ca atrav´s de named pipes ou sockets Unix.5 o u ca [DNS].13. P´gina 1070. e --skip-stack-trace N˜o gravar os rastreamentos de pilha. Veja Se¸˜o 5.5. No Windows. a --skip-networking N˜o escutair conex˜es TCP/IP. a --skip-thread-priority Desabilita o uso de prioridade das threads para um tempo de resposta mais r´pido. Se vocˆ deletar ca e ou renomear a tabela.

ANSI_QUOTES. Diversos valores de op¸˜es podem ter um efeito complexo porque eles s˜o atalhos co a para um grupo ou conjunto de valores. NO_TABLE_OPTIONS. o mysqldump inclui ´ do dump para habilitar NO_AUTO_VALUE_ON_ZERO.1.value[. resultando em uma tabela com conte´do u u diferente daquele do qual foi feito o dump. Normalmente. Este modo pode ser util se 0 o e u ´ foi armazenado em uma coluna AUTO_INCREMENT da tabela (isto n˜o ´ recomena e dado). eles fazer o servidor omitir da sa´ de SHOW CREATE ida TABLE aquelas partes da instru¸˜o que n˜o s˜o entendidas pelas vers˜es anterica a a o ores do MySQL ou outros servidores de banco de dados. DB2.IGNORE_SPACE. NO_DIR_IN_CREATE. NO_UNSIGNED_SUBTRACTION. MSSQL. ORACLE. NO_DIR_IN_CREATE.. porque este programa usa co e ida SHOW CREATE TABLE para obter a instru¸˜o de cria¸˜o da tabela a qual ele inclue ca ca em sua pr´pria sa´ o ida.) automaticamente a saida Diversos dos valores de op¸˜o s˜o usados para compatibilidade com outros servica a dores.. ANSI_QUOTES. o nome do pipe para usar em conex˜es locais o que usam named pipe (padr˜o MySQL).sock.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 215 --socket=path No Unix. ORACLE. Se especificado. ONLY_FULL_GROUP_BY. quando este valor se tornar dispon´ ivel. se vocˆ fizer um dumpo de uma tabela com mysqldump e e ent˜o recarreg´-la. vocˆ pode dizer ao servidor e para executar em modo ANSI usando a op¸˜o --sql-mode=ansi (ou --ansi).value. POSTGRESQL.23 e MySQL 4. MYSQL323. o arquivo socket para usar em conex˜es locais no lugar do padr˜o o a /tmp/mysql.PIPES_AS_CONCAT. a --sql-mode=value[.ONLY_FUL --transaction-isolation=SERIALIZABLE . IGNORE_SPACE. NO_AUTO_VALUE_ON_ZERO omite este comportamento para 0. NO_AUTO_VALUE_ON_ZERO. • O valor usado para compatibilidade com outros servidores s˜o DB2. No Windows. Por exemplo. ca que ´ equivalente a especificar ambas das seguintes op¸˜es de linhas de comando: e co --sql-mode=REAL_AS_FLOAT. Por exemplo. Usar estes valores de op¸˜es resulta em instru¸˜es CREATE TABLE que s˜o mais port´veis para usar co co a a com outros servidores: • Os valores NO_TABLE_OPTIONS.]] Os valores de op¸˜o pode ser qualquer combina¸˜o de: REAL_AS_FLOAT. O valor tamb´m e pode ficar vazio (--sql-mode="") se vocˆ desejar limp´-la.1. vocˆ gera a pr´xima sequˆncia de n´meros da coluna inserindo NULL e o e u ou 0 nela. NO_KEY_OPTIONS. MYSQL40. NO_FIELD_OPTIONS. normalmente o MySQL ira gerar uma nova sequˆncia de a a e n´meros quando encontrar valores 0. e POSTGRESQL. (A partir do MySQL 4. NO_FIELD_OPTIONS. Estas op¸˜es tamb´m afetam a sa´ do mysqldump.0. e NO_KEY_OPTIONS causam a omiss˜o da tabela de op¸˜es. ca ca PIPES_AS_CONCAT. e a NO_AUTO_VALUE_ON_ZERO afeta o tratamento de colunas AUTO_INCREMENT. ou ANSI. MAXDB. • Os valroes MYSQL323 e MYSQL40 s˜o para compatibilidade com o MySQL a 3. Habilitando NO_AUTO_VALUE_ON_ ZERO antes de recarregar o arquivo de dump soluciona este problema. a MSSQL. MAXDB. ou op¸˜es pertena co co centes a defini¸˜o de colunas ou ´ ca indices. assim apenas NULL gera a pr´xima sequˆncia de n´meros.

216 MySQL Technical Reference for Version 5. ca a Outros valores de “grupos” s˜o DB2.0.3. o Linux parece ter “perda” de mem´ria. NO_TABLE_OPTIONS. assim ´ recomendado que vocˆ coloque uma op¸˜o ca e e ca . e POSTGRESQL. Veja Se¸˜o 6.cnf’ a ca (fazendo o servidor executar como root. MSSQL.7. O ca e o e a servidor ir´ alterar o ID do usu´rio durante sua inicializa¸˜o. NO_FIELD_ a OPTIONS.6 [SET ca ca a ca TRANSACTION]. Eles ser˜o usados a de acordo com o m´todo round-robin.cnf’ s˜o processadas antes de uma co a op¸˜o de linha de comando. e NO_KEY_OPTIONS.1. MYSQL323. A op¸˜o --sql-mode foi adicionada no MySQL 3. NO_FIELD_OPTIONS.15. ANSI_QUOTES.56 e 4. a -t. esta op¸˜o aceita a ca diversos caminhos usados do modo round-robin. u co As op¸˜es em ‘/etc/my. DB2.1.23. Veja Se¸˜o 4. ORACLE. MSSQL.2 a ca [Security].) no Windows). NO_DIR_IN_CREATE foi adicionado a na vers˜o 4. veja co Se¸˜o 1.0. e -u. em vez de um unico nome ´ para cada novo arquivo. MAXDB. (“User” neste contexto se refere a conta de login do sistema. o --transaction-isolation={ READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE } Configura o n´ ivel de isola¸˜o da transa¸˜o padr˜o.0. A partir do MySQL 4. Com ca o comportamento antigo.23.) a o Esta op¸˜o ´ obrigat´ria quando o mysqld ´ iniciado como usu´rio root. a Esepcificar qualquer um dele ativa os valores PIPES_AS_CONCAT. --user=[nome_usu´rio | id_usu´rio] a a Executar o servidor mysqld como o usu´rio nome_usu´rio ou id_us´rio a a a (num´rica). POSTGRESQL. P´gina 230. P´gina 42.cnf’ e ‘datadir/my. j´ que ela ´ o a e alocada na cache de entrada do diret´rio em vez da cache de disco. o mysqld usa apenas a primeira op¸˜o ca --user especificada e produz um aviso se houver m´ltiplas op¸˜es --user. NO_KEY_OPTIONS. NO_AUTO_VALUE_ON_ZERO. a --temp-pool Usar esta op¸˜o far´ com que a maioria dos arquivos tempor´rios criados pelo ca a a servidor para usarem um pequeno conjunto de nomes.41. ORACLE. O valor NO_UNSIGNED_ ca SUBTRACTION foi adicionado na vers˜o 4.1. NO_TABLE_OPTIONS. MYSQL40.8. ivel ca ca Para mais informa¸˜es sobre executar o servidor em modo ANSI. IGNORE_SPACE. a A partir do MySQL 3. e ANSI foram adicionados na vers˜o 4. Isto ´ para contornar um problema no kernel do Linux e ao tratar com a cria¸˜o de muitos arquivos novos com nomes diferentes. n˜o e a um usu´rio MySQL listado na tabela de permiss˜es. Os caminhos devem ser separados por dois pontos (:) (ponto e v´ irgula (.0.0. fazendo com que a a ca ele seja executado como este usu´rio particular em vez de root. MAXDB. Ele pode ser o a util se o seu diret´rio padr˜o /tmp est´ em uma parti¸˜o muito pequena para ´ o a a ca armazenar tabelas tempor´rias. P´gina 618.12: Para evitar um poss´ furo na seguran¸a ivel c onde um usu´rio adiciona uma op¸˜o --user=root a algum arquivo ‘my.0-alpha Note que especificar o modo ANSI desta forma tamb´m tem o efeito de confige urar o n´ de isola¸˜o da transa¸˜o.2 [ANSI mode]. --tmpdir=path Caminho do diret´rio usado para criar os arquivos tempor´rios.

co No Windows.err. o ca ca a Esta op¸˜o se chamava --warnings. Se for utilizado o \. no arquivo . --log-warnings ´ Imprime avisos como Aborted connection.5.1. porque ele procura pelos arquivos antes de processar qualquer co argumento da linha de comando.2 Arquivo de Op¸˜es ‘my. P´gina 461. o MySQL lˆ op¸˜es padr˜es dos seguintes arquivos: e co o Nome do arquivo /etc/my. O MySQL tenta ler os arquivos de op¸˜es na ordem listada acima. ler as op¸˜es padr˜es de inicializa¸˜o para o servidor a co o ca e para clientes dos arquivos de op¸˜es. desde a vers˜o 3. Veja ca Se¸˜o 5. por exemplo.cnf’ co O MySQL pode.cnf Prop´sito o Op¸˜es globais co Op¸˜es globais co Windows-directory ´ a localiza¸˜o do seu diret´rio Windows. vocˆ deve especificar todos os caminhos no arquivo de op¸˜o com / e ca no lugar de \. Op¸˜es especificadas ca co .cnf’ ser´ encontrada antes de qualques outra op¸˜o -ca a ca user. A op¸˜o em ‘/etc/my.cnf Prop´sito o Op¸˜es globais co Op¸˜es espec´ co ificas do servidor O arquivo especificado com --defaultsextra-file=# Op¸˜es espec´ co ificas do usu´rio a DATADIR ´ o diret´rio de dados do MySQL (normalmente ‘/usr/local/mysql/data’ para e o instala¸˜es bin´rias ou ‘/usr/local/var’ para instala¸˜es de c´digo fonte). pois o \ ´ o caractere a a a e de escape no MySQL. o que assegura que o servidor n˜o execute como root. e que um aviso a seja exibido se qualquer outra op¸˜o --user for encontrada.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 217 --user em ‘/etc/my. --version Mostra a informa¸˜o da vers˜o e sai.ini C:\my. P´gina 914.2.cnf defaults-extra-file ~/. se vocˆ estiver usando a ca e replica¸˜o (vocˆ obter´ a mensagem sobre o que est´ acontecendo como falhas ca e a a de rede e reconex˜es). uma op¸˜o especificada em um arquivo lido depois recebe a precedˆncia co ca e sobre a mesma op¸˜o especificada em um arquivo lido anteriormente. ca Pode se alterar a maioria dos valores de um servidor em execu¸˜o com o comnado SET.10 [Erros de comunica¸˜o]. Se m´ltiplos arquivos de co u op¸˜es existirem.) Note que no Windows.cnf DATADIR/my. e ca o No Unix. ca a 4.. ser´ necess´rio digit´-lo duas vezes. ca -V. Perceba que este co a co o ´ o diret´rio que foi especificado na hora da configura¸˜o.22. o MySQL lˆ op¸˜es padr˜es dos seguintes arquivos: e co o Nome do Arquivo Windows-directory\my. ca a -W.cnf’ e especifique um outro valor diferente de root. Veja Se¸˜o A.6 [SET OPTION]. n˜o o especificado com --datadir e o ca a quando o mysqld inicia! (--datadir n˜o tem efeito sobre o local onde o servidor procura a por arquivos de op¸˜es.. E recomend´vel habilitar esta op¸˜o.my.

cnf). use nome=valor.0. a e a a Os seguintes programas suportam arquivos de op¸˜es: mysql. P´gina 1083. mysqlimport. mas apenas enviar´ um aviso: a ca a shell> mysql --loose-no-such-option Vocˆ pode usar arquivos de op¸˜es para especificar qualquer op¸˜o extendida que o programa e co ca suporte! Execute o programa com --help para obter uma lista das op¸˜es dispon´ co iveis. co c a Vocˆ pode usar a sequencia de escape ‘\b’. Na linha de comando. c .0. Desde a vers˜o 4.0-alpha na linha de comando recebem a precedˆncia sobre op¸˜es especificadas em qualquer arquivo e co de op¸˜es. e a [grupo] grupo ´ o nome do programa ou grupo para o qual vocˆ ir´ configurar as op¸˜es. Um arquivo de op¸˜es pode conter linhas na seguinte forma: co #comentario Linhas de coment´rio iniciam com o caractere ‘#’ ou ‘. e a ca op¸~o ca op¸~o=valor ca Isto ´ equivalente ` --op¸~o=valor na linha de comando. [mysqld-4. (Mas tenha certeza que o arquivo de op¸˜es s´ pode ser lido e gravado por vocˆ) co o e ´ Se vocˆ quiser criar op¸˜es que devem ser lidas por uma vers˜o especifica do servidor mysqld e co a vocˆ pode fazer isto com [mysqld-4. ca o a o Perceba que para op¸˜es e valores. e e a co Depois de uma linha de grupo. Op¸˜es co co a co especificadas na linha de comando ou nos arquivos de op¸˜o tem precendencia sobre valores ca nas vari´veis de ambiente. se o argumento de uma e op¸˜o conter um caracter de coment´rio. vocˆ pode usar o prefixo loose para op¸˜es de linha de comando a e co (ou op¸˜es no my. ca a set-variable = nome=valor Isto ´ equivalente ` --set-variable nome=valor na linha de comando. mysqldump. Linhas vazias s˜o ignoradas. Se uma op¸˜o possui o prefixo loose. todos espa¸os em branco s˜o automaticamente apagados.0] new A nova op¸˜o acima s´ ser´ usada com o vers˜es 4.x do servidor MySQL. Em um co arquivo de op¸˜o. mysqld. mysqladmin. e a Por favor. ca O grupo [client] permite especificar op¸˜es para todos clientes MySQL (n˜o o mysqld).’. a a partir desta vers˜o os nomes das vari´veis de programa podem ser usados como a a nome de op¸˜es. ‘\r’. co a Este ´ o grupo perfeito de se usar para espeficar a senha que vocˆ usa para conectar ao e e servidor.218 MySQL Technical Reference for Version 5.0]. myisamchk. use apenas --nome=valor. o programa que a ler n˜o co ca a finalizar´ com um erro se uma op¸˜o for desconhecida. ‘\\’ e ‘\s’ no valor da string (‘\s’ e == espa¸o). e myisampack. mysql. qualquer linha de op¸~o ou set-variable s˜o ca a referentes ao grupo at´ o final do arquivo de op¸˜es ou outra linha de in´ de e co icio grupo. note que e a ca vocˆ deve colocar um argumento entre aspas duplas. Por favor. mysqld_ co safe. Isto ´ equivalente ` --op¸~o na linha de comando.0. notem que --set-variable est´ obsoleto desde o MySQL 4. Algumas op¸˜es podem ser especificadas usando vari´veis de ambiente.server. ‘\t’. mysqlcheck. Veja Apˆndice E [Vari´veis de ambiente]. ‘\n’. mysqlshow.0.2.1] etc: e [mysqld-4. Coment´rios podem a a iniciar no meio de uma linha tamb´m.

ca a Perceba que as op¸˜es acima devem vir primeiro na linha de comando para funcionar.my. grandes e enormes. m´dios.cnf’ para o o experimentar.sock [mysqld] port=3306 socket=/tmp/mysql. Atualmente o ca existem arquivos de configura¸˜o para sistemas pequenos. op¸˜es no grupo apropriado) antes co e co . Notas para desenvolvedores: O tratamento de arquivos de op¸˜es ´ implementado simplesco e mente processando todos as op¸˜es coincidentes (isto ´. Se vocˆ tem uma distribui¸˜o o e ca bin´ria olhe no diret´rio de instala¸˜o ‘DIR/support-file’.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 219 Aqui est´ um t´ a ipico arquivo de op¸˜es globais. Todos os programas MySQL que suportam arquivos de op¸˜es aceitam op¸˜es: co co Op¸˜o ca Descri¸˜o ca --no-defaults N˜o lˆ nenhum arquivo de op¸˜es. Vocˆ ca e e pode copiar ‘my-xxxx. vocˆ encontrar´ arquivos de exemplo de configura¸˜o e ca e a ca chamados ‘my-xxxx. co --defaults-file=caminho-paraUtilize somente o arquivo de configura¸˜o esca arquivo-padr~o a pec´ ificado. onde DIR ´ o caminho para a o ca e o diret´rio de instala¸˜o (normalmente ‘C:\mysql’ ou ‘/usr/local/mysql’).cnf’ para seu diret´rio home (renomeie a c´pia para ‘. --defaults-extra-file=caminhoLeia este arquivo de configura¸˜o depois do arca para-arquivo-padr~o a quivo de configura¸˜o global mas antes do arca quivo de configura¸˜o do usu´rio. co [client] port=3306 socket=/tmp/mysql. com co exce¸˜o que --print-defaults deve ser usado logo depois dos comandos --defaults-file ca ou --defaults-extra-file.cnf’ no diret´rio ‘support-files’.sock set-variable = key_buffer_size=16M set-variable = max_allowed_packet=1M [mysqldump] quick Aqui est´ um t´ a ipico arquivo de op¸˜es do usu´rio co a [client] # A senha seguinte ser´ enviada para todos clientes MySQL a password="minha_senha" [mysql] no-auto-rehash set-variable = connect_timeout=2 [mysqlhotcopy] interactive-timeout Se vocˆ tem uma distribui¸˜o fonte. a e co --print-defaults Imprima o nome do programa e todas op¸˜es.

Ou vocˆ pode ca a ca ca e desejar dar acesso a diferentes usu´rios em diferentes servidores mysqld gerenciados por a eles mesmos. (Por exemplo. Verifique o co e o c´digo fonte de qualquer um dos clientes MySQL padr˜o para ver como fazer isto. --socket controla o caminho u o ´ do arquivo de socket no Unix e o nome do named pipe no Windows. P´gina 208 e co ca a Se¸˜o 4. Isto funciona bem para programas que usam a ultima instˆncia de uma op¸˜o que ´ especificada diversas vezes. --pid-file o indice o nome do arquivo no qual o Unix gravar a ID do seu processo. Veja Se¸˜o 4. novo no MySQL 4. cada servidor deve ter valores u ´ a unicos para diversos parˆmetros operacionais.0-alpha de qualquer argumento da linha de comando.2 [Option files].1. (E necess´rio nomes de a pipes distintos no Windows apenas para aqueles servidores que suportam conex˜o named a pipes. Vocˆ pode desejar testar uma nova vers˜o do MySQL enquanto a a e a deixa a sua instala¸˜o da vers˜o de produ¸˜o existente sem perturba¸˜o. Isto deve ser configurado na linha de co´ a mando ou em arquivos de op¸˜es.sock --no-auto-rehash 4. P´gina 217.1) • --pid-file=path (apenas Unix) --port controla o n´mero da porta para conex˜es TCP/IP.1. o a Nos scripts shell vocˆ pode usar o comando ‘my_print_defaults’ para analisar os arquivos e de op¸˜o.220 MySQL Technical Reference for Version 5. vocˆ pode seu um provedor de servi¸os de internet que quer e c fornecer instala¸˜es independentes do MySQL para clientes diferentes).1 [Command-line options]. ca a Pelo menos as seguintes op¸˜es devem ser diferente para cada servidor: co • --port=port_num • --socket=path • --shared-memory-base-name (apenas Windows. Se vocˆ tem um pro´ a ca e e grama antigo que trata op¸˜es especificadas v´rias vezes desta forma mas n˜o lˆ arquivos co a a e de op¸˜es. vocˆ s´ precisa adicionar duas linhas para lhe dar esta capacidade.2 Executando M´ ltiplos MySQL Servers na Mesma u M´quina a Em alguns casos vocˆ pode precisar de executar m´ltiplos servidores mysqld executando e u na mesma m´quina. Se vocˆ usar as seguintes op¸˜es. O seguinte exemplo mostar a sa´ que my_print_defaults pode produzir ca ida quando quando pedido para mostrar as op¸˜es encontradas nos grupos [client] e [mysql]: co shell> my_print_defaults client mysql --port=3306 --socket=/tmp/mysql.) --shared-memory-base-name designa o nome da mem´ria compartilhada por um servidor o Windows para permitir que o cliente se conecte via mem´ria compartilhada. elas deve ser diferentes para cada servidor: e co • --log=path • --log-bin=path • --log-update=path .0. co Para executar m´ltiplos servidores em uma unica m´quina.

aquelas co op¸˜es que devem ser unicas para ele. A solu¸˜o melhor ´ ter um computador com um sistema operacional que manipule ca e threads de forma eficiente threads e tenha diversas CPUs nele. P´gina 217. Sen˜o. e vocˆ precisa especificar apenas as ca e op¸˜es --socket e --port para o mysqld_safe.2 [Option files]. cada servidor tamb´m deve usar um diret´rio de dados diferentes. ´ normalmente uma MA IDEIA! e • O primeiro problema ´ que o NFS se tornar´ um gargalo. suponha que vocˆ instalou a vers˜o bin´ria do MySQL (arquivos ‘. se vocˆ precisa executar m´ltiplos servidores em uma base mais permanente. Ele e a n˜o se destina para este tipo de uso.1.tar’) e a a em diferentes locais. No a co entanto. o servidores podem a ´ a tentar gravar no mesmo arquivo de log. assim vocˆ pode iniciar o servidor usando o comando . Por exempo. ´ poss´ co e ivel iniciar servidores adicionais configurando vari´veis de ambiente ou especificando as op¸˜es de linha de comando apropriada. ca AVISO: Normalmente vocˆ nunca deve ter dois servidores que atualizam dados no mesmo e banco de dados! Isto pode levar a supresas inesperadas se seu o seu sistema operacionaln˜o a suporta lock de sistema a prova de falhas. que ´ e o e especificado usando a op¸˜o --datadir=path. mysqld_safe determinar´ a o ca a op¸˜o --basedir apropriada para passar para mysqld. vocˆ usar as op¸˜es apropriadas para especificar os e co nomes dos arquivos de log que s˜o unicos em cada servidor. Se vocˆ tiver m´ltiplas instala¸˜es do MySQL em diferentes locais. Permitir v´rios servidores MySQL acessarem um diret´rio de a o ´ ´ dados comum sobre NFS. Veja Se¸˜o 4. em todas as situa¸˜es. Este aviso contra o compartilhamento de arquivos de dados entre servidores tamb´m se e aplica em um ambeinte NFS. vocˆ tamb´m pode especificar as seguinte op¸˜es difere e e co entemente para cada servidor para distribuir a carga entre v´rios discos f´ a isicos: • --tmpdir=path • --bdb-tmpdir=path Normalmente. c co Facilite a sua vida: esque¸a sobre compartilhar um diret´rio de dados entre servidores sobre c o NFS.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 221 • --log-error=path • --log-isam=path • --bdb-logdir=path Se vocˆ quiser mais desempenho. para cada servidor. a • Outro risco com NFS ´ que vocˆ ter´ que conseguir um modo de se certificar que dois e e a ou mais servidores n˜o est˜o interferindo uns com os outros. normalemente vocˆ pode e u co e especificar o diret´rio de instala¸˜o base de cada servidor com a op¸˜o --basedir=caminho o ca ca para fazer que cada servidor use diferentes diret´rios de dados. mas no momento n˜o existe nenhuma plataforma e a que fara o locck 100% de seguran¸a. tornando o sistema lento. Normalmente o lock de a a arquivo ´ tratado pelo daemon lockd. isto pode provocar surpresas indesej´veis! Se a (apesar deste aviso) vocˆ executar diversos servidores usando o mesmo diret´rio de dados e o e eles tiverem com o log habilitado. as unicas outras op¸˜es que vocˆ precisa especificar s˜o as op¸˜es --socket e -´ co e a co port. ser´ e u a mais coonveniente usar os arquivos de op¸˜es para especificar.) a a ca o Neste caso. co Como discutido nas se¸˜es a seguir. co ´ ca a ./bin/mysqld_ e safe sob o diret´rio base correspondente de cada instala¸˜o. arquivos de log e arquivos o PID. (O padr˜o para todos estes valores s˜o determinados em rela¸˜o ao diret´rio base.

e mysqld-max na porta 3308 com um diret´rio de dados de ‘C:\mydata2’.) a 4. crie um arquivo chamado co ‘C:\my-opts1.cnf’ que se pare¸a com isto: c [mysqld] datadir = C:/mydata2 port = 3308 Ent˜o inicie cada servidor com seus pr´prios arquivos de op¸˜o: a o ca shell> mysqld --defaults-file=C:\my-opts1.0-alpha 4. vocˆ pode especificar a a e ´ mais conveniente colocar op¸˜o apropriada na linha de comando ou no arquivo de op¸˜es. assim vocˆ precisar´ enviar estes dois coa e a mandos em janelas de console separadas. o Para conseguir isto. (Estas op¸˜es s˜o descritas em Se¸˜o 4. Instru¸˜es gerais sobre a execuc˜o de servic a co a dores MySQL a partir da linha de comando ou como servi¸os s˜o dados em Se¸˜o 2. P´gina 133. Para fazer isto. P´gina 220. o arquivo ‘C:\my-opts1.2 [Multiple o co a ca servers].6.cnf (No NT. crie uma arquivo de op¸˜o para cada co ca ca servidor e mostre ao servidor o nome do arquivo com a op¸˜o --defaults-file quando ca vocˆ execut´-lo.cnf’ que se pare¸a com isto: c [mysqld] datadir = C:/mydata1 port = 3307 Crie um segundo arquivo chamado ‘C:\my-opts2.1 c a ca [Windows].cnf shell> mysqld-max --defaults-file=C:\my-opts2. e a Suponha que vocˆ queira executar o mysqld na porta 3307 com um diret´rio de dados de e o ‘C:\mydata1’. (Cada servidor que suporta conex˜es named pipes deve ter um nome unico). como o diret´rio de dados. Em sistemas a baseados no Windows NT.2.0. Por exemplo. cada um com o parˆmetro operacional apropriado. Esta se¸˜o descreve como se certificar de que vocˆ inicioou cada a ca e servidor com valores diferentes para aquelas op¸˜es de inicializa¸˜o que devem ser unicas co ca por servidor.222 MySQL Technical Reference for Version 5.1.) Para desligar o servidor. use os servidores mysqld-nt ou e e o mysqld-max-nt e especifique as op¸˜o que habilitem o named pipe e especifique os seus ca nomes. Por o ´ exemplo. a Se vocˆ tamb´m quiser permitir conex˜es named pipe. o servidor iniciar´ em segundo plano.1 Iniciando M´ ltiplos Servidores na Linha de Comando u Para iniciar v´rios servidores manualmente na linha de comando.2. crie dois arquivos de op¸˜es. vocˆ deve conectar a porta apropriada: e shell> mysqladmin --port=3307 shutdown shell> mysqladmin --port=3308 shutdown Servidores configurados como descrito permitir´ que clientes se conectem por TCP/IP.cnf’ pode ser escrito da seguinte maneira: . E ca co as op¸˜es em um arquivo de op¸˜o. vocˆ tamb´m tem a op¸˜o de instalar v´rios servidores como e e ca a servi¸os Windows e execut´-los deste modo.1 Executando M´ ltiplos Servidores no Windows u Vocˆ pode executar m´ltiplos servidor no Windows iniciando-os manualmente a partir e u da linha de comando.

17 antes de atualiz´-lo. Antes de tentar qualquer uma delas co esteja certo de que vocˆ desligou e removeu qualquer servi¸o MySQL existente primeiro.8 e o grupo [mysqld2] para o MySQL 4.17’. a ´ Para as seguintes instru¸˜es.2.2 Iniciando M´ ltiplos Servidores Como Servi¸os u c Em sistemas baseados no NT.0. um servidor MySQL pode ser executado como um servi¸o c Windows. e c • Especifique as op¸˜es para todos os servi¸os em um dos arquivos de op¸˜es padr˜o. o servidor e ca c ignora o arquivo de op¸˜es padr˜o e lˆ as op¸˜es apenas do grupo [mysqld] do arquivo co a e co chamado. As ca e a c seguintes instru¸˜es descrevem alguns exemplos.8 usando o nome de servi¸o [mysqld1] e o mysqldc nt 4.0. Suponha que vocˆ c e queira executar o mysqld-nt 4. o servidor usa o nome padr˜o do servi¸o e a c a c (MySQL) e o servidor lˆ as op¸˜es do grupo [mysqld] no arquivo de op¸˜es padr˜o. controle e remo¸˜o de um unico servi¸o MySQL ca ca ´ c est´ descrito em Se¸˜o 2.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 223 [mysqld] datadir = C:/mydata1 port = 3307 enable-named-pipe socket = mypipe1 Est˜o inicie o servidor desta forma: a shell> mysqld-nt --defaults-file=C:\my-opts1.2.8 como seu servidor de produ¸˜o. use um nome de servi¸o diferente para cada servidor.0.0. vocˆ pode instalar v´rios servidores como servi¸os.14. vocˆ e pode configurar o ‘C:\my.1. c e co ca a • Se vocˆ especificar uma op¸˜o --defaults-file depois do nome do servi¸o.0.) a ca a ´ Os seguintes principios s˜o relevantes ao instalr um servi¸o MySQL com a op¸˜o --install: a c ca • Se vocˆ n˜o especificar o nome do servi¸o. co c co a Para fazer isto.1. Este princ´ ipios tamb´m se aplicam se vocˆ intalar um servidor usando a op¸˜o --installe e ca manual. P´gina 66. Neste caso vocˆ pode usar o grupo c e [mysqld1] para o 4. Por exemplo. e co co a • Se vocˆ especificar um nome de servi¸o depois da op¸˜o --install. O procedimento para instala¸˜o.0. a ca a A partir do MySQL 4. mas queira testar o 4.1. o servidor ignora e c ca o grupo de op¸˜o [mysqld] e lˆ as op¸˜es do grupo que tem o mesmo nome que o ca e co servi¸o.7 [NT start]. e a c vocˆ deve ter certeza de que cada servidor usa um nome de servi¸o diferente junto com e c todos os outros parˆmetros que devem ser unico por servidor.cnf ‘C:\my-opts2. Baseado na informa¸˜o anterior. respectivamente. O servidor lˆ as op¸˜es do arquivo de op¸˜o padr˜o. Neste caso. assuma que vocˆ queira executar o servidor mysqld-nt a co e partir de duas vers˜es diferentes do MySQL que est´ instalado em ‘C:\mysql-4.cnf’ desta forma: # op¸~es para o servi¸o mysqld1 co c [mysqld1] .17 usando o nome de servi¸o mysqld2.0. vocˆ tem diversos de configurar v´rios servi¸os.8’ e o a ‘C:\mysql-4. 4.cnf’ seria modificado de forma parecida para uso com o segundo servidor.0.0. (Este pode ser o caso se vocˆ estiver executando a e vers˜o 4.

0.0. crie um arco quivo ‘C:\my-opts1. todos os servidores co a a lˆem o grupo [mysqld] se eles lˆem o arquivo de op¸˜es padr˜o.17.0.8 port = 3307 enable-named-pipe socket = mypipe1 Para o mysqld-nt 4.0. ou use NET START com o nome c c de servi¸o apropriado: c shell> NET START mysqld1 shell> NET START mysqld2 Para parar os servi¸os. c c • Especifique as op¸˜es para cada servidor em arquivos separados e use --defaultsco file quando instalar os servi¸os para dizer para cada servidor que arquivo usar.cnf’ que se pare¸a com: c [mysqld] basedir = C:/mysql-4.17\bin\mysqld-nt --install mysqld2 Para iniciar os servi¸os. e um grupo de op¸˜o co c ca com o nome de cada servi¸o para o uso do servidor com aquele nome de servi¸o. ou use NET STOP com o mesmo c c nome de servi¸o. Isto permite que vocˆ use o grupo [mysqld] c e para op¸˜es que devam ser usadas por todos os servi¸os MySQL. A partir da vers˜o 4. use o gerenciador de servi¸os.0.17.17 port = 3308 enable-named-pipe socket = mypipe2 Instale os servi¸os como a seguir.0. co Com esta abordagem.0-alpha basedir = C:/mysql-4.0. c shell> NET STOP mysqld1 shell> NET STOP mysqld2 Nota: Antes do MySQL 4. Neste c caso.8.17 port = 3308 . usando o caminho completo para o servidor para c assegurar que o Windows registra o programa execut´vel correto para cada servi¸o: a c shell> C:\mysql-4.0.0.8 port = 3307 enable-named-pipe socket = mypipe1 # op¸~es para o servi¸o mysql2 co c [mysqld2] basedir = C:/mysql-4.17.8\bin\mysqld-nt --install mysqld1 shell> C:\mysql-4.0.0. para especificar as op¸˜es para o mysqld-nt 4.cnf’ que se pare¸a com: c [mysqld] basedir = C:/mysql-4. use o gerenciador de servi¸os. apenas um servidor instalado usando o nome de servi¸o c padr˜o (MySQL) ou instalado com um nome de servi¸o de mysqld ir´ ler o grupo a c a [mysqld] no arquivo de op¸˜es padr˜o. crie um arquivo ‘C:\my-opts2.224 MySQL Technical Reference for Version 5. mesmo de esles est˜o e e co a a instalados usando outro nome de servi¸o. cada arquivo deve listar as op¸˜es usando um grupo [mysqld].

0. c Para remover v´rios servi¸os. vocˆ pode dizer quais valores de op¸˜o n˜o ca e ca a usar ao configurar um servidor adicional.0. .17 Aqui n´mero_porta e nome_arquivo deve ser diferente que o n´mero da porta e o caminho u u do arquivo socket padr˜es e o valor --prefix deve especificar um diret´rio de instala¸˜o o o ca diferente daquele usado pelo servidor existente. vocˆ pode usar o seguinte e e comando para descobrir quaie parˆmetros operacionais ele est´ usando para diversas a a vari´veis importantes configur´veis. que automaticae o ca mente resulta em diferentes localiza¸˜es de diret´rios de dados. inclu´ a a indo o diret´rio base e o nome do socket: o shell> mysqladmin --host=host_name --port=port_number variables Com a informa¸˜o exibida por aquele comando. Tamb´m. Note que se vocˆ especificar “localhost” como o nome da m´quina.1 vocˆ tamb´m a a e e pode especificar o protocolo a ser usado com a op¸˜o --protocol={TCP | SOCKET | PIPE | ca MEMORY}.8\bin\mysqld-nt --install mysqld1 --defaults-file=C:\my-opts1. c e ca c Depois de instalarm.cnf shell> C:\mysql-4. assim cada um est´ escutando em diferentes interfaces de a rede. inicie e para os servi¸os do mesmo modo que no exemplo anterior. a 4./configure --with-tcp-port=port_number \ --with-unix-socket-path=nome_arquivo \ --prefix=/usr/local/mysql-4. arquivos log e arquivos PID co o para cada um dos seus servidores.2 Executando M´ ltiplos Servidores no Unix u O modo mais f´cil de executar diversos servidores no Unix ´ compil´-los com diferentes a e a portas TCP/IP e arquivos socket. Considere que um servidor existente est´ configurado para a porta e arquivo socket padr˜es.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 225 enable-named-pipe socket = mypipe2 Instale o servi¸o como indicado a seguir (digite cada comando em uma unica linha): c ´ shell> C:\mysql-4.17\bin\mysqld-nt --install mysqld2 --defaults-file=C:\my-opts2. No MySQL 4.0. mysqladmin ir´ por e a a padr˜o usar uma conex˜o sockets Unix em vez de TCP/IP. compilando em diferentes diret´rios bases para instala¸˜o. Vocˆ pode conferir o socket usado por qualquer servidor MySQL em execu¸˜o com este e ca comando: Se vocˆ tem um servidor MySQL escutando em uma porta dada.2.cnf Para usar uma op¸˜o --defaults-file quando instalar um servidor MySQL como um ca servi¸o. use mysqld --remove para cada um. especificando um nome a c de servi¸o depois da op¸˜o --remove se o servi¸o a ser removido tiver um nome difertente c ca c do padr˜o. a o Para configurar um novo servidor para ter parˆmetros operacionais diferentes. vocˆ deve anteceder a op¸˜o com o nome do servi¸o. use um coa mando configure assim: shell> .

o Para conex˜es TCP/IP.226 MySQL Technical Reference for Version 5.3 [mysqld_multi]. o . vocˆ tamb´m pode precisar especificar as op¸˜es --host e o e e co --port. passe uma op¸˜o o ca --datadir=caminho para o mysqld_safe. Um outro modo de conseguir este efeito ´ usar as vari´veis de ambiente para configurar o e a nome do socket e o n´mero da porta: u shell> shell> shell> shell> shell> MYSQL_UNIX_PORT=/tmp/mysqld-new. ou --protocol=memory para conectar via mem´ria compartilhada. Para outros tipos de conex˜es. ca a Veja 4.0. ou com --host=localhost --socket=nome_arquivo a para conectar a m´quina local via um socket Unix ou um named pipe do Windowes. O bom deste m´todo ´ e a e e que a configura¸˜o das vari´veis de ambiente se aplicar˜o a qualquer programa cliente que ca a a vocˆ chame da shell acima. ou uma op¸˜o -ca shared-memory-base-name para especificar o nome da mem´ria compartilhada. No Unix. e Para a execu¸˜o automatica do servidor. Tamb´m ´ poss´ especificar estes valores u e e ivel em tempo de execu¸˜o.0-alpha N˜o ´ necess´rio compilar um novo servidor MySQL apenas para iniciar com uma arquivo a e a socket ou n´mero de porta TCP/IP diferentes.sock MYSQL_TCP_PORT=3307 export MYSQL_UNIX_PORT MYSQL_TCP_PORT scripts/mysql_install_db bin/mysqld_safe & Este ´ um modo r´pido para iniciar um segundo servidor para teste.1. e a Se¸˜o 4. P´gina 334. seu script de inicializa¸˜o que ´ executado no ca ca e tempo de boot deve executar o seguinte comando uma vez para cada servidor com um caminmho apropriado do arquivo de op¸˜o para cada comando: ca mysqld_safe --defaults-file=path-to-option-file Cada arquivo de op¸˜o deve conter valores espec´ ca ificos para um dados servidor. P´gina 1083 inclue uma lista de outras vari´veis de e a a a ambiente que vocˆ pode usar e que afetam o mysqld. as conex˜es para estes clientes ser˜o automaticamente e o a direcionadas para o segundo servidor! Apˆndice E [Vari´veis de ambiente]. Um modo de fazˆ-lo ´ usando as op¸˜es de linha de comando: ca e e co shell> /path/to/mysqld_safe --socket=file_name --port=port_number Para usar outro diret´rio de banco de dados para o segundo servidor.3 Usando Programas Clientes em um Ambiente MultiServidor Quando vocˆ quiser conectar com um programa cliente a um servidor MySQL que est´ e a escutando diferentes interfaces de rede em vez daquelas compiladas em seu programa cliente. vocˆ pode precisar especificar uma op¸˜o o e ca --socket para definir um nome de socket ou named pipe name. -protocol=socket para conectar via socket Unix ou --protocol=pipe para conectar via named pipe. vocˆ pode conectar usando um dos seguintes m´todos: e e • Inicie o cliente com --host=nome_m´quina --port=n´mero_porta para conectar com a u TCP/IP a uma m´quina remota. o script mysqld_multi ´ outro modo de de iniciar v´rios servidores. a • No MySQL 4.2. inicie o cliente com --protocol=tcp para conectar via TCP/IP. Assim.8.

N˜o cobriremos todos os aspectos de a disponibilidade e tolerˆncia a falhas aqui. as mesmas id´ias podem ser e aplicadas para a maioria das aplica¸˜es. A pr´xima c e c a a o se¸˜o descreve como ele funciona. Se vocˆ e normalmente utiliza uma porta ou socket espec´ ifico.3.cnf’ co e em seu diret´rio home no Unix. a • Se vocˆ estiver usando o m´dulo Perl DBD::mysql vocˆ pode ler as op¸˜es dos arquivos e o e co de op¸˜es do MySQL.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 227 No Unix. Existe tamb´m o co a e algum suporte para conex˜es criptografadasSSL entre clientes MySQL e servidores. co ca P´gina 780.3 Detalhes Gerais de Seguran¸a e o Sistema de Privil´gio c e de Acesso do MySQL O MySQL tem um sistema de seguran¸a/privil´gios avan¸ado mas n˜o padr˜o.5. .2 [Perl DBI Class]. Se vocˆ conhece a senha listada na tabela user para um determinado usu´rio.login’. Por exemplo: co $dsn = "DBI:mysql:test. Veja Se¸˜o 4. Veja Se¸˜o 12.1 Seguran¸a Geral c Qualquer um usando o MySQL em um computador conectado ` internet deve ler esta se¸˜o a ca para evitar os erros de seguran¸a mais comuns.2 [Option files]. Isto ´ perigoso. a O MySQL utiliza a seguran¸a baseado em Listas de Controle de Acesso (ACL) para todas c conex˜es. Veja Se¸˜o 12. vocˆ pode especificar os argumentos de porta ou socket na e chamada de mysql_real_connect().1. ca 4." .1. ca a 4. e e P´gina 1083. P´gina 877. c Discutindo seguran¸a.mysql_read_default_group=client. consultas e outras opera¸˜es que um usu´rio pode tentar realizar. Veja Apˆndice E [Environment variables]. playback e denial of service. o ca a • Em um programa C. a • Especifique o socket e porta TCP/IP padr˜es no grupo [clients] de um arquivo de o op¸˜es. siga estes procedimentos sempre que poss´ ivel: • nunca conceda a algu´m (exceto ao usu´rio root do mysql) acesso ` tabela user no e a a banco de dados mysql!. Vocˆ tamb´m pode ter o programa lendo de um e e arquivo de op¸˜es chamando mysql_options(). $password). configure as vari´veis de ambiente MYSQL_UNIX_PORT e MYSQL_TCP_PORT para a apontar para o socket Unix e porta TCP/IP antes de iniciar seus clientes. assim eles ser˜o aplia a cados sempre quer vocˆ logar no sistema. vocˆ pode colocar os comandos e para configurar as vari´veis de ambiente no arquivo ‘. P´gina 217.cnf". e a vocˆ pode facilmente logar como este usu´rio se tiver acesso ` m´quina relacionada e a a a para aquela conta.cnf’ no WIndows ou o arquivo ‘. vocˆ pode usar ‘C:\my. n´s enfatizamos a a necessidade de proteger completamente o servic o dor (n˜o simplesmente o servidor MySQL) contra todos os tipos de ataques aplic´veis: a a eavesdropping.3 [C API functions]. $dbh = DBI->connect($dsn. A senha criptografada ´ a senha real no e e MySQL.my. $user. Por exemplo. altering. "mysql_read_default_file=/usr/local/mysql/data/my. co Quando executando o MySQL. V´rios o a dos conceitos discutidos aqui n˜o s˜o espec´ a a ificos do MySQL.

Outro m´todo seria usar “Mhall” que ´ obtido dos primeiros caracteres e e de cada palavra na frase “Mary has a litle lamb”.0. ca a − Utilize o comando SHOW GRANTS e confira para ver quem tem acesso a o que. ´ • N˜o escolha senhas de dicion´rios.228 MySQL Technical Reference for Version 5. Outra maneira simples para conferir se sua porta a a a do MySQL est´ aberta ou n˜o ´ tentar o seguinte comando de alguma m´quina a a e a remota. o intruso pode obter a lista completa de senhas e utiliz´-las. a a • N˜o confie em nenhum dado inclu´ a idos pelos seus usu´rios. a menos que vocˆ realmente tenha uma boa e raz˜o para mantˆ-la aberta. prestando aten¸˜o particularmente ao item co ca ca sobre configura¸˜o da senha do usu´rio root. Qualquer um pode conectar ca e ao seu servidor MySQL como o usu´rio root com privil´gios plenos! Revise as a e instru¸˜es de instala¸˜o do MySQL. Se vocˆ conseguir conectar com sucesso ao servidor sem e a solicita¸˜o de uma senha. e a c • Invista em um firewall. vocˆ tem problemas. Quando seu a computador fica comprometido. mas grandes falhas de seguran¸a ou perda de dados podem e c ocorrer como o resultado de hackers utilizando t´cnicas similares. DROP DATABASE mysql. Os comandos GRANT e REVOKE s˜o usados para controlar o acesso ao MySQL. a porta est´ aberta e deve ser e a a fechada no seu firewall ou roteador. Tenha certeza que sua aplica¸˜o ca e ca continua segura se um usu´rio entrar com algo do tipo “. a e a Checklist: − Tente mysql -u root. URLS ou qualquer aplica¸˜o que vocˆ construa. Checklist: − Tente examinar suas portas da Internet utilizando alguma ferramenta como o nmap. Eles podem tentar enganar a seu c´digo entrando com caracteres especiais ou sequencias de escape nos formul´rios o a Web. a e a tudo est´ bem. O MySQL utiliza a porta 3306 por padr˜o.0-alpha • Aprenda o sistema de controle de acessos do MySQL. SHA1() ou qualquer fun¸˜o de embaralhamento de a ca ca via unica. Em alguns casos as pessoas pensam que se um banco de dados cont´m somente e .”. Remova aqueles privil´gios que n˜o s˜o necess´rios utilizando o comando REVOKE. Nunca conceda privil´gios para todas as m´quinas. a Este ´ um exemplo extremo. a porta est´ bloqueada. e a a a • N˜o mantenha nenhuma senha de texto puro no seu banco de dados. Um erro comum ´ proteger somente as e e e strings. Muito melhor seria “duag98” que cont´m a e a mesma palavra ’fish mas digitada uma letra a esquerda em um teclado QWERTY convencional. a a a Mesmo senhas como “xfish98” n˜o sao boas. Isto ´ f´cil de lembrar e digitar. Tamb´m lembre de conferir dados num´ricos. Ele protege vocˆ de pelo menos 50% de todos os tipos de e exploits em qualquer software. mas e a dificulta que algu´m que n˜o a conhe¸a a advinhe. N˜o conceda mais privil´gios do que o a a e necess´rio. Utilize a fun¸˜o MD5(). se vocˆ n˜o estiver e e a preparado para eles. Esta porta n˜o deve ser acess´ a a ivel para m´quinas n˜o confi´veis. Coloque o MySQL atr´s do firewall ou em uma zona a desmilitarizada (DMZ). Se o telnet apenas parar ou a conex˜o for recusada. onde nome_m´quina ´ o nome da m´quina ou o endere¸o IP de seu servidor a e a c MySQL: shell> telnet nome_m´quina 3306 a Se vocˆ obter uma conex˜o e alguns caracteres. Existem programas especiais para quebr´-las.

espa¸os e s´ c imbolos especiais no lugar de n´mero nos u campos num´ricos. − Usu´rios do MySQL: a • Confira os modificadores escape e quote para consultas streams. Isto n˜o ´ verdade.0.9. • Tente inserir caracteres. No a a e m´ inimo ataques do tipo denial-of-service podem ser feitos nestes bancos de dados. Se vocˆ obter qualquer a e tipo de erro do MySQL. a ca . O MySQL automaticamente converte esta string para um n´mero e corta todos os s´ u imbolos n˜o-num´ricos dela. uma fun¸˜o mysql_escape_ ca ca string() est´ dispon´ e ´ baseada na fun¸˜o com o mesmo nome da API a ivel e ca C do MySQL. Sua aplica¸˜o deve removˆ-los antes de pass´-los para o e ca e a MySQL ou sua aplica¸˜o deve gerar um erro. • Tente modificar os tipos de dados nas URLs dinˆmicas de num´rico para a e caractere contendo caracteres dos exemplos anteriores. Estes dados s˜o acess´ a a iveis para todos que tenham o tempo e habilidade para intercept´-lo e us´-lo para seu prop´sito a a o pr´prio. a • Considere ter sua aplica¸˜o conectando ao banco de dados utilizando um ca usu´rio diferente doq ue o que ´ utilizado com prop´sitos administrativos. ele n˜o precisa ser protegido. investigue o problema imediatamente. Passar valores n˜o verificados ca a ao MySQL ´ extramente perigoso! e • Confira o tamanho dos dados antes de pass´-los ao MySQL. %23 (‘#’) e %27 a (‘’’) na URL. − Usu´rios do PHP: a • Confira a fun¸˜o addslashes(). Sua aplica¸˜o deve ser ca segura contra estes ataques e similares. a e Checklist: − Todas aplica¸˜es Web: co • Tente inserir ‘’’ e ‘"’ em todos seus formul´rios Web.23. No lugar. − Usu´rios do API C do MySQL: a • Confira a chamada API mysql_escape_string().Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 229 dados dispon´ iveis publicamente. O MySQL o suporta conex˜es SSL interno desde a vers˜o 3. • Tente modificar qualquer URL dinˆmica adicionando %22 (‘"’). A maneira mais simples para proteger deste tipo de ataque ´ usar ap´strofos em torno e o das contantes num´ricas: SELECT * FROM tabela WHERE ID=’234’ em vez de SELECT * e FROM table WHERE ID=234.3. O repasse de portas do SSH pode o a ser usado para criar um tunel criptografado (e com compress˜o) para a comunica¸˜o. utilize um protocolo de criptografia como o SSL ou SSH. − Usu´rios do Perl DBI: a e • Confira o m´todo quote() ou utilize aspas simples ou duplas. • N˜o transmita dados sem criptografia na Internet. No PHP 4. − Usu´rios do Java JDBC: a • Utilize um objeto PreparedStatement e aspas simples ou duplas. a e o N˜o forne¸a `s suas aplica¸˜es mais privil´gios de acesso do que elas necessia c a co e tam.

ssh. mysqld ir´ recusar a ca a execu¸˜o como root a menos que ele seja especificado diretamente usando a op¸˜o ca ca --user=root. Com isto.10 [Conex˜es seguras]. vocˆ deve usar um tunnel SSH para criptografar a a e a comunica¸˜o. vocˆ deve consultar um especialista em seguran¸a. porque nomes de usu´rio do MySQL n˜o tem nada a ver com nomes a a . Vocˆ pode encontrar e e um cliente ssh open source em http://www.22 e superiores) para tornar o tr´fico muito mais dificil a a a de decifrar.) Alerta: Se vocˆ n˜o ver dados n˜o significa sempre que esteja criptografado.0-alpha • Aprenda a usar os utilit´rios tcpdump e strings. Isto ´ um procedimento comum com aplica¸˜es a a e co cliente/servidor que o cliente pode especificar qualquer nome de usu´rio.0.2 Como Tornar o MySQL Seguro contra Crackers Quando vocˆ conectar a um servidor MySQL. a a e porque qualquer usu´rio com privil´gios FILE estar´ apto a criar arquivos como o root a e a (por exemplo.org. Vocˆ pode a e e tamb´m criar um novo usu´rio Unix mysql para tornar tudo mais seguro. vocˆ normalmente deve usar uma senha. e a a Se vocˆ necessita de alta seguran¸a. P´gina 269.src or dst port 3306 | strings (Isto funciona sobre Linux e deve funcionar com pequenas modifica¸˜es sob outros co sistemas. A e e senha n˜o ´ transmitida em texto puro sobre a conex˜o. • N˜o execute o daemon do MySQL como o usu´rio root do Unix.openssh.4. ca o a Para deixar um sistema MySQL seguro. Vocˆ pode a e alterar a senha de todos seus usu´rios editando o script mysql_install_db antes de a execut´-lo ou somente a senha para o usu´rio root do MySQL desta forma: a a shell> mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD(’nova_senha’) -> WHERE user=’root’. Se vocˆ se preocupa com isto. e um cliente ssh comercial em http://www. Isto ´ muito perigoso. vocˆ deve considerar as seguintes sugest˜es: e o • Utilize senhas para todos os usu´rios MySQL. ca Todas outras informa¸˜es s˜o transferidas como texto que podem ser lido por qualquer um co a que consiga ver a conex˜o. por´m o algor´ a e a e itimo de criptografica n˜o ´ muito forte e com algum esfor¸o um atacante engenhoso pode quebrar a senha se ele a e c conseguir capturar o tr´fego entre o cliente e o servidor. vocˆ pode obter uma conex˜o TCP/IP critografada entre e a um servidor MySQL e um cliente MySQL. vocˆ n˜o precisar´ alterar o usu´rio root a e a a a na tabela user. ~root/. Para deixar tudo ainda mais seguro vocˆ deve usar ssh. Se vocˆ e a e executar o mysqld como outro usu´rio Unix.bashrc). mysql> FLUSH PRIVILEGES. vocˆ tamb´m pode usar o suporte interno OpenSSL e e e Veja Se¸˜o 4.0. Lembre-se que qualquer um pode logar a como qualquer outra pessoa simplesmente com mysql -u outro_usu´rio nome_bd se a outro_usu´rio n˜o tiver senha.com. Para a maioria dos casos vocˆ a e pode conferir se o fluxo de dados do MySQL est´ ou n˜o criptografado utilizando um a a comando parecido com este: shell> tcpdump -l -i eth0 -w . e c e c 4.3. Para prevenir esta situa¸˜o.230 MySQL Technical Reference for Version 5. Se vocˆ estiver usando o MySQL 4. vocˆ pode usar o protocol de a e e compress˜o (No MySQL vers˜o 3. O mysqld pode ser executado como um usu´rio normal sem privil´gios. Se a conex˜o entre o cliente e o a a servidor passar por uma rede n˜o confi´vel.

server. P´gina 467. . assim e e qualquer um que tenha acesso ` escrita aos dados do diret´rio do mysqld podem apagar a o qualquer arquivo no sistema! Veja Se¸˜o 5. todos os e arquivos gerados com SELECT . usar LOAD DATA para carregar o arquivo ‘/etc/passwd’ em uma tabela. e n˜o se pode a a sobrescrever arquivos existentes. ca a Verfique se o usu´rio Unix que executa o mysqld ´ o unico usu´rio com privil´gios de a e ´ a e leitura/escrita nos diret´rios de bancos de dados. a a e portanto o usu´rio root do MySQL pode logar e verificar a atividade do servidor mesmo a se todas as conex˜es normais estiverem em uso.2 [Changing MySQL user]. o N˜o forne¸a o privil´gio PROCESS para todos os usu´rios. Qualquer usu´rio que possua a e a a este privil´gio pode gravar um arquivo em qualquer lugar no sistema de arquivos com e os privil´gios do daemon mysqld! Para tornar isto um pouco mais seguro.cnf’ no diret´rio de dados do servidor.3 Op¸˜es de Inicializa¸˜o para o mysqld em Rela¸˜o a co ca ca Seguran¸a. a a por exemplo.cnf’ ou o arquivo de op¸˜es ‘my. De qualquer forma.2 [Symbolic links to tables]. ca a N˜o suportar links simb´licos para tabelas (Isto pode ser desabilitado com a op¸˜o -a o ca skip-symlink. o N˜o conceda o privil´gio FILE a todos os usu´rios. P´gina 919. adicione uma linha a a user que especifica o nome de usu´rio para o grupo [mysqld] do arquivo de op¸˜es a co ‘/etc/my.1. Para maiores detalhes.3.. portanto qualquer usu´rio ca a que consiga executar este comando deve ser apto a ver se outro usu´rio entra com uma a consulta do tipo UPDATE user SET password=PASSWORD(’n~o_seguro’). c As seguintes op¸˜es do mysqld afetam a seguran¸a: co c --local-infile[=(0|1)] Se algu´m usa --local-infile=0 ent˜o n˜o de pode usar LOAD DATA LOCAL e a a INFILE. O privil´gio FILE pode tamb´m ser usado para ler qualquer arquivo acess´ para o e e ivel usu´rio Unix com o qual o servidor est´ sendo executado.3. que pode ent˜o ser lido com SELECT. vocˆ deve ter muito cuidado a a e ao criar entradas de concess˜o utilizando valores de nomes de m´quinas que contenham a a metacaractes! Se vocˆ deseja restrigir o n´mero de conex˜es para um unico usu´rio. vocˆ deve utilizar n´meros IP no lugar de nomes de e a e u m´quinas nas tabelas de permiss˜o. a 4. a Se vocˆ n˜o confia em seu DNS. vocˆ pode faze-lo e u o ´ a e configurando a vari´vel max_user_connections no mysqld. veja Se¸˜o A. INTO OUTFILE s˜o lidos por todos.. Isto ´ muito importante caso vocˆ execute o mysqld como root.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 231 • • • • • • de usu´rios Unix. Pode ocorrer abusos como. Para iniciar o mysqld como outro usu´rio Unix. Por co o exemplo: [mysqld] user=mysql Estas op¸˜es configuram o servidor para iniciar como o usu´rio designado quando vocˆ o co a e inicia manualmente ou usando mysqld_safe ou mysql. a O mysqld reserva uma conex˜o extra para usu´rios que tenham o privil´gio process. A sa´ de mysqladmin a c e a ida processlits mostra as consultas atualmente em execu¸˜o.6.

0.2 (4. adicionamos algumas novas op¸˜es co ´ para lidar com possiveis detalhes de seguran¸a junto ao LOAD DATA LOCAL. j´ que o aceesso pode agora ser concedido especificamente ca a com o privil´gio SHOW DATABASES. Se a a e vocˆ desejar fornecer a um usu´rio acesso para s´ criar novos usu´rios com e a o a privil´gios que o usu´rio tenha direito a conceder. vocˆ deve dar ao usu´rio o e a e a seguinte privil´gio: e mysql> GRANT INSERT(user) ON mysql.232 MySQL Technical Reference for Version 5. um usu´rio n˜o consegue criar novos usu´rios com o comando a a a GRANT. SHOW DATABASES retorna somente os bancos de dados nos quais ca o usu´rio tem algum tipo de privil´gio.0. o u --skip-networking N˜o permitir conex˜es TCP/IP sobre a rede. porque o pacote MIT-pthreads n˜o suporta sockets Unix.user.0. Todas as conex˜es para mysqld a o o ´ em sistemas que devem ser feitas via Sockets Unix.) --skip-name-resolve Nomes de m´quinas n˜o s˜o resolvidos.4.3.2 vocˆ n˜o deve mais pree a e a cisar desta op¸˜o. Isto ir´ assegurar que o usu´rio n˜o poder´ alterar nenhuma coluna de a a a a privil´gios diretamente. se o usu´rio n˜o tiver privil´gio de INSERT na tabela mysql.4 Detalhes de Seguran¸a com LOAD DATA LOCAL c No MySQL 3. Veja Se¸˜o 4.23.2 esta op¸˜o est´ a e a ca a obsoleta e n˜o faz nada (a op¸˜o est´ habilitada por padr˜o) j´ que agora temos a ca a a a o privil´gio SHOW DATABASES. A partir da vers˜o 4. Esta op¸˜o n˜o ´ possivel ca a e usam MIT-pthreads. e ca a --safe-user-create Se for habilitado. Isto d´ a ca e a todos os usu´rios acesso total a todos os bancos de dados! (Vocˆ pode dizer a a e um servidor em execu¸˜o para para uar as tabelas de permiss˜es executando ca o mysqladmin flush-privileges ou mysqladmin reload. mas tem que usar o comando GRANT para conceder e direitos para outros usu´rios. a --skip-show-database N˜o permite o comando SHOW DATABASES. P´gina 255. Todos os valores da coluna Host nas a a a tabelas de permiss˜es devem ser n´meros IP ou localhost. c ´ Exstem dois problemas possiveis com o suporte a este comando: Como a leitura deste arquivo ´ iniciada por um servidor. quando o cliente envia uma consulta a tabela.13 no Windows).1 [GRANT].0. A partie da vers˜o 4.user TO ’user’@’hostname’.49 e MySQL 4. a menos que o usu´rio tenha o a a privil´gio SHOW DATABASES. e 4.0-alpha --safe-show-database Com esta op¸˜o.0. um usu´rio a a poderia usar LOAD DATA LOCAL para ler qualquer arquivo no qual o processo do servidor web . a Em um ambiente web onde os clientes est˜o conectados a um servidor web. pode-se teoricamente criar um e servidor MySQL corrigido que poderia ler qualquer arquivo na m´quina cliente na qual o a usu´rio atual tenha acesso. a --skip-grant-tables Esta op¸˜o desabilita no servidor o uso do sistema de privil´gios.

P´gina 805. Por exemplo. se vocˆ tentar selecionar linha de uma tabela em um banco de dados ou e .6 Como o Sistema de Privil´gios Funciona e O sistema de privil´gios do MySQL garante que todos usu´rios possam fazer exatamente as e a opera¸˜es que lhe ´ permitido. No caso em que LOAD DATA LOCAL INFILE est´ disabilitado no servidor ou no cliente. permitindo a distin¸˜o de usu´rios em diferentes m´quinas que ca a a podem ter o mesmo nome: Vocˆ pode conceder a bill um conjunto de privil´gios para e e conex˜es de whitehouse. update e delete.com a O MySQL lida com isto. MYSQL_ a OPT_LOCAL_INFILE. 0) no cliente. todos os clientes e bibliotacas MySQL s˜o compilados com --enable-locala a infile.48 e anterior.3..3. Por e a e ca exemplo.23. sua identidade ´ co e e e determinada pela maquina de onde vocˆ conectou e o nome de usu´rio que vocˆ especificou. vocˆ a e receber´ a seguinte mensagem de erro (1148): a The used command is not allowed with this MySQL version 4.gov e um conjunto diferente de privil´gios para conex˜es de o e o microsoft. ivel Pode se desabilitar todos os comandos LOAD DATA LOCAL no servidor MySQL iniciando o mysqld com --local-infile=0. ou disabilitando com --local-infile=0. LOAD DATA LOCAL pode ser habilitado especificado a op¸˜o --local-infile[=1]. a e a • Est´gio 2: Assumindo que vocˆ pode conectar. ent˜o LOAD DATA LOCAL e a a ser´ disabilitado por todos os clientes.3. o usu´rio bill que conecta de whitehouse.. para ser compat´ com o MySQL 3.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 233 tenha acesso de leitura (assumindo que um usu´rio poderia executar qualquer comando no a servidor SQL).39 [mysql_options()].com. ca a Para o cliente de linha de comando mysql. a menos que se chame mysql_options(. o servidor verifica cada requisi¸˜o feita a e ca para saber se vocˆ tem ou n˜o privil´gios suficientes para realizar a opera¸˜o. 4. Existem dois arquivos separados para isto: Se vocˆ n˜o configurar o MySQL com --enable-local-infile.gov n˜o a a deve necessariamente ser a mesma pessoa que o usu´rio bill que conecta da microsoft. e a e O sistema concede privil´gios de acordo com sua identidade e com o que vocˆ deseja fazer. O controle de acesso do MySQL ´ composto de dois est´gios: e a • Est´gio 1: O servidor confere se vocˆ pode ter acesso ou n˜o. insert. Funcionalidades adicionais incluem a habilidade de ter um usu´rio anˆnimo e conceder a o privil´gio para fun¸˜es espec´ e co ificas do MySQL como em LOAD DATA INFILE e opera¸˜es adco ministrativas.5 O Que o Sistema de Privil´gios Faz e A fun¸˜o prim´ria do sistema de privil´gios do MySQL ´ autenticar um usu´rio a partir de ca a e e a uma determinada m´quina e associar este usu´rio com privil´gios a banco de dados como a a e como select. Quando vocˆ conecta a um servidor MySQL. Veja Se¸˜o 12. ca Por padr˜o.1. e e O MySQL considera tanto os nomes de m´quinas como os nomes de usu´rios porque existem a a poucas raz˜es para assumir que um determinado nome de usu´rio pertence a mesma pessoa o a em todo lugar na Internet.

234 MySQL Technical Reference for Version 5.3 [Privilege changes].0. Veja Se¸˜o 4. o servidor se certifica que vocˆ tem o privil´gio e e select para a tabela ou o privil´gio drop para o banco de dados. e Note que se os seus privil´gios s˜o alterados (tanto por vocˆ quanto por outro) enquanto e a e vocˆ est´ conectado.4. Os campos nestas tabelas de permiss˜o s˜o detalhados abaixo: a a Nome da Tabela user db host Campos Escopo Campos Privil´gio e de Host User Password Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Create_priv Drop_priv Grant_priv References_ priv Reload_priv Shutdown_ priv Process_priv File_priv Show_db_priv Super_priv Create_tmp_ table_priv Lock_tables_ priv Execute_priv Repl_slave_ priv Repl_client_ priv ssl_type ssl_cypher x509_issuer x509_cubject max_ questions Host Db User Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Create_priv Drop_priv Grant_priv References_ priv Host Db Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Create_priv Drop_priv Grant_priv References_ priv de Create_tmp_ table_priv Lock_tables_ priv Create_tmp_ table_priv Lock_tables_ priv . estas altera¸˜es n˜o ir˜o necessariamente ter efeito com a sus pr´xima e a co a a o consulta ou consultas. db e host no banco de dados mysql em ambos est´gios a do controle de acesso. P´gina 261 para maiores detalca a hes. O servidor utiliza as tabelas user.0-alpha apagar uma tabela do banco de dados.

a ca a Campos de escopo s˜o strings. o contexto e no qual a entrada se aplica. As tabelas tables_priv e columns_priv contem campos de escopo indicando as combina¸˜es de tabelas ou tabela/coluna para o qual cada entrada se aplica.22. O servidor combina as informa¸˜es de v´rias tabelas co co a de concess˜o para formar uma descri¸˜o completa dos privil´gios de um usu´rio. o e e Campos de escopo determinam o escopo de cada entrada nas tabelas. isto ´. De maneira similar. As regras a ca e a usadas para fazer isto s˜o descritas em Se¸˜o 4.gov’ e ’bob’ devem ser usados para autenticar conex˜es feitas o ao servidor por bob da m´quina thomas. uma entrada na tabela user com valores Host e User de ’thomas.loc.loc.gov.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 235 max_updates max_ connections No segundo est´gio do controle de acesso (verifica¸˜o da solicita¸˜o).loc. co Para prop´sitos de verifica¸˜o de acessos.gov para acessar o banco de dados a reports. o servidor pode. Os campos nestas tabelas s˜o mostrados abaixo: a Nome da tabela Campos escopop de tables_priv Host Db User Table_name de Table_priv Column_priv Timestamp Grantor columns_priv Host Db User Table_name Column_name Column_priv Timestamp Campos privil´gio e Outros campos Cada tabela de permiss˜es contˆm campos de escopo e campos de privil´gios.12 ou posterior. os valores padr˜o para a a cada ´ a string vazia: e Nome do Campo Host User Password Db Table_name Column_name Tipo CHAR(60) CHAR(16) CHAR(16) CHAR(64) CHAR(60) CHAR(60) (CHAR(60) para as tabelas tables_priv e columns_ priv) . uma entrada na a tabela db com campos Host. compara¸˜es de valores Host s˜o caso insensitivo.10 [Request access].3.gov’. ’bob’ e ’reports’ devem ser usados quando bob conecta da m´quina thomas. declaradas como mostrado abaixo. o ca co a valores User. Password. P´gina 243. isto ´.loc. Db e Table_name s˜o caso sensitivo. Valores Column_name s˜o caso a a insensitivo no MySQL vers˜o 3. e e e quais opera¸˜es podem ser realizadas. Por exemplo. User e Db de ’thomas. se a a ca ca solicita¸˜o involver tabelas. a Campos de privil´gios indicam os privil´gios concedidos por uma entrada na tabela. consultar adicionalmente as tabelas tables_priv e columns_ ca priv.

a • As tabelas tables_priv e columns_priv s˜o similares ` tabela db. ’Alter’ tables_priv Column_ ’Select’. Por exemplo. a a Este mecanismo ´ descrito com mais detalhes em Se¸˜o 4. e ca P´gina 243.236 MySQL Technical Reference for Version 5. ’Delete’. Ele n˜o ´ um privil´gio ade e oe a e e ministrativo. a e Nas tabelas tables_ e columns_priv. ’References’. o Para conex˜es permitidas. ’Insert’. ’Insert’.4. qualquer privil´gio concedido em uma tabela user indica o e o privil´gio global (superusu´rio) do usu´rio. ’Index’.’Y’) — cada um pode ter um valor de ’N’ ou ’Y’ e o valor padr˜o ´ ’N’. ’Grant’. De fato. mas sua habilidade para ler ou escrever arquivo no servidor ´ independtende e do banco de dados que vocˆ est´ acessando. portanto n˜o a existe raz˜o para listar tais privil´gios nas outras tabelas de permiss˜o. Os campos de privil´gios a e determinam quais opera¸˜es s˜o permitidas. P´gina 261. os campos de privil´gios s˜o declarados como campos e a SET: Nome de Nome do Poss´ iveis elementos do conjunto tabela campo tables_priv Table_ ’Select’.3 [Alter¸ao de co o ca c privil´gios]. quando ´ iniciado. • As tabelas db e host s˜o usadas juntas: a − Os campos de escopo da tabela db determinam quais usu´rios podem acessar dea terminados bancos de dados de m´quinas determinadas. priv ’Create’. Perceba que os privil´gios administrativos (RELOAD. todos campos de privil´gios s˜o declarados como e a ENUM(’N’. ’Update’. a se vocˆ deseja que um usu´rio esteja apto a usar um banco de dados a partir de e a diversas m´quinas em sua rede. ’Insert’. ent˜o popule a tabela Host com uma entrada para cada uma das m´quinas. co a − A tabela host ´ usada como uma extens˜o da tabela db quando vocˆ quer que e a e uma certa entrada na tabela db seja aplicada a diversas m´quinas.3. db e host. Isto ocorre porque opera¸˜es administrativas s˜o opera¸˜es no co a co pr´prio servidor e n˜o s˜o espec´ o a a ificas e n˜o espec´ a ificas dos bancos de dados. o servidor utiliza as tabelas de permiss˜es desta forma: o • Os campos de escopo da tabela user determinam quando permitir ou aceitar conex˜es. SHUTDOWN e etc) s˜o especificados soe a mente na tabela user. ’Drop’. priv ’References’ columns_ Column_ ’Select’. ’Update’. ca O privil´gio FILE tamb´m s´ ´ especificado na tabela user.0. priv priv ’References’ De maneira resumida. u o e Altera¸˜es nas tabelas de permiss˜es tem efeito como indicado em Se¸˜o 4. Estes privil´gios se aplicam a todos os e a a e bancos de dados no servidor. e a . deixe o campo Host vazio no registro da tabela a db. ’Update’.0-alpha Nas tabelas user.10 [Request access]. por´m s˜o mais a a e a ´ ´ finas: Elas se aplicam ao nivel de tabelas e colunas em vez do nivel dos bancos de dados. e a O servidor mysqld le o conte´do das tabelas de permiss˜es uma vez. somente a e a a tabela user necessita ser consultada para determinar se vocˆ pode ou n˜o realizar uma e a opera¸˜o administrativa.

O servidor MySQL lˆ o e conte´do destas tabelas quando ele inicia e sob as circunstˆncias indicadas em Se¸˜o 4. P´gina 230.3. db. e ca a Privil´gio e ALTER DELETE INDEX INSERT SELECT UPDATE CREATE DROP GRANT REFERENCES CREATE TEMPORARY TABLES EXECUTE FILE LOCK TABLES PROCESS RELOAD REPLICATION CLIENT REPLICATION SLAVE SHOW DATABASES Coluna Alter_priv Delete_priv Index_priv Insert_priv Select_priv Update_priv Create_priv Drop_priv Grant_priv References_ priv Create_tmp_ tabela_priv Execute_priv File_priv Lock_ tabelas_priv Process_priv Reload_priv Repl_client_ priv Repl_slave_ priv Show_db_priv Contexto tabelas tabelas tabelas tabelas tabelas tabelas banco de dados. host.3. Para ajuda no diagnostico de co e problemas.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 237 Quando vocˆ modifica o conte´do das tabelas de permiss˜es.12 [Access denied]. a Os nomes usados neste manual que se referem-se aos privil´gios fornecidos pelo MySQL e s˜o vistos abaixo juntos com o nome da coluna associada com cada privil´gio nas tabelas a e de permiss˜o e o contexto em que o privil´gio se aplica.3 u a ca [Privilege changes]. Informa¸˜es adicionais sobre o a e co significado de cada privil´gio pode ser encontrado em Se¸˜o 4. Perceba que o mysqlaccess confere o acesso usando somente as tabelas user. tabelas.7 Privil´gios Fornecidos pelo MySQL e Informa¸˜es sobre privil´gios de usu´rios s˜o armazenados nas tabelas user. P´gina 255. P´gina 251.3. Para conselhos sobre asssuntos ca a de seguran¸a. a e ivel 4.4. ou ´ indices banco de dados ou tabelas banco de dados ou tabelas banco de dados ou tabelas administra¸˜o do servidor ca administra¸˜o do servidor ca acessa a arquivos no servidor administra¸˜o do servidor ca administra¸˜o do servidor ca administra¸˜o do servidor ca administra¸˜o do servidor ca administra¸˜o do servidor ca administra¸˜o do servidor ca . Chame mysqlaccess com a op¸˜o --help para descobrir como ele ca ca funciona. c ca a Uma ferramenta de diagn´stico util ´ o script mysqlaccess.1 [GRANT]. ´ uma boa id´ia ter certeza que e u o e e suas altera¸˜es configuraram os privil´gios da forma desejada. db e host. Veja Se¸˜o 4. P´gina 261.2 [Security]. veja Se¸˜o 4. que Yves Carlier fornece na o ´ e distribui¸˜o MySQL. Ele n˜o confere privil´gios no n´ de tabelas ou colunas.4. co e a a tables_priv e columns_priv no banco de dados chamado mysql.

0. Vocˆ pode executar certas instru¸˜es SELECT mesmo sem permiss˜o para e co a acessar algum dos bancos de dados no servidor. e a este usu´rio pode remover o banco de dados no qual os privil´gios de acesso do MySQL a e est˜o armazenados! a O privil´gio GRANT permite a vocˆ fornecer a outros usu´rios os privil´gios que vocˆ mesmo e e a e e possui. flush-privileges ´ um sinˆnimo para reload. a a Os privil´gios restantes s˜o usados para opera¸˜es administrativas. que s˜o realizadas utie a co a lizando o programa mysqladmin. e O usu´rio tamb´m pode ler qualquer arquivo no diret´rio de banco de dados atual.238 MySQL Technical Reference for Version 5. co ca O comando kill mata threads no servidor. A tabela abaixo mostra quais comandos do mysqladmin cada privil´gio administrativos permite a execu¸˜o: e ca Privil´gio e RELOAD SHUTDOWN PROCESS SUPER Comandos permitidos reload. O privil´gio ALTER permite utilizar ALTER TABLE. vocˆ pode usar o cliente e mysql como uma simples calculadora: mysql> SELECT 1+1. e Os privil´gios CREATE e DROP permitem a cria¸˜o de novos bancos de dados e tabelas. se vocˆ deseja descarregar apenas os arquivos log. refresh.. alterar qualquer arquivo existente. Os outros comandos flush-* realizam fun¸˜es similares ao e o co refresh mas s˜o mais limitados no escopo e podem ser prefer´ a iveis em alguns casos.0-alpha SHUTDOWN SUPER Shutdown_ priv Super_priv administra¸˜o do servidor ca administra¸˜o do servidor ca Os privil´egios SELECT. Vocˆ sempre poder´ mostrar ou matar suas e a . O comando shutdown desliga o servidor. flush-privileges. Por exemplo. ca Perceba que se for concedido o privil´gio DROP no banco de dados mysql para algum usu´rio. no entanto. flush-hosts. O a e o usu´rio n˜o pode. O comando o refresh descarrega todas as tabelas e abre e fecha os arquivos de log. flush-logs ´ uma melhor e e escolha do que refresh. and flush-tables shutdown processlist kill O comando reload diz ao servidor para recarregar as tabelas de permiss˜es. Qualquer usu´rio que tenha este co a privil´gio pode ler ou gravar qualquer arquivo que o servidor MySQL possa ler ou escrever. Por exemplo. flushlogs. INSERT. O privil´gio FILE fornece permiss˜o para ler e escrever arquivos no servidor usando ine a stru¸˜es LOAD DATA INFILE e SELECT . INTO OUTFILE. O privil´gio INDEX permite a cria¸˜o ou remo¸˜o de ´ e ca ca indices. ou a e ca remo¸˜o de bancos de dados e tabelas existentes. mysql> SELECT PI()*2.. UPDATE e DELETE permitem realizar opera¸˜es em registros a co nas tabelas existentes em um banco de dados. Instru¸˜es SELECT necessitam do privil´gio select somente se ele precisar recuperar registros co e de uma tabela. O comando processlist mostra informa¸˜es sobre as threads em execu¸˜o no servidor.

a • Vocˆ n˜o pode especificar que um usu´rio tenha privil´gios para criar ou remover e a a e tabelas em um banco de dados. -u e -p s˜o --host=nome_m´quina. Vocˆ n˜o pode explicitamente comparar um usu´rio e depois recusar sua e a a conex˜o. o conte´do pode ser acessando utilizando u SELECT.) Existema algumas coisas que vocˆ n˜o pode fazer com o sistem de privil´gios do MySQL: e a e • Vocˆ n˜o pode especificar explicitamente que um determinado usu´rio deve ter acesso e a a negado.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 239 pr´prias threads. mas vocˆ precisa do privil´gio PROCESS para mostrar e privil´gio SUPER o e e e para matar threads iniciadas por outros usu´rios. Perceba que n˜o existe espa¸o entre -p ou --password= a a c e a senha que deve vir a seguir. a 4. seria poss´ logar ivel ivel ao servidor MySQL como outro usu´rio. a a e Se fosse poss´ acessar a coluna password do banco mysql. o mesmo usu´rio a e a pode trocar a senha por outra diferente. Veja Se¸˜o 4. ca • Privil´gios no banco de dados mysql pode ser utilizado para alterar senhas e outras e informa¸˜es de privil´gio de acesso. mas vocˆ deve ter muito cuidado ao conceder certos privil´gios: e e • O privil´gio grant permite aos usu´rios repassarem seus privil´gios a outros usu´rios. Veja Se¸˜o 4. • O privil´gio FILE pode ser usado com abuso para ler qualquer arquivo de leitura no e servidor em uma tabela de banco de dados. o cliente mysql pode ser iniciado desta forma a (argumentos opcionais s˜o colocandos entre ‘[’ e ‘]’): a shell> mysql [-h nome_m´quina] [-u nome_usu´rio] [-psua_senha] a a Formas alternativas das op¸˜es -h. --user=nome_ co a a usu´rio e --password=sua_senha. mas n˜o possa criar ou remover o banco de dados.8 Conectando ao Servidor MySQL Programas clientes do MySQL geralmente necessitam de parˆmetros de conex˜o quando a a vocˆ precisar acessar um servidor MySQL: a m´quina na qual vocˆ deseja se conectar. e • O privil´gio alter pode ser usado para subverter o sistema de privil´gios renomeando e e as tabelas.6.1.7 [KILL].user. terminando o servidor. e a e a Dois usu´rios com diferentes privil´gios e com o privil´gio grant conseguem combinar a e e seus privil´gios. a ca a ´ E uma boa id´ia em geral conceder privil´gios somente para aqueles usu´rios que necessitem e e a deles. seu e a e nome de usu´rio e sua senha. a O mysql utiliza valores padr˜o para parˆmetros de conex˜o que n˜o s˜o passados pela linha a a a a a de comando: .2 ca [Option files]. P´gina 302. NOTA: Especificar a senha na linha de comando n˜o ´ seguro! Qualquer usu´rio no seus a e a sistema pode saber sua senha digitando um comando do tipo: ps auxww. (Senhas s˜o armazenadas criptografadas. P´gina 217. Isto inclui o conte´do de todos os bancos de dados hospedados pelo servidor! u • O privil´gio SHUTDOWN pode ser utilizado para negar inteiramente servi¸os para oturos e c usu´rios. Por exemplo. a • O privil´gio PROCESS pode ser usado para ver o texto das consultas atualmente em e execu¸˜o. (Com privil´gios suficientes. portanto co e a um usu´rio malicioso n˜o pode simplesmente lˆ-las para saber as senhas em texto puro).3. incluindo as consultas que configuram ou alteram senhas.

1. A se¸˜o relevante do arquivo deve se parecer ca o ca com isto: [client] host=nome_m´quina a user=nome_usu´rio a password=senha_usu´rio a Veja Se¸˜o 4. O a a nome do usu´rio MySQL pode ser especificado utilizando USER (isto ´ somente para a e Windows). O servidor aceita a conex˜o somente se uma entrada na tabela a user coincidir com a m´quina.240 MySQL Technical Reference for Version 5. a a co Sua identidade ´ baseada em duas partes de informa¸˜o: e ca • A m´quina de onde est´ conectando a a • Seu nome de usu´rio no MySQL a A conferˆncia da identidade ´ feita utilizando os tres campos de escopo da tabela user e e (Host. e . a a e • O nome de usu´rio padr˜o ´ o mesmo nome do seu usu´rio no Unix. User e Password). ca a • Vocˆ pode especificar parˆmetros de conex˜o utilizando vari´veis de ambiente.3. Sen˜o. o servidor a e aceita a conex˜o. o ca e a a 4. a • Vocˆ pode utilizar os metacaracteres ‘%’ e ‘_’ no campo Host. a a Valores dos campos escopo na tabela user podem ser especificados como segue: • Um valor Host deve ser um nome de m´quina ou um n´mero IP ou ’localhost’ para a u indicar a m´quina local. P´gina 1083. Est´gio 1: Verifica¸˜o da Conex˜o a ca a Quando vocˆ tenta se conectar a um servidor MySQL. Em sistemas Unix.cnf’ no seu diret´rio home.2 [Option files]. O nome e a a a de m´quina pode ser especificado para o mysql utilizando a vari´vel MYSQL_HOST.0-alpha • O nome padr˜o da m´quina (hostname) ´ localhost. o servidor nega o acesso a vocˆ completamente. para um usu´rio Unix joe. nome de usu´rio e a senha fornecidos.my. Isto pode ser feito de v´rias maneiras: a • Podem ser especificados parˆmetros de conex˜o na se¸˜o [client] do arquivo de cona a ca figura¸˜o ‘. os seguintes comandos s˜o equivalentes: a a a shell> shell> shell> shell> mysql -h localhost -u joe mysql -h localhost mysql -u joe mysql Outros clientes MySQL comportam-se de forma similar. Veja Apˆndice E [Vari´veis de ambiente]. a e veja a pr´xima se¸˜o). vocˆ pode especificar valores padr˜es diferentes para serem usados e o quendo vocˆ faz uma conex˜o. a a e a • Nenhuma senha ´ fornecida se faltar o parˆmetro -p. A senha pode ser especificada utilizando MYSQL_PWD (mas isto n˜o ´ seguro. De outra forma. entra no est´gio 2 e espera por requisi¸i˜es. e a Ent˜o.9 Controle de Acesso.0. P´gina 217. assim vocˆ n˜o precisa digit´-los na linha de comando sempre e a e a a que chamar o programa cliente. o servidor aceita ou rejeita a conex˜o e a baseado na sua identidade e se pode ou n˜o verificar sua identidade fornecendo a senha a correta.

Se a entrada na tabela user que casa com uma nova conex˜o tem o nome do usu´rio em branco.0’. a conectando de thomas.192. Em vez disso.0 . n˜o forne¸a e a a e a c a usu´rios normais acesso de leitura para as tabelas no banco de dados mysql! A partir a da vers˜o 4.255.1. A senha criptografada ´ ent˜o usada quando o cliente/servidor estiver ca e a conferindo se a senha ´ correta (Isto ´ feito sem a senha criptografada sempre trafegando e e sobre a conex˜o. a a No exemplo acima todos IPs no Intervalo 192. conectando de qualquer m´quina do a dom´ inio loc.58.gov’ ’%’ ’%’ ’%.58. significa que o usu´rio deve conectar sem especificar uma senha.255 podem se conectar ao servidor MySQL.loc. para valores Host especificados como n´meros IP.58. em vez do nome que o cliente especificou.gov’ Valor user ’’ ’fred’ ’’ ’fred’ em Conex˜es casadas com o registro o Qualquer usu´rio. a o a Isto significa que um nome de usu´rio em branco ´ usado para todos as verifica¸˜es de a e co acessos durante a conex˜o. Isto permitir´ que todos a se conectarem a partir de determinado IP cuja condi¸˜o a ca seguinte seja verdadeira: IP_usu´rio & m´scara_rede = ip_maquina. a • Um valor Host em branco significa que o privil´gio deve ser adicionado com a entrada e na tabela host que coincide com o nome de m´quina fornecido. o usu´rio ´ considerado como a a a e um usu´rio anˆnimo (o usu´rio sem nome). a a senha fornecida por um usu´rio que est´ tentando se conectar ´ criptografada (utilizando a a a e fun¸˜o PASSWORD()).gov fred. e Os exemplos abaixo mostram v´rias combina¸˜es de valores de Host e User nos registros a co da tabela user aplicando a novas conex˜es: o Valor em host ’thomas.23. conectando a partir de a qualquer m´quina a fred. O que n˜o significa que qualquer senha possa a ser usada.197.gov . durante o est´gio 2).255. vocˆ a u e pode especificar uma m´scara de rede indicando quantos bits de endere¸o ser˜o usados a c a para o n´mero da rede. conectando a partir de qualquer m´quina a Qualquer usu´rio. mas vocˆ pode especificar um valor a a e em branco.197. que combina com qualquer nome.197.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 241 • Um valor Host de ’%’ coincide com qualquer nome de m´quina. portanto vocˆ n˜o deve pass´-la para ningu´m! Em particular. Por exemplo: u mysql> GRANT ALL PRIVILEGES ON db. o MySQL emprega um mecanismo de senha e login diferente que ´ seguro a e mesmo se fizerem um sniff nos pacotes TCP/IP e/ou o banco de dados mysql ´ capturado. a e a • O campo Password pode ficar em branco.) Perceba que do ponto de vista do MySQL a senha criptografada ´ a a e senha REAL.loc. a Valores de Password que n˜o est˜o em branco s˜o apresentados como senhas criptografadas. a a a O MySQL n˜o armazena senhas na forma de texto puro para qualquer um ver. Vocˆ pode encontrar a e mais informa¸˜es sobre isto no pr´ximo cap´ co o itulo.loc.* -> TO david@’192. • Como no MySQL Vers˜o 3.0/255. (Isto ´. • Metacaracteres n˜o s˜o permitidos no campo User.

177’ ’fred’ fred.0. | % | jeffrey | .155.166 ’144. uma conex˜o a partir de thomas.y. Para uma conex˜o a partir de localhost feito por jeffrey.. ele ordena as entradas com os valores mais espec´ e ificos de Host primeiro (’%’ na coluna Host significa “qualquer m´quina” e ´ menos espec´ a e ifico).com... conectando de x.. Suponha que a tabela ca user se pare¸a com isto: c +-----------+----------+| Host | User | ..166.166.166.2. Portanto se vocˆ possui uma m´quina nomeada e a como 1. +-----------+----------+Quando o servidor lˆ a tabela. (Isto provavelmente n˜o ´ util) a e´ ’144. | localhost | root | .0/255...177 c ’144.loc.. Como o servidor escolhe qual entrada usar se mais de uma coincide? O servidor resolve esta quest˜o ordenando a tabela user no a tempo de inicializa¸˜o.155.foo..%’ e combina com todas m´quinas em uma subrede).255.. +-----------+----------+| % | root | . | % | jeffrey | ..155. este nome nunca ir´ combinar com uma coluna Host das tabelas de a permiss˜es. +-----------+----------+Quando uma conex˜o ´ iniciada. etc.x.166.155.y.%’ ’fred’ fred. O resultado da tabela user ordenada ficaria assim: +-----------+----------+| Host | User | .algumlugar. Somente um n´mero IP pode combinar com um valor coringa de IP.155..y...166. x. | % | root | ..0-alpha fred. +-----------+----------+| localhost | root | .255.242 MySQL Technical Reference for Version 5. o u Uma conex˜o de entrada pode coincidir com mais de uma entrada na tabela user.com.gov pelo usu´rio fred pode combinar com a a diversas das entradas vistas na tabela anterior.166. Entradas com o mesmo valor Host s˜o ordenadas com os valores mais espec´ a ificos de User primeiro (um valor em branco na coluna User significa “qualquer usu´rio” e ´ menos espec´ a e ifico). conectando de qualquer m´quina na a subrede de classe C 144.%’ ’fred’ ..net.. existe a possibilidade que algu´m possa a e tentar explorar esta capacidade nomeando a m´quina como 144. Por a exemplo.155.com.edu. conectando da m´quina com ena dere¸o IP 144. | localhost | | .0’ ’fred’ o mesmo que no exemplo anterior Como vocˆ pode usar valores coringas de IP no campo Host (por exemplo.. a ’x. O MySQL desabilita a combina¸˜o com nomes de m´quina ca a ´ que iniciam com digitos e um ponto. A primeira entrada que coincidir ´ a que ser´ usada.. ’144. a Para evitar tais tentativas. o servidor procura entre as entradas ordenadas e utiliza a a e primeira entrada coincidente.y.155. depois procura pelas entradas na ordem da classifica¸˜o quando um ca ca usu´rio tenta se conectar. | localhost | | . a e a A ordena¸˜o da tabela user funciona da forma mostrada a seguir..

.6 [Privileges]. +----------------+----------+| thomas. tables_priv ou columns_priv. no entanto. todas as entradas que citam e a explicitamente este usu´rio ser˜o usadas primeiro quando o usu´rio tentar encontrar uma a a a combina¸˜o para a conex˜o. Suponha que a tabela user fosse assim: a +----------------+----------+| Host | User | . E aqui que os campos de concess˜es nas tabelas co e o de permiss˜es entram em a¸˜o. a e e a ´ baseado nas opera¸˜es que vocˆ deseja fazer. Estes privil´gios pode vir de qualquer uma das tabelas user.loc. onde uma conex˜o de thomas. host. a entrada com o nome do usu´rio em branco combina com o nome da m´quina e o nome do usu´rio. P´gina 546.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 243 as entradas com ’localhost’ na coluna Host coincide primeiro. As tabelas de permiss˜es s˜o manipuladas com o a os comandos GRANT e REVOKE. Para cada requisi¸˜o a a ca que vem na conex˜o.2 [CURRENT_USER()]. Um erro comum ´ pensar que para um determinado usu´rio. O exemplo anterior ilustra ca a a e isto. Veja Se¸˜o 6.0.loc. Est´gio 2: Verifica¸˜o da Requisi¸˜o a ca ca Uma vez estabelecida uma conex˜o.6.. o servidor entra no 2o est´gio.6) para ver com qual combina¸˜o usu´rio/m´quina a sua conex˜o a ca a a a coincide..) o A tabela user concede privil´gios que s˜o especificados por vocˆ em uma base global e que e a e se aplicam sem importar qual ´ o banco de dados atual... | % | jeffrey | .3.4. ca a 4. uma conex˜o de whitehouse.3. o ca e db. (A a a a entrada ’%’/’jeffrey’ tamb´m casaria.gov | | . (Vocˆ pode achar util ca a e ´ fazer referencia a Se¸˜o 4. o servidor verifica se vocˆ tem privil´gios suficientes para realiz´-la. | thomas. imprima a tabela user e ordene-a na e manualmente para ver onde se deu o primeiro coincidˆncia de valores. P´gina 233. +----------------+----------+| % | jeffrey | ..gov feita por jeffrey coincide com a primeira ena trada. +----------------+----------+A tabela ordenada pareceria com isto: +----------------+----------+| Host | User | . vocˆ pode usar a fun¸˜o CURRENT_ e a a e ca USER() (nova na vers˜o 4. Simplesmente isto n˜o ´ verdade. Se a conex˜o obtiver e a sucesso mas os seus privil´gios n˜o s˜o os esperados. se a tabela user e . Aqui est´ outro exemplo.loc. Por exemplo..1 [GRANT].. P´gina 255. mas sim pela entrada sem o nome de usu´rio! a Se vocˆ tiver problemas conectando ao servidor.3. +----------------+----------+Uma conex˜o a partir de thomas.loc.gov fetia por jeffrey coincidiria com a a segunda entrada na tabela.. Destas. que lista os campos presentes em ca a cada uma das tabelas de permiss˜es.gov feita por jeffrey combina primeiro n˜o com a a a entrada contendo ’jeffrey’ no valor do campo user.10 Controle de Acesso..gov | | . Veja Se¸˜o 4. mas ela n˜o ´ a primeira entrada coincidente na e a e tabela...

Table_name e Column_name n˜o podem conter meta caracteres ou serem a brancos em ambas tabelas. As tabelas tables_priv e columns_priv concedem privil´gios espec´ e ificos para tabelas e campos. especifiquee o como ‘\_’ no comando GRANT. e ´ quando o servidor procura por entradas coincidentes. no entanto. porque ela ´ a unica tabela que especifica privil´gios administrae ´ e tivos. a ordena¸˜o ´ mais simples porque e ca ca e somente o campo Host pode conter meta caracteres. • O valor ’%’ ou em branco no campo Host em ambas tabelas significam “qualquer m´quina” a • Os campos Db. As tabelas db e host concedem privil´gios para bancos de dados espec´ e ificos.) . • O valor ’%’ em Host na tabela db significa “qualquer m´quina. Isto a ´ parecido com a ordena¸˜o da tabela db. Por exemplo. a o As tabelas db e host s˜o lidas e ordenadas quando o servidor inicia (ao mesmo tempo que a ele lˆ a tabela user). Db e User e a e e tabela host ´ ordenada nos campos de escopo Host e Db. O processo de verifica¸˜o da requisi¸˜o ´ descrito abaixo.0. Valores nos campos escopo podem ser especificados como a seguir: • Os meta caracteres ‘%’ e ‘_’ podem ser usados no campo Host de ambas tabelas. A descri¸˜o ´ equivalente ao que o c´digo realmente o ca e o faz. DB e User.” Um valor em branco a em Host na tabela db significa “consulte a tabela host para informa¸˜o adicional. Para outros usu´rios. etc. (elas n˜o cont´m o campo Shutdown_priv. Assim como na tabela user.0-alpha concede a algu´m o privil´gio delete. privil´gios na tabela user s˜o privil´gios de e a e superusu´rio. O correto ´ conceder privil´gios na tabela user apenas para superusu´rios a e e a tais como os administradores de servidor ou de bancos de dados. RELOAD.) oe ca Para requisi¸˜es administrativas (SHUTDOWN. a vocˆ deve deixar os privil´gios na tabela user configurados para ’N’ e conceder privil´gios e e e somente em bancos de dados espec´ ificos. o acesso ´ negado mesmo sem a e e consultar as tabelas db ou host.). este usu´rio pode apagar linhas de qualquer banco e e a de dados no servidor! Em outras palavras. se vocˆ deseja executar mysqladmin shutdown mas a entrada a e em sua tabela user n˜o lhe concede o privil´gio SHUTDOWN. portanto n˜o a e a existe esta necessidade. A tabela db ´ ordenada nos campos de escopo Host.” ca • O valor ’%’ ou em branco no campo Host na tabela host significa “qualquer m´quina.” a • O valor ’%’ ou em branco no campo Db de ambas as tabelas significa “qualquer banco de dados. a e ordena¸˜o coloca os valores mais espec´ ca ificos no in´ e os menos espec´ icio ificos por ultimo. O acesso ´ concedido se o registro permitir a opera¸˜o requisitada ou negado caso e ca o contr´rio. Se vocˆ deseja usar um caracter ‘_’ como parte de um nome de banco de dados. Valores nos campos de escopo podem ser especificados como a seguir: • Os metacaracteres ‘%’ e ‘_’ podem ser usados nos campos Host e Db de ambas tabelas. ele s´ ´ diferente para tornar a explica¸˜o mais simples. utilizando as tabelas db e host.244 MySQL Technical Reference for Version 5. vocˆ ir´ perceber que a descri¸˜o aqui ´ um pouco o ca e a ca e diferente do algor´ itimo usado no c´digo. o servidor confere somente a co entrada da tabela user.” • O valor em branco no campo User em ambas tabelas coincide com o usu´rio anˆnimo. ele usa a primeira combina¸˜o que ca encontrar. As tabelas tables_priv e columns_priv s˜o ordenadas nos campos Host. (Se vocˆ j´ est´ familiarizado ca ca e e a a com o c´digo de verifica¸˜o de acesso.

e 3. etc. os privil´gios espec´ e e e ificos de bancos de dados para o usu´rio s˜o computados como a interse¸˜o (n˜o a uni˜o!) dos privil´gios nas a a ca a a e entradas das tabelas db e host. Se existir uma combinca¸˜o com a entrada da tabela db e seu campo Host n˜o estiver ca a em branco. Os ca campos Host e User s˜o comparados com o nome da m´quina e o nome do usu´rio que a a a faz a requisi¸˜o. o servidor consulta os privil´gios de tabelas e campos do usuario nas tabelas tables_ e priv e columns_priv e os adiciona aos privil´gios do usu´rio. se os privil´gios da entrada global de user s˜o inicialmente a e a insuficientes para a opera¸˜o requisitada. Se o resultado permitir a opera¸˜o requisitada. o servidor determina os privil´gios espec´ a e ificos de banco de dados para o usu´rio consultando as tabelas db e host: a 1. A tabela host pode ser usada para manter uma lista dos servidores seguros. isto ´. Se o registro coincidente da tabela db tiver o campo Host em branco. vocˆ precisa dos privil´gios INSERT e SELECT. a e 2. O campo Db ´ comparado com o banco de dados que o usu´rio deseja ca e a acessar. e e a (Desta forma vocˆ pode conceder privil´gios gerais em entradas na tabela db e ent˜o e e a restringi-los em uma base de m´quina a m´quina utilizando as entradas da tabela a a host. Seu privil´gio pode ser e e e tal que a entrada da tabela user concede um privil´gio e a entrada da tabela db concede e o outro. o servidor adiciona estes privil´gios mais tarde aos ca e privil´gios espec´ e ificos de banco de dados. Na Tcx. Neste caso.. udpdate. significa que a tabela host enumera quais m´quinas s˜o permitidas acessar o banco de dados. os privil´gios concedidos a e o e pelas entradas em ambas as tabelas de ser combinados. Por exemplo. mas o e e a ca servidor n˜o pode obtˆ-los de ambas as tabelas por si pr´prio. aquela entrada define os privil´gios especificos do banco de dados do usuario. A elas s˜o e a a concedidos todos os privil´gios. uma consulta adicional ´ feita na tabela host para encontrar uma valores coincie dentes nos campos Host e Db. O acesso ser´ permitido ou e a a negado baseado no resultado. Neste a a caso. Se nenhuma entrada na tabela host coincide. o servidor os adiciona aos privil´gios globais concedidos pela tabela e user. e a Se a entrada permitir a opera¸˜o requisitada. e . O servidor consulta a tabela db por uma combina¸˜o nos campos Host. o acesso ´ negado. tabelas e colunas.) Depois de determinar os privil´gios espec´ e ificos do banco de dados concedido pelas entradas nas tabelas db e host. os privil´gios que s˜o ’Y’ em ambas entradas. SELECT. A raz˜o ´ que uma requisi¸˜o a e ca pode exigir mais que um tipo de privil´gio. o servidor co primeiro confere os privil´gios globais do usu´rio consultando as entradas da tabela user. o acesso ser´ concedido. a tabela host cont´m uma lista de todas as m´quina na rede local.. o acesso ´ concedido. vocˆ tem os privil´gios necess´rios para realizar a requisi¸˜o. Se os privil´gios globais ca e e na tabela user s˜o insuficientes. Se n˜o existir entradas coincidentes para o Host e User.). Se existir uma coincidˆncia. Db e User.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 245 Para requisi¸˜es relacionadas aos bancos de dados (insert. a descri¸˜o precedente de como os privil´gios de um usu´rio ca e a s˜o calculados podem ser resumido assim: a global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges Ele pode n˜o ser aparente porque. De outra ca a forma. se vocˆ executar uma instru¸˜o e e ca INSERT . Expresso em termos booleanos. o acesso ´ negado.

depois que o cliente conecta. que podem resultar em alguns problemas de compatibilidade. co Em outra palavras.0-alpha Vocˆ pode tamb´m usar a tabela host para indicar m´quinas que n˜o s˜o seguras.your.. um cliente mysql 4. usar o mysqlaccess para ter certeza que os privil´gios de acesso est˜o atualmente e a configurados da forma que vocˆ imagina.O a e cliente pode fazer isto usando a fun¸˜o PASSWORD() para gerar uma hash da senha ca ou usando as instru¸˜es GRANT ou SET PASSWORD.1 para fornecer melhor seguran¸a c e reduzir os riscos de senhas serem roubadas. O mecanismo de hash da senha foi atualizado no MySQL 4... Por exemplo. a • Em segundo lugar. no entanto o que est´ armazenado na e a coluna Password da tabela user n˜o seja uma vers˜o da senha em texto puro. (todos os privil´gios configurados para ’Y’) e +--------------------+----+Naturalmente.3.your.1. (todos os privil´gios configurados para ’N’) e | %. existe uma etapa de autentica¸˜o inicial na qual o cliente deve apresentar uma senha que combina com o valor ca hash armazenado na tabela de usu´rios para a conta que aquele cliente deseja usar. Um cliente 4.11 Hashing de Senhas no MySQL 4.1 pode falhar com a seguinte mensagem de erro: shell> mysql Client does not support authentication protocol requested by server. Valores hash de senha s˜o calculados pela fun¸˜o PASSWORD(). No entanto.your. um cliente pre-4. +--------------------+----+| public. o servidor usa valores hash durante a autentica¸˜o quando um cliente ca tenta a primeira conex˜o.domain | % | .1. Suponha e e a a a que vocˆ tenha uma m´quina public.0 que tentar se conectar a um servidor 4. porque o cliente entende tanto o antigo quanto o novo mecanismo hash de senha. ele pode configurar ou alterar o hash da senha para as contas listadas na tabela de usu´rio (se ele tiver privil´gios suficientes)... O servidor gera os valores hash se um cliente conectado chama a a fun¸˜o PASSWORD() ou usa uma instru¸˜o GRANT ou SET PASSWORD para definir ou alterar ca ca uma senha.246 MySQL Technical Reference for Version 5. vocˆ deve sempre testar suas entradas nas tabelas de permiss˜es (por exe o emplo. Vocˆ pode permitir o acesso a todas as m´quinas de sua e a e a rede exceto a esta m´quina usando entradas na tabela host desta forma: a +--------------------+----+| Host | Db | . No entanto.0.1 pode encontrar dificuldades.1 As contas de usu´rios do MySQL est˜o lisatadas na tabela user do banco de dados mysql.1 que tentar se conectar a um servidor 4. a a Para cada conta do MySQL ´ definida uma senha.domain | % | . Este novo mecanismo s´ ´ o e interpretado pelo servidor 4. consider upgrading MySQL client . a ca O MySQL usa senhas em duas fases da comunica¸˜o cliente/servidor: ca • Primeiro. mas um valor a a hash computado para ela.1 e clientes 4..domain que est´ localizada em uma ´rea p´blica e a a a u que vocˆ n˜o considera segura. e 4. quando um cliente tenta se conectar ao servidor.1 pode conectar a um servidor pre-4.

Nota: Esta discuss˜o contrasta no comportamento da vers˜o 4. +-----------------------------------------------+ | PASSWORD(’mypass’) | +-----------------------------------------------+ | *43c8aa34cdc98eddd3de1fe9a9c2c2a9f92bb2098d75 | +-----------------------------------------------+ De acordo com o mostrado. a Antes do MySQL 4.1.1 descrito aqui come¸a relamente na vers˜o 4.1.1 mas precizar de e e a manter compatibilidade com clientes pre-4. Diferen¸as entre a vers˜o 4.1. vocˆ executar o script e ca a e mysql_fix_privilege_tables para atualizar o tamanho da coluna Password de 16 para 41 bytes. +--------------------+ | PASSWORD(’mypass’) | +--------------------+ | 6f8c114b58f2ce9e | +--------------------+ A coluna Password da tabela user (na qual estes hashes s˜o armazenados) tamb´m tˆm 16 a e e bytes de tamanho antes do MySQL 4. que continuam com a 16 bytes. • Se vocˆ realiza uma nova instala¸˜o do MySQL 4.1. mas o da vers˜o 4.1 e acima.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 247 A seguinte discuss˜o descreve a diferen¸a entre o antigo e o novo mecanismo de senha.1. o hash de senha calculado pela fun¸˜o PASSWORD() tem tamanho de ca 16 bytes.1. . que as senhas no formato antigo nunca faziam. mysql> SELECT PASSWORD(’mypass’). (O script n˜o altera valores de senhas existentes. Este hash se parece com: mysql> SELECT PASSWORD(’mypass’). O MySQL ´ a c a e uma distribui¸˜o “disferente” porque ela tem um mecanismo um pouco diferente daquele ca implementado na 4. • Se vocˆ atualizar uma instala¸˜o mais antiga para a vers˜o 4.1. e a autena tica¸˜o do cliente baseada em hashs mais longos ´ mais segura que aquela baseada nos ca e antigos hashes menores. O formato maior do hash de senha tetm melhores propriedades criptogr´ficas. e a c o que vocˆ deve fazer se vocˆ atualizar o seu servidor para a vers˜o 4.1.1. a fun¸˜o PASSWORD() foi modificada para produzir um valor hash ca de 41 bytes. a coluna Password ser´ convertida e ca a para o tamanho de 41 bytes automaticamente.1.1 com o comportamento da a a pre-4. a coluna Password na tabela user tamb´m deve ter 41 bytes e para armazeanar estes valores.0 e as vers˜es mais recentes c a o s˜o descritas posteriormente. A partir do MySQL 4. O formato de qualquer valor de hash de senha dado podeser determinado de dois modos: • A diferen¸a ´bvia ´ o tamanho (16 bytes versus 41 bytes) c o e • A segunda diferen¸a ´ que os hashes de senha no novo formato sempre come¸am com c e c um caracter ‘*’.) Uma coluna Password mais larga pode armazenar hashes de senha no formato novo e no antigo.1.

a ca conta n˜o mais poder´ ser usada por clientes pr´-4. ca c O prop´sito da op¸˜o --old-passwords ´ permitir que vocˆ mantenha compatibilidade com o ca e e clientes com vers˜es anteriores ` 4. e • O cliente altera a senha das contas.1 podem ainda usar contas a ca que possuem hash de senha longo).1 autenticando em contas com hash de senha curto • Clientes 4. GRANT. Esta ca op¸˜o for¸a o servidor a gerar hashes de senha curtos. Um servidor 4.1 podem conectar.1 podem autenticar contas com hashes longos ou curtos.1 que para clientes mais antigos.1. PASSWORD(). a ca e • Se a coluna ´ larga. o servidor avisa que o hash n˜o pode caber nela e gera apenas hashes curtos a quando um cliente realiza a opera¸˜o de troca de senha usando PASSWORD().) • Se a coluna Password for larga. co ca O modo no qual o servidor usa o hash de senha durante a autentica¸˜o ´ afetada pela ca e largura da coluna Password: • Se a coluna n˜o for larga. o a a e ca seguinte cen´rio ´ poss´ a e ivel: • Um cliente antigo conecta a uma conta que tˆm um hash de senha curto. o • Clientes 4. Neste caso. apenas a autentica¸˜o de hash curto ´ usada. o gradiente do c menos para o mais seguro ´: e • Clientes pre-4. Para contas com o hash curto.0-alpha A diferen¸a entre os hashs de senhas menores e maiores s˜o relevantes em como o servidor c a usa as senhas durante a autentica¸˜o e como ela gera hash de senhas para clientes conectados ca que realizam opera¸˜es de altera¸˜o de senha. ela pode guardar tanto hash curtas quanto hashs longas. isto resulta na conta que tˆm um hash de senha longo. Em termos de seguran¸a. e o servidor e pode usar ambos os formatos: • Clientes pre-4. eles s´ podem se conectar pelas contas com hashes curtos.1 sob circunstˆncias nas quais os servidores gerariam o a a hashes de senha longos.248 MySQL Technical Reference for Version 5. ela poder´ aramazenar tanto os hashes de senha curtos a quanto os longos. GRANT. ca ou SET PASSWORD. Se a op¸˜o --old-passwords. o processo de autentica¸˜o ´ na verdade um pouco mais seguro ca e para clientes 4. Ele n˜o afeta a autentica¸˜o (clientes 4.1 autenticando em contas com hash de senha curto • Clientes 4.1 autenticando em contas com hash de senha longo O modo no qual o servidor gera hashes de senhas para clientes conectados ´ afetado pela e largura da coluna Password e pela op¸˜o --old-passwords. (Este comportamento ocoree se vocˆ tiver atualizado para a vers˜o e a 4. e SET PASSWORD ir˜o gerar hashes a longos a menos que o servidor tenha sido iniciado com a op¸˜o --old-passwords. mas como els s´ conhecem o mecanismo hash o antigo. ca a Estas condi¸˜es se aplicam da seguinte forma: co • A coluna Password deve ser grande o suficiente para armazenar hashes longos (41 bytes).1 mas n˜o executou o script mysql_fix_privilege_tables para aumentar a coluna a Password. Onde isto ocorrer. Sem --old-passwords.0. mas ele n˜o previne a cria¸˜a de um hash de senha longo a co na tabela user como resultado de uma opera¸˜o de troca de senha.1 gera hashes ca longos apenas se certas condic˜es forem encontradas: A coluna Password deve ser grande o o suficiente para armazenar valores longos e a op¸˜o --old-passwords n˜o deve ser dada. e .1). Se a coluna n˜o foi atualizada e ainda tem a largura de 16 bytes (antes da a 4.

a e a Cen´rio 3) Coluna Password longa.1 poder´ autenticar esta conta at´ que ele seja atualizado para a vers˜o 4. Qualquer mudan¸a na senha de uma conta far´ com que ela possua um hash de senha longo. para atribuir uma senha curta a uma conta.1. e a partir deste ponto. o servidor ir´ gerar hashes de senha curtos de qualquer forma. ca • A op¸˜o --old-passwords pode ser usada mas ´ superflua porque com uma coluna ca e Password menor. ou PASSWORD() faz com que ca a conta tenha um hash de senha longo. c a • OLD_PASSWORD() pode ser usado para gerar explicitamente um hash curto.1: Cenario 1) Coluna Password menor na tabela de usu´rios a • Apenas hashes curtos podem ser armazenados na coluna Password. vocˆ perde a seguran¸a adicional a e c fornecida pelos hashes de senha longos. Por exemplo. porque clientes de vers˜es anteriores a 4. Assim. mesmo para clientes 4. apenas os clientes a 4. A desvantagem da op¸˜o --old-passwords ´ que qualquer senha que vocˆ criar ou alterar ca e e usar´ hashes curtos. vocˆ deve fazˆ-lo enquanto executa o e e servidor sem a op¸˜o --old-passwords. Clientes anteioriores ao 4. servidor n˜o iniciado com a op¸˜o --old-passwords a a ca Hashes de senha longos e curtos podem ser armazenados na coluna Password. ele n˜o conseguir´. opera¸˜es de altera¸˜o de senha n˜o ir˜o gerar hashes de senha longos e assim co ca a a n˜o faz com que as contas se tornem inacess´ a iveis para clientes mais antigos. Como indicado anteriormente. use UPDATE da seguinte forma: mysql> UPDATE user SET Password = OLD_PASSWORD(’mypass’) -> WHERE Host = ’some_host’ AND User = ’some_user’. GRANT ou SET PASSWORD usa hashes curtos exclusivamebnte.1 podem autenticar contas com hashes curtos ou longos. opera¸˜es de gera¸˜o de hash de senha envolvendo co ca PASSWORD().1). ca Os seguintes cen´rios s˜o poss´ a a iveis para executar um servidor 4. GRANT.1 sem usar a op¸˜o --olda e ca passwords.1. (Estes clientes n˜o podem bloquear eles mesmos inadivertidamente alterando suas senhas e ficando com a um hash de senha longo.1 n˜o entendem a o a o hash longo. Clientes 4. • O servidor usa apenas hasghes curtos durante a autentica¸˜o do cliente. Qualquer altera¸˜o a senha de uma conta feita via GRANT.1 s´ podem autenticar contas com hash curto. (Uma ca vez que uma conta tem um hash de senha longo na tabela de usu´rio. ca • Para clientes conectados.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 249 • A pr´xima vez que o cliente antigo tentar se conectar ` conta. SET PASSWORD. opera¸˜es de gera¸˜o de hash de senha envolvendo co ca PASSWORD(). Qualquer altera¸˜o a senha de uma conta faz com que a conta tenha um hash de senha curto. o Para clientes conectados.1. Se vocˆ quiser criar uma conta qye tenha um hash e longo (por exemplom parr uso pelos clientes 4. ou SET PASSWORD usam hashes longos exclusivamente.1 poder˜o ser autenticados. o perigoso neste cen´rio ´ que ´ poss´ a e e ivel que contas com ´ hashes de senha curtos se tornem inacessiveis para cliente anteriores ao 4. mysql> FLUSH PRIVILEGES.) Este cen´rio mostra que ´ perigoso executar um servidor 4. servidor iniciado com a op¸˜o --old-passwords a ca • • • • . a Cen´rio 2) Colunas Password longas. nenhum cliente anterior ao 4. o a a a porque a conta agora exige o novo mecanismo de hash durante a autentica¸˜o.

ou SET PASSWORD usa hashes curtos exclusivamente. Isto ´.0 s˜o as seguintes: a • Hashes de senhas de 45 bytes em vez de 41 bytes. se vocˆ criar uma conta com ca e e um hash longo antes de usar a op¸˜o --old-passwords.1. c As disvantagens para este cen´rio pode ser resumido como a seguir: a Cen´rio 1) Vocˆ n˜o pode tirar vantagem do hash longo que fornece mais autentica¸˜o a e a ca segura. mas opera¸˜es de altera¸˜o de senhas fazem com que as contas com hashes longos seja co ca revertida para hashes curtos. porque PASSWORD() deve ser usado paenas para gerenciar contas do a MySQL. PASSWORD() est´ disponivel a e Hash de senhas no MySQL 4. . • Clientes anteriores ao 4. Cen´rio 3) --old-passwords evita que as contas com hashes curtos se tornem inacess´ a iveis.) a Se o servidor est´ rodando sob circuntˆncias onde ele gera hashes de senha curtos. uma aplica¸˜o que usa PASSWORD() para as suas pr´prias senhas ir´ falhar.1 para trazer problemas de compatibilidade para aplica¸˜es ca co que usam PASSWORD() para gerar senha para os seus pr´prios prop´sitos. Qualquer altera¸˜o em uma senha de conta faz com que a conta tenha um hash de senha curto. e vocˆ n˜o pode alter´-las de volta para hashes longos enquanto e a a --old-passwords est´ em efeito. • A fun¸˜o PASSWORD() n˜o ´ repetit´ ca a e ivel. (Mas note e que OLD_PASSWORD() pode vir a n˜o ser mais suportado.1 e acima.0 difere do hash no 4. • Para clientes conectados. porque -a e a old-passwords previne a cria¸˜o de hashes longos.1.0-alpha • Hashes longos e curtos podem ser armazenados na coluna Password. fazendo a com que ela perca os benef´ icios de seguran¸a de um hash longo. opera¸˜es de gera¸˜o de hash de senha envolvendo co ca PASSWORD().1. ca Neste cen´rio. Cen´rio 2) Contas com hashes curtos tornam clientes anteriores ao 4. O ca o a curso de a¸˜o recomendado ´ modificar o aplicativo para usar outras fun¸˜es como SHA1() ca e co ou MD5() para produzir valores de hash. • Clientes 4. vocˆ n˜o pode criar contas que tenham hashes de senha longo.0. com um dado argumento X. As diferen¸as da vers˜o c a 4.1 e executar o servidor sob condi¸˜es onde ele gera hashes de co senha longo. (Aplicativos o o n˜o devem fazer isto. a Implica¸oes de Altera¸˜o de Hashes de Senha para Aplicativos c˜ ca Um atualiza¸˜o para o MySQL 4. Mas algumas aplica¸˜es usam PASSWORD() para seus pr´prios prop´sitos. successivas e chamadas a PASSWORD(X) geram diferentes resultados.) Se vocˆ co o o e atualizar para o MySQL 4. OLD_ a a ´ mas ´ equivalente a PASSWORD(). Se isto n˜o for poss´ vocˆ pode utilizar a fun¸˜o a ivel e ca OLD_PASSWORD().250 MySQL Technical Reference for Version 5.1 podem autentticar apenas contas com hashes curtos. GRANT.1 podem autenticar contas que tenham hashes longos ou curtos (mas note que ´ poss´ e ivel criar hashes longos apenas quando o servidor ´ iniciado sem --olde passwords). Tamb´m. que ´ fornecida para gerar hashes curtos no formato antigo. alterar a senha da conta enquanto ca --old-passwords est´ funcionando faz com que seja dada a conta uma sena curta.1 inacess´ a iveis se vocˆ e alterar a senha deles sem usar OLD_PASSWORD() explicitamente.

Testes os privil´gios iniciais executando este comando: a e shell> mysql -u root test O servidor deve deixar vocˆ conectar sem erros. Veja e Se¸˜o 4.1. vocˆ deve conectar ao servidor e configurar seus ca e usu´rios e suas permiss˜es de acesso. e a ca P´gina 267. Vocˆ tamb´m deve assegurar que e e e exista o arquivo ‘user. A estrutura das tabelas de a c permiss˜es alteraram com a Vers˜o 3. P´gina 261. Isto tamb´m ´ um risco de seguran¸a. a Se vocˆ obter o erro acima mesmo se n˜o tiver configurado uma senha. onde CAMINHO ´ o caminho para a raiz da e instala¸˜o do MySQL.4. fa¸a isto.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 251 4.5.3. a a vocˆ deve reiniciar o servidor com a op¸˜o --skip-grant-tables e editar seu arquivo e ca ‘/etc/hosts’ ou o ‘\Windows\hosts’ para adicionar uma entrada para sua m´quina. ca • Depois de terminar uma instala¸˜o.12 Causas dos Erros de Accesso Negado Se vocˆ encontrar erros de Accesso Negado (Access denied) quando tentar conectar-se ao e servidor MySQL. Neste caso.22. P´gina 130.22. vocˆ executou o script a a e mysql_fix_privilege_tabels ? Se n˜o fa¸a isto. Vocˆ pode evitar o uso de arquivos de op¸˜es ca a e co com a op¸˜o --no-defaults. a • Se vocˆ obter um erro como o seguinte: e shell> mysqladmin -u root -pxxxx ver Access denied for user: ’root@localhost’ (Using password: YES) Significa que vocˆ est´ usando uma senha incorreta. Veja Se¸˜o A. a Se vocˆ tentar se conectar como root e obter este erro: e Access denied for user: ’@unknown’ to database mysql isto significa que vocˆ n˜o possui um registro na tabela user com o valor ’root’ no e a campo User e que o mysqld n˜o pode rsolver o nome de m´quina do cliente.4.4. Veja Se¸˜o 2.11 para a Vers˜o 3.8 [Passwords]. P´gina 217.ini configurado para passar alguma senha incorreta.4 u o a c ca [Default privileges].2 [Option files]. portanto configurar e e c a senha do usu´rio root ´ algo que deve ser feito enquanto vocˆ configura os outros a e e usu´rios do MySQL. vocˆ executou o script mysql_install_db para configurar e o conte´do inicial das tabelas de permiss˜es ? Se n˜o. a Se vocˆ esqueceu a senha de root. ca P´gina 923.22. vocˆ pode reiniciar o mysqld com a op¸˜o -e e ca skip-grant-tables para alterar a senha. Normalmente o ele fica em ‘CAMINHO/var/mysql/user. como a seguir: ca shell> mysqladmin --no-defaults -u root ver • Se vocˆ atualizou uma instala¸˜o existente do MySQL de um vers˜o anterior e ca a a ` vers˜o 3.MYD’ no diret´rio do banco de dados do MySQL.6 [Upgrading-grant-tables]. Veja Se¸˜o 4. a o shell> mysql -u root mysql O servidor deve permitir a conex˜o pois o usu´rio root MySQL vem inicialmente a a configurado sem senha.MYD’. Veja Se¸˜o 4.2 [Resetting permissions].11 ou posterior.11 do MySQL quando a instru¸˜o GRANT se o a ca tornou funcional. a lista abaixo indica alguns caminhos que vocˆ pode seguir para corrigir e o problema: • Depois de instalar o MySQL. significa que e a vocˆ tem algum arquivo my. ca a .

0-alpha • Se os seus privil´gios parecerem alterados no meio de uma sess˜o. De outra forma vocˆ teria um sistema que seria inseguro. Entretanto.0. e a • Se vocˆ obter o seguinte erro quando estiver tentando conectar de uma m´quina difere a ente da que o servidor MySQL estiver executando. db ou host para coincidir com o usu´rio a a e nome de m´quina de onde vocˆ est´ tentando conectar. vocˆ e a u a e deve colocar uma entrada com o valor ’%’ na coluna Host da tabela user e reiniciar o mysqld com a op¸˜o --log na m´quina onde ´ executado o servidor..22 e a a e vocˆ n˜o sabe o n´mero IP ou o nome da m´quina da qual estiver conectando. Por exemplo.8 [Senhas]. is not allowed to connect to this MySQL server Vocˆ pode corrigir isto utilizando a ferramenta de linha de comando mysql (no servie dor!) para adicionar um registro ` tabela user. Neste a a caso. IDENTIFIED BY ou o comando mysqladmin password.3 e o ca [Privilege changes]. P´gina 267. P´gina 261.4. UPDATE ou ca e co SET PASSWORD. mas ela tamb´m afeta conex˜es existentes como indicado em Se¸˜o 4. vocˆ pode ter um problema com a tabela user. isto significa que vocˆ est´ tentando se conectar sem uma senha.. vocˆ deve ter um registro na tabela user que combine a e exatamente com o nome de m´quina e o nome de usu´rio que forem fornecidos na a a mensagem de erro. a informa¸˜o no log do MySQL ir´ indicar como a ca a vocˆ est´ realmente conectando.) a e . Para a a evitar este problema nestes sistemas. conex˜es para localhost n˜o funcionam se vocˆ esa o a e tiver executando em um sistema que utilize MIT-pthreads (conex˜es localhost s˜o o a feitas utilizando sockets Unix. Normalmente. A fun¸˜o PASSWORD() ´ desnecess´ria se vocˆ especificar a senha usca e a e ando a instru¸˜o GRANT . ca a • localhost ´ um sinˆnimo para seu nome de m´quina local. que n˜o s˜o suportadas pelas MIT-pthreads). ent˜o n˜o deve existir um registro a a na tabela user que combine com esta m´quina: a Host . a m´quina que est´ tentando conectar e se vocˆ est´ utilizando uma a a e a senha ou n˜o.252 MySQL Technical Reference for Version 5.. se vocˆ obter uma mensagem de erro que contenha e Using password: NO. A recarga das tabelas de permiss˜es afeta novas conex˜es a o o dos clientes. vocˆ deve utilizar a op¸˜o --host para nomear e ca explicitamente o servidor. depois execute o comando a e a mysqladmin flush-privileges. pode ser que o e a superusu´rio os alterou. a e Verifique isto executando mysql -u root mysql e usando esta senten¸a SQL: c mysql> SELECT * FROM user. vocˆ deve ter seu nome de m´quina real nos registros da tabela user no servidor.. a • Se vocˆ n˜o consegue fazer a sua senha funcionar. O resultado deve incluir uma entrada com as colunas Host e User combinando com o nome de seu computador e seu nome de usu´rio no MySQL. Depois tente ca a e conectar a partir da m´quina cliente. Se vocˆ n˜o estiver executando o MySQL Vers˜o 3.4. a • A mensagem de erro Access denied ir´ dizer a vocˆ com qual usu´rio vocˆ est´ tena e a e a tando se logar. Veja ca Se¸˜o 4. e ´ tamb´m a m´quina e o a e e a padr˜o em que clientes tentam se conectar se vocˆ n˜o especificar explicitamente o a e a nome da m´quina. (Ent˜o troque o ’%’ na tabela user com o nome da e a a m´quina mostrado pelo log. e a (Isto ´ verdadeiro mesmo se vocˆ estiver executando um programa cliente na mesma e e m´quina que o servidor.) a • Se vocˆ obter o erro Access denied quando tentando conectar ao banco de dados com e mysql -u nome_usu´rio _nome_bd. lembre-se que vocˆ deve usar a e a e fun¸˜o PASSWORD() se vocˆ configurar a senha com instru¸˜es INSERT. Isto far´ uma conex˜o TCP/IP ao servidor myssqld.

vocˆ n˜o possui uma entrada para outro_bd listado na tabela db. logo. o uso de nomes de m´quinas terminando com ‘%’ ´ inseguro e a e n˜o ´ recomendado!) a e Se mysql -u nome_usu´rio test funciona mas mysql -u nome_usu´rio outro_bd n˜o a a a funconar. remova da tabela user e a todas as entradas da coluna Host que contenham meta caracteres (entradas que contenham ‘$’ ou ‘_’). a e Se vocˆ obter uma mensagem de erro onde o nome da m´quina n˜o ´ exibido ou. mesmo se vocˆ tenta a conex˜o com um nome a e a de m´quina: a shell> mysqladmin -u root -pxxxx -h some-hostname ver Access denied for user: ’root@’ (Using password: YES) Isto significa que o MySQL obteve algum erro quando tentava resolver o IP para um nome de maquina.5. vocˆ n˜o possui o nome da m´quina cliente listado na a e a a tabela user ou na tabela db. ca a Algumas solu¸˜es permanentes s˜o: co a − Tente descobrir o que est´ errado com seu servidor DNS e corrija os erros. Um problema comum ´ quando o valor de Host na entrada da tabela e user especifica um nome de m´quina n˜o qualificado. no e a a e lugar do nome da m´quina existir um IP.5 [DNS]. e a Se mysql -u nome_usu´rio nome_bd funciona quando executado no pr´prio servidor. a − Especifique n´meros IPs no lugar de nomes nas tabelas de privil´gios do MySQL.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 253 • • • • • Outra raz˜o para este erro no Linux pode ser porque vocˆ est´ utilizando uma vers˜o a e a a bin´ria do MySQL que ´ compilada com uma vers˜o diferente da glibc que vocˆ est´ a e a e a usando. P´gina 460. f´cil de compilar e a e a instalar. Um erro muito comum ´ inserir uma nova entrada com Host=’%’ e e User=’algum usu´rio’. − Conecte ` localhost se vocˆ estiver executando o servidor e o cliente na mesma a e m´quina. seria adicionar um a registro ` tabela user com o valor de Host contendo um metacaracter. pensando que isto ir´ permitir a vocˆ especificar localhost a a e para conectar da mesma m´quina. Veja Se¸˜o 5. mas as rotinas de resolu¸˜o de a a ca nomes de seu sistema retornam um nome qualificado completo do dom´ inio (ou viceversa). (Uma alternativa. a Se mysql -u root test funciona mas mysql -h nome_servidor -u root test resultar em Access denied. normalmente. isto n˜o ´ um grande problema. Por exemplo. por exemplo. Tente adicionar um registro ` tabela user que contenha o n´mero IP a a u de sua m´quina como o valor da coluna Host. a entrada n˜o a e a ir´ funcionar. Se vocˆ n˜o estiver entendendo porque obtem Access denied. A raz˜o disto n˜o funcionar ´ que os privil´gios a a a e e . Neste caso vocˆ pode executar mysqladmin flush-hosts para zerar e o cache DNS interno. − Inicie o mysqld com --skip-host-cache. Neste caso vocˆ deve atualizar seu SO/Glibc ou fazer o download da vers˜o e a fonte do MySQL e compil´-la. Um RPM fonte ´. ent˜o vocˆ pode n˜o ter o nome correto para a sua m´quina na a e a a tabela user.subnet.se’. u e − Inicie o mysqld com --skip-name-resolve. a ’tcx. mas e seu DNS diz ao MySQL que o nome da m´quina ´ ’tcx. a − Coloque os nomes das m´quinas clientes em /etc/hosts. se vocˆ tem uma entrada com o nome ’tcx’ na tabela user. Entretanto.%’. a o mas mysql -u nome_m´quina -u nome_usu´rio nome_bd n˜o funciona quando execua a a tado em outra m´quina cliente.

PHP. • Se vocˆ obter o seguinte erro. P´gina 1083. Quando vocˆ estiver co a e satisfeito com suas altera¸˜es.1. pois o servidor ainda a e e e n˜o saber´ que vocˆ alterou a senha! a a e • Se vocˆ tiver problemas de acesso com Perl. Se vocˆ obter ca a e a mensagem de acesso negado (Access denied) quando estiver executando um cliente sem op¸˜es. Se vocˆ utilizar a op¸˜o -p sozinha. vocˆ tamb´m pode utilizar a sintaxe --password=sua_senha para e e especificar a senha. De e outra forma. tenha certeza que exista uma ou mais entradas correspondentes na tabela host especificando quais m´quinas aplicam-se ` tabela db. o MySQL ir´ lhe solicitar a e ca a senha. e tente conectar ao servidor com mysql -u nome_usu´rio nome_bd ou mysql -u nome_ a usu´rio -psua_senha nome_bd. lembre que vocˆ ca co e deve usar uma instru¸˜o FLUSH PRIVILEGES ou executar um comando mysqladmin ca flush-privileges para o servidor ler novamente as tabelas com os privil´gios. Python ou um programa ODBC. P´gina 217. Como esta entrada o tem o valor ’localhost’ em Host que ´ mais espec´ e ifica que ’%’. vocˆ pode ter um problema com a tabela db ou a tabela e e host: Access to database denied Se a entrada selecionada da tabela db tiver um valor vazio na coluna Host. Se parecer que algum cliente est´ enviando parˆmetros errados a a a para a conex˜o e vocˆ n˜o os especificou na linha de comando. Ent˜o vocˆ ca a e pode alterar as tabelas de permiss˜es do MySQL e utilizar o script mysqlaccess para o conferir se suas modifica¸˜es fizeram o n˜o o efeito desejado. suas altera¸˜es n˜o far˜o efeito at´ que o servidor seja reiniciado. ela ´ usada no lugar e da nova entrada quando se conectar de localhost! O procedimento correto ´ inserir e uma segunda entrada com Host=’localhost’ e User=’algum_usu´rio’. a entrada na tabela user provavelmente n˜o tem o a privil´gio file habilitado. verifique seu ambiente e a e a o arquivo ‘. Lembreco a a e se que depois de configurar a senha de root com um comando UPDATE. iniciae o daemon mysqld com a op¸˜o --skip-grant-tables.2 [Option files]. P´gina 217. apesar de n˜o ser interessante gravar configura¸˜es co a co de cliente nestes arquivos..0.my. Veja Apˆndice E [Environment varica a e ables]. tenha certeza que vocˆ n˜o especificou uma senha antiga em nenhum de co e a seus arquivos de op¸˜es! Veja Se¸˜o 4.2 [Option files]. Se vocˆ consegue conectar com o cliente mysql. co ca a • Se vocˆ fizer altera¸˜es para as tabelas de permiss˜es diretamente (utilizando uma ine co o stru¸˜o INSERT ou UPDATE) e suas altera¸˜es parecem ser ignoradas. Nota: e Recarregar as tabelas de permiss˜es sobrescreve a op¸˜o --skip-grant-tables. INTO e OUTFILE ou LOAD DATA INFILE.. existe a e algum problema com seu programa e n˜o o acesso aos privil´gios (Note que n˜o espa¸o a e a c entre -p e a senha. Isto o ca .cnf’ no seu diret´rio home.1. a a Se vocˆ obter o erro quando estiver utilizando comandos SQL SELECT . execute mysqladmin flush-privileges para dizer ao co servidor mysqld para iniciar utilizando as novas tabelas com os privil´gios. e • Lembre-se que programas clientes ir˜o usar parˆmetros de conex˜es especificados em a a o arquivos de configura¸˜o ou vari´veis ambientais.254 MySQL Technical Reference for Version 5.0-alpha padr˜es incluem uma entrada com Host=’localhost’ e User=’’. Veja Se¸˜o 4. Vocˆ pode tamb´m conferir os arquivos de o e e configura¸˜es do servidor MySQL. ou remover a a entrada com Host=’localhost’ e User= ’’. n˜o ser´ a a necess´rio especificar a senha at´ que vocˆ atualize os privil´gios.) • Para testar.

sempre forne¸a um descarga das a c tabelas de permiss˜es do seu MySQL. a • Se tudo mais falhar.7.* | db_name. Estes privil´gios s˜o armazenados na tabela mysql. P´gina 36.user. Veja Se¸˜o 1.. a a e . o e co Veja Se¸˜o D.query). Para vers˜es e a o anteriores do MySQL.1. Vocˆ pode descarregar as tabelas com o comando o e mysqldump mysql. ca a • Se vocˆ tiver outros problemas com as tabelas de permiss˜es do MySQL e sente que e o deve enviar o problema para a lista de discuss˜o...Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 255 lhe permite dizer ao servidor para come¸ar a utilizar as tabelas de permiss˜es novamente c o sem reinici´-lo.] O comando GRANT ´ implementado no MySQL vers˜o 3.3 [Bug reports]. ca a Os comandos GRANT e REVOKE permitem aos administradores do sistema criar usu´rios e a conceder e revogar direitos aos usu´rios do MySQL em quatro n´ a iveis de privil´gios: e N´ Global ivel Privil´gios globais aplicam para todos os bancos de dados em um determinado e servidor. user_name [IDENTIFIED BY [PASSWORD] ’password’] .general.*} TO user_name [IDENTIFIED BY [PASSWORD] ’password’] [.22.1 A Sintaxe de GRANT e REVOKE GRANT priv_type [(column_list)] [. tipo_priv [(column_list)] . --debug=d.2 [Making trace files]. envie seus problemas utilizando o script mysqlbug.] ON {tbl_name | * | *.4.* | db_name... e tamb´m informa¸˜es sobre cada comando disparado. inicie o servidor mysqld com uma op¸˜o de depura¸˜o (por exemca ca plo.4 Gerenciamento das Contas dos Usu´rios no MySQL a 4. priv_type [(column_list)] . Como sempre..*} FROM user_name [.* conceder˜o e revogar˜o apenas privil´gios globais..] [REQUIRE NONE | [{SSL| X509}] [CIPHER cipher [AND]] [ISSUER issuer [AND]] [SUBJECT subject]] [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # | MAX_UPDATES_PER_HOUR # | MAX_CONNECTIONS_PER_HOUR #]] REVOKE priv_type [(column_list)] [.* e REVOKE ALL ON *. P´gina 1071.] ON {tbl_name | * | *.11 ou posterior. Em alguns casos vocˆ pode precisar ca a e reiniciar o mysqld com a op¸˜o --skip-grant-tables para executar o mysqldump. Isto ir´ imprimir informa¸˜es de m´quinas e usu´rios a co a a sobre tentativas de conex˜es. a instru¸˜o GRANT n˜o faz nada.1. ca 4. GRANT ALL e a ON *. user_name ..

PURGE MASTER LOGS e SET GLOBAL Permite o uso de UPDATE Sinˆnimo para “sem privil´gios. e Permite o uso de SHOW FULL PROCESSLIST Para o futuro Permite o uso de FLUSH Da o direto ao usu´rio de perguntar onde o slave/master est´. Permite o uso de CREATE INDEX e DROP INDEX Permite o uso de INSERT Permite o uso de LOCK TABLES em tabelas nas quais se tem o privil´gio SELECT.tables_priv. e N´ das colunas ivel Privil´gios de colunas aplicam-se a uma unica coluna em uma determinada e ´ tabela. tipo_priv pode ser especificado como um dos seguintes: co ALL [PRIVILEGES] ALTER CREATE CREATE TEMPORARY TABLES DELETE DROP EXECUTE FILE INDEX INSERT LOCK TABLES PROCESS REFERENCES RELOAD REPLICATION CLIENT REPLICATION SLAVE SELECT SHOW DATABASES SHUTDOWN SUPER Configura todos os privil´gios simples exceto WITH GRANT e OPTION Permite o uso de ALTER TABLE Permite o uso de CREATE TABLE Permite o uso de CREATE TEMPORARY TABLE Permite o uso de DELETE Permite o uso de DROP TABLE.0) a Permite o uso de SELECT .0.* e REVOKE ALL ON db. e a GRANT ALL ON db. Estes privil´gios s˜o armazenados na tabela mysql.host. e a Para as instru¸˜es GRANT e REVOKE.” o e Sinˆnimo para WITH GRANT OPTION o UPDATE USAGE GRANT OPTION USAGE pode ser usado quando vocˆ quer criar um usu´rio sem privil´gios.. Estes privil´gios s˜o armazenados na tabela mysql.. a a Necess´rio para a replica¸˜o dos slaves (para ler logs bin´rio a ca a do master).columns_priv. Permite o uso de SELECT SHOW DATABASES exibe todos os banco de dados.0-alpha N´ dos bancos de dados ivel Privil´gios de bancos de dados aplicam-se a todas as tabelas em um determinado e banco de dados. Estes privil´gios s˜o armazenados nas tabelas mysql. e N´ das tabelas ivel Privil´gios de tabelas aplicam-se a todas as colunas em uma determinada e tabela. INTO OUTFILE e LOAD DATA INFILE.db e e a mysql. mysqladmin debug. Permite o uso de mysqladmin shutdown Permite a conex˜o (uma vez) mesmo se max connections a tiverem sido alcan¸ados e executa o comando CHANGE MASTER. Permite que o usu´rio execute stored procedures (MySQL 5.table conceder˜o e revogar˜o a a apenas privil´gios de tabelas.256 MySQL Technical Reference for Version 5.* conceder˜o e revogar˜o a a apenas privil´gios de banco de dados. GRANT ALL ON db. e a e . c KILL thread.table e REVOKE ALL ON db.

e Para anular o privil´gio grant de um usu´rio. Para usar estes novos privil´gios ap´s ata a e o ualizar para 4. EXECUTE. GRANT . vocˆ deve e a o e tamb´m concecder privil´gios a todos os usu´rios locais como user@localhost porque.6 [Upgrading-grant-tables]. o MySQL n˜o permite criar permiss˜es de a n´ a o ivel de tabela se a tabela n˜o a existir.2. Vocˆ pode configurar e e e privil´gios de bancos de dados utilizando a sintaxe ON nome_bd.0. ir´ afetar os privil´gios globais!). Vocˆ pode configurar privil´gios globais utilizando a sintaxe ON *. mesmo se vocˆ apagar a a e e uma tabela ou banco de dados. FROM .Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 257 Os privil´gios CREATE TEMPORARY TABLES.. utilize o valor tipo_priv de GRANT OPTION: e a mysql> REVOKE GRANT OPTION ON . ex. DELETE... para prevenir o usu´rio de poder acessar bancos de dados adicionais que a correspondam ao padr˜o do metacaracter.*. a Para acomodar concess˜es de direitos para usu´rios de m´quinas arbitr´rias... ou uma string contendo caracteres especiais ou meta caracteres (como o ‘%’). vocˆ deve especific´-lo como ‘\_’ no coe a mando GRANT.* TO . GRANT. SHOW e DATABASES e SUPER s˜o novos na vers˜o 4. P´gina 130. Isto significa que se vocˆ deseja usar um caracater e ‘_’ como parte de um nome de banco de dados.. quando ´ e e vocˆ usar uma cl´usula column_list) s˜o SELECT. Os unicos valores de tipo_priv que vocˆ pode especificar para uma tabela s˜o SELECT..user ou criando um usu´rio a com um nome vazio com o comando GRANT. INDEX e ALTER. O formato simples user ´ sinˆnimo de user@"%". ´ user@"%. LOCK TABLES. o MySQL suo a a a porta a especifica¸˜o do valor user_name no formato usu´rio@m´quina. REPLICATION . UPDATE. DROP.loc. Se vocˆ especificar ON e e * e estiver com algum banco de dados aberto. vocˆ tem que executar o script mysql_fix_privilege_tables. O MySQL n˜o revogar´ automaticamente qualquer privil´gio. vocˆ pode colocar o usu´rio ou e a o nome de m´quina entre aspas (por exemplo. e a a O MySQL permite que vocˆ crie privil´gios a n´ de banco de dados mesmo se o banco de e e ivel dados n˜o existir para tornar f´cil de se preparar para o uso do banco de dados. Usu´rios anˆnimos s˜o a a a o a definidos inserindo entradas com User=’’ na tabela mysql.0. e a Por exemplo. a a a Vocˆ pode especificar meta caracteres no nome da m´quina..gov. ser´ configurado os privil´gios somente para a e este banco de dados. ´ e a INSERT. Nota: Se vocˆ permite o acesso de usu´rios anˆnimos ao seu servidor MySQL.user a o a ser´ usada quando o usu´rio tentar a conex˜o ao servidor MySQL da m´quina local! a a a a ..155.2. o privil´gio PROCESS d´ o mesmo direitos que o novo o e a privil´gio SUPER.5. de e e a outra forma. a e Note por favor Os metacaracteres ‘_’ e ‘%’ s˜o permitidos na especifica¸˜o dos nomes de a ca bancos de dados em comandos GRANT.. CREATE...155. Veja e Se¸˜o 2. a entrada de usu´rio anˆnimo para a m´quina local na tabela mysql.gov" se aplica a user para qualquer m´quina no dominio loc..166. Atualmente.*.166. ’usu´rio-teste’@’m´quina-teste’). ON ‘foo\_bar‘. e a user@"144. Se vocˆ desejar ca a a e especificar uma string user contendo caracteres especiais (como o ‘-’). Os unicos valores de tipo_priv que vocˆ pode especificar para uma coluna (isto ´.%" se aplica a user em qualquer m´quina na subrede de classe C a 144. (AVISO: Se vocˆ especificar ON * e vocˆ n˜o tem possui um banco de e e a dados aberto. INSERT e UPDATE. ca a Em vers˜es anteriores do MySQL. a a no entanto. e o O MySQL n˜o suporta metacaracteres em nomes de usu´rios..

const char *password). e a e a Os detalhes do procedimento de verifica¸˜o dos privil´gios s˜o apresentados em Se¸˜o 4. e Se um usu´rio n˜o tem privil´gios em uma tabela. para removˆ-las vocˆ deve usar a instru¸˜o expl´ a a e e ca icita DELETE.db ´ e e e criada se necess´rio. Quando todos os privil´gios para o banco de dados forem removidos a e com REVOKE. Na Vers˜o 3. Se o usu´rio j´ possui uma senha. portanto a vida normalmente n˜o ´ t˜o complicada como mostrado acima.0. uma entrada na tabela mysql. Vocˆ deve ter cuidado e e ao fornecer o privil´gio grant. os direitos a um usu´rio s˜o atribu´ a a idos em apenas um dos n´ iveis de privil´gios. mas REVOKE n˜o as remover´. GRANT pode criar registros na tabela user. MAX_UPDATES_PER_HOUR # e MAX_CONNECTIONS_PER_HOUR # s˜p a novos no MySQL vers˜o 4.2. e a e Os privil´gios para uma tabela ou coluna s˜o formados atrav´s do OU l´gico dos privil´gios e a e o e ´ em cada um dos quatro niveis de privil´gios. se uma for dada. Veja Se¸˜o 5. e a Se vocˆ concede privil´gios para uma combina¸˜o de usu´rio e m´quina que n˜o existem e e ca a a a na tabela mysql. CUIDADO: Se vocˆ criar um novo usu´rio mas n˜o especificar uma cl´usula IDENTIFIED e a a a BY. Isto n˜o ´ seguro.user WHERE User=’’. o usu´rio n˜o possuir´ uma senha. pois dois usu´rios podem se unir para unir privil´gios! e a e MAX_QUERIES_PER_HOUR #. ent˜o isto significa que a e a a . a tabela n˜o ´ mostrada quando o a a e a e usu´rio solicita uma lista de tabelas (com a instru¸˜o SHOW TABLES por exemplo). ivel Os privil´gios para uma coluna podem ser calculados da seguinte forma: e privil´gios globais e OR (privil´gios de banco de dados AND privil´gios de m´quina) e e a OR privil´gios de tabela e OR privil´gios de coluna e Na maioria dos casos.258 MySQL Technical Reference for Version 5.user. Em outras palavras. Por exemplo. P´gina 227. se um novo usu´rio ´ criado ou se vocˆ possui a a e e privil´gios de concess˜o globais.user especifica e que um usu´rio tem um privil´gio global select.22. tabelas bancos de dados e colunas a at´ 60 caracteres. Um nome de usu´rio pode ter at´ 16 caracteres.0.0-alpha Vocˆ pode verificar se isto se aplica a vocˆ executando a seguinte instru¸˜o: e e ca mysql> SELECT Host. ela ´ trocada pela nova.User FROM mysql. P´gina 461.12 ou posterior do MySQL. O mesmo a ca ´ verdade para SHOW DATABASES e A cl´usula WITH GRANT OPTION d´ ao usu´rio habilidade de fornecer ` outros usu´rios quaisa a a a a ´ espec´ quer privil´gios que ele tenha em um nivel e ifico de privil´gio. a a e Se vocˆ n˜o quiser enviar a senha em texto puro vocˆ pode usar a op¸˜o PASSWORD seguido e a e ca de uma senha embaralhada da fun¸˜o SQL PASSWORD() ou da fun¸˜o da API C make_ ca ca scrambled_password(char *to. a a a a e Senhas podem tamb´m ser configuradas com o comando SET PASSWORD. Estas op¸˜es limitam o n´mero de consultas/atualiza¸˜es e a co u co logins que o usu´rios pode fazer durente uma hora. a senha do usu´rio ser´ especificada utilizando a cl´usula e a a a a IDENTIFIED BY. este registro ´ removido. Se # ´ 0 (padr˜o). se a tabela mysql. No momento. isto n˜o pode ser negado por uma entrada a e a no n´ de banco de dados. um registro ´ adicionado e permanece l´ at´ ser removido com um e a e comando DELETE. tabela ou coluna. a Se vocˆ conceder privil´gios para um banco de dados.3 ca e a ca [Sistema de privil´gios].6 e ca [SET OPTION]. GRANT suporta somente nomes de m´quinas.5.

qualquer privil´gio que o usu´rio j´ possua (ou seja fornecido no futuro!) nesse e e a a n´ tamb´m pode ser concedido por este usu´rio. privil´gios s´ e a e e o podem ser removidos com comandos REVOKE expl´ icitos ou manipulando as tabelas de permiss˜es do MySQL. Suponha que vocˆ conceda a um usu´rio ivel e a e a o privil´gio INSERT em um banco de dados. Se vocˆ e a a e remover um usu´rio. Modifica¸˜es nas tabelas de permiss˜es que vocˆ realiza o a co o e utilizando GRANT ou REVOKE s˜o percebidas pelo servidor imediatamente. e privil´gios ao n´ de usu´rio fazem efeito na a e ivel a pr´xima vez que o usu´rio conectar. o usu´rio poder´ conceder os privil´gios INSERT. • Os privil´gios do SQL-99 s˜o estruturadados em uma maneira hier´rquica.4. todos os privil´gios que foram e e e concedidos baseado neste privil´gio s˜o tamb´m removidos. o e a e a e usu´rio pode tentar enganar o sistema de privil´gios renomeando tabelas! a e Perceba que se vocˆ estiver utilizando privil´gios de tabelas ou colunas. e Esteja ciente que quando conceder a um usu´rio o privil´gio GRANT em um n´ particular a e ivel de privil´gios. O SQL-99 necessita que vocˆ e a o e tenha o privil´gio INSERT em todas as colunas..* .. todos os privil´gios do usu´rio s˜o removidos. e n˜o suporta a e ivel a todos os tipos de privil´gios que o MySQL suporta. Se vocˆ conceder o privil´gio SELECT no banco e e e de dados e especificar WITH GRANT OPTION. No MySQL os a e a a privil´gios concedidos n˜o s˜o removidos automaticamente. o servidor examina os privil´gios de tabelas e colunas para todos os a e usu´rios e isto ir´ deixar o MySQL um pouco mais lento. use GRANT USAGE ON *. mesmo que para e e apenas um usu´rio. e Vocˆ n˜o pode conceder a outro usu´rio um privil´gio que n˜o possua.. etc). o usu´rio al´m de poder repassar o privil´gio a e e SELECT poder´ tamb´m repassar o insert. a • Se no MySQL vocˆ possuir o privil´gio INSERT em somente parte das colunas em uma e e tabela. Privil´gios de bancos de e a o e dados. a As maiores diferen¸as entre o padr˜o SQL e vers˜es MySQL de GRANT s˜o: c a o a • No MySQL privil´gios s˜o fornecidos para uma combina¸˜o de usu´rio e m´quina e e a ca a a n˜o somente para um usu´rio. todos os privil´gios para a tabela s˜o e e a removidos. SELECT e a a a e UPDATE. UPDATE. vocˆ pode executar instru¸˜es INSERT na tabela.4. Veja Se¸˜o 4. o .7 [Recursos do usu´rios]. Se vocˆ fizer isto. Veja Se¸˜o 4. Se vocˆ remover um privil´gio no SQL-99. WITH MAX_. P´gina 266..3 [Privilege changes].Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 259 n˜o h´ limites para aquele usu´rio. a a a ca a a Nota: para especificar qualquer destas op¸˜es para um usu´rio existente sem adicionar co a outros privil´gios adicionais. todos os privil´gios s˜o lidos na mem´ria. EXECUTE ou UNDER do SQL-99. a a • O SQL-99 n˜o possui privil´gios no n´ global ou de bancos de dados. e • Quando vocˆ remove uma tabela no SQL-99. Se vocˆ modificar a e as tabelas de permiss˜es manualmente (utilizando INSERT.. As colunas em que vocˆ n˜o e co e a tem o privil´gio INSERT ir˜o receber seus valores padr˜es. o privil´gio GRANT e a a e a e possibilita fornecer somente os privil´gios que possuir. mas vocˆ deve removˆ-los e a a e e se necess´rio. vocˆ deve executar o e uma instru¸˜o FLUSH PRIVILEGES ou executar mysqladmin flush-privileges para dizer ca ao servidor para recarregar as tabelas de permiss˜es. Se vocˆ concede o privil´gio UPDATE para o a e e e usu´rio no banco de dados. Vocˆ n˜o deve conceder privil´gios ALTER a um usu´rio comum. a a Quando o mysqld inicia. tabelas e colunas s˜o iniciados um vez. o ca P´gina 261. No MySQL. O MySQL n˜o suporta os privil´gios e a e TRIGGER.

o MySQL emprega um mecanismo de senha e login diferentes a que ´ seguro mesmo se for feito um sniff no pacote TCP/IP e/ou o banco de dados e mysql for capturado. P´gina 546.2 [Miscellaneous functions]. e eles se conectar˜o com qualquer nome que n˜o possua uma senha. Veja a e a Se¸˜o 4. e a • O MySQL criptografa senhas utilizando um algor´ itimo diferente que o utilizado pelo processo de login do Unix.4. tentam se conectar a a utilizando o nome de usu´rio atual do Unix como o nome de usu´rio no MySQL. Nomes de a e usu´rio Unix normalmente s˜o limitados at´ 8 caracteres.260 MySQL Technical Reference for Version 5. mas a a isto existe somente por conveniˆncia. a a • Nomes de usu´rios MySQL podem ter o tamanho de at´ 16 caracteres. deve ser especificado o parˆmetro -e a password sem nenhum argumento mysql --user=monty --password nome_do_banco ou no formato curto: mysql -u monty -p nome_do_banco Perceba que no ultimo exemplo a senha n˜o ´ ’nome do banco’.8 [Connecting].2 Nomes de Usu´rios e Senhas do MySQL a Existem v´rias diferen¸as entre a forma que nomes de usu´rios e senhas s˜o usados pelo a c a a MySQL e a forma que s˜o usados pelo Unix ou Windows: a • Nomes de usu´rios. P´gina 255. veja Se¸˜o 4. P´gina 269.1.4. e ca P´gina 239. ca a Quando vocˆ se conecta a um servidor MySQL com um cliente de linha de comando e vocˆ pode especificar a senha com --password=sua-senha. Veja as descri¸˜es das fun¸˜es PASSWORD() e ENCRYPT() em co co Se¸˜o 6. N˜o existe nenhuma a ca a associa¸˜o entre a senha em que vocˆ utiliza para logar-se a uma m´quina Unix e a ca e a senha que ´ utilizada para acessar um banco de dados na mesma m´quina. a Qualquer um pode tentar se conectar ao servidor utilizando qualquer nome. Isto significa que vocˆ n˜o pode tornar um co e a banco de dados seguro a menos que todos os usu´rios do MySQL possuam senhas.4.0-alpha Para uma descri¸˜o do uso de REQUIRE. por padr˜o. o conhecimento da sua senha ’embaralhada’ ´ o suficiente e para conseguir se conectar ao servidor MySQL! A partir da vers˜o 4. A maioria dos clientes MySQL.1 [GRANT]. a mysql --user=monty --password=guess nome_do_banco Se vocˆ deseja que o cliente lhe solicite a senha.3.3.0. n˜o tem a o ca a nenhuma rela¸˜o com os nomes de usu´rios do Unix (nomes de login) ou nomes de ca a usu´rios Windows. como usado pelo MySQL para prop´sitos de autentica¸˜o.6.10 [Secure connections]. Perceba que mesmo que a senha ´ ca a e armazenada ’embaralhada’. Programas clientes permite especificar um nome e diferente com as op¸˜es -u ou --user. ca ca a 4. ´ a e Se vocˆ deseja usar a op¸˜o -p para fornecer uma senha vocˆ deve fazer assim: e ca e mysql -u monty -pguess database_name . Usu´rios MySQL e seus privil´gios s˜o criados normalmente com o comando GRANT. a a e • Senhas MySQL n˜o tem nenhuma rela¸˜o com senhas Unix. Veja Se¸˜o 4.

4 Configurando os Privil´gios Iniciais do MySQL e Depois de instalar o MySQL. 4.1 [Quick install]. vocˆ configura os privil´gios iniciais dos acessos executando e e scripts/mysql_install_db. P´gina 68. • Altera¸˜es nos privil´gios de bancos de dados fazem efeito no pr´ximo comando USE co e o nome_bd. 4. Conex˜es devem ser feitas atrav´s da m´quina local. o a Isto significa que usu´rios locais podem se conectar sem senha e serem tratados como a usu´rios anˆnimos.1.4.3 Quando as Altera¸oes nos Privil´gios tem Efeito c˜ e Quando o mysqld inicia. P´gina 95. a . UPDATE. etc).4.8 [Executando e o a ca o Windows].Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 261 Em alguns sistemas. REVOKE ou co o e SET PASSWORD s˜o imediatamente reconhecidas pelo servidor. Internamente o MySQL n˜o a limita o tamanho limite da senha. Conex˜es devem ser feitas da m´quina local. As modifica¸˜es das tabelas de permiss˜es que vocˆ realiza utilizando GRANT. depois inicializa as tabelas de permiss˜es com a o seguinte configura¸˜o dos privil´gios: ca e • O usu´rio root do MySQL ´ criado como um superusu´rio que pode fazer qualquer a e a coisa. usu´rios normais n˜o podem executar e a a a mysqladmin ou mysqladmin processlist. Veja Se¸˜o 2. NOTA: Os privil´gios padr˜es s˜o diferentes no Windows. a chamada da biblioteca que ´ utilizada pelo MySQL para solicitar por e uma senha corta automaticamente a senha para 8 caracteres.3. vocˆ e o e deve executar a instru¸˜o FLUSH PRIVILEGES ou executar mysqladmin flush-privileges ca ou mysqladmin reload para dizer ao servidor para recarregar as tabelas de permiss˜es. Por exemplo.1. Veja Se¸˜o 2. a Se vocˆ alterar as tabelas de permiss˜es manualmente (utilizando INSERT. • Altera¸˜es nos privil´gios globais e altera¸˜es de senhas fazem efeito na pr´xima vez co e co o que o cliente conectar. a o • Outros privil´gios s˜o negados. todas o conte´do das tabelas de permiss˜es s˜o lidos em mem´ria u o a o e tem efeito neste momento. a e • Um usu´rio anˆnimo ´ criado e pode fazer o que desejar com bancos de dados com a o e nome ’test’ ou iniciando com ’test_’. De o outra forma suas altera¸˜es n˜o ter˜o efeito at´ que o servidor seja reiniciado. Se vocˆ co a a e e alterar as tabelas de permiss˜es manualmente mas se esquecer de recarregar os privil´gios. conex˜es exiso o tentes s˜o afetadas da seguinte forma: a • Altera¸˜es nos privil´gios de tabelas e colunas fazem efeito com a pr´xima requisi¸˜o co e o ca do cliente. o e suas altera¸˜o v˜o parecer n˜o ter feito nenhuma diferen¸a! ca a a c Quando o servidor reconhecer que as tabelas de permiss˜es foram alteradas. o e a NOTA: A senha inicial de root ´ vazia. O script mysql_ ca a install_db inicia o servidor mysqld. portanto qualquer um que conectar como root e sem senha ter´ direito a todos os privil´gios.

uma das primeiras coisas que vocˆ ca e e deve fazer ´ especificar uma senha para o usu´rio root do MySQL.10. ca 4.MYD’ no diret´rio contendo o banco de dados mysql. vocˆ n˜o deve apagar o a e a os arquivos ‘. possivelmente depois de edit´-lo para criar os a privil´gios desej´veis.262 MySQL Technical Reference for Version 5. ca a Uma vez que a senha de root foi configurada. vocˆ tamb´m pode manipular diretamente a tabela e e e privil´gios: e shell> mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD(’nova_senha’) -> WHERE user=’root’.22.frm’ ‘. Vocˆ pode desejar deixar a senha de root em branco para que vocˆ n˜o precise especific´-la e e a a quando realizar configura¸˜es adicionais ou testes. vocˆ deve informar a senha quando se conectar e ao servidor MySQL como root. remova todos os arquivos ‘. Perceba que se vocˆ atualizar a senha na tabela user diretamente utilizando UPDATE.5 Adicionando Novos Usu´rios ao MySQL a Existem duas maneiras de adicionar usu´rios: utilizando instru¸˜es GRANT ou manipulando a co as tabelas de permiss˜es do MySQL diretamente. Se vocˆ fizer isso acidentalmente. e a NOTA: Para vers˜es do MySQL mais antigas que a vers˜o 3. Vocˆ pode fazer isto e a e como a seguir (perceba que a senha foi especificada utilizando a fun¸˜o PASSWORD()): ca shell> mysql -u root mysql mysql> SET PASSWORD FOR root@localhost=PASSWORD(’nova_senha’). mysql> FLUSH PRIVILEGES. Outra forma de configurar a senha ´ utilizando o comando mysqladmin: e shell> mysqladmin -u root password nova_senha Somente usu´rios com acesso de escrita/atualiza¸˜o ao banco de dados mysql podem a ca alterar a senha de outros usu´rios.0-alpha Como sua insta¸˜o inicialmente ´ parcialmente aberta. o e a Se vocˆ deseja que os privil´gios iniciais sejam diferentes do descrito acima. a Para recriar as tabelas de permiss˜es completamente. (Este ´ o diret´rio chamado ‘mysql’ o e o sob o diret´rio do banco de dados. vocˆ e e deve dizer ao servidor para reler as tabelas de permiss˜es (com FLUSH PRIVILEGES). Todos os usu´rios comuns (n˜o os anˆnimos) a a a o podem alterar somente a pr´pria senha com um dos comandos acima ou com SET o PASSWORD=PASSWORD(’nova_senha’). que ´ listado quando vocˆ executa mysqld --help. ca ca Veja o script scripts/mysql_install_db para ver como s˜o configurados os privil´gios a e padr˜es.) o e e Depois execute o script mysql_install_db. de o outra forma a altera¸˜o n˜o seria notificada.frm’.MYI’ o e ‘. O m´todo preferido ´ utilizar instru¸˜es o e e co .4.0. vocˆ deve volt´-los a partir de sua e e a distribui¸˜o MySQL antes de executar mysql_install_db. Vocˆ pode usar isto como uma base para ver como adicionar outros usu´rios. Substitua ’nova_senha’ pela senha que vocˆ deseja usar. e Se vocˆ souber o que esta fazendo. tenha certeza de configur´-la co a antes de utilizar sua instala¸˜o para qualquer ambiente de produ¸˜o. Entretanto. ´ poss´ e e e ivel modificar o script mysql_install_db antes de execut´-lo.

porque ele contem um campo Host com um a valor mais espec´ ifico e tamb´m vem antes na ordena¸˜o da tabela user. mysqladmin refresh e mysqladmin ca flush-*. Isto permite ao usu´rio a exe a ecu¸˜o dos comandos mysqladmin reload.PROCESS ON *. vocˆ deve se conectar na mesma ca co e m´quina em que o mysqld est´ executando. se vocˆ alterou a senha do usu´rio root. e ca Um usu´rio que possa conectar de localhost sem uma senha e que ´ concedido a e os privil´gios administrativos reload e process. a Estes exemplos assumem que privil´gios s˜o configurados de acordo com os padr˜es descritos e a o na se¸˜o anterior. mysql> GRANT ALL PRIVILEGES ON *. bem como o mysqladmin processlist. mysql> GRANT USAGE ON *.) co Um usu´rio que pode conectar sem uma senha. admin dummy Tamb´m ´ poss´ e e ivel adicionar a mesma informa¸˜o de acesso do usu´rio diretamente. Se n´s co o n˜o adicionarmos a entrada com localhost. a Os exemplos abaixo mostram como usar o cliente mysql para configurar novos usu´rios. Estas instru¸˜es GRANT configuram trˆs novos usu´rios: co e a monty Um superusu´rio completo que pode conectar ao servidor de qualquer lugar.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 263 GRANT. N˜o s˜o concedidos nenhum privil´gio—o tipo de privil´gio USAGE permite a a e e a cria¸˜o de um usu´rio sem privil´gios. porque elas s˜o mais concisas e menos propensas a erros.1 [GRANT]. Ele tem o efeito de criar todos os ca a e privil´gios globais com ’N’. Tamb´m. a mas deve utilizar uma senha ’alguma_senha’ para fazer isto. vocˆ deve especific´-la para os e e a e a comandos mysql abaixo.* TO dummy@localhost.* TO monty@localhost IDENTIFIED BY ’alguma_senha’ WITH GRANT OPTION.* TO monty@’%’ IDENTIFIED BY ’alguma_senha’ WITH GRANT OPTION. vocˆ deve se conectar com o usu´rio root. mas somente na m´quina loa a cal. e a a e a o usu´rio root deve ter os privil´gios inster ao banco de dados mysql e o administrativo a e reload.* TO admin@localhost. mysql> GRANT RELOAD. (Depois eles podem ser adicionados utilizando e instru¸˜es GRANT adicionais. Primeiro. utica a lizando instru¸˜es INSERT e depois dizendo ao servidor para recarregar as tabelas de perco miss˜es: o . Considera-se que vocˆ ir´ conceder privil´gios ese e a e pec´ ificos a conta posteriormente. Veja Se¸˜o 4. Perceba que devemos utilizar instru¸˜es GRANT para monty@localhost e monty@"%". Isto significa que para fazer altera¸˜es. use o programa mysql para se conectar ao servidor como o usu´rio root do a MySQL: shell> mysql --user=root mysql Vocˆ pode adicionar novos usu´rios utilizando instru¸˜es GRANT: e a co mysql> GRANT ALL PRIVILEGES ON *. a entrada para o usu´rio anˆnimo a a o para localhost que ´ criada por mysql_install_db toma precedˆncia quando e e nos conectarmos da m´quina local.4. a Existem v´rios programas de colaboradores (como o phpMyAdmin) que podem ser utilizados a para criar e administrar usu´rios. a ca P´gina 255. Nenhum privil´gio a n´ de e ivel bancos de dados ´ concedido.

’Y’.PASSWORD(’alguma_senha’).’Y’.DROP ON customer.’Y’.’Y’.PASSWORD(’alguma_senha’).22.PASSWORD(’obscure’)).’Y’.DROP ON expenses. assim o MySQL atribui a todas o valor padr˜o de e a a ’N’.’Y’.UPDATE.’Y’. GRANT SELECT.’Y’.’Y’. Process_priv=’Y’. Para o usu´rio admin.’custom’.’Y’). execute estes coe a co mandos: shell> mysql> -> -> -> mysql> -> -> -> mysql> -> -> -> mysql --user=root mysql GRANT SELECT.’Y’. User e ´ ca a Password nos registros da tabela user tem valores atribu´ idos.* TO custom@localhost IDENTIFIED BY ’obscure’.0-alpha shell> mysql --user=root mysql mysql> INSERT INTO user VALUES(’localhost’.User. Reload_priv=’Y’.gov e o banco de dados customer de todas de server. Dependendo da sua vers˜o do MySQL.UPDATE.22.’Y’. Na ultima instru¸˜o INSERT (para o usu´rio dummy).DELETE.’Y’.’Y’.02 tˆm mais). ’Y’. e O seguinte exemplo adiciona um usu´rio custom que pode acessar o banco de a dados bankaccout apenas do localhost. N˜o ´ necess´rio gerar entradas e a e a nas tabelas db ou host. Isto ´ a mesma coisa que o GRANT USAGE faz.gov’ IDENTIFIED BY ’obscure’. (Vers˜es anteriores ` vers˜o 3.’Y’.’Y’.DELETE.User.* TO custom@’server. mysql> INSERT INTO user VALUES(’%’.’Y’).CREATE. . GRANT SELECT. Para configurar os privil´gios do usu´rio modificiando as tabelas de permiss˜es diretamente.INSERT. o a a e ´ e posteriores a 4.domain’ IDENTIFIED BY ’obscure’.’Y’.’Y’.0.’monty’.11 ´ a utilizada.* TO custom@’whitehouse. o banco de dados expenses somente de whitehouse.CREATE. mysql> FLUSH PRIVILEGES.CREATE. apenas as colunas Host.’Y’.’dummy’.264 MySQL Technical Reference for Version 5.’Y’. vocˆ s´ precisar criar uma entrada na tabela a e o user com os campos de privil´gios configurados para ’Y’.INSERT. e a o utilize estes comandos (perceba o FLUSH PRIVILEGES no final): shell> mysql --user=root mysql mysql> INSERT INTO user (Host.’monty’.’Y’. Ele deseja utilizar a senha obscure das trˆs m´quinas.11 tem menos campos de privil´gios. vocˆ pode precisar utilizar um n´mero diferente de a e u valores ’Y’ acima.’Y’. a maior sintaxe legivel de INSERT e a usando SET que est´ dispon´ a partir da vers˜o 3.DELETE.INSERT.UPDATE.User=’admin’.DROP ON bankaccount. mysql> INSERT INTO user SET Host=’localhost’. e a Para configurar os privil´gios deste usu´rio utilizando instru¸˜es GRANT.’’).’Y’.domain. ’Y’.’Y’.Password) VALUES(’localhost’. Nenhuma das colunas de privil´gios s˜o definidas explicitamente.’Y’. a ivel a e Note que para configurar um superusu´rio. mysql> INSERT INTO user (Host.Password) -> VALUES(’localhost’.

Select_priv.’Y’).1.com’ -> IDENTIFIED BY ’mypassword’.’Y’. Como no exemplo anterior que usaram as instru¸˜es INSERT.Update_priv.User. mas s´ e a o quando acessados ` partir das m´quinas apropriadas.Drop_priv) VALUES (’localhost’.Delete_priv.Drop_priv) VALUES(’server.PASSWORD(’obscure’)).User.).’custom’.Update_priv.Select_priv.’Y’.Insert_priv. -> ON *. INSERT INTO db (Host.’Y’.6 Deletando Usu´rios do MySQL a DROP USER nome_usuario Este comando foi adicionado ao MySQL 4.’Y’.Db. dependendo de sua vers˜o do MySQL.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 265 mysql> -> mysql> -> mysql> -> -> -> -> mysql> -> -> -> -> mysql> -> -> -> INSERT INTO user (Host.mydomain.gov’.User.Delete_priv..domain’.1.. INSERT INTO user (Host.’Y’. Create_priv.Insert_priv.User.Password) VALUES(’server. vocˆ pode precisar de usar co e um n´mero diferentes de valores ’Y’. mas n˜o a a a a concede permiss˜es ao mesmo (todos os privil´gios s˜o configurados com o valor padr˜o de o e a a ’N’).’Y’. 4.gov’.’custom’. INSERT INTO db (Host. expenses e customer.Delete_priv.’custom’. Para realizar a mesma coisa modificando diretamente as tabelas de permiss˜es.Drop_priv) VALUES (’whitehouse.’Y’..Select_priv. meudom´nio.Password) VALUES(’whitehouse.Insert_priv.domain’.’Y’. u a As primeiras trˆs instru¸˜es INSERT adicionam entradas na tabela user que permite ao e co usu´rio custom conectar a partir de v´rias m´quinas com a senha determinada.4.’Y’.Db. ’meunomedeusuario’ PASSWORD(’minhasenha’).’custom’. As pr´ximas trˆs instru¸˜es INSERT adicionam entradas na tabela db que concedem o e co privil´gios ` custom para os bancos de dados bankaccount. Create_priv.User.’Y’.’bankaccount’.’customer’. mysql> FLUSH PRIVILEGES. vocˆ deve dizer ao servidor para recarreg´-las (com o e a FLUSH PRIVILEGES) para que as altera¸˜es nos privil´gios tenham efeito.’expenses’.’Y’.meudominio.’Y’).Db.’Y’.Update_priv. fa¸a isto: o c mysql> INSERT INTO user VALUES (’%.com).’Y’. depois de modificar a a as tabelas de permiss˜es diretamente.’custom’. Create_priv.PASSWORD(’obscure’)).’Y’. vocˆ pode utilizar uma instru¸˜o GRANT i e ca como a seguir: mysql> GRANT .. co e Se vocˆ deseja fornecer a um usu´rio espec´ e a ifico acesso de qualquer m´quina em um detera minado dom´ inio (por exemplo.’Y’). Normalmente. .* -> TO myusername@’%.’Y’. INSERT INTO db (Host..

e e a a o que pode ser de interresse particular do Provedor de Servi¸os Internet.6. • N´meor de conex˜es feitas por hora: Novas conex˜es abertas por hora. Pode-se especificar qualquer combina¸˜o dos recursos acima. FLUSH PRIVILEGES. a 2. Todos os usu´rios n˜o s˜o limitados por padr˜o no uso dos recursos acima. u o o Um usu´rio no contexto mencionado acima ´ uma unica entrada na tabela user.4. N1.266 MySQL Technical Reference for Version 5.4.8. WITH MAX_QUERIES_PER_HOUR N1 MAX_UPDATES_PER_HOUR N2 MAX_CONNECTIONS_PER_HOUR N3.0-alpha Ele apaga um usu´rio que n˜o possua nenhum privil´gio. Verifique quais privil´gios o usu´rio tem com SHOW PRIVILEGES. a At´ ent˜o. realizando os passos a e na ordem mostrada. Veja Se¸˜o 4.0. Estes limites podem ser concedidos apenas atrav´s do e GRANT (*. n˜o ser´ aceita mais a c o a a nenhuma conex˜o at´ o fim desta hora. 1. Veja Se¸˜o 4. ca 4. P´gina 326. e a P´gina 255. Em todos os casos.2 pode se limitar certos recursos por usu´rios. o unico m´todo dispon´ de limita¸˜o de uso do servidor MySQL era canfigurar e a ´ e ivel ca a vari´vel de inicializa¸˜o max_user_connections para um valor diferente de zero. e e .. a menos que a a a a os limites sejam garantidos a eles..user WHERE user=’username’ and host=’hostname’. usando esta sintaxe: GRANT . uma mensagem de erro apropriada ´ enviada. N2 e N3 s˜o inteiros e ca a significam contagem/hora. a Se vocˆ estiver usando uma vers˜o mais antiga do MySQL vocˆ deve primeiro revogar os e a e privil´gios e ent˜o deletar o usu´rio com: e a a DELETE FROM mysql. Delete todos os privil´gios do usu´rio com REVOKE. o gerenciamento de trˆs recursos ´ introduzido no n´ de usu´rio ine e ivel a dividual: • N´mero de todas as consultas por hora: Todos os comandos que podiam ser executados u por um usu´rio. Se os usu´rios alcan¸am o limite de conex˜es dentro de uma hora.1 [GRANT]. c Consequentemente.11 e a ca [SHOW PRIVILEGES].7 Limitando os Recursos dos Usu´rios a A partir do MySQL 4.0. que ´ a e ´ e identificada unicamente por suas colunas user e host. a • N´mero de todas as atualiza¸˜es por hora: Qualquer comando que altera qualquer u co tabela ou banco de dados. consultas ou atualiza¸˜es adicionais ser˜o rejeitadas u co co a at´ que a hora acabe. Mas a ca este m´todo ´ estritamente global e n˜o permite o gerenciamento de usu´rios individuais. a 3. De forma parecida se o usu´rio alcan¸a o limite do a e a c n´mero de consultas ou atualiza¸˜es. a a a Para deletar um usu´rio do MySQL vocˆ usar o seguinte procedimento.*) global. Delete o usu´rio com DROP USER.

o 4. Quando e e o usu´rio jeffrey tentar se conectar ao servidor utilizando esta senha.Password) VALUES(’%’. ´ prov´vel que vocˆ a e e a e possa tentar configurar senhas desta forma: shell> mysql -u root mysql mysql> INSERT INTO user (Host. as informa¸˜es exibidas a seguir s˜o aplicadas somentes para usu´rios avan¸ados.4. Se vocˆ configurar senhas utilizando a instru¸˜o GRANT . O resultado ´ que o valor ’biscuit’ ´ armazenado como a senha na tabela user. IDENTIFIED BY ou o comando e ca mysqladmin password. co a a c Veja Se¸˜o 4.8 Configurando Senhas Na maioria dos casos vocˆ deve utilizar GRANT para configurar seus usu´rios e senhas.sh no subdiret´rio ‘scripts’. P´gina 255. ent˜o vocˆ deve especificar a senha ’biscuit’ desta forma: e a e .’jeffrey’. e envia o resultado u o ao servidor. o cliente mysql a a criptografa utilizando a fun¸˜o PASSWORD(). O servidor usa o valor do campo password na tabela user (que ´ o valor e ’biscuit’ n˜o criptografado ) para realizar os mesmos c´lculos e comparar os resultados.Password) VALUES(’%’. portanto a a instru¸˜o INSERT deveria ter sido informada no seguinte formato: ca mysql> INSERT INTO user (Host.1 [GRANT].User. a fun¸˜o PASSWORD() ´ desnecess´ria. e n˜o como texto puro.User. Ambos tomam o cuidado de ca e a criptografar a senha para vocˆ. gerando um vetor de autentica¸˜o baseado em ca ca uma senha criptografada e um n´mero randˆmico. a tabela user no banco de dados ca mysql deve conter as colunas adicionais. inclu´ ca a indo uma instru¸˜o ca GRANT com os valores atuais. pore a tanto. Se vocˆ esquecer deste fato.4. Isto ´ porque a tabela user armazena senhas na forma a e criptografada.PASSWORD(’biscuit’)).’biscuit’)...’jeffrey’. Vocˆ deve tamb´m utilizar a fun¸˜o PASSWORD() quando utilizar instru¸˜es SET PASSWORD: e e ca co mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD(’biscuit’). ca Como um prerequisito para a habilita¸˜o deste recurso. mysql> FLUSH PRIVILEGES. como definido no script de cria¸˜o de tabelas ca mysql_install_db e mysql_install_db. e O resurso est´ habilitado assim que e concedido a um unico usu´rio qualquer das cl´usulas a ´ a a GRANT de limita¸˜o. Os valores atuais para todos os usu´rios para todos os usu´rios ser˜o descarregados se os a a a privil´gios forem recarregados (no servidor ou usando mysqladmin reload) ou se o comando e FLUSH USER_RESOURCES ´ executado. a a A compara¸˜o falha e o servidor rejeita a conex˜o: ca a shell> mysql -u jeffrey -pbiscuit test Access denied As senhas devem ser criptografadas quando elas s˜o inseridas na tabela user. ca a Os exemplos nas se¸˜es precedentes ilustram um princ´ co ipio importante: quando vocˆ are mazena uma senha n˜o-vazia utilizando INSERT ou UPDATE vocˆ deve utilizar a fun¸˜o a e ca PASSWORD() para criptograf´-la. obtido do servidor.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 267 Os valores atualmente usados por um usu´rio em particular pode ser descarregados (zerados) a enviando uma instru¸˜o GRANT com qualquer das cl´usulas acima.

my.my.9 Mantendo Sua Senha Segura N˜o ´ aconselh´vel especificar uma senha de uma forma que a exponha e possa ser descoberta a e a por outros usu´rios. porque sua senha se torna vis´ ivel para programas de informa¸˜o do sistema (como no ps) que pode ser chamado por outros usu´rios para ca a exibir linhas de comando. juntamente com as determina¸˜es de riscos a co de cada m´todo: e • Nunca forne¸a a um usu´rio normal acesso ` tabela mysql. As senhas s´ est˜o a a o a ´ chegar ` senha real que foi usada (acontece embaralhadas para que n˜o seja possivel a a muito a utiliza¸˜o de senhas similares em outras aplica¸˜es). ou shell> mysqladmin -u jeffrey password biscuit NOTA: PASSWORD() ´ diferente da senha criptografada do Unix. o co programa cliente solicita a senha do terminal: shell> mysql -u user_name -p Enter password: ******** Os caracteres ‘*’ representam sua senha. ´ E mais seguro digitar sua senha desta forma do que especific´-la na linha de comando a porque ela n˜o fica vis´ a outros usu´rios. Neste caso. P´gina 217. e 4. n˜o existir´ a a a oportunidade de digitar a senha do terminal.268 MySQL Technical Reference for Version 5.cnf’. (clientes MySQL normalmente gravam zeros em cima do argumento da linha de comando durante sua sequˆncia de inicializa¸˜o. vocˆ pode descobrir e que a primeira linha do seu script ´ lida e interpretada (incorretamente) como sua e senha! • Armazenar a sua senha em um arquivo de configura¸˜o.0-alpha mysql> GRANT USAGE ON *. Tenha certeza que o modo de acesso do arquivo ´ a e 400 ou 600 Veja Se¸˜o 4. Algumas vers˜es a o de ps incluem uma op¸˜o para exibir o ambiente de processos em execu¸˜o.* TO jeffrey@"%" IDENTIFIED BY ’biscuit’.cnf’ no seu diret´rio home: ca o [client] password=sua_senha Se vocˆ armazenar sua senha em um arquivo ‘.1. o arquivo n˜o pode ser lido por e a seu grupo ou pelos outros usu´rios. Por exemplo. Se vocˆ e a e e deseja chamar um cliente de um script que n˜o execute interativamente. Em alguns sistemas.2 [Option files]. Mesmo em sistemas sem a .4. Isto ´ ca e conveniente mas inseguro. vocˆ pode listar ca e sua senha na se¸˜o [client] do arquivo ‘. ca co • Uso da op¸˜o -psua_senha ou --password=sua_senha na linha de comando.) a • Uso das op¸˜es -p ou --pasword (sem especificar o valor sua_senha). Os m´todos que vocˆ pode usar para especificar sua senha quando a e e executar programas clientes s˜o listados abaixo. ca a • Vocˆ pode armazenar sua senha na vari´vel de ambiente MYSQL_PWD. mas ainda existe e ca ´ um breve intervalo no qual o valor est´ visivel. Entretanto este m´todo de digitar uma a ivel a e senha ´ v´lido somente para programas que vocˆ executa de forma interativa. mas este m´todo e a e deve ser considerado extremamente inseguro e n˜o deve ser usado.user. sua senha ca ca estaria em texto puro para a leitura para todos os usu´rios.0. O conhecimento de c a a uma senha criptografada possibilita a conex˜o como este usu´rio.

Em termos b´sicos.10 Usando Conex˜es Seguras o 4. Os certificados se baseiam em algor´ itmos de criptografia assim´tricos que possuem duas chaves de criptografia (uma chave p´blica e uma chave secreta). a e a SSL ´ um protocolo que utiliza diferentes algor´ e itimos de criptografia para assegurar que os dados recebidos por uma rede p´blica s˜o confi´veis.cnf’ corretamente protegido. P´gina 1083. seria imprudˆncia assumir que n˜o existe outro m´todo para observar a e a e o ambiente de processos. Ele tem um mecanismo para detectar u a a qualquer altera¸˜o. Por padr˜o o MySQL ´ ajustado para ser o mais r´pido poss´ a e a ivel. a Podiase at´ mesmo alterar os dados enquanto eles estavam em transito entre o cliente e o e servidor. a a Por padr˜o o MySQL n˜o usa conex˜es criptografadas entre o cliente e o servidor. vocˆ deve usar se e co e mecanismo de busca favorita na Internet para procurar sobre o assunto que est´ interessado. e O MySQL n˜o utiliza conex˜es criptografadas por padr˜o. Qualquer dados u a criptografado com esta chave p´blica pode ser descriptografada apenas usando a chave u secreta correspondente. X509 ou criptografia. e u Um propriet´rio de certificado pode provar a sua identidade mostrnado este certificado para a outra parte. o MySQL tem suporte a conex˜es cri[ptografadas com SSL. SSL tamb´m incorpora algoritmos para ca e reconhecer e fornecer identidades de verifica¸˜o usando o padr˜o X509. em tais casos. Se vocˆ precisa de mais informa¸˜es sobre SSL.0. Ele ´ mais comue e mente usado em aplica¸˜es e-commerce. Veja Apˆndice E [Vari´veis de ambiente]. Algumas vezes vocˆ precisao mover informa¸˜es sobre redes p´blicas de um modo e co u seguro. c Eles devem resistir a muitos tipos de atques conhecidos como apenas alterando a ordem da mensagem criptografada ou emviando o dado duas vezes.1 Conceitos Basicos A partir da vers˜o 4. 4. que ´ guardada pelo dono do certificado. as pr´ticas de a hoje precisam de muitos elementos de seguran¸a adicionais para algoritmos de criptografia.4. Para a o entender como o MySQL usa SSL. Qualquer tipo de funcionalidade adiocional exige que o conputador fa¸a um trabalho adicional e a criptografia de dados ´ uma opera¸˜o c e ca intensiva da CPU que exige tempo e pode atrasar o MySQL nas tarefas principais.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 269 esta vers˜o do ps. X509 ´ um padr˜o que torna poss´ e a ivel identificar algu´m na Internet.10.4. ca a Criptografia ´ o modo de tornar qualquer tipo de dado ileg´ e ivel.my. A pessoal que j´ est˜o familiarizada com eles podem saltar esta parte. perda ou reenvio de dados. Um certificado consiste das chaves p´blicas do propriet´rio. os m´todos mais seguros seriam que o programa cliente solicitasse a senha ou e especificar a senha em um arquivo ‘. porque fazendo isto tornaria o a o a protocolo cliente/servidor muito lento. deve haver algumas empreco a sas (chamadas “Autoridades de Certifica¸˜o”) que atribuem certificados eletrˆnicos para ca o qualquer um que precise deles. a . e a a Em resumo. usar uma conex˜o sem criptografia ´ inaceit´vel. De fato.0. ´ necess´rio explicar alguns conceits b´sicos de SSL e e a a X509. Isto a a o significa que qualquer um pode observar todo o tr´fico e ver os dados enviados e recebidos.

openssl.270 MySQL Technical Reference for Version 5.org/.++++++ .0-alpha 4.. vocˆ tem que atualizar a sua e ca e tabela mysql.user com algumas novas colunas relacionadas a SSL.....0... Testamos o MySQL com OpenSSL 0.$DIR/openssl.cnf Generating a 1024 bit RSA private key .4.0. Configure o MySQL com --with-vio --with-openssl. Se vocˆ estiver usando um instala¸˜o antiga do MySQL.../demoCA $DIR -.cnf # # # # # # # # # ´ Saida exemplo: Using configuration from /home/monty/openssl/openssl.Enter PEM pass phrase: ----- ..0.5... Vocˆ pode verificar se um servidor mysqld em execu¸˜o suporta OpenSSL examinando e ca se SHOW VARIABLES LIKE ’have_openssl’ retorna YES.4. Insatale o biblioteca OpenSSL..++++++ writing new private key to ’/home/monty/openssl/private/cakey. http://www.9...10.. Isto ´ necess´rio se e a suas tabelas de permiss˜es s˜o de uma vers˜o anterior ao MySQL 4.2 Exigˆncias e Para conseguir conex˜es seguras para trabalhar com o MySQL vocˆ deve fazer o seguinte: o e 1.pem \ -config $DIR/openssl.txt echo "01" > $DIR/serial # # Gera¸~o do Certificate Authority(CA) ca # openssl req -new -x509 -keyout $PRIV/cakey.cnf $DIR replace .pem -out $DIR/cacert.3 Configurando Certificados SSL para o MySQL Aqui est´ um exemplo para configurar certificados SSL para o MySQL: a DIR=‘pwd‘/openssl PRIV=$DIR/private mkdir $DIR $PRIV $DIR/newcerts cp /usr/share/ssl/openssl. $serial e o diret´rio a o $new_certs_dir (opcional) touch $DIR/index..cnf # Crie os aarquivos necess´rio: $database. 4.. a ca a 4. P´gina 130. 3..6.... 2.. O procedimento o a a est´ descrito em Se¸˜o 2.6 [Upgrading-grant-tables].pem’ Enter PEM pass phrase: Verifying password .10.

++++++ .pem’ Enter PEM pass phrase: Verifying password . section) []: Common Name (eg....pem -days 3600 -config $DIR/openssl. company) [Internet Widgits Pty Ltd]:MySQL AB Organizational Unit Name (eg.. the field will be left blank..’. the field will be left blank. What you are about to enter is what is called a Distinguished Name or a DN.Enter PEM pass phrase: ----You are about to be asked to enter information that will be incorporated into your certificate request... ----Country Name (2 letter code) [AU]:FI State or Province Name (full name) [Some-State]:. Locality Name (eg. Locality Name (eg. If you enter ’.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 271 # # # # # # # # # # # # # # You are about to be asked to enter information that will be incorporated into your certificate request.. There are quite a few fields but you can leave some blank For some fields there will be a default value. city) []: Organization Name (eg.pem -out \ $DIR/server-req. company) [Internet Widgits Pty Ltd]:MySQL AB Organizational Unit Name (eg.++++++ writing new private key to ’/home/monty/openssl/server-key.’. ----Country Name (2 letter code) [AU]:FI State or Province Name (full name) [Some-State]:. There are quite a few fields but you can leave some blank For some fields there will be a default value. city) []: Organization Name (eg. What you are about to enter is what is called a Distinguished Name or a DN.. YOUR name) []:MySQL server Email Address []: Please enter the following ’extra’ attributes to be sent with your certificate request .cnf # # # # # # # # # # # # # # # # # # # # # # # # # # Sa´da exemplo: i Using configuration from /home/monty/openssl/openssl. YOUR name) []:MySQL admin Email Address []: # # Create server request and key # openssl req -new -keyout $DIR/server-key. section) []: Common Name (eg.cnf Generating a 1024 bit RSA private key . If you enter ’..

pem # # # # # # # # # # # # # # # # Sa´da exemplo: i Using configuration from /home/monty/openssl/openssl.......pem \ -config $DIR/openssl.........++++++ writing new private key to ’/home/monty/openssl/client-key.......cnf -infiles $DIR/server-req..272 MySQL Technical Reference for Version 5........++++++ ..pem -out \ $DIR/client-req....pem -days 3600 -config $DIR/openssl.........cnf Generating a 1024 bit RSA private key ...cnf # # # # # # # # # ´ Saida exemplo: Using configuration from /home/monty/openssl/openssl..0......0-alpha # A challenge password []: # An optional company name []: # # Remove the passphrase from the key (optional) # openssl rsa -in $DIR/server-key....pem -out $DIR/server-key.....Enter PEM pass phrase: ----- ............ commit? [y/n]y Write out database with 1 new entries Data Base Updated # # Create client request and key # openssl req -new -keyout $DIR/client-key.pem # # Assina o certificado do servidor # openssl ca -policy policy_anything -out $DIR/server-cert.......cnf Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:’FI’ organizationName :PRINTABLE:’MySQL AB’ commonName :PRINTABLE:’MySQL admin’ Certificate is to be certified until Sep 13 14:22:46 2003 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified.....pem’ Enter PEM pass phrase: Verifying password .....

city) []: Organization Name (eg. What you are about to enter is what is called a Distinguished Name or a DN.pem # # # # # # # # # # # # # # # Sa´da exemplo: i Using configuration from /home/monty/openssl/openssl.pem # # Sign client cert # openssl ca -policy policy_anything -out $DIR/client-cert.cnf Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:’FI’ organizationName :PRINTABLE:’MySQL AB’ commonName :PRINTABLE:’MySQL user’ Certificate is to be certified until Sep 13 16:45:17 2003 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 273 # # # # # # # # # # # # # # # # # # # You are about to be asked to enter information that will be incorporated into your certificate request. the field will be left blank. ----Country Name (2 letter code) [AU]:FI State or Province Name (full name) [Some-State]:. company) [Internet Widgits Pty Ltd]:MySQL AB Organizational Unit Name (eg.’. If you enter ’. There are quite a few fields but you can leave some blank For some fields there will be a default value. YOUR name) []:MySQL user Email Address []: Please enter the following ’extra’ attributes to be sent with your certificate request A challenge password []: An optional company name []: # # Remove a passphrase from the key (optional) # openssl rsa -in $DIR/client-key.pem \ -config $DIR/openssl. section) []: Common Name (eg.pem -out $DIR/client-key. Locality Name (eg. commit? [y/n]y Write out database with 1 new entries .cnf -infiles $DIR/client-req.

m´scara do a co a a a endere¸o IP. • REQUIRE X509 significa que o cliente deve ter um certificado v´lido mas n˜o nos procua a pamos sobre o certificado.pem" cnf="$cnf ssl-key=$DIR/server-key.10.cnf & mysql --defaults-file=$DIR/my. Todas as op¸˜es comuns ainda s˜o exigidas (usu´rio.0-alpha # Data Base Updated # # Create a my.cnf file that you can use to test the certificates # cnf="" cnf="$cnf [client]" cnf="$cnf ssl-ca=$DIR/cacert.4. senha.0. Note que esta op¸˜o pode ser omitida se n˜o houver nenhum registro ACL que ca a permita conex˜es n˜o SSL.* TO root@localhost .pem" cnf="$cnf [mysqld]" cnf="$cnf ssl-ca=$DIR/cacert. a a a a • A op¸˜o REQUIRE SSL limita o servidor para permitir apenas conex˜es criptografadas ca o SSL. e ca o 4. todos os tipos de conex˜es criptografadas/ descripca o tografadas s˜o permitidas se o usu´rio e senha s˜o v´lidos.pem" cnf="$cnf ssl-cert=$DIR/client-cert. ivel mysql> GRANT ALL PRIVILEGES ON test. o a mysql> GRANT ALL PRIVILEGES ON test. c Existem diferentes possibilidades para limitarmos as conex˜es: o • Sem nenhuma op¸˜o SSL ou X509.* TO root@localhost -> IDENTIFIED BY ’goodsecret’ REQUIRE SSL. noome tabela/banco de dados).274 MySQL Technical Reference for Version 5.cnf Vocˆ tamb´m pode testar sua configura¸˜o modificando o arquivo ‘my.pem" cnf="$cnf ssl-key=$DIR/client-key.cnf’ acima para fazer e e ca referˆncia aos certificados de demonstra¸˜o no diret´rio mysql-dist-fonte/SSL.pem" echo $cnf | replace " " ’ ’ > $DIR/my.pem" cnf="$cnf ssl-cert=$DIR/server-cert. A unica restri¸˜o ´ que deve ser ´ ca e poss´ verificar a sua assinatura com um dos certificados CA.cnf # # To test MySQL mysqld --defaults-file=$DIR/my. o emissor ou assunto exato.4 Op¸oes SSL do GRANT c˜ O MySQL pode verificar atributos do certificado X509 em adi¸˜o ao esquema normal de ca usu´rio/senha.

a mysql> GRANT ALL PRIVILEGES ON test. • REQUIRE SUBJECT ’assunto’ exige que o cliente tenha um certificado X509 com o assunto ’assunto’. ST=Some-State. ca e a mysql> -> -> ’> GRANT ALL PRIVILEGES ON test. assim a op¸˜o SSL ´ desnecess´ria. L=Tallinn.com’.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 275 -> IDENTIFIED BY ’goodsecret’ REQUIRE X509. podemos pedir por algum m´todo de criptografia exato a ca e para permitir a conex˜o. O SSL pode ser fraco se algoritmos antigos com chaves de criptografias curtas s˜o usados. ISSUER e CIPHER podem ser combinadas na cl´usula REQUIRE desta co a forma: mysql> -> -> ’> ’> -> ’> -> GRANT ALL PRIVILEGES ON test.* TO root@localhost IDENTIFIED BY ’goodsecret’ REQUIRE SUBJECT ’C=EE. O=MySQL Finland AB. O=MySQL Finland AB.4. O=MySQL demo client certificate. O=MySQL demo client certificate.com’ AND ISSUER ’C=FI.* TO root@localhost IDENTIFIED BY ’goodsecret’ REQUIRE ISSUER ’C=FI.10. Elas podem ser dadas na linha de comando ou no arquivo de op¸˜o. ca --ssl Para o servidor. • REQUIRE ISSUER ’emissor’ coloca uma restri¸˜o na tentativa de conex˜o: O cliente ca a deve apresentar um certificado X509 v´lido emitido pelo CA ’emissor’. L=Helsinki. As op¸˜es SUBJECT. mas nenhuma op¸˜o pode ser especificada duas vezes. Para um proo grama cliente.* TO root@localhost -> IDENTIFIED BY ’goodsecret’ -> REQUIRE CIPHER ’EDH-RSA-DES-CBC3-SHA’. L=Helsinki.0.0 a palavra chave AND ´ opcional entre op¸˜es REQUIRE. Estas op¸˜es est˜o dispon´ co a iveis a partir do MySQL 4. e co A ordem das op¸˜es n˜o importa. permite que o cliente se conecte ao servidor usando SSL. Se o cliente apresenta um certificado que ´ valido mas tem um e ’assunto’ diferente.5 Op¸˜es SSL de Linha de Comando co A seguinte tabela lista op¸˜es que s˜o usadas para especificar o uso de SSL. ST=Some-State.* TO root@localhost IDENTIFIED BY ’goodsecret’ REQUIRE SUBJECT ’C=EE. ST=Some-State. ST=Some-State. CN=Tonu Samuel/Email=tonu@mysql.com’ AND CIPHER ’EDH-RSA-DES-CBC3-SHA’. a e mysql> -> -> ’> ’> GRANT ALL PRIVILEGES ON test. arquivos de co a certificado e arquivos de chaves.com’. A partir do MySQL 4. a conex˜o ´ disabilitada. Usando esta op¸˜o. especifica que o servidor permite conex˜es SSL. L=Tallinn. co a ca 4. Usar o certia ficado X509 sempre implica em criptografia. CN=Tonu Samuel/Email=tonu@mysql. CN=Tonu Samuel/Email=tonu@mysql. Esta . CN=Tonu Samuel/Email=tonu@mysql. • REQUIRE CIPHER ’m´todo’ ´ necess´rio para assegurar que uma criptografia forte ser´ e e a a usada.

4 [FLUSH].0-alpha op¸˜o por si s´ n˜o ´ suficiente para fazer uma conex˜o SSL ser usada. Vocˆ s´ precisa de um bloqueio de leitura. com um servidor e cliente a que tenham suporte a SSL habilitado. isto ca a e o possibilita outras threads a continuarem a pesquisar nas tabelas enquanto vocˆ copia os e arquivos no diret´rio do banco de dados. --ssl-cert=file_name O nome do arquivo de certificado SSL usado para estabelecer uma conex˜o a segura.56 e 4. usado para criptografia SSL. Veja Se¸˜o 6.0. ca --ssl-ca=file_name O caminho para um arquivo vom uma lista de Certifcados SSL confi´veis. e --ssl-key. Para obter um backup consistente. Vocˆ ca o a e a e tamb´m deve especificar as op¸˜es --ssl-ca. a --ssl-capath=directory_name O caminho para um diret´rio que cont´m certificados SSL confi´veis no formato o e a pem.2 [BACKUP TABLE]. Por exemplo. fa¸a um LOCK TABLES nas tabelas relevantes c seguido por FLUSH TABLES para as tabelas. P´gina 278.7. ca a Veja Se¸˜o 4. se o servidor ou ca a a clienteest´ compilado sem suporte SSL. O FLUSH TABLE ´ necess´rio para garantir que o e a todas as p´ginas ativas de ´ a indices ser˜o escritas em disco antes de iniciar o backup.5 Preven¸˜o de Disastres e Recupera¸˜o ca ca 4. uma conex˜o n˜o criptografada normal a a a ser´ usada. a ca Ent˜o use esta conta para se conectar ao servidor. e co Note que esta op¸˜o n˜o exige uma conex˜o SSL. cipher_list tem o mesmo formato que o comando openssl ciphers.6. --ssl-cert. P´gina 616.276 MySQL Technical Reference for Version 5. ca a .1 [SELECT]. a O modo seguro de de se certificar que uma conex˜o SSL ser´ usada ´ criar uma a a e conta no servidor que inclua uma cl´usula REQUIRE SSL na instru¸˜o GRANT.5.5. 4.1 Backups dos Bancos de Dados Como as tabelas do MySQL s˜o armazenadas como arquivos. ´ mais f´cil realizar um a e a backup. Vocˆ pode usar esta op¸˜o para indicar que a conex˜o n˜o deve usar SSL.5 [LOCK TABLES]. a A partir das vers˜es 3. Example: --ssl-cipher=ALL:-AES:-EXP --ssl-key=file_name O nome do arquivo de chave SSL a ser usado para estabelecer uma conex˜o a segura.Veja ca a Se¸˜o 4. P´gina 300. Veja Se¸˜o 6.4.12 BACKUP TABLE n˜o permitir´ que vocˆ sobrescreva o a a e arquivos exixtentes j´ que isso colocaria em risco a seguran¸a. vocˆ pode utie ivel e lizar SELECT INTO OUTFILE ou BACKUP TABLE.0. --ssl-cipher=cipher_list Uma lista de chaves permitidas. Fa¸a e ca a a c isto especificando a op¸˜o como --skip-ssl ou --ssl=0. a c Se vocˆ desejar realizar um backup ao n´ da linguagem SQL de um tabela.23. P´gina 562.

) O slave precisar´ destes ca e a a a arquivos para continuar a replica¸˜o de qualquer LOAD DATA INFILE interrompido.10. P´gina 362. (A localiza¸˜o padr˜o o ca ca a desta op¸˜o ´ o valor da vari´vel tmpdirse n˜o especificado.frm’. O script a mysqlhotcopy utiliza este m´todo. co exce¸˜o de algumas consultas erradas). Isto deve funcionar em 99. e e e quando vocˆ faz backup dos dados do slave.) 2. InnoDB n˜o armazena o conte´do das e a u tabelas em diret´rios de banco de dados.info’ que s˜o necess´rios para continuar a replica¸˜o depois a a ca que vocˆ restaurar os dados do slave. e Se o seu servidor MySQL ´ um slave. Veja Se¸˜o 4.[0-9]* | xargs cat | mysql .[0-9]* | mysql Em seu caso vocˆ pode querer re-executar apenas alguns log bin´rios. Restaure o backup original feito com o mysqldump ou backup bin´rio. P´gina 366. Veja Se¸˜o 4.10. P´gina 375.info’ e ‘relay-log. a 2.9% de todos os caso. Execute o seguinte comando para re-executar as atualiza¸˜es armazenadas no log co bin´rio: a shell> mysqlbinlog hostname-bin.): ca a 1.8 ca a ca [mysqlhotcopy]. Veja Se¸˜o 4. a partir de certas e a posi¸˜s (normalmente vocˆ quer re-executar todos os log bin´rios a partir da data de co e a restaura¸˜o do backup.7 [mysqldump]. seja qual for o m´todo de backup que vocˆ escolha. tente primeiro recuperar suas tabelas utilizando e REPAIR TABLE ou myisamchk -r. ca Se vocˆ necessita restaurar alguma coisa. vocˆ pode executar o conte´do do log de e e u atualiza¸˜o desta forma: ca shell> ls -1 -t -r hostname. tente o seguinte procedimento: (Isto s´ ir´ funcionar se vocˆ iniciou o o a e MySQL com --log-update. veja Se¸˜o 4. a 1. (Mas nopte que estes m´todos n˜o funcionar˜o e e a a se seu banco de dados cont´m tabelas InnoDB. vocˆ deve tamb´m fazer backup dos arquivos e e e ‘master. ‘*.4 [Log bin´rio].9. e o mysqlhotcopy funciona apenas para o tabelas MyISAM e ISAM. Se seu slave est´ sujeito a replica¸˜o de comandos e a ca LOAD DATA INFILE. Os arquivos de log ca a a bin´rio fornecem a informa¸˜o necess´ria para replicar altera¸˜es ao banco de dados a ca a co que forem feitas depois do ponto em que vocˆ executou mysqldump. a Se vocˆ estiver utilizando o log atualizado. Fazer um backup completo do seu banco de dados: shell> mysqldump --tab=/path/to/some/dir --opt db_name ou shell> mysqlhotcopy db_name /path/to/some/dir Vocˆ tamb´m pode simplesmente copiar os arquivos das tabelas (‘*.9. vocˆ tamb´m deve fazer backup dos arquivos ‘SQL_LOAD-*’ que podem e e existir no diret´rio especificado pela op¸˜o ‘slave-load-tmpdir’. Veja Se¸˜o 4.MYI’) quando o servidor n˜o estiver atualizando nada.MYD’) e e e os arquivos ‘*. Se o myisamchk falhar. P´gina 359 fpara mais informa¸˜es sobre o utilit´rio mysqlbinlog e a co a como us´-lo. depois inicie-o com a op¸˜o --logca ca bin[=nome_arquivo]. P´gina 375.5 ca ca ca [mysqlbinlog].4 [Binary log].9.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 277 Outra maneira de efetuar um backup de um banco de dados ´ utilizar o programa mysqldump e ou o script mysqlhotcopy. Interrompa o mysqld caso ele esteja em execu¸˜o.

Copiar arquivos do snapshot 5.. Tabelas existentes n˜o ser˜o reescritas . e Vocˆ pode tamb´m fazer backups seletivos com SELECT * INTO OUTFILE ’nome_arquivo’ e e FROM nome_tabela e restaurar com LOAD DATA INFILE ’nome_arquivo’ REPLACE. Para evitar registros duplicados.1 [Introdu¸˜o a Replica¸˜o]. vocˆ pode fazer: e e 1. 4.11.frm (defini¸˜es) e . Se vocˆ deseja fazer backup de diversas tabelas a e e como um snapshot... Veja Se¸˜o 4. Executar em um cliente (perl ?) FLUSH TABLES WITH READ LOCK 2. Para tabela a a o MyISAM. error. O arquivo de ´ co indice pode ser reconstru´ a partir destes dois. ca ca ca a Se vocˆ estiver utilizando um sistema de arquivos Veritas.nome_tabela. O comando retorna uma tabela com as seguintes colunas: Coluna Valor Table Nome da Tabela Op Sempre backup Msg type Um dos seguintes: status.5. vocˆ pode e e resolver isto configurando uma replica¸˜o e fazendo os backups na m´quina slave no lugar ca a da master.0-alpha O comando ls ´ usado para obter todos os arquivos de log na ordem correta. vocˆ deve primeiro usar LOCK TABLES obtendo um bloqueio de leitura e para cada tabela no grupo. copia os arquivos .se vocˆ tentar restaurar sobre uma tabela existente.23.2 Sintaxe de BACKUP TABLE BACKUP TABLE nome_tabela[.0. Bifurcar uma shell ou executar em outro cliente mount vfxs snapshot. A palavra chave REPLACE substitui os antigos registros com os novos quando um novo registro duplica um antigo registro em uma chave de valores unicos... obter´ um a a e a erro. ` medida que o backup ´ realizado. Desmontar snapshot 4.] TO ’/caminho/para/diret´rio/backup’ o Faz uma c´pia de todos os arquivos de tabela para o diret´rio de backup que ´ o m´ o o e inimo necess´rio para restaur´-lo. ido Antes de utilizar este comando. ´ Se vocˆ tiver problemas de performance realizando backups no seu sistema.nome_tabela. 3. por favor veja Veja Se¸˜o 4.5. Msg text A mensagem Note que o comando BACKUP TABLE est´ dispon´ a ivel somente no MySQL vers˜o 3.3 Sintaxe de RESTORE TABLE RESTORE TABLE nome_tabela[. Atualmente s´ funciona para tabelas MyISAM. P´gina 379. ca a Durante o backup.1 [Backup]. Executar no primeiro cliente UNLOCK TABLES 4. vocˆ precisar´ de um chave PRIMARY KEY ou uma UNIQUE na e a tabela.. A restaura¸˜o demora mais tempo do que o backup pois ´ necess´rio reconstruir o ca e a .] FROM ’/caminho/para/diret´rio/backup’ o Restaura a tabela ou tabelas utilizando o backup feito com BACKUP TABLE. info ou warning.5.278 MySQL Technical Reference for Version 5. uma de a cada vez. P´gina 276.MYD (dados). o bloqueio de leitura (read lock) ser´ usado para cada tabela.25 e a posterior..

.nome_tabela. e a ca e Verifica se existem erros na(s) tabela(s).. info. a Busca os registros para verificanado que liga¸˜es removidas est˜o ok. Se vocˆ n˜o especificar nenhuma op¸˜o.. or warning A mensagem Note que a instru¸˜o pode produzir v´rias linhas de informa¸˜es para cada tabela conferida. deve ser executado. Em tabelas MyISAM ´ a mesma coisa e que executar myisamchk --medium-check nome_tabela na tabela.]] ca ca op¸~o = QUICK | FAST | MEDIUM | EXTENDED | CHANGED ca CHECK TABLE funciona somente em tabelas MyISAM.6 [Table maintenance].5. Table is already up to date significa que o ca a gerenciador de armazenamento para a tabela indica que n˜o h´ necessidade de verificar a a a tabela. Sempre check Um dos seguintes: status. error. Isto assegura que a tabela est´ 100% consistente. MEDIUM ´ usado. Isto co a tamb´m calcula uma chave de conferˆncia para os registros e verifica isto e e com um checksum calculado para as chaves. Faz uma busca completa nas chaves para todas as chaves em cada registro. O comando retorna uma tabela com as seguintes colunas: a Coluna Table Op Msg type Msg text Valor Nome da Tabela.5. info ou warning A mensagem 4. Quanto mais chaves tiver. o O comando retorna uma tabela com as seguintes colunas: Coluna Table Op Msg type Msg text Valor Nome da Tabela Sempre restore Um dos seguintes: status.] [op¸~o [op¸~o. Se vocˆ n˜o ´ a e a obteve OK ou Not checked. a co S´ confere tabelas que n˜o foram fechadas corretamente. um reparo da tabela.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 279 ´ indice. mas pode demorar muito a tempo para executar! . ca a co A ultima linha ir´ ser do tipo Msg_type status e normalmente deve estar OK. a atualmente s´ funciona com tabelas MyISAM.4 Sintaxe de CHECK TABLE CHECK TABLE nome_tabela[. P´gina 281. Veja Se¸˜o 4.. mais demorado ser´. Para as tabelas MyISAM as estat´ isticas das chaves s˜o atualizadas. error. o a S´ verifica as tabelas que foram alteradas desde a ultima conferˆncia ou que o ´ e n˜o foram fechadas corretamente. normalmente. Como no comando BACKUP TABLE. Os diferentes tipos de consistˆncias s˜o as seguintes: e a Tipo QUICK FAST CHANGED MEDIUM EXTENDED Significado N˜o busca os registros verificando liga¸˜es incorretas.

. ´ prefer´ que seja um problema nos ´ e ivel indices e n˜o na a ´ parte de dados.5 Sintaxe do REPAIR TABLE REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[. Para registros de tamanho est´tico n´s saltamos a busca de registros para ca a o QUICK e FAST j´ que os registros est˜o raramente corrompidos.0-alpha Para tabelas MyISAM de tamanho dinˆmico. Neste caso a coluna a de auto incremento ir´ alterar seu valor. Todos os tipos de consistˆncia acima sempre confere os indices e deve ent˜o e a encontrar a maioria dos erros. a a neste caso a tabela n˜o poder´ ser utilizada at´ ser reparada). (O unico caso em que isto n˜o e ca ´ a acontece ´ quando vocˆ suspeita que encontrou um bug no c´digo do MyISAM. que pode causar problemas como um erro de chave duplicada. e e o EXTENDED deve ser utilizado somente depois de ter executado um check normalmente. . Se isto ocorrer. de acordo com as regras das colunas de auto a incremento. a a e FAST e CHANGED s˜o normalmente chamados a partir de um script (um exemplo ´ ser exea e cutado a partir do cron) Se vocˆ desejar conferir suas tabelas de tempos em tempos. a a Vocˆ pode combinar op¸˜es de consistˆncia como no exemplo a seguir que faz uma verifica¸˜o e co e ca r´pida na tabela para ve se ela foi fechada corretamente: a CHECK TABLE test_table FAST QUICK.). ent˜o a tabela ser´ marcada como ’corrupted’.tbl_name. n˜o podem ser corrigidas automaticamente: a • Found row where the auto_increment column has the value 0. Alguns problemas relatados por CHECK TABLE. uma verifica¸˜o iniciada sempre far´ uma veria ca a fica¸˜o MEDIUM. vocˆ n˜o deve utilizar nenhuma e o e a op¸˜o para o comando check ou utilizar a op¸˜o QUICK. CHECK TABLE ir´ marcar a tabela como ok.] [QUICK] [EXTENDED] REPAIR TABLE funciona somente em tabelas MyISAM e ´ a mesma coisa que executar e myisamchk -r nome_tabela na tabela.280 MySQL Technical Reference for Version 5. Para se livrar do alerta.. Neste a a caso.5. a Se uma tabela estiver corrompida. ca Isto n˜o ´ exatamente um erro. Na e maioria dos casos. o FAT ´ uma op¸˜o melhor que CHANGED.0. sob utiliza¸˜o normal. NOTA: em alguns casos CHECK TABLE ir´ alterar a tabela! Isto acontece se a tabela estiver a marcada como ’corrupted’ (corrompida) ou ’not closed properly’ (n˜o foi fechada corretaa mente) mas o CHECK TABLE n˜o encontrar n˜o encontrar nenhum problema na tabela. Se vocˆ s´ quiser conferir uma tabela que acredita estar ok. 4. qualquer ca erro no arquivo de dados. basta executar uma instru¸˜o UPDATE para configurar a coluna ca para algum outro valor diferente de 0. Isto significa que vocˆ possui um registro na tabela onde o campo ´ e indice que utiliza o ´ poss´ criar um registro onde a coluna recurso auto_increment contem o valor 0. O ultimo deve ser utilizado quando ca ca ´ vocˆ estiver com pressa e o r´ e isco do QUICK n˜o encontrar um erro no arquivo de dados for a m´ inimo (Na maioria dos casos o MySQL pode encontrar. (E ivel de auto incremento seja 0 definindo explicitamente 0 em uma instru¸˜o UPDATE). mas continuar obtendo erros de uma tabela quando o MySQL tenta atualizar um registro ou encontrar um registro pela chave (isto seria muito dif´ ocorrer caso uma conferˆncia normal icil e tenha executado com sucesso!). mas pode causar problemas se vocˆ decidir descarregar a e e a tabela e restaur´-la ou executar um ALTER TABLE na tabela.

4. vocˆ pode tentar reparar a tabela com myisamchk -o. ´ Se vocˆ utilizar EXTENTED.1.frm’. Veja ca a Se¸˜o 7. existe um modo USE_FRM para REPAIR.1. ca a Para verificar/reparar tabelas MyISAM (.3 [MyISAM table problems]. P´gina 279.5. Isto pode ser melhor que a ordena¸˜o em chaves de ca ca tamanho fixo se vocˆ tiver grandes chaves do tipo char() que compactam muito bem. P´gina 280. Se o parˆmetro QUICK for especificado. Se as suas tabelas estiverem muito corrompidas. REPAIR tenta reparar somente a ´rvore de ´ a a indices. j´ que REPAIR TABLE a e a ainda n˜o implementa todas as op¸˜es de myisamchk. mas a e a a poss´ ivel. Isto n˜o ´ um cen´rio desej´vel. o comando REPAIR n˜o era gravado no log bin´rio.MYD) vocˆ deve utilizar o utilit´rio e a myisamchk. vocˆ deve encontrar a raz˜o. (Claro que ´ sempre bom inciar com um backup). Veja Cap´ “ptexi tulo 7 [Tipos de Tabelas]. Aviso: Se o mysqld morre durante um REPAIR TABLE.1 [Crashing]. usando a informa¸˜o do arquivo ‘.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 281 Normalmente vocˆ nunca deve executar este comando. A ultima linha ser´ de Msg_type status e normalmente deve exibir OK. mas se um disastre ocorrer vocˆ e e vai precisar recuperar seus dados de uma tabela MyISAM utilizando REPAIR TABLE.ISM e . Veja Se¸˜o 4.23.5.13 vocˆ pode mandar verificar as tabelas MyISAM com o a e comando CHECK TABLE. P´gina 629.MYI e .1. Futuramente iremos torn´-lo mais a co a flex´ ivel. o MySQL criar´ o indice. Este tipo de reparo n˜o pode ser feito com ca a myisamchk. ´ essencial que vocˆ fa¸a imediatae e c mente outro REPAIR na tabela antes de executar qualquer outro comando nela.MYI’ estiver faltando ou o seu cabe¸alho estiver corrompido. info ou warning Msg text A mensagem Note que a instru¸˜o pode produzir v´rias linhas de informa¸˜es para cada tabela recuperca a co ada. O comando retorna uma tabela com as seguintes colunas: Coluna Valor Table Nome da Tabela Op Sempre repair Msg type Um dos seguintes: status.1. P´gina 921. a .0.6 Utilizando myisamchk para Manuten¸˜o de Tabelas e ca Recupera¸˜o em Caso de Falhas ca A partir do MySQL vers˜o 3. Se o retorno a n˜o for OK. Pode-se reparar ca a tabelas com o comando REPAIR TABLE.5 [REPAIR TABLE].ISD) vocˆ deve usar o utilit´rio e a isamchk. eles s˜o escritos no log bin´rio a menos que a palavra chave opcional NO_WRITE_TO_ a a BINLOG (ou seu alias LOCAL) seja usada. Para consistir/reparar tabelas ISAM (. e No MySQL 4. ca a REPAIR TABLE repara uma tabela possivelmente corrompida.5. Veja Se¸˜o 4.4. para eleiminar e a a necessidade de se usar REPAIR TABLE! Veja Se¸˜o A.2. Desde o MySQL a a 4. No pior caso vocˆ pode ter um novo arquivo de e e ´ indice limpo sem informa¸˜o sobre o arquivo de dados e quando vocˆ executar o pr´ximo ca e o comando o arquivo de dados pode ser sobreescrito.4 [CHECK TABLE]. Neste modo o MySQL recriar´ a c a tabela. registro a registro em vez de criar e a um ´ indice de uma vez com ordena¸˜o. Use-o se o arquivo ‘. P´gina 635.1. Antes do MySQL 4. error.

e como utilizar o myisamchk para executar suas v´rias fun¸˜es. ca a Embora os reparos realizados pelo myisamchk sejam bastante seguros.MYI Vocˆ pode verificar todas as tabelas em todos os bancos de dados especificando um meta e caracter com o caminho para o diret´rio de banco de dados do MySQL: o shell> myisamchk /caminho/para/diret´rio_dados/*/*.MYI’.6. OPTIMIZE TABLE ´ mais f´cil de usar e vocˆ n˜o tem que se e a e a preocupar com a recarrega das tabelas. vocˆ pode copiar os arquivos que a o e correspondem a uma tabela de banco de dados em outra localiza¸˜o e realizar neste outro ca lugar as opera¸˜es corretivas.0. porque myisamchk n˜o faz id´ia de onde e a e seu banco de dados se encontra. mas tudo tamb´m se aplica ao antigo e isamchk.6. vocˆ pode verificar todas as tabelas e a o e existentes especificando o caminho para o diret´rio: o shell> myisamchk /caminho/para/banco_de_dados/*. P´gina 299. o e e co co myisamchk simplesmente checa sua tabela. As seguintes se¸˜es descrevem como a a a co executar myisamchk (incluindo uma descri¸˜o de suas op¸˜es).1 Sintaxe do myisamchk myisamchk ´ chamado desta forma: e shell> myisamchk [op¸~es] nome_tabela co As op¸~es especificam o que vocˆ deseja que o myisamchk fa¸a. que lhe permite especificar todas tabelas em um diret´rio utilizando o padr˜o ‘*. Por o a exemplo.0-alpha No texto a seguir iremos comentar sobre o myisamchk. myisamchk n˜o se importa se os arquivos a est˜o localizados em um diret´rio de banco de dado. como montar um calend´rio ca co a de manuten¸˜o.MYI’). e e Se vocˆ executar o myisamchk em algum lugar diferente do diret´rio do banco de dados.1 [OPTIMIZE TABLE].MYI Se vocˆ n˜o estiver no diret´rio do banco de dados. verfic´-las. se vocˆ est´ em um diret´rio de banco de dados. ca a co Vocˆ pode.) Sem op¸˜es.282 MySQL Technical Reference for Version 5. Elas s˜o descritas abaixo. co Vocˆ pode nomear v´rias tabelas na linha de comando do myisamchk se vocˆ desejar. e o vocˆ deve especificar o caminho para o arquivo. Vocˆ pode utilizar o utilit´rio myisamchk para obter informa¸˜es sobre suas tabelas de e a co bancos de dados. mas n˜o ´ t˜o r´pido e confi´vel (no caso real de erros fatais) como o a e a a a mysisamchk. especifique as op¸˜es descritas abaixo e nas se¸˜es co co co seguintes. Vocˆ e a e e tamb´m pode especificar um nome como um arquivo de ´ e indice (com o sufixo ‘. Para obter maiores informa¸˜es ou dizer ao co myisamchk para tomar a¸˜es corretivas. Por outro lado.5. por´m ´ sempre uma e e boa id´ia fazer um backup dos dados ANTES de realizar um reparo (ou qualquer coisa que e far´ grandes altera¸˜es em alguma tabela) a co 4. Na verdade. repar´-las ou otimiz´-las. Veja Se¸˜o 4.MYI o A maneira recomendada para conferir todas as tabelas rapidamente ´: e . nome_tabela ´ o nome da tabela do banco de dados que vocˆ deseja verificar/reparar. utilizar o comando OPTIMIZE TABLES para otimizar e e reparar tabelas. co e c a (Vocˆ tamb´m pode obter a lista das op¸˜es com myisamchk --help. vocˆ pode checar todas as e a o e tabelas no diret´rio desta forma: o shell> myisamchk *. na maioria dos casos.

nomearquivo’. vocˆ deve for¸ar o sincronimo e fechamento de todas tabelas a ca e c com FLUSH TABLES e assegurar que ningu´m mais esteja utilizando as tabelas quando for e executar o myisamchk.ISM o Se vocˆ quiser conferir todas as tabelas e reparar todas que estiverem corrompidas. --set-variable=nome=op¸~o ca ca Configura o valor de uma vari´vel. e o Perceba que se vocˆ obter um erro do tipo: e myisamchk: warning: 1 clients is using or hasn’t closed the table properly Isto significa que vocˆ est´ tentando verificar uma tabela que est´ sendo atualizada por e a a outro programa (como o servidor mysqld) que ainda n˜o fechou o arquivo ou que finalizou a sem fechar o arquivo corretamente. Por favor note que as sintaxes --seta variable=nome=valor e -O name=value est˜o obsoletas desde o MySQL 4.5. No MySQL vers˜o 3. A string debug_options geralmente ´ e -? ou --help Exibe uma mensagem de ajuda e sai. Se o mysqld est´ em execu¸˜o.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 283 myisamchk --silent --fast /caminho/para/diret´rio_dados/*/*. que ´ o caso normal quando vocˆ utiliza --recover.23 a forma mais simples de evitar este problema a ´ utilizar CHECK TABLE no lugar de myisamchk para verificar as tabelas. ca ’d:t:o.6.2 Op¸˜es Gerais do myisamchk co myisamchk suporta as seguintes op¸˜es. e 4. a Use --nome=valor. As vari´veis poss´ a iveis e seus valores padr˜es para o myo isamchk podem ser examinados com myisamchk --help Vari´vel a Valor key buffer size 523264 read buffer size 262136 write buffer size 262136 sort buffer size 2097144 sort key blocks 16 decode bits 9 sort_buffer_size ´ utilizado quando as chaves s˜o reparadas pela ordena¸˜o e a ca das chaves.MYI o isamchk --silent --force -O key_buffer=64M -O sort_buffer=64M \ -O read_buffer=1M -O write_buffer=1M /caminho/para/diret´rio_dados/*/*. -O nome=op¸~o.MYI o isamchk --silent /caminho/para/diret´rio_dados/*/*. pode e utilizar linha a seguir: myisamchk --silent --force --fast --update-state -O key_buffer=64M \ -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M \ /caminho/para/diret´rio_dados/*/*.ISM o A linha acima assume que vocˆ tem mais de 64 MB de mem´ria livre. co -# ou --debug=debug_options Sa´ ida do log de depura¸˜o.0. e e key_buffer_size ´ utilizando quando vocˆ estiver conferindo a tabela com e e -extended-check ou quando as chaves s˜o reparadas inserindo-as registro a a .

Se vocˆ estiver utilizando --extended-check e tiver muita mem´ria. Se vocˆ tiver muito espa¸o tempor´rio e puder for¸ar e c a c o myisamchk a reparar por ordena¸˜o vocˆ pode utilizar a op¸˜o --sortca e ca recover. a -w ou. Esta op¸˜o deve ser usada somente em casos extremos. --wait No lugar de gerar um erro se a tabela estiver bloqueada.0-alpha registro na tabela (como com inserts normais). -vvv) para gerar mais sa´ u ida! -V ou --version Exibe a vers˜o do myisamchk e sai. -v ou --verbose Modo prolixo.0. Ele pode ser utilizado com -d e -e.284 MySQL Technical Reference for Version 5. Utilize -v m´ltiplas vezes -vv. na maioria dos casos. mas ´ muito mais lenta. Gera mais informa¸˜o de sa´ ca ida. pois somente um dos buffers acima ser´ utilizado a cada vez. Perceba que se vocˆ estiver utilizando mysqld e na tabela com --skip-external-locking. ida Vocˆ pode utilizar -s duas vezes (-ss) para deixar o mysisamchk mais silene cioso. Isto ´ o caso quando se tem chaves CHAR. ca myisamchk ou myisamchk --medium-check deve. e • Se os arquivos tempor´rios necess´rios para ordenar as chaves forem maior a a que o dobro do tamanho de quando se criasse o arquivo de chaves diretamente. vocˆ deve e o e aumentar um pouco o valor de key_buffer_size! .6. a -s ou --silent Modo discreto ou silencioso. VARCHAR ou TEXT tao e grandes quanto necess´rio pela ordena¸˜o para armazenar todas as chaves a ca durante o processo. Esta ´ a opera¸˜o padr˜o se vocˆ n˜o estiver e ca a e a utilizando op¸˜es que a anulam.5. Normalmente. Repara¸˜o atrav´s do buffer de chaves (key buffer) economiza muito mais espa¸o ca e c em disco do que utilizando ordena¸˜o. 4. espere at´ que a tabela e fique livre antes de continuar. a tabela s´ pode ser trancada por o outro comadno myisamchk. co -e ou --extend-check Verifica a tabela de forma completa (que ´ bastante lento se vocˆ tiver v´rios e e a ´ indices).3 Op¸˜es de Verifica¸˜o do myisamchk co ca -c ou --check Confere por erros na tabela. configure as vari´veis acima para e ca a a cerca de 1/4 da sua mem´ria dispon´ o ivel. estar apto a encontrar quaisquer erros na tabela. Escreve a sa´ somente quando um erro ocorre. O reparo atrav´s de buffer de e chaves (key buffer) ´ utilizado nos seguintes casos: e • Se vocˆ utilizar --safe-recover. Vocˆ pode configurar as vari´veis para e a valores altos. ca e Se vocˆ deseja uma repara¸˜o mais r´pida.

Deve. Se vocˆ estiver utilizando MyISAM. -i ou --information Exibe informa¸˜es e estat´ co isticas sobre a tabela que estiver sendo verificada. -k # ou --keys-used=# Se vocˆ estiver utilizando ISAM. Isto ´ util se vocˆ utiliza o myisamchk a e´ e para verificar uma tabela que esteja em uso por alguma outra aplica¸˜o que ca n˜o utiliza bloqueios (como no mysqld --skip-external-locking). diz ao manipulador de tabelas do ISAM para e atualizar somente os primeiros # ´ indices.TMD’) em vez de abora tar. se myisamchk encontrar quaisquer erros na tabela. e .MYI’ quando a tabela foi verificada e se a tabela falhou. Isto deve ser utilizado para obter o benef´ integral da op¸˜o --check-onlyicio ca changed. ser bom o bastante para a maioria dos casos. ´ ca -f ou --force Reinicia o myisamchk com -r (reparos) na tabela. mas encontra somente 99. mas vocˆ n˜o deve utilizar esta op¸˜o se o servidor mysqld esta usando e a ca a tabela e o mysqld esta sendo executado com --skip-external-locking.5. -D # ou --data-file-length=# Tamanho m´ximo do arquivo de dados (ao recriar arquivos de dados quando a eles est˜o ’cheios’). -m ou --medium-check Mais r´pido que extended-check. a -e ou --extend-check Tenta recuperar todos registros poss´ iveis do arquivo de dados.99% de todos os a erros. a 4. -T ou --read-only N˜o marca as tabelas como verificadas.MYD’ como ‘filename-time. -f ou --force Sobrescreve antigos arquivos tempor´rios (‘nome_tabela.BAK’ --correct-checksum Correct checksum information for table. entretando. N˜o utiliza esta op¸˜o a a e a a ca menos que esteja em desespero total.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 285 -F ou --fast Verifica apenas tabelas que n˜o foram fechadas corretamente. -U ou --update-state Armazena no arquivo ‘.6.4 Op¸˜es de Reparos do myisamchk co As seguintes op¸˜es s˜o usadas se vocˆ iniciar o myisamchk com -r ou -o: co a e -B or --backup Faz um backup dos arquivos ‘. Normalmente isto ir´ encontrar tamb´m v´rias linhas com lixo. a -C ou --check-only-changed Verifica apenas tabelas que foram alteradas desde a ultima verifica¸˜o.

. (Perceba que no caso indesej´vel de -r falhar. Normalmente sempre se deve tentar. Diret´rio onde conjuntos de caracteres s˜o armazenados. A op¸˜o foi adicionada no MySQL 4. o arquivo de daca a dos continuar´ intacto. e somente se ele falhar. a a o -p or --parallel-recover Usa a mesma t´cnica que -r e -n. Este c´digo ´ alfa. Somente se o myisamchk e ca relatar que a tabela n˜o pode ser recuperada pelo -r vocˆ deve tentar ent˜o a e a a op¸˜o -o. em e threads diferentes. esta ´ primeira op¸˜o a ser tentada.0. A partir do MySQL a a 4..0-alpha informa quais chaves usar. Se vocˆ deseja recua e perar uma tabela.1. -l ou --no-symlinks N˜o segue links simb´licos. vocˆ deve aumentar o a e o e tamanho de sort_buffer_size! -o ou --safe-recover Utiliza um antigo m´todo de recupera¸˜o (le atrav´s de todos registros na ordem e ca e e atualiza todas as ´rvores de ´ a indices baseado nos registros encontrados).286 MySQL Technical Reference for Version 5. usar -o.0 pois o o ca a MySQL 4.0.) Se vocˆ possui muita mem´ria. no Windows). Eles ser˜o usado da forma robina round. c um reparo com -r.2. a a myisamchk ir´ usar a vari´vel de ambiente TMPDIR para isto. tmpdir pode ser configurado com uma lista de caminhos separados por dois pontos : (ponto e virgula . primeiro. vocˆ deve aumentar o tamanho de sort_ e o e buffer_size! -n ou --sort-recover For¸a o uso de ordena¸˜o do myisamchk para resolver as chaves mesmo se os c ca arquivos tempor´rios forem muito grandes. Se vocˆ possuir muita mem´ria. mas cria todas as chaves em paralelo.t ou --tmpdir=path Caminho para armazenar arquivos tempor´rios. o a --set-character-set=name Altere o conjunto de caracteres usado pelo ´ indice .0 n˜o ir´ remover links simb´licos durante os reparos. Este m´todo de recupera¸˜o tamb´m utiliza muito a e ca e menos espa¸o em disco que -r. a --character-sets-dir=. ca o e Use por sua conta e risco! -r ou --recover Pode concertar quase tudo excetos chaves unicas que n˜o s˜o unicas (Que ´ um ´ a a ´ e erro extremamente indesej´vel com tabelas ISAM/MyISAM). Se isto n˜o for configurado. Isto pode ser utilizado para inser¸˜es mais r´pidas! ´ co a Indices desativados podem ser reativados utilizando myisamchk -r.. mas pode tratar v´rios casos indesej´veis que ca e a a o -r n˜o consegue tratar. Normalmente o myisamchk repara a tabela para a o qual um link simb´lico aponta. onde cada bit seleciona uma chave (a primeira chave possui o bit 0). Esta op¸˜o n˜o existe no MySQL 4. esta op¸˜o ´ muito mais lenta que -r.

. Pode ser fornecido um sea gundo -q para for¸ar o myisamchk para modificar o arquivo de dados original c no caso de chaves duplicadas. Isto faz com que seus dados estejam muito mais localizados e pode aumentar a velocidade das opera¸˜es co ´ SELECT e ORDER BY neste indice. a e a -R or --sort-records=# Ordena o registro de acordo com um ´ indice. 4. o myisamchk a e co pode operar mais rapidamente. que exibe os ´ indices de um tabela na mesma ordem que o myisamchk os vˆ. Se nenhum c valor ´ dado..6 Uso de Mem´ria do myisamchk o Aloca¸˜o de mem´ria ´ importante quando vocˆ executa o myisamchk. u 4. Utilizando valores maiores. O valor e o padr˜o ´ utilizar somente 3MB para corre¸˜es. (Pode ser bem lento na primeira ordena¸˜o!) ca Para encontrar um n´mero de ´ u indices da tabela. myisamchk n˜o ca o e e a utiliza mais mem´ria do que vocˆ especifica com a op¸˜o -O. alem de reparar e verificar tabelas: co -a or --analyze Analiza a distribui¸˜o das chaves.6. Se vocˆ ir´ utilizar o myisamchk o e ca e a em grandes arquivos.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 287 -q ou --quick Reparo r´pido sem modificar o arquivo de dados.5.5. ent˜o define o pr´ximo valor AUTO_INCREMENT com o maior valor e a o usado para a chave automatica + 1. ca -A or --set-auto-increment[=value] For¸a que AUTO_INCREMENT com um valor maior ou igual a este. vocˆ pode utilizar op¸˜es tais como esta (em adi¸˜o `s v´rias outras que podem ser e co ca a a especificadas): shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M . e . -d or --description Exibe alguma informa¸˜o sobre tabela. Isto aumenta o desempenho de join haca bilitando o otimizador de joins para melhor escolher em qual ordem ele deve unir as tabelas e quais chaves ele deve usar: myisamchk --describe --verbose table_name’ ou usar SHOW KEYS no MySQL. Isto otimizar´ a as buscas e tornar´ a pesquisa em tabela atrav´s da chave mais r´pida.6. vocˆ deve decidir primeiro quanta mem´ria deseja usar. Por exemplo. Utilizando -O sort=16M provavelmente ´ suficiente para a maioria dos casos. -u ou --unpack Descompacta arquivo empacotado com o myisampack. use SHOW INDEX. ´ e Indices s˜o a n´meros que se iniciam com 1. -S or --sort-index Ordene o bloco da ´rvore ´ a indice do mais alto para o mais baixo. se vocˆ tiver mais que 32M de mem´ria e o RAM.5 Outras Op¸˜es do myisamchk co Outras a¸˜es que o myisamchk pode fazer.

como o Linux). vocˆ pode facilmente obter erros de mem´ria. antes de continuar. Enquanto vocˆ faz isto.3 [MyISAM table problems].6. todos os clientes que tentarem e atualizar a tabela ir˜o esperar at´ que o myisamchk esteja pronto.7 Uso do myisamchk para Recupera¸˜o em Caso de Falhas ca Se vocˆ executa o mysqld com a op¸˜o --skip-external-locking (que ´ o padr˜o em e ca e a alguns sistemas. Se vocˆ pode ter e certeza que ningu´m est´ acessando as tabelas atrav´s do mysqld enquanto vocˆ executa e a e e o myisamchk. ser´ necess´rio espa¸o para um buffer de ordena¸˜o de: (maior_chave a a c ca + tamanho_do_ponteiro_de_registro)*n´mero_de_registros * 2. a e Se vocˆ utilizar o myisamchk para reparar ou otimizar tabelas. vocˆ deve. Este espa¸o ´ alocado no disco tempor´rio (especificado por TMPDIR ou c e a --tmpdir=#). configure TMPDIR para apontar para algum diret´rio com mais espa¸o e o c reinicie o myisamchk.0-alpha Certiffique-se que o myisamchk utiliza arquivos tempor´rios em TMPDIR. vocˆ s´ tem que executar o mysqladmin flush-tables antes de iniciar a e o verifica¸˜o das tabelas. 4. Se vocˆ tiver um problema com espa¸o em disco durante o reparo. Este espa¸o n˜o o c a ´ necess´rio se for feito um reparo com --quick. Suas tabelas podem estar corrompidos se o servidor e o myisamchk acessarem a tabela simultaneamente. ca a A se¸˜o de tabelas MyISAM contˆm motivos do porque uma tabela pode estar corrompida. vocˆ DEVE sempre assegurar e e que o servidor mysqld n˜o esteja utilizando a tabela (Isto tamb´m aplica se vocˆ utiliza a e e --skip-external-locking). Se TMPDIR aponta a para um sistema de arquivos em mem´ria. Este espa¸o ´ e c e c e necess´rio no mesmo disco que o arquivo de ´ a indice original! • Quando utilizando --recover ou --sort-recover (mas n˜o quando usando --safea recover. o e o Se isto acontecer. ca a . fazer e a e um mysqladmin flush-tables antes de executar o myisamchk. u Vocˆ pode e conferir o tamanho das chaves e o tamanho do ponteiro de registro com myisamchk -dv tabela.1. vocˆ n˜o pode utilizar com seguran¸a o myisamchk para e a c conferir uma tabela se o mysqld estiver utilizando a mesma tabela. vocˆ pode obter um altera que a tabela est´ corrompida mesmo se n˜o estiver. pode usar o myisamchk para e a conferir as tabelas a qualquer hora. pode-se tentar usar e c --safe-recover em vez de --recover. o myisamchk tamb´m precisar´ de bastante espa¸o em disco: e a c • Dobra-se o tamanho do arquivo de registros (o original e uma c´pia). Se vocˆ n˜o tem certeza. j´ que neste caso somente o arquivo e a a de ´ indices ser´ recriado. Este espa¸o ´ necess´rio no mesmo disco que se encontra o a c e a arquivo de registros original! • Espa¸o para o novo arquivo de ´ c indice que substitui o antigo. ent˜o vocˆ deve desligar o mysqld enquanto ca e a a e verifica as tabelas. pelo menos. ca e Veja Se¸˜o 7. Se suas tabelas corromperem com frequˆncia deve ser encontrada a raz˜o para e a isto! Veja Se¸˜o A. Se vocˆ n˜o desligar o mysql. Se vocˆ executa o myisamchk enquanto o mysqld estiver atualizando as e tabelas. P´gina 635. P´gina 921. Este cap´ itulo descreve como checar e lidar com dados corrompidos nos bancos de dados MySQL.288 MySQL Technical Reference for Version 5.1 [Falhas].5. portanto. O arquivo de ´ indices antigo ´ ´ truncando no inicio.0.4. Quando reparando. normalmente este espa¸o ´ ignorado. e a a Se vocˆ n˜o estiver utilizando --skip-external-locking.

utilize os seguintes comandos: myisamchk nome_tabela Encontra 99.MYD’ est´ corrompido e aborda o reparo neste caso. Isto faz o co ca myisamchk continuar a percorrer a tabela at´ um m´ximo de 20 erros. Se vocˆ deseja a e obter mais informa¸˜es. um simples myisamchk (sem argumentos al´m do nome da ca e tabela) ´ suficiente.MYD’ e renomeando o novo arquivo a com nome original.5. Isto ´ seguro.MYD’ linha a linha. e . Se vocˆ a e e desejar conferir uma tabela. mas assume que o arquivo ‘.MYD’.MYD’ tempor´rio. Neste caso. vocˆ deve executar normalmente o myisamchk sem e op¸˜es ou com as op¸˜es -s ou --silent. Ele verifica primeiramente erros em todas as entradas do ´ indice e ent˜o le todos os registros. 4.frm’ Arquivo com defini¸˜es co da tabela (form) ‘nome_tabela. Normalmente o uso de duas op¸˜es --quick ´ util somente se vocˆ tiver co e ´ e muito pouco espa¸o em disco para realizer um reparo normal. Ele o termina o est´gio de reparos removendo o antigo arquivo ‘. O myisamchk trabalha criando uma c´pia do arquivo de dados ‘. myisamchk n˜o cria um arquivo ca a ‘. ´ importante entender que cada tabela ca e nome_tabela em um banco de dados corresponde a tres arquivos no diret´rio do banco de o dados: Arquivo Prop´sito o ‘nome_tabela. Em e a utiliza¸˜o normal. Se for utilizada a op¸˜o --quick. Neste caso vocˆ deve pelo c e menos fazer um backup antes de executar o myisamchk. Ele faz uma conferˆncia lendo todas as chaves de cada registro e para verificar se eles realmente apontam para o registro correto. mas e a ca a problemas ocorrem mais frequentemente em arquivos de dados e ´ indices. co co myisamchk -m nome_tabela Encontra 99.MYI’ Arquivo de ´ indices Cada um destes trˆs tipos de arquivos est´ sujeito a corrup¸˜o de v´rias formas.MYD’ est´ correto e somente gera um novo a a arquivo ´ indice sem mexer no arquivo de dados. O que ele n˜o pode encontrar ´ corrompia e mento que envolva SOMENTE o arquivo de dados (que n˜o ´ comum). pois o myisamchk detecta e automaticamente se o arquivo ‘. Vocˆ a e pode tamb´m fornecer duas op¸˜es --quick para o myisamchk. myisamchk a normalmente ir´ parar depois do primeiro erro que encontrar.999% de todos os erros. Ele calcula um checksum a para todas as chaves nos registros e verifica se o checksum ´ o mesmo que o e checksum das chaves na ´rvore de ´ a indices.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 289 Quando se realizar recupera¸˜o devido a falhas. myisamchk -e nome_tabela Realiza a verifica¸˜o completa de todos os dados (-e significa “conferˆncia exca e tendida”).8 Como Verificar Erros em Tabelas Para conferir uma tabela MyISAM. pode adicionar a op¸˜o --verbose (-v). o myisamchk e co n˜o aborta em alguns erros (como chaves duplicadas) mas tenta resolvˆ-los modificando o a e arquivo ‘. Isto pode demorar MUITO tempo em uma tabela grande com v´rias chaves.6.99% de todos os erros.MYD’ Arquivo de dados ‘nome_tabela.

MYI e . vocˆ deve usar e o e a ferramenta isamchk.9 Como Reparar Tabelas Na se¸˜o seguinte n´s s´ falaremos do uso do myiasmchk em tabelas MyISAM (extens˜es ca o o o . vocˆ deve reparar suas tabelas.6. P´gina 280.5. myisamchk pode normalmente detectar a e maioria dos problemas que ocorrem. vocˆ precisa alterar os arquivos.frm’ is locked against change • Can’t find file ‘nome_tabela. O processo de reparo involve at´ quatro est´gios.ISD). e 4. vocˆ pode reparar tabelas MyISAM com o comando a e REPAIR TABLE. Aqui est˜o co e a os erros mais comuns que indicam um problema com a tabela: shell> perror 126 127 132 134 135 136 141 144 145 126 = Index file is crashed / Wrong file format 127 = Record-file is crashed 132 = Old database file 134 = Record was already deleted (or record file crashed) 135 = No more room in record file 136 = No more room in index file 141 = Duplicate unique key or constraint on write or update 144 = Table is crashed and last repair failed 145 = Table was marked as crashed and should be repaired Note que o erro 135 (n˜o mais no arquivo de registro). Tenha certeza que eles possam ser lidos pelo usu´rio do Unix com o qual mysqld a ´ executado (e para vocˆ.MYI’ (Errcode: ###) • Unexpected end of file • Record file is crashed • Got error ### from table handler Para obter mais informa¸˜es sobre o erro vocˆ pode executar perror ###. Antes de come¸ar.0. n˜o ´ um erro que pode ser a a e corrigido por um simples reparo. descritos abaixo.MYD). ca a Os sintomas de uma tabela corrompida incluem pesquisas que abortam inesperadamente e erros como estes: • ‘nome_tabela.0-alpha myisamchk -e -i nome_tabela Como o comando anterior. Se vocˆ estiver usando tabelas ISAM (extens˜es . Vocˆ tamb´m pode usar esta t´cnica para o erro 136 (n˜o mais no arquivo de ´ e e e a indice). Em outros casos. mas a op¸˜o -i diz ao myisamchk para exibir algumas ca informa¸˜es estat´ co isticas tamb´m. e e e a Se n˜o estiverem. A partir do MySQL vers˜o 3.5.14.290 MySQL Technical Reference for Version 5. Neste caso vocˆ deve fazer: e ALTER TABLE tabela MAX_ROWS=xxx AVG_ROW_LENGTH=yyy.5 [REPAIR TABLE].23. Veja Se¸˜o 4. e . vocˆ e a c e deve mudar para o diret´rio do banco de dados e conferir as permiss˜es dos arquivos de o o tabelas. eles tamb´m devem ter a permiss˜o de a e e a escrita para vocˆ. porque vocˆ precisa acessar os arquivos que est´ conferindo).ISM e .

Perceba que quando vocˆ executa mysqladmin shutdown em um servidor remoto. v´ para o est´gio 3. Fa¸a um backup do arquivo de dados antes de continuar. deve primeiro desligar o servidor e mysqld.23. deve ser utilizada a op¸˜o –update para dizer ao myisamchk ca marcar a tabela como ’checada’. Neste a caso. Primeiro. ca co a Se o servidor mysqld parar. ou se o arquivo de ´ ido co indice n˜o existir. Veja Se¸˜o 4. Se o arquivo de dados estiver normal e os links apagados apontam nas localiza¸˜es corretas co dentro do arquivo de dados. Se vocˆ for reparar uma tabela da linha de comandos. Se o passo anterior falhar. P´gina 281. Fa¸a como a seguir: c 1. v´ para o est´gio 3. Ele tentar´ reparar o arquivo de ´ a a indice sem mexer no arquivo de dados. ca a A seguinte se¸˜o s˜o para os casos onde o comando acima falhar ou se vocˆ desejar usar os ca a e recursos extendidos que o isamchk e myisamchk fornecem. a a Est´gio 3: Reparo dif´ a icil Vocˆ s´ deve atingir este est´gio se o primeiro bloco de 16K do arquivo de ´ e o a indice estiver destru´ ou conter informa¸˜es incorretas. ou se o e ca myisamchk quebrar.MYI se vocˆ tiver tempo dispon´ e ivel. utilize myisamchk --safe-recover nome_tabela. e Est´gio 1: Verificando suas tabelas a Execute myisamchk *.5.5. a ca a A se¸˜o do manual sobre manuten¸˜o de tabelas inclui as op¸˜es para isamchk/myisamchk. tente usar myisamchk -r -q nome_tabela (-r -q significa “modo de recupera¸˜o ca r´pida”). 3. a at´ que todas as queries parem e todas as chaves sejam descarregadas no disco.6 [Table maintenance]. ca a e e Se vocˆ obter erros estranhos no reparo (como em erros out of memory). Isto reca mover´ registros incorretos e deletados do arquivo de dados e reconstroi o arquivo a de ´ indices. e o servidor mysqld ir´ continuar funcionando por um tempo depois do mysqladmin retornar.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 291 Se vocˆ estiver utilizando o MySQL vers˜o 3. Utilize a op¸˜o -s (silencioso) para suprimir informa¸˜es desnecess´rias. ca ca co Veja Se¸˜o 4. Vocˆ deve reparar somente as tabelas em que o myisamchk indicar um erro. Inicie o reparo da a pr´xima tabela.5. Utilize myisamchk -r nome_tabela (-r significa modo de “recupera¸˜o”).5 [REPAIR TABLE]. O modo de recupera¸˜o segura utiliza um met´do de recupera¸˜o antiga que trata de alguns ca o ca casos que o modo de recupera¸˜o comum n˜o consegue (por´m ´ mais lento). devem ser usadas as op¸˜es: -O e a co ´ sorf_buffer=# -O key_buffer=# (onde # seria 1/4 da mem´ria disponivel) para todos o comandos isamchk/myisamchk.MYI ou myisamchk -e *. Mova o arquivo de dados para algum lugar seguro. c 2. ´ necess´rio criar um novo arquivo de ´ e a indice. isto deve funcionar e a tabela ser´ corrigida. a a Se vocˆ obter erros estranhos na verfica¸˜o (como nos erros out of memory). Para tais e tabelas. Outra maneira seria utilizar os seguintes procedimentos: o 1. P´gina 279. ou se o myisamchk e falhar. a a Est´gio 2: Reparo simples e seguro a NOTA: Se vocˆ deseja que os reparos sejam mais r´pidos. P´gina 280.4 [CHECK ca TABLE]. Veja Se¸˜o 4. . v´ para o est´gio 2.16 e superior. vocˆ pode (e deve) usar os e a e comandos CHECK e REPAIR para conferir e corrigir tabelas MyISAM.

1 [myisamchk syntax]. myisamchk -r -q deve funcionar agora. (N˜o a s´ mova o antigo arquivo de volta para o novo arquivo. Copie o antigo arquivo de dados de volta para o novo arquivo de dados criado.0. mas mantˆm o ca e arquivo de dados da mesma forma.10 Otimiza¸˜o de Tabelas ca Para agrupar registros fragmentados e eliminar perda de espa¸o resultante de remo¸˜es ou c co atualiza¸˜es de registros. No ultimo caso. 4. Remova o novo arquivo de dados. Veja Se¸˜o 4.292 MySQL Technical Reference for Version 5. e ca a myisamchk tamb´m tem um n´mero de outras op¸˜o que podem ser usadas para melhorar e u ca a performance de uma tabela: • -S.6. mysql> quit Se sua vers˜o do MySQL n˜o possuir TRUNCATE TABLE. Isto nunca e a ca e deve acontecer. --sort-index • -R index_num.. execute myisamchk no modo de recupera¸˜o: co ca shell> myisamchk -r nome_tabela Vocˆ pode otimizar uma tabela da mesma forma utilizando a instru¸˜o SQL OPTIMIZE e ca TABLE. porque o arquivo de descri¸˜o n˜o ´ alterado depois da tabela ser criada: ca a e 1. OPTIMIZE TABLE faz o reparo de tabelas.0-alpha 2.) Volte ao est´gio 2. crie uma e a c´pia da tabela em outro banco de dados.6. P´gina 299. Restaure o arquivo de descri¸˜o de um backup e volte ao est´gio 3. Tamb´m n˜o existem possibilidade a e a de intera¸˜o n˜o desej´vel entre o utilit´rio e o servidor.0. vocˆ deve uma c´pia no caso o e o de algo der errado. analisa chaves e tamb´m ordena a ´rvore e a de ´ indices para fazer pesquisas por chave mais r´pidas. Volte ao est´gio 2 e tente reconstruir o arquivo de a ´ indices. Vocˆ pode tamb´m ca a e e restaurar o arquivo de ´ indice e voltar ao est´gio 2. utilize DELETE FROM nome_ a a tabela. --analyze Para uma descri¸˜o completa da op¸˜o. porque o servidor faz todo o trabalho ca a a a quando vocˆ utiliza OPTIMIZE TABLE.) No MySQL 4.6. e ent˜o o a ´ mova a descri¸˜o e arquivos de indice do outro banco de dados para o banco de dados ca com problemas. Isto lhe fornece um novo arquivos ´ indice e descri¸˜o.5. Use o arquivo de descri¸˜o de tabelas para criar novos arquivos (vazios) de dados e ca ´ indices: shell> mysql nome_bd mysql> SET AUTOCOMMIT=1. (Isto n˜o deve ser um loop a a eterno.1 [OPTIMIZE TABLE]. P´gina 282.2 vocˆ tamb´m pode utilizar REPAIR . mysql> TRUNCATE TABLE nome_tabela. Se vocˆ n˜o tem um backup mas sabe exatamente como a tabela foi criada. 2.5. Est´gio 4: Reparo muito dif´ a icil Vocˆ deve atingir este est´gio somente se o arquivo de descri¸˜o tamb´m falhar. ca ca ca a . 3.. --sort-records=index_num • -a. vocˆ deve iniciar a ´ e com myisamchk -r. Veja Se¸˜o 4. USE_FRM o qual realiza todo o proe e cedimento automaticamente.

Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 293 4.5. P´gina 280. n´s executamos uma tarefa agendada cron para conferir todas o nossas tabelas importantes uma vez por semana utilizando uma linha com esta no arquivo ‘crontab’: 35 0 * * 0 /diret´rio/do/myisamchk --fast --silent /diret´rio/de/dados/*/*.7 Configurando um Regime de Manuten¸˜o das Tabelas ca A partir do MySQL Vers˜o 3. ca a ´ E uma boa id´ia verificar as tabelas regularmente em vez de esperar que ocorram problemas.MYI .23. (Isto ´ uma“tabela com falhas esperadas”.5. Se vocˆ e a a ca e estiver alterando tabelas com registros de tamanho dinˆmico (tabelas com colunas VARCHAR. Vocˆ tamb´m deve verificar suas tabelas regularmente durante a opera¸˜o normal do sise e ca tema.4 [CHECK TABLE].pid’. sempre e e que a m´quina reinicia no meio de uma atualiza¸˜o.) e Vocˆ pode adicionar um teste ao mysqld_safe que executa myisamchk para conferir todas e tabelas que foram modificadas durante as ultimas 24 horas se existir um arquivo ‘. Veja Se¸˜o 4.) ca Um teste ainda melhor seria verificar qualquer tabela cuja a data da ultima modifica¸˜o ´ ´ ca e mais recente que a do arquivo ‘. uma vez a e por semana ´ mais que suficiente para n´s. Por exemplo. vocˆ execute myisamchk -s a cada noite em todas as o e tabelas que foram atualizadas durantes as ultimas 24 horas. e c Vocˆ pode fazer isto utilizando OPTIMIZE TABLE nas tabelas em quest˜o ou se vocˆ puder e a e desligar o servidor mysqld por um tempo fa¸a: c isamchk -r --silent --sort-index -O sort_buffer_size=16M */*.ISM myisamchk -r --silent --sort-index -O sort_buffer_size=16M */*.13.pid’ c durante a inicializa¸˜o do sistema indica que o mysqld terminou de forma anormal. e Para prop´sitos de manuten¸˜o vocˆ pode utilizar o myisamchk -s para verificar as tabelas. Veja Se¸˜o 4. o ca e A op¸˜o -s (abrevia¸˜o de --silent) faz com que o myisamchk execute em modo silencioso. vocˆ normalmente precisar´ conferir a ca e a todas as tabelas que podem ter sido afetadas. at´ que vocˆ confie no MySQL ´ e e como n´s confiamos. a BLOB ou TEXT) ou tem tabelas com v´rios registros apagados vocˆ pode desejar de tempos a e em tempos (uma vez ao mˆs?) desfragmentar/recuperar espa¸o das tabelas. Vocˆ pode reparar tabelas ca a e com o comando REPAIR TABLE.5 [REPAIR TABLE]. o Normalmente vocˆ n˜o precisar´ de tanta manuten¸˜o em suas tabelas MySQL. A presen¸a de um arquivo ‘. (O arquivo ‘. P´gina 279. vocˆ pode conferir tabelas MyISAM com o comando a e CHECK TABLE. e o N´s recomendamos que para iniciar.pid’ ´ criado pelo mysqld quando ´ e ele inicia e removido quando ele termina normalmente. ´ E tamb´m uma boa id´ia verificar as tabelas quando o servidor inicia. Na MySQL AB.MYI o o Isto exibe informa¸˜es sobre tabelas com falhas para que possamos examin´-las e repar´-las co a a quando necess´rio. a Como n´s n˜o estamos tendo tabelas com falhas inesperadas (tabelas corrompidas por raz˜es o a o diferentes de problemas de hardware) por v´rios anos (isto realmente ´ verdade).pid’ ´ (process ID) antigo depois do ultimo reboot. ca ca exibindo mensagens somente quando ocorrem erros.5.

n´s explicaremos algumas das informa¸˜es em mais detalhes posterioro co mente: • myisamchk -d nome tabela Executa o myisamchk no “modo descritivo” para produzir uma descri¸˜o de sua tabela. Ele ´ lento porque ´ necess´rio ler a tabela inteira. Se vocˆ iniciar o servidor MySQL utilizando a op¸˜o ca e ca --skip-locking.0. Exemplo da sa´ de myisamchk -d ida MyISAM file: Record format: Data records: Recordlength: company. Entretanto. text packed stripped 5 167 2 multip. unsigned short 6 177 4 multip. como o myisamchk n˜o altera a tabela e a no modo de descri¸˜o. double 4 63 10 multip. unsigned long 193 1 text Exemplo da sa´ de myisamchk -d -v : ida MyISAM file: company Record format: Fixed length File-version: 1 Creation time: 1999-10-30 12:12:51 Recover time: 1999-10-31 19:13:01 Status: checked Data records: 1403698 Deleted blocks: 0 Datafile parts: 1403698 Deleted data: 0 Datafilepointer (bytes): 3 Keyfile pointer (bytes): 3 Max datafile length: 3791650815 Max keyfile length: 4294967294 . e e a • myisamchk -eiv nome tabela Isto se parece com -eis.8 Obtendo Informa¸˜es sobre as Tabelas co Para obter uma descri¸˜o de uma tabela ou estat´ ca isticas sobre ela.0-alpha 4. a ca • myisamchk -eis nome tabela Exibe somente as informa¸˜es mais importantes de uma co tabela. text packed stripped 3 219 8 multip. unsigned long 9 177 4 multip. myisamchk pode relatar um erro para uma tabela que est´ sendo a atualizada enquanto ´ executado. text 8 138 4 multip.294 MySQL Technical Reference for Version 5.5.MYI Fixed length 1403698 Deleted blocks: 226 0 table description: Key Start Len Index Type 1 2 8 unique double 2 15 10 multip. mas lhe diz o que est´ sendo a feito. adicione -v para solicitar a execu¸˜o em modo verbose. ca a ca co • myisamchk -d -v nome tabela Para produzir mais informa¸˜es sobre o que myisamchk est´ fazendo. utilize os comandos mostrados abaixo. unsigned long 7 155 4 multip. n˜o existem riscos de destrui¸˜o de dados.

Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 295 Recordlength: 226 table description: Key Start Len Index Type 1 2 8 unique double 2 15 10 multip. double 4 63 10 multip.51.00 Record blocks: 1403698 Recorddata: 317235748 Lost space: 0 Packed: Packed: Packed: Packed: Packed: Packed: Packed: Packed: Packed: Packed: Rec/key 1 2 73 5 4840 1346 4995 87 178 Root Blocksize 15845376 1024 25062400 1024 40907776 1024 48097280 1024 55200768 1024 65145856 1024 75090944 1024 85036032 1024 96481280 1024 0% 50% 0% 60% 0% 0% 0% 0% 0% 17% Max Max Max Max Max Max Max Max Max levels: levels: levels: levels: levels: levels: levels: levels: levels: 4 4 4 3 3 3 3 3 4 M. unsigned long 193 1 text Exemplo da sa´ de myisamchk -eis: ida Checking MyISAM file: company Key: 1: Keyblocks used: 97% Key: 2: Keyblocks used: 98% Key: 3: Keyblocks used: 97% Key: 4: Keyblocks used: 99% Key: 5: Keyblocks used: 99% Key: 6: Keyblocks used: 99% Key: 7: Keyblocks used: 99% Key: 8: Keyblocks used: 99% Key: 9: Keyblocks used: 98% Total: Keyblocks used: 98% Records: 1403698 Packed: 0% Recordspace used: 100% Blocks/Record: 1.check file-size .check delete-chain block_size 1024: 0 . Signals 0 Voluntary context switches 639.recordlength: Empty space: Delete blocks: Deleted data: Linkdata: 226 0% 0 0 0 User time 1626. text packed stripped 5 167 2 multip. text 8 138 4 multip. text packed stripped 3 219 8 multip. unsigned short 6 177 4 multip.36 Maximum resident set size 0. unsigned long 9 177 4 multip. Involuntary context switches 28966 Exemplo da sa´ de myisamchk -eiv: ida Checking MyISAM file: company Data records: 1403698 Deleted blocks: . Integral resident set size 0 Non physical pagefaults 0. Messages in 0 out 0. Physical pagefaults 627. unsigned long 7 155 4 multip. System time 232. Swaps 0 Blocks in 0 out 0.

Messages in 0 out 0.00 User time 1639.check records and index references [LOTS OF ROW NUMBERS DELETED] Records: 1403698 Recordspace used: 100% Record blocks: 1403698 Recorddata: 317235748 Lost space: 0 M.check data record references Key: 2: Keyblocks used: 98% .check data record references Key: 3: Keyblocks used: 97% . System time 251.check data record references Key: 4: Keyblocks used: 99% . Integral resident set size 0 Non physical pagefaults 0.check data record references Key: 5: Keyblocks used: 99% .61 Maximum resident set size 0.0.recordlength: Empty space: Delete blocks: Deleted data: Linkdata: 226 0% 0 0 0 Packed: Blocks/Record: 0% 1.check data record references Key: 8: Keyblocks used: 99% .296 MySQL Technical Reference for Version 5.check data record references Key: 9: Keyblocks used: 98% Total: Keyblocks used: 9% index: 1 Packed: index: 2 Packed: index: 3 Packed: index: 4 Packed: index: 5 Packed: index: 6 Packed: index: 7 Packed: index: 8 Packed: index: 9 Packed: Packed: 0% 50% 0% 60% 0% 0% 0% 0% 0% 17% Max levels: Max levels: Max levels: Max levels: Max levels: Max levels: Max levels: Max levels: Max levels: 4 4 4 3 3 3 3 3 4 .63.check data record references Key: 1: Keyblocks used: 97% . Swaps 0 Blocks in 4 out 0.check index reference . Physical pagefaults 10580. Involuntary context switches 122798 .check data record references Key: 6: Keyblocks used: 99% .0-alpha index 1: index 2: index 3: index 4: index 5: index 6: index 7: index 8: index 9: No recordlinks .check data record references Key: 7: Keyblocks used: 99% . Signals 0 Voluntary context switches 10604.

• Recordlength Quanto espa¸o cada registro ocupa. u Onde. • Max keyfile length Qual tamanho o arquivo de ´ indices (. Veja Se¸˜o 4. a • Data file pointer O tamanho do ponteiro do arquivo de dados. no registro. deve ser mais curto que o tamanho total da coluna indexada.10 [Otimiza¸˜o]. em bytes.10 [Otimiza¸˜o].6. isto ´ um a e endere¸o de registro. • Data records Quantos registros existem na tabela.5. Ele normalmente possui 1. porque vocˆ pode indexar e um prefixo de uma coluna string. isto u deve sempre ser o tamanho total da coluna. Para uma tabela otimizada sem registros fragmentados. c ca ca P´gina 292. Ele ´ sempre um endere¸o de bloco. esta parte do ´ indice inicia. em bytes. isto ´ o mesmo que e Data records. Para tabelas fixas. em bytes. 3. isto ´ um endere¸o de byte. “Registro” e “linha” s˜o sinˆnimos: a o • ISAM file Nome do arquivo (´ indice) ISAM. c • Record format O formato utilizado para armazenar as linhas da tabelas. isto indica quantos blocos de dados a existem. c ca ca P´gina 292. 4 ou 5 bytes. O co co a “keyfile” ´ o arquivo de ´ e indices. . Para strings. Atualmente sempre 2. em bytes.MYM Explica¸˜es para os tipos de informa¸˜es que o myisamchk produz s˜o fornecidas abaixo.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 297 Aqui est˜o os tamanhos dos arquivos de dados e ´ a indices para a tabela utilizada nos exemplos anteriores: -rw-rw-r-1 monty tcx 317235748 Jan 12 17:30 company. Veja Se¸˜o 4. a • Creation time Quando o arquivo de dados foi criado. • table description Uma lista de todas as chaves na tabela. Ele normalmente possui 2. Qual o tamanho desta parte do ´ indice. Para tabelas dinˆmicas. • Deleted blocks Quantos blocos apagados continuam alocando espa¸o. 2 ou 3 bytes. • Deleted data Quantos bytes de dados deletados n˜o recuperados existem. Outros valores poss´ iveis s˜o a Compressed(compactado) e Packed(empacotado). Os exemplos anteriores abaixo utilizam Fixed length (tamanho fixo).MYD) pode atingir. e e c • Max datafile length Qual tamanho o arquivo de dados (arquivos . A maioria das tabelas trabalham com 2 bytes. em bytes.MYI pode atingir. A maioria das tabelas trabalham com 2 bytes. • Recover time Quando foi a ultima vez que o arquivo de ´ ´ indices/dados foi reconstru´ ido.5. Para n´meros empacotados.MYD -rw-rw-r-1 davida tcx 96482304 Jan 12 18:35 company.6. Para cada chave. mas isto ´ calculado automaticamente pelo MySQL. alguma informa¸˜o de baixo n´ ´ apresentada: ca ivel e Key Start Len O N´mero desta chave. Vocˆ pode c e otimizar sua tabela para minimizar este espa¸o. a • Datafile: Parts Para formato de registros dinˆmicos. mas isto ainda n˜o pode ser controlado pelo MySQL ainda. Vocˆ pode a e otimizar sua tabela para minimizar este espa¸o. • Isam-version Vers˜o do formato ISAM. c a e c • Keyfile pointer O tamanho de um ponteiro de arquivo de ´ indices.

a • Deleted data Quantos bytes no arquivo de dados foram apagados (sem uso). • Recorddata Quantos bytes no arquivo de dados s˜o usados. u • Deleteblocks Quantos blocos (links) foram exclu´ idos. (multiplos). vocˆ pode e reorganizar a tabela com myisamchk. Indica se um valor pode ou n˜o exisitir a v´rias vezes neste ´ a indice.10 [Otimiza¸˜o]. Se isto n˜o for completamente a atualizado. ca Este ´ um valor estat´ e istico utilizado pelo otimizador. os valores s˜o muito altos (muito a pr´ximos do m´ximo te´rico). • M. um valor padr˜o de 30 ´ fornecido. Sempre ser´ 1 para tabelas de formato fixo. Grandes tabelas com a chaves longas resultam em valores altos. e .298 MySQL Technical Reference for Version 5. a e Rec/key • No primeiro exemplo acima. Veja Se¸˜o 4. Este e a valor deve permanecer o mais pr´ximo poss´ o ivel de 1. e Para tabelas com registros de • Packed O MySQL corta espa¸os do final de strings. c • Recordspace used Qual percentual do arquivo de dados ´ usado. Que tipo de dados esta parte do ´ indice tem. mas o valor a e pode ser alterado na compila¸˜o. e • Empty space Qual percetual do arquivo de dados n˜o ´ usado. ca ca a • Recordblocks Quantos blocos (links) s˜o utilizados. e tamanho fixo. co Endere¸o do bloco de ´ c indice raiz. Como a tabela a usada nos exemplos foi reorganizada com myisamchk. algum espa¸o ´ pere c e dido. Se ele aumentar. P´gina 292. Isto ´ a soma de todas estas perdas. em bytes.6. este ´ o mesmo a e que o n´mero de registros. O tamanho de cada bloco de ´ indice. isto pode reduzir significativamente o espa¸o utilizado. Para strings grandes como nomes. a nona chave ´ uma chave multi partes com duas partes. O tamanho padr˜o ´ 1024.0. ca c e • Max levels Qual a profundidade da ´rvore-B para esta chave. Isto pode ser usado somente para chaves CHAR/VARCHAR/DECIMAL.0. • Records Quantos registros existem na tabela.0-alpha Index Type Root Blocksize unique ou multip. de quantos links um regu e e istro fragmentado ´ composto).recordlength A m´dia de tamanho do registro. stripped ou empty. a e • Blocks/Record N´mero m´dio de blocos por registro (isto ´. Para formatos fixos. e • Keyblocks used Qual o percentual de bloco de chaves s˜o usados. No terceiro exemplo acima. • Lost space Se um registro ´ atualizado para um tamanho menor. isto ´ o tamanho exato do registro.5. Ele diz quantos registros existem por valor para esta chave. Uma chave unica sempre tem ´ um valor de 1. Ele pode ser atualizado depois que uma tabela ´ carregada e (ou muito alterada) com myisamchk -a. O valor Packed indica o percentual c de economia alcan¸ado fazendo isto. o a o • Packed O MySQL tenta empacotar chaves com um sufixo comum. a quarta c chave possui 10 caracteres e uma redu¸˜o de 60% no espa¸o ´ obtida. Isto ´ um tipo de dados ISAM e com as op¸˜es packed.

e No momento OPTIMIZE TABLE s´ funciona em tabelas MyISAM e BDB.1. mas neste caso. repara a tabela..6.8.1.1 Sintaxe de OPTIMIZE TABLE OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[. fragmentos de registros a e s˜o ligados com ponteiros (4 a 7 bytes cada). Mesmo se vocˆ co e a e fizer diversas atualiza¸˜es para registros de tamanhos vari´veis n˜o ´ desej´vel que vocˆ co a a e a e precise fazer isto mais que uma vez por mˆs/semana e apenas em determinadas tabelas. Linkdata ´ a soma do montante de a e armazenamento utilizado por todos estes ponteiros.. ordene-as. Registros apagados s˜o mantidos em uma lista a de liga¸˜es e opera¸˜es INSERT subsequentes reutilizam posi¸˜es de registros antigos. atualize-as. P´gina 299.1 eles s˜o escritos no log bin´rio a menos que a palavra chave opcional NO_WRITE_TO_ a a BINLOG (ou se alias LOCAL) seja usada.6. OPTIMIZE TABLE deve ser usado se vocˆ apagou uma grande parte de uma tabela ou se vocˆ e e fez v´rias altera¸˜es ` uma tabela com registros de tamanho vari´vel (tabelas que tenham a co a a campos do tipo VARCHAR. P´gina 337. a Vocˆ pode ter a otimiza¸˜o de tabelas trabalhando em outros tipos de tabelas iniciando e ca o mysqld com --skip-new ou --safe-mode. Se uma tabela foi compactada com myisampack.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 299 • Linkdata Quando o formato de tabela dinˆmica ´ utilizado.2 [ANALYZE e ca TABLE].2 Sintaxe de ANALYZE TABLE ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[. Vocˆ co co co e pode utilizar OPTIMIZE TABLE para reclamar o espa¸o inutilizado e para desfragmentar o c arquivo de dados.6. mysiamchk -d exibe informa¸˜es adicionais co sobre cada coluna da tabela. ´ • Se as p´ginas de indice n˜o est˜o ordenas. Para tabelas BDB.. Perceba que a tabela estar´ bloqueada durante o tempo em que OPTIMIZE TABLE estiver a executando.4 [myisampack]. Antes do MySQL 4..] . para um exemplo ca a desta informa¸˜o e uma descri¸˜o do que ela significa.1. ca ca 4. Veja Se¸˜o 4. Veja Se¸˜o 4. Na maioria da configura¸˜es vocˆ n˜o tem que executar OPTIMIZE TABLE. OPTIMIZE TABLE funciona da seguinte forma: • Se a tabela tem registros exclu´ idos ou dividos.tbl_name. 4. o OPTIMIZE TABLE ´ atualmente mapeado para ANALIZE TABLE.tbl_name]. OPTIMIZE TABLE ´ mapeado e apenas para ALTER TABLE.6 Adiministra¸˜o do Banco de Dados e Referˆncia de ca e Linguagem 4. BLOB ou TEXT). o OPTIMIZE comnado n˜o gravava no log bin´rio. Desde o MySQL a a 4. a a a ´ • Se as estatisticas n˜o est˜o atualizadas (e o reparo n˜o pode ser feito ordenando o a a a ´ indice).

info ou warning A mensagem Vocˆ pode verificar a distribui¸˜o de chaves armazenadas com o comando SHOW INDEX.6.flush_option] . Durante a an´lise a tabela ´ ca a e bloqueada com uma trava de leitura.. live table checksum is reported.1 [Show database info]. Vocˆ deve utilizar o comando FLUSH se desejar limpar algum dos caches internos que o e MySQL usa.1. Desde o MySQL a a 4.. In EXTENDED mode the whole table is read row by row and the checksum is calculated.with neither QUICK nor EXTENDED .8. Veja e ca Se¸˜o 4. a tabela n˜o ser´ a ´ a a analisada novamente..1.MySQL returns live checksum if the table support it and scans the table otherwise.1.0.1. o ANALYZE comnado n˜o gravava no log bin´rio. error. ca a Se a tabela n˜o foi alterada deste o ultimo comando ANALYZE TABLE.4 Sintaxe de FLUSH FLUSH [LOCAL | NO_WRITE_TO_BINLOG] flush_option [. vocˆ deve ter o privil´gio RELOAD. O MySQL utiliza a distribui¸˜o de chaves armazenadas para decidir em que ordem tabelas ca devem ser unidas quando algu´m faz um join em alguma coisa diferente de uma constante.6. Isto seria equivalente a executar myisamchk -a na tabela.] [ QUICK | EXTENDED ] Reports a table checksum.. a 4.300 MySQL Technical Reference for Version 5.1. 4.0-alpha Analisa e armazena a distribui¸˜o de chaves para a tabela. Antes do MySQL 4. Este comando est´ implementado no MySQL 4. P´gina 304. Isto funciona em tabelas MyISAM e BDB.3 Sintaxe de CHECKSUM TABLE CHECKSUM TABLE tbl_name[. By default . This is very fast. Para executar FLUSH.6.tbl_name . e O comando retorna uma tabela com as seguintes colunas: Coluna Table Op Msg type Msg text Valor Nome da Tabela Sempre analyze Um dos seguintes: status. or NULL if the table does not support live checksum. This can be very slow for large tables. If QUICK is specified.1 eles s˜o escritos no log bin´rio a menos que a palavra chave opcional NO_WRITE_TO_ a a BINLOG (ou se alias LOCAL) seja usada. e e op¸~es podem ser qualquer uma das seguintes: co Option Description .

10. is blocked. P´gina 912. como Veritas. Se vocˆ tiver especificado e o arquivo de logs de atualiza¸˜es ou um arquivo de log bin´rio sem co a uma extens˜o. P´gina 374. Defragmenta a cache de consulta par utilizar melhor a sua mem´ria. o MySQL a assume que algo est´ errado e bloqueia futuras requisi¸˜es desta a co m´quina.7 [Recursos de c ca usu´rios]. o MySQL ir´ fechar e reabrir a a o arquivo de log de atualiza¸˜es. Se vocˆ usou ca e uma extens˜o no nome do arquivo. Isto permitir´ que usu´rios a a a bloqueados fa¸am login novamente. Recarrega os privil´gios das tabelas de permiss˜es no banco de e o dados mysql. que pode e fazer uma imagem instantˆnea (snapshot) de um certo momento.2. Veja Se¸˜o 4. ca Fecha e reabre todos os arquivos de log. Zera todos os recirsos dos usu´rios.4.) Vocˆ pode iniciar o mysqld com -O a e max_connection_errors=999999999 para evitar esta mensagem de erro.. A descarga na tabela de nomes de m´quinas permite a a a a ` m´quina se conectar novamente. Isto ´ algo a e que deve ser usado somente para depurar uma consulta. Isto ´ a mesma coisa que enviar o sinal ca a e SIGHUP para o servidor mysqld.] TABLES WITH READ LOCK STATUS USER_RESOURCES . a a DES_KEY_FILE LOGS PRIVILEGES QUERY CACHE TABLES [TABLE | TABLES] nome_tabela [. a Reinicia a maioria das vari´veis de status para zero. Vocˆ deve a e descarregar as tabelas de nomes de m´quinas se alguma de suas a m´quinas receber um n´mero IP diferente ou se vocˆ obter a a u e mensagem de erro Host .. Veja Se¸˜o A. Veja Se¸˜o 4..5 [M´quina ca a bloqueada].Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 301 HOSTS Esvazia as tabelas de cache de nomes de m´quinas. Quando mais de max_ connect_erros erros occorrer em um registro para uma determinada m´quina enquanto se conecta ao servidor MySQL. Fecha todas tabelas abertas e bloqueia todas tabelas para todos os bancos de dados com leitura at´ que algu´m execute UNLOCK e e TABLES. o n´mero de extens˜o do arquivo log ser´ sempre a u a a incrementado de um em rela¸˜o ao arquivo anterior. o a ao contr´rio de RESET QUERY CACHE.nome_tabela.3 [Log de atco ca ualiza¸˜o]. a Fecha todas as tabelas abertas e for¸a o fechamento de todas as c tabelas em uso Descarga somente das tabelas fornecidas.. Este comando n˜o remove qualquer consulta da cache. Isto ´ uma maneira muito conveniente para fazer backups e se vocˆ possui um sistema de arquivos. Recarrega a chave DES do arquivo que foi especificado com a op¸˜o ca --des-key-file durante inicializa¸˜o do servidor. P´gina 266.

7 [Replication Master SQL]. pois qualquer um desses argumwentos podem causar problemas se replicados para um slave. Vocˆ pode ver quais threas a e est˜o em execu¸˜o com o comando SHOW PROCESSLIST e matar uma thread com o comando a ca KILL thread_id. ca ca a Faz o slave “esquecer” a sua posi¸˜o de replica¸˜o no log bin´rio do ca ca a master.6. P´gina 401. vocˆ pode ver e matar somente e a e suas pr´prias threads. Anteriormente chamado FLUSH SLAVE. Veja Se¸˜o 4. P´gina 302. e e a utilizando os comandos flush-hosts.11. MASTER. 4.6.6. Caso contr´rio. Se vocˆ tiver o privil´gio e e e e e SUPER. vocˆ deve ter o privil´gio RELOAD. P´gina 402. o .7 [Replica¸˜o]. o FLUSH comnado n˜o gravava no log bin´rio.8 ca [Replica¸˜o]. Anteriormente chamado FLUSH a MASTER. TABLES WITH READ LOCK. Veja Se¸˜o 4.1. vocˆ pode matar todas as threads.7 Sintaxe de KILL KILL thread_id Cada conex˜o ao mysqld executa em uma thread separada.11.1.6.4 [FLUSH]. ca a Remove todos os resulatdos de consultas da cache de consultas.1. SLAVE. vocˆ pode ver todas as threads. O comando RESET ´ usado para limpar coisas. P´gina 401. e e Op¸˜o ca Descri¸˜o ca MASTER Deleta todos os logs bin´rios listados no arquivo ´ a indice. Vocˆ pode tamb´m acessar cada um dos comandos vistos acima com o utilit´rio mysqladmin. Ele tamb´m atua como uma vers˜o mais e e a forte do comando FLUSH. ca a ´ como um sinˆnimo para PURGE MASTER LOGS a partir do PURGE BINARY LOGS est´ disponivel a o MySQL 4.. SLAVE QUERY CACHE 4. Desde o MySQL a a 4. Veja Se¸˜o 4.1. ca a Para executar RESET.302 MySQL Technical Reference for Version 5. a 4.5 Sintaxe de RESET RESET reset_option [.1. ou que o comando contenha um dos argumentos: LOGS. Veja Se¸˜o 4. reload ou flush-tables.reset_option] . flush-logs. Se vocˆ tiver o privil´gio PROCESS.11.6 Sintaxe de PURGE MASTER LOGS PURGE {MASTER|BINARY} LOGS TO nome_binlog PURGE {MASTER|BINARY} LOGS BEFORE data Este comando ´ usado para deletar todos os logs bin´rios estritamente anteriores ao binlog e a ou data especificada. P´gina 300..1 eles s˜o escritos no log bin´rio a menos que a palavra chave opcional NO_WRITE_TO_ a a BINLOG (ou se alias LOCAL) seja usada.0-alpha Antes do MySQL 4.6. Veja Se¸˜o 4. esvaziando o arquivo de ´ indice do log bin´rio.0. Tamb´m de uma olhada no comando RESET usado com a replica¸˜o.5 e ca ca [RESET].

Se o sinal kill foi habilitado. porque o servidor embutido apenas roda dentro das threads da aplica¸˜o. as altera¸˜es n˜o ir˜o ser desfeitas! co co a a • GET_LOCK() ir´ aborar com NULL. ORDER BY e GROUP BY. Note que se vocˆ n˜o estiver utilizando a ca e e a transa¸˜es. o comando ´ abortado e a tabela e tempor´ria apagada.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 303 Vocˆ tamb´m pode usar os comandos mysqladmin processlist e mysqladmin kill para e e examinar e matar threads. a • Se a thread estiver esperando por espa¸o livre em disco numa chamada write. o • Se a thread estiver no manipulador de bloqueio de tabelas (status: Locked). Se o sinal e ca ca kill est´ habilitado. • Nos loops SELECT. a ca e • Na execu¸˜o de um ALTER TABLE o sinal kill ´ conferido antes de cada bloco de registros ca e ser lido da tabela original. a • Ao fazer um UPDATE TABLE and DELETE TABLE. Nota: Atualmente vocˆ n˜o pode utilizar KILL com a biblioteca do servidor MySQL embue a tido. o sinal ´ checado depois de ler um bloco de e registros.8 Sintaxe de SHOW ou ou ou ou ou ou ou ou ou ou ou ou ou ou ou ou SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW DATABASES [LIKE wild] [OPEN] TABLES [FROM nome_bd] [LIKE wild] [FULL] COLUMNS FROM nome_tbl [FROM nome_bd] [LIKE wild] INDEX FROM nome_tbl [FROM nome_bd] TABLE STATUS [FROM nome_bd] [LIKE wild] STATUS [LIKE wild] VARIABLES [LIKE wild] [BDB] LOGS [FULL] PROCESSLIST GRANTS FOR user CREATE TABLE nome_tbl MASTER STATUS MASTER LOGS SLAVE STATUS WARNINGS [LIMIT row_count] ERRORS [LIMIT row_count] TABLE TYPES . e e Na maioria dos casos pode levar algum tempo para a thread morrer pois o sinal kill s´ ´ oe ´ checado em intervalos especificos. e c 4. Se o sinal kill est´ habilitado a instru¸˜o ´ abortada. ela n˜o cria ca a threads de conex˜es por si pr´pria. a • Uma thread INSERT DELAYED ir´ rapidamente descarregar todos registros que estiverem a em mem´ria e morrer. o bloqueio de tabela ser´ abortado rapidamente. a instru¸˜o ´ abortada.6. o o Quando vocˆ utiliza um KILL. um sinal (flag) kill especifico ´ configurado para a thread. o sinal de kill ´ conferido depois de e que cada bloco ´ lido e depois de cada atualiza¸˜o ou remo¸˜o de registro. a escrita c ´ abortada com uma mensagem de espa¸o em disco insuficiente.

Se a parte LIKE wild ´ usada. tabelas. 0 se o ´ indice n˜o puder conter duplicidades. e ca tamb´m ir´ obter os privil´gios que vocˆ possui para cada coluna. a string wild pode ser uma string que usa os e meta caracteres ‘%’ e ‘_’ do SQL. Se vocˆ especificar a op¸˜o FULL. SHOW TABLES lista as tabelas em um banco de dados espec´ ifico.1 Recuperando Informa¸oes sobre Bancos de Dados.7 a ca [Cache de Tabelas]. Esta lista tamb´m pode ser e obtida utilizando o comando mysqlshow nome_db. SHOW DATABASES lista os bancos de dados no servidor MySQL.nome_tabela como uma alternativa para a sintaxe nome_tabela e FROM nome_bd. . SHOW COLUMNS lista as colunas em uma determinada tabela.2 ca SHOW FIELDS ´ um sinˆnimo para SHOW COLUMNS e SHOW KEYS um sinˆnimo para SHOW INDEX. Se os tipos de colunas e a e e forem diferentes do que vocˆ esperava baseando na declara¸˜o CREATE TABLE. Tabelas. P´gina 606.1. P´gina 613. SHOW INDEX retorna a informa¸˜o de ´ ca indice em um formato que lembra bem a chamada SQLStatistics do ODBC.0. Vocˆ tamb´m pode obter e e esta lista utilizando o comando mysqlshow. Estas duas declara¸˜es s˜o equivalentes: co a mysql> SHOW INDEX FROM minhatabela FROM meudb. a A instru¸˜o DESCRIBE fornece informa¸˜o similar ` SHOW COLUMNS.304 MySQL Technical Reference for Version 5. ` para tir de 1. se vocˆ n˜o tiver o privil´gio e e e a e global SHOW DATABASES. perceba que e ca o MySQL algumas vezes altera os tipos das colunas. O campo Comment diz quantas vezes a tabela est´ em a a cached e in_use. a palavra chave FULL tamb´m faz com a e que qualquer coment´rio por coluna seja mostrado.4.1 [Mudan¸a de tipos ca c de colunas]. ca ca a [DESCRIBE]. Veja Se¸˜o 5. colunas ou informa¸˜es do estado co co do servidor.6.5. Veja Se¸˜o 6.minhatabela. c˜ ´ Colunas e Indices Vocˆ pode usar nome_bd.2 vocˆ ver´ apenas aqeules banco a e a de dados para os quais vocˆ tem algum tipo de privil´gio. A partir do MySQL 4.0. a Veja Se¸˜o 6. 4. N´mero da sequˆncia da coluna no ´ u e indice. As seguintes colunas s˜o retornadas: a Coluna Table Non_unique Key_name Seq_in_ index Column_name Significado Nome da tabela. 1 se a puder Nome do ´ indice.6.0-alpha SHOW fornece informa¸˜es sobre bancos de dados. NOTA: Se um usu´rio n˜o possui nenhum privil´gio para uma tabela. a tabela n˜o ser´ a a e a a ´ de SHOW TABLES ou mysqlshow nome_db mostrada na saida SHOW OPEN TABLES lista as tabelas que est˜o abertas no cache de tabelas.3. Nome da coluna. mysql> SHOW INDEX FROM meubd.8. e o o Vocˆ tamb´m pode listar as colunas ou ´ e e indices de uma tabela com mysqlshow nome_db nome_tabela ou mysqlshow -k nome_bd nome_tabela. P´gina 452. Na vers˜o 4.

pode ter valores ‘A’ (Ascendente) ou NULL (Not sorted). ´ Op¸˜es extras usadas com CREATE TABLE. ou Compressed (Compactado)). Dynamic(dinˆmico). Tamanho m´ximo do arquivo de dados. co Index_length Data_free Auto_increment Create_time Update_time Collation Checksum Check_time Create_options . e M´todo de ´ e indice utilizado. NULL se a chave inteira for indexada. A ultima vez que arquivo de dados foi atualizado. este ´ o n´mero total de a e u bytes de dados que pode ser armazenados na tabela.2. N´mero de caracteres indexados se a coluna s´ ´ u oe a indexada parcialmente. Tamanho do arquivo de ´ indice. dado o tamanho do ponteiro de dados utilizado. 4.2 se o ´ indice ´ FULLTEXT ou n˜o. Veja Cap´ “ptexi tulo 7 [Table types].1.2 SHOW TABLE STATUS SHOW TABLE STATUS [FROM nome_bd] [LIKE wild] SHOW TABLE STATUS (introduzido na vers˜o 3. a O formato de armazenamento do registro (Fixed (Fixo).0.8. N´mero de bytes alocados mas n˜o utilizados. Tipo da tabela.1) Valor do checksum (se existir). (novo no 4. e u Para formatos de registro dinˆmicos. No momento. Vocˆ tamb´m pode obter esta lista utilizando o co e e comando mysqlshow --status nome_bd.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 305 Collation Cardinality Sub_part Null Index_type Comment Como a coluna ´ ordenada no ´ e indice. Isto ´ atue alizado executando isamchk -a. e Tamanho do arquivo de dados. u Tamanho m´dio do registro. V´rios coment´rios. No MySQL. (novo no 4. a As colunas Null e Index_type foram adicionadas no MySQL 4. ´ Conjunto de caracter e collation da tabela. u a Pr´ximo valor do auto incremento.1. Para formatos de a registro fixo.0. mas fornece a muitas informa¸˜es sobre cada tabela.6.23) funciona como o SHOW STATUS. a N´mero de registros. este ´ o n´mero maimo de registros na tabela.1) A ultima vez que a tabela foi verificada. o Quando a tabela foi criada. As seguintes colunas s˜o retornadas: a Coluna Name Type Row_format Rows Avg_row_length Data_length Max_data_length Significado Nome da tabela. Cont´m ’YES’ se a coluna puder conter NULL. e a Perceba que como o Cardinality ´ contado baseado nas estat´ e isticas armazenadas como inteiros. ele diz no a a MySQL < 4. ele pode n˜o ser exato para tabelas pequenas. P´gina 629. N´mero de valores unicos no ´ u ´ indice.

A sa´ ´ parecida com o que est´ exibido abaixo. apesar dos n´meros e formatos ida e a u provavelmente serem diferentes: +--------------------------+------------+ | Variable_name | Value | +--------------------------+------------+ | Aborted_clients | 0 | | Aborted_connects | 0 | | Bytes_received | 155372598 | | Bytes_sent | 1176560426 | | Connections | 30023 | | Created_tmp_disk_tables | 0 | | Created_tmp_tables | 8340 | | Created_tmp_files | 60 | | Delayed_insert_threads | 0 | | Delayed_writes | 0 | | Delayed_errors | 0 | | Flush_commands | 1 | | Handler_delete | 462604 | | Handler_read_first | 105881 | | Handler_read_key | 27820558 | | Handler_read_next | 390681754 | | Handler_read_prev | 6022500 | | Handler_read_rnd | 30546748 | | Handler_read_rnd_next | 246216530 | | Handler_update | 16945404 | | Handler_write | 60356676 | | Key_blocks_used | 14955 | | Key_read_requests | 96854827 | | Key_reads | 162040 | | Key_write_requests | 7589728 | | Key_writes | 3813196 | | Max_used_connections | 0 | | Not_flushed_key_blocks | 0 | | Not_flushed_delayed_rows | 0 | | Open_tables | 1 | | Open_files | 2 | | Open_streams | 0 | | Opened_tables | 44600 | .8.6. ca Tabelas InnoDB ir˜o relatar o espa¸o livre no tablespace no coment´rio da tabela.0-alpha Comment O Coment´rio utilizado quando a tabela ´ criada (ou alguma a e informa¸˜o do porquˆ do MySQL n˜o poder acessar a inca e a forma¸˜o da tabela). a c a 4.306 MySQL Technical Reference for Version 5.3 SHOW STATUS SHOW STATUS fornece informa¸˜es de status do servidor (como mysqladmin extendedco status).0.

Veja Se¸˜o A.2. u N´mero de tentativas de conex˜o ao servidor MySQL.. u N´mero de bytes enviados para todos os clientes. u N´mero de vezes que os comandos xxx foram executados. Veja Se¸˜o A. a N´mero de registros escritos com INSERT DELAYED. ca a N´mero de tentativas que falharam ao tentar a conex˜o ao u a servidor MySQL. u N´mero de vezes que um registro foi apagado da tabela.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 307 | Questions | 2026873 | | Select_full_join | 0 | | Select_full_range_join | 0 | | Select_range | 99646 | | Select_range_check | 0 | | Select_scan | 30802 | | Slave_running | OFF | | Slave_open_temp_tables | 0 | | Slow_launch_threads | 0 | | Slow_queries | 0 | | Sort_merge_passes | 30 | | Sort_range | 500 | | Sort_rows | 30296250 | | Sort_scan | 4650 | | Table_locks_immediate | 1920382 | | Table_locks_waited | 0 | | Threads_cached | 0 | | Threads_created | 30022 | | Threads_connected | 1 | | Threads_running | 1 | | Uptime | 80380 | +--------------------------+------------+ As vari´veis de estado listadas acima tem o seguinte significado: a Vari´vel a Aborted_clients Aborted_connects Bytes_received Bytes_sent Com_xxxx Connections Created_tmp_disk_ tables Created_tmp_tables Created_tmp_files Delayed_insert_threads Delayed_writes Delayed_errors Flush_commands Handler_delete Signficado N´mero de conex˜es abortadas porque o cliente morreu sem u o fechar a conex˜o corretamente. P´gina 914. u a N´mero de tabelas tempor´rias implicitas em disco criadas u a durante a execu¸˜o de instru¸˜es. u N´mero de registros escritos com INSERT DELAYED onde algum u erro ocorreu (provavelmente duplicate key). a N´mero de threads para tratamento de insertdelayed que u est˜o em uso. ca ca P´gina 914.10 [Erros de a ca Comunica¸˜o].10 [Erros de Comunica¸˜o]. u . a N´mero de bytes recebidos por todos os clientes. N´mero de comandos FLUSH executados. co co Quantos arquivos tempor´rios o mysqld criou. ca co N´mero de tabelas tempor´rias implicitas na mem´ria criadas u a o durante execu¸˜es de instru¸˜es.2.

´ uma boa indica¸˜o que suas e ca pesquisas e tabelas est˜o indexadas corretamente.. N´mero de joins onde foram usadas pesquisas segmentadas u na tabela de referencia. N´mero de tabelas abertas. O n´mero de escritas f´ u isicas de um bloco de chaves para o disco. por exemplo. SELECT col1 FROM foo. O valor ser´ alto se vocˆ estiver executando ca a e v´rias pesquisas que exigem ordena¸˜o do resultado. u O n´mero de requisi¸˜es para ler um bloco de chaves do cache.) . a ca N´mero de requis˜es para ler o pr´ximo registro no arquivo u o o de dados. N´meros de comandos ROLLBACK internos.0-alpha Handler_read_first Handler_read_key Handler_read_next Handler_read_prev Handler_read_rnd Handler_read_rnd_next Handler_rollback Handler_update Handler_write Key_blocks_used Key_read_requests Key_reads Key_write_requests Key_writes Max_used_connections Not_flushed_key_blocks Not_flushed_delayed_ rows Open_tables Open_files Open_streams Opened_tables Rpl_status Select_full_join Select_full_range_join Select_range N´mero de vezes que a primeira entrada foi lida de um ´ u indice. e N´mero de requisi¸˜es para ler um registro baseado em uma u co chave. sugere que o servidor est´ fazendo v´rias a a leituras de ´ indices. N´mero de requisi¸˜es para inserir um registro em uma u co tabela. u co O n´mero de leituras f´ u isicas de blocos de chaves do disco. ca a a N´mero de joins sem chaves (Se for 0. u Status de replica¸˜o segura. u a o a Blocos de chaves no cache de chaves que foi alterado mas ainda n˜o foi descarregado para o disco. e N´mero de requisi¸˜es para ler um registro baseado em uma u co posi¸˜o fixa. u N´mero de requisi¸˜es para atualizar um registro em uma u co tabela. N´mero de joins onde foram usadas faixas da primeira tabela.308 MySQL Technical Reference for Version 5. vocˆ deve conferir com u e cuidado o ´ indice de suas tabelas). Ele tamb´m aumene tar´ se forem feitas busca nos ´ a indices. O n´mero de requisi¸˜es para gravar um bloco de chaves no u co cache. u N´mero de fluxos abertos (usado principalmente para logs). O n´mero m´ximo de conex˜es simultˆneas que foram usadas. u (Normalmente n˜o ´ cr´ a e itica mesmo se o valor estiver alto. N´mro de requisi¸˜es ao registros anterior na ordem da chave.. e co Ele ´ principalmente usado para otimizar ORDER BY . (Ainda n˜o est´ em uso). assumindo que col1 ´ indexado.0. Este valor ser´ aumentado se vocˆ consultar uma a e coluna de ´ indice com uma faixa restrita. Se este valor for alto. Geralmente sugere que suas tabelas n˜o est˜o correa a tamente indexadas ou que suas pesquisas n˜o foram escritas a para tirar vantagem dos ´ indices existentes. O n´mero de blocos utilizados no cache das chaves. DESC. a N´mero de requisi¸˜es para ler o pr´ximo registro na ordem u co o da chave. Se este valor for alto. u N´mero de arquivos abertos. u N´mero de tabelas que foram abertas. a N´mero de registros esperando para serem escritos em filas u INSERT DELAY. Ser´ alto se vocˆ estiver fazendo v´rias buscas na a e a tabela.

e vocˆ tiver problemas de performance. provavelmente sua vari´vel table_cache est´ muito a a pequena. P´gina 378. O indice de acertos do cache pode ser calculaldo com key_ a reads/key_read_requests.5 [Log de consultas ca lentas]. u co ssl_xxx Vari´veis usadas por SSL. Se ca este valor for alto vocˆ deve considerar o aumento de sort_ e buffer. • Se Created_tmp_disk_tables for grande. • Se Handler_read_rnd for grande. vocˆ pode querer aumentar a vari´vel tmp_ e a table_size par obter tabelas tempor´rias em mem´rias em vez de tabelas em disco.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 309 N´mero de joins onde fizemos uma busca completa na u primeira tabela. a Slow_launch_threads N´mero de threads que levaram mais tempo do que slow_ u lauch_time para serem criadas. Select_range_check N´mero de joins sem chaves onde o uso de chave foi conferido u ap´s cada registro (Se for 0. Slow_queries N´mero de consultas que levaram mais tempo que long_ u query_time segundos. ´ Slave_running E ON se este slave est´ conectado a um master. a Table_locks_waited N´mero de vezes que um bloqueio de tabela n˜o pˆde ser u a o obtido imediatamente e foi preciso esperar. u a a Uptime Quantos segundos o servidor est´ funcionando. a Alguns coment´rios sobre a tabela acima: a • Se Opened_tables for grande. o ´ o indice de suas tabelas deve ser conferido com cuidado) Questions N´mero de consultas enviadas para o servidor. u Threads_connected N´mero de conex˜es atuais abertas. • Se Threads_created for grande vocˆ pode desejar aumentar a vari´vel e a thread_cache_size. a o Select_scan . u Slave_open_temp_tables N´mero de tabelas tempor´rias atualmente abertas pela u a thread slave. u o Threads_created N´mero de threads criadas para lidar com conex˜es. Ainda n˜o implementado. suas consultas e devem ser otimizadas e depois dividir sua tabela ou tabelas ou usar replica¸˜o. provavelmente sua vari´vel key_buffer_size provavelmente a ´ est´ muito pequena. a Sort_merge_passes N´mero de ifus˜es feitas pelo algor´ u o itmo de ordena¸˜o. A taxa de acerto da cache pode ser calculada com Threads_created/Connections. provavelmente vocˆ possui v´rias consultas que exe a igem do MySQL fazer busca em tabelas inteiras ou vocˆ tem joins que n˜o utilizam e a chaves corretamente. Sort_range N´mero de ordena¸˜es que foram feitas com limites.33 ca ivel a a Threads_cached N´mero de threads no cache de threads. u o Threads_running N´mero de threads que n˜o est˜o dormindo.23. a a Table_locks_immediate N´mero de vezes que um travamento de tabela foi obtido de u maneira autom´tica. u Sort_scan N´mero de ordena¸˜es que foram feitas lendo a tabela. Se o valor for alto. u co Sort_rows N´mero de registros ordenados. Dispon´ ` partir da vers˜o 3. Veja Se¸˜o 4. • Se key_reads for grande.10.

0.6. a e a Veja Se¸˜o 5.3.310 MySQL Technical Reference for Version 5. Veja Se¸˜o 4. ca a ´ de SHOW VARIABLES se parece com o exibido abaixo.. Vocˆ pode alterar a maioria das vari´veis com o comando SET. Com GLOBAL vocˆ obter´ as co a e a vari´veis que ser˜o utilizadas para novas conex˜es ao MySQL.. Se vocˆ n˜o estiver usando nenhuma a a e a op¸˜o.4 SHOW VARIABLES SHOW [GLOBAL | SESSION] VARIABLES [LIKE wild] SHOW VARIABLES exibe os valores de algumas vari´veis de sistema do MySQL.8.0-alpha 4.1 [Commandco ca ca line options]. Vocˆ tamb´m pode conseguir esta informa¸˜o usando o comando u e e ca mysqladmin variables.5. P´gina 208. SESSION ser´ usada. ca a Se os valores padr˜es n˜o lhe servirem. vocˆ pode configurar a maioria destas vari´veis uso a e a ando as op¸˜es de linha de comando na inicializa¸˜o do mysqld. P´gina 461. Com SESSION vocˆ obter´ a a o e a os valores que est˜o em efeito para a conex˜o atual.0.6 [SET].1. | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set | latin1 | | character_sets | latin1 big5 czech euc_kr | | concurrent_insert | ON | | connect_timeout | 5 | | convert_character_set | | | datadir | /usr/local/mysql/data/ | | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | | flush | OFF | | flush_time | 0 | | ft_boolean_syntax | + -><()~*:""&| | | ft_min_word_len | 4 | | ft_max_word_len | 84 | | ft_query_expansion_limit | 20 | . +---------------------------------+------------------------------+ | Variable_name | Value | +---------------------------------+------------------------------| | back_log | 50 | | basedir | /usr/local/mysql | | bdb_cache_size | 8388572 | | bdb_log_buffer_size | 32768 | | bdb_home | /usr/local/mysql | | bdb_max_lock | 10000 | | bdb_logdir | | | bdb_shared_data | OFF | | bdb_tmpdir | /tmp/ | | bdb_version | Sleepycat Software: . embora o formato e os A saida n´meros possam divergir. a As op¸˜es GLOBAL e SESSION s˜o novas no MySQL 4.

ON ON OFF OFF OFF OFF OFF OFF OFF 10 OFF OFF 1047552 4294967295 1073741824 100 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | .Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 311 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ft_stopword_file have_bdb have_innodb have_isam have_raid have_symlink have_openssl have_query_cache init_file innodb_additional_mem_pool_size innodb_buffer_pool_size innodb_data_file_path innodb_data_home_dir innodb_file_io_threads innodb_force_recovery innodb_thread_concurrency innodb_flush_log_at_trx_commit innodb_fast_shutdown innodb_flush_method innodb_lock_wait_timeout innodb_log_arch_dir innodb_log_archive innodb_log_buffer_size innodb_log_file_size innodb_log_files_in_group innodb_log_group_home_dir innodb_mirrored_log_groups interactive_timeout join_buffer_size key_buffer_size language large_files_support local_infile locked_in_memory log log_update log_bin log_slave_updates log_slow_queries log_warnings long_query_time low_priority_updates lower_case_table_names max_allowed_packet max_binlog_cache_size max_binlog_size max_connections | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (built-in) YES YES YES NO DISABLED YES YES 1048576 8388608 ibdata1:10M:autoextend 4 0 8 1 ON 50 OFF 1048576 5242880 2 ./ 1 28800 131072 16773120 /usr/local/mysql/share/...

pid 3306 10 1048576 0 ON 131072 262144 0 OFF 0 3600 ON OFF OFF 2 /tmp/mysql.4-beta | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | .0-alpha | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | max_connect_errors max_delayed_threads max_heap_table_size max_join_size max_relay_log_size max_sort_length max_user_connections max_tmp_tables max_write_lock_count myisam_max_extra_sort_file_size myisam_repair_threads myisam_max_sort_file_size myisam_recover_options myisam_sort_buffer_size net_buffer_length net_read_timeout net_retry_count net_write_timeout open_files_limit pid_file port protocol_version query_cache_limit query_cache_size query_cache_type read_buffer_size read_rnd_buffer_size rpl_recovery_rank safe_show_database server_id slave_net_timeout skip_external_locking skip_networking skip_show_database slow_launch_time socket sort_buffer_size sql_mode table_cache table_type thread_cache_size thread_stack tx_isolation timezone tmp_table_size tmpdir version | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 10 20 16777216 4294967295 0 1024 0 32 4294967295 268435456 1 2147483647 force 8388608 16384 30 10 60 1024 /usr/local/mysql/name.312 MySQL Technical Reference for Version 5.0.0.sock 2097116 64 MYISAM 3 131072 READ-COMMITTED EEST 33554432 /tmp/:/mnt/hd2/tmp/ 4.

deve iniciar o mysqld com a op¸˜o --skip-bdb e a ca ´ de mem´ria para este cache... Se vocˆ geralmente utiliza transa¸˜es grandes..8. ca icio o • bdb_home O valor para a op¸˜o --bdb-home.. INSERT . a co e SELECT. Tentativas de configurar back_log maior do que o limite de seu sistema a operacional ser˜o ineficazes. Valores para tamanhos de buffer. Seu sistema operacional tem o pr´prio limite para o tamanho desta fila. Eles tomam algum tempo (por´m muito pouco) da a c e thread principal para conferir a conex˜o e iniciar uma nova thread. Est´ ligado (ON) se o mysqld foi iniciado com --ansi.). ca a • bulk_insert_buffer_size (era myisam_bulk_insert_tree_size) MyISAM usa uma cache especial em ´rvore para fazer inser¸˜es em bloco (isto ´. Veja Se¸˜o 1... . comprimento e tamanho ca e de pilha s˜o fornecidos em bytes. para evitar desperdicio o • bdb_log_buffer_size O buffer que ´ alocado para o cache de ´ e indice e registros de tabelas BDB. P´gina 614. VALUES (. a . Se vocˆ n˜o utiliza tabelas BDB.7. deve configur´-la com 0 ou iniciar o e a a mysqld com a op¸˜o --skip-bdb para evitar desperd´ de mem´ria para este cache.). a e • bdb_tmpdir O valor da op¸˜o --bdb-tmpdir. • bdb_logdir O valor da op¸˜o --bdb-logdir. ca • binlog_cache_size. 16M e 16m s˜o equivalentes: a u u a • ansi_mode. Veja co e Se¸˜o 6. ca • bdb_max_lock O n´mero m´ximo de bloqueios (1000 por padr˜o) que podem ser feitas u a a em uma tabela BDB. a • back_log O n´mero de requisi¸˜es de conex˜es que o MySQL pode suportar. o A p´gina do manual Unix da chamada de sistema listen(2) deve fornecer maiores a detalhes. INSERT . Vocˆ is´ precisa aument´-lo se espera co e o a ´ um n´mero alto de conex˜es em um curto periodo de tempo u o Em outras palavras.. 16M indica 16 Megabytes. O tamanho do cache para armazenar instru¸˜es SQL para o co log bin´rio durante uma transa¸˜o.1 [COMMIT]. Se vocˆ n˜o utiliza tabelas BDB. Por exemplo. Vocˆ deve ser aument´-la se obter erros do tipo: bdb: Lock e a table is out of available locks ou Got error 12 from . quando s˜o necess´rias a a longas transa¸˜es ou quando o mysqld precisar examinar v´rios registros para calcular co a a pesquisa. e LOAD DATA INFILE) mais r´pidos. Confira a documenta¸˜o do seus SO para saber o valor m´ximo para esta ca a vari´vel. este valor ´ o tamanho da fila de escuta para novas conex˜es e o TCP/IP.... Vocˆ pode especificar valores com sufixos ‘K’ ou M para a e indicar o valor em kilobytes ou megabytes. a • basedir O valor da op¸˜o --basedir. a ca e co multi-instru¸˜es... P´gina 42. (. ca • bdb_shared_data Est´ ligada (ON) se vocˆ estiver utilizando --bdb-shared-data.. O valor back_log a indica quantas requisi¸˜es podem ser empilhadas durante este breve tempo antes do co MySQL parar de responder a novas requisi¸˜es. ca • bdb_cache_size O buffer que ´ alocado para o cache de ´ e indice e registros de tabelas BDB. N˜o a importa se os sufixos est˜o em letras mai´suculas ou min´sculas.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 313 | wait_timeout | 28800 | +---------------------------------+------------------------------+ Cada op¸˜o ´ descrita abaixo. Isto entra u co o em cena quando a thread principal do MySQL recebe MUITAS solicita¸˜es de conex˜es co o em um espa¸o curto de tempo. vocˆ pode aumentar este valor para obter mais performance.2 a ca [Modo ANSI].

Veja Se¸˜o 6.0-alpha • • • • • • • • • • • • • • Esta vari´vel limita o tamanho da ´rvore cache em bytes por thread. Nota: ´ indices FULLTEXT devem ser reconstru´ idos depois de alterar esta vari´vel. ft_boolean_syntax Lista de operadores suportados por MATCH .) ca e ft_max_word_len O tamanho m´ximo da palavra a ser inclu´ a ida em um ´ indice FULLTEXT. a ON (padr˜o) MySQL seguir´ a op¸˜o DELAY_KEY_WRITE para a a ca CREATE TABLE. algum cliente que executar INSERT DELAYED ir´ a esperar at´ existir espa¸o na fila novamente. (Esta a op¸˜o ´ nova para o MySQL 4.0.) a ca e . flush E e ca flush_time Se esta vari´vel for configurada com um valor diferente de zero. Se a fila encher. Defin´ com 0 a a i-la desabilitar´ esta otimiza¸˜o Nota: esta cache s´ ´ usada quando ´ adicionado dados a a ca oe e uma tabela n˜o vazia. ca delay_key_write Option for MyISAM tables. Vocˆ a e pode desligar esta op¸˜o iniciando mysqld com --safe ou --skip-new. o MySQL permitir´ o uso de INSERT a a em tabelas MyISAM ao mesmo tempo em que s˜o executadas consultas SELECT. a character_sets Os conjuntos de caracteres suportados. IN BOOLEAN MODE). Win98 ou outros sistemas com poucos recursos.0.8 [Pesquisa Fulltext]. Nota: ´ indices FULLTEXT devem ser reconstru´ idos depois de alterar esta vari´vel. a datadir O valor da op¸˜o --datadir. ALL Todas as novas tabelas abertas s˜o tratadas como se fossem a criadas com a op¸˜o DELAY_KEY_WRITE. ca connect_timeout O n´mero de segundos que o servidor mysqld espera para um pacote u de conex˜o antes de responder com Bad handshake.. O valor padr˜o ´ 8 MB.... ele permite a execu¸˜o destas antes de continuar. DELAYED_KEY_WRITE s˜o ignorados. o agente que cuida de INSERT DELAYED ira conferir se exitem instru¸˜es SELECT pendentes. co delayed_queue_size Qual tamanho deve ser alocado para a fila (em linhas) para lidar com INSERT DELAYED. ca a ´ ft_min_word_len O tamanho minimo da palavra a ser inclu´ em um ´ ida indice FULLTEXT. e c ´ habilitado (ON) se vocˆ iniciar o MySQL com a op¸˜o --flush. concurrent_inserts Se ON (ligado. ca delayed_insert_timeout Quanto tempo uma thread INSERT DELAYED deve esperar por instru¸˜es INSERT antes de terminar. (Esta op¸˜o ´ nova para o MySQL 4. Isto ir´ aumentar bem a velocidade de escrita em chaves. ent˜o a a a cada flush_time segundos todas tabelas ser˜o fechadas (para economizar recursos e a sincronizar dados com o disco).0. AGAINST(. Se co sim. a a e character_set O conjunto de caracteres padr˜o... isto siginifica que o buffer de chaves das tabelas com esta op¸˜o n˜o ser˜o descarregadas a cada atualiza¸˜o do ´ ca a a ca indice. P´gina 618. e a mas vocˆ deve adicionar verifica¸˜o autom´tica de todas as tabelas com myisamchk e ca a --fast --force se vocˆ us´-lo.314 MySQL Technical Reference for Version 5. Can have one of the following values: OFF All CREATE TABLE . mas somente quando a tabela ´ fechada. ca Se DELAY_KEY_WRITE estiver habilitado. e a delayed_insert_limit Depois de inserir delayed_insert_limit registros. por padr˜o). Recomendamos esta op¸˜o somente em sistemas com ca Win95.

coment´rios n˜o s˜o seguidos.c’). O buffer ´ alocado uma vez para cada full join entre duas tabelas. e colocar´ poucas chaves em um bloco ordenado (diminuindo a eficiˆncia noa e vamente).. • join_buffer_size O tamanho do buffer que ´ utilizado para full joins (joins que n˜o e a utilizam ´ indices). key_buffer_size ´ o tamanho do buffer utilizado para indexar blocos. Lembre-se que como o MySQL n˜o utiliza cache de leitura de dados. • ft_stopword_file O arquivo do qual se lˆ a lista de palavras de parada para pesquisa e fulltext. e Aumente este valor para obter um full join mais r´pido quando a adi¸˜o de ´ a ca indices n˜o a for poss´ ivel. DISABLED se a op¸˜o --skipca bdb for usada. ca • have_openssl YES se o mysqld suportar SSL (criptografia) no protocolo cliente/ servidor.. AGAINST (. a ivel a o MySQL ´ bastante comum. Este ´ um arquivo das instru¸˜es SQL que vocˆ deseja que o servidor e co e execute quando ´ iniciado. A a regra do ded˜o ´ a seguinte: com ft_max_word_len_for_sort aumentando.1.1) • ft_max_word_len_for_sort O tamanho m´ximo da palavra a ser inclu´ em um a ida ´ indice FULLTEXT a ser usado no m´todo r´pido de recria¸˜o do ´ e a ca indice em REPAIR. Nota: ´ indices FULLTEXT devem ser reconstru´ idos depois de alterar esta vari´vel.) a ca e • have_innodb YES if mysqld suporta tabelas InnoDB. e Aumente-o para lidar melhor com os ´ indices (para todas as leituras e escritas m´ltiplas) u para o m´ximo poss´ 64M em uma m´quina com 256M que executa. Veja tamb´m ca e wait_timeout.. (Esta op¸˜o ´ nova para o MySQL 4. a lista j´ incluida a a e ‘myisam/ft_static. (Esta op¸˜o ´ nova no a ca e MySQL 4. • init_file O nome do arquivo especificado com a op¸˜o --init-file quando vocˆ ca e iniciar o servidor. (Normalmente a melhor forma de obter joins r´pidas ´ adicionar ´ a e indices. MySQL ir´ inserir e a v´rias palavras no ´ a indice de modo lento. e • interactive_timeout O n´mero de segundos que o servidor espera por atividade u em uma conex˜o antes de fech´-la. CREATE INDEX. se vocˆ deixar este valor muito grande e e (mais que 50% da sua mem´ria total?) seu sistema pode iniciar a paginar e se tornar o MUITO lento. principalmente. .0. a a a a ´ de palavras de parada ´ a usada (como definido em Por padr˜o. • have_raid YES se o mysqld suportar a op¸˜o RAID. a ser´ necess´rio deixar algum espa¸o para o cache do sistema de arquivos para o Sistema a a c Operacional. Palavras mais longas s˜o inseridas de modo lento. ou ALTER TABLE. devido a E/S de a a disco). Quando ft_max_word_len_for_sort ´ muito pequeno. WITH QUERY EXPANSION).. DISABLED se --skip-innodb ´ e usado. • have_bdb YES se o mysqld suportar tabelas Berkeley DB. Um cliente interativo ´ definido como um cliente a a e que utiliza a op¸˜o CLIENT_INTERACTIVE para mysql_real_connect().Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 315 • ft_query_expansion_limit N´nero de correspondˆncias a usar para consulta de exu e pans˜o (em MATCH . Todas as palavras do arquivo ser˜o usadas. MySQL a e criar´ arquivos tempor´rios maiores (tornando o processo lente. Definir este parˆmetro com uma string vazia ("") disabilitaa a o filtro de palavras de parada.) • key_buffer_size Blocos de ´ indices s˜o buferizados e compartilhados por todas as a threads. mas pequenas palavras ser˜o inseridas muito a rapidamente. Entretanto.

Este valor por padr˜o ´ pequeno.0.316 MySQL Technical Reference for Version 5. Se vocˆ estiver utilizando --log-slow-queries. ou mais que a 1 GB.0. nomes de tabelas s˜o ara mazenados em letras min´sculas no disco e nomes de tabelas ser˜o caso-insensitivo. esta op¸˜o tamb´m se aplica aos nomes de banco de dados. P´gina 303.1. P´gina 378.23. max_binlog_size Dispon´ ivel a partir da 3. Veja Se¸˜o 4. P´gina 473. Key_reads.10.5 [LOCK TABLES].10.23 e 1G no MySQL a 4.0-alpha • • • • • • • • • • • • Vocˆ pode verificar a performance do buffer de chaves executando SHOW STATUS e examie nar as vari´veis Key_read_requests.14). a max_allowed_packet O valor m´ximo de um pacote.01. O buffer de mensagens ´ inicia e ado por net_buffer_length bytes. large_file_support Se o mysqld foi compilado com op¸˜es para suporte a grandes co arquivos. a lower_case_nome_tabelas Se estiver configurado para 1. a log_update Se o log de atualiza¸˜es est´ habilitado. Nota se vocˆ estiver usando transa¸˜es: uma transa¸˜o a e e co ca .7. Vocˆ deve incrementar este valor se vocˆ estiver usando colue e nas BLOB grandes. Na vers˜o a ca e a 4. n˜o em tempo de CPU. O a e protocol atual limita o max_allowed_packet ` 16M no MySQL 3.3 [Caso sensitivo ca e ca nos nomes]. Veja Se¸˜o 4. co a log_bin Se o log bin´rios est´ habilitado. Ele deve t˜o grande quanto o maior BLOB que vocˆ deseja utilizar. ser´ obtido o erro "Multi-statement transaction required more o a than ’max binlog cache size’ bytes of storage" ("Transa¸˜o multi-instru¸˜es necessita ca co mais que ’max binlog cache size’ bytes de armazenamento").5 [Log de ca consultas lentas].0. P´gina 378. u a Na vers˜o .5 [Slow query a ca log].8 [SHOW]. P´gina 616.0. mas pode crescer at´ max_allowed_packet bytes e quando for necess´rio. rotacione os logs. para obter pacotes maiores a a e (possivelmente errados). Key_write_requests e Key_writes. ca a Para obter ainda mais velocidade quando estiver gravando v´rios registros ao mesmo a tempo. O Key_ a write/Key_write_requests ´ normalmnte pr´ximo de 1 se vocˆ estiver utilizando na e o e maioria updates/deletes mas deve ser bem menor se vocˆ tender a fazer atualiza¸˜es que e co afetam v´rias outras ao mesmo tempo ou se vocˆ estiver utilizando DELAY_KEY_WRITE. o contador Slow_queries ser incrementado. Veja Se¸˜o 6. a a log_slave_updates Se as atualiza¸˜es do slave devem ser logadas. co long_query_time Se uma consulta demorar mais que isto (em segundos). O valor padr˜o ´ 1 GB. a A raz˜o de Key_reads/Key_read_request deve normalmente ser < 0. Veja Se¸˜o 6. Se uma escrita ao log bin´rio a (replica¸˜o) exceder o valor fornecido.33. a e Veja Se¸˜o 4. max_binlog_cache_size Se uma transa¸˜o multi-instru¸˜es necessitar de mais que este ca co montante de mem´ria. Este valor ´ medido em tempo real. locked_in_memory Se o mysqld foi travado na mem´ria com --memlock o log Se o log de todas as consultas est´ habilitado.1 esta op¸˜o tamb´m se aplcia a alias de tabelas.2. Vocˆ n˜o pode configur´-lo ca e a a para menos de 4096 bytes (1024 na vers˜o do MySQL anteriores a 4.1. ca a language A linguagem utilizada para mensagens de erro. utilize LOCK TABLES. a e consulta ser´ logada ao arquivo de consultas lentas. assim a e a uma consulta que pode estar pode estar abaixo do limiar de um sistema de carga leve pode estar acima do limiar de um sistema de carga pesada.6.

a • max_delayed_threads N˜o inicie mais do que este n´mero de threads para lidar com a u instru¸˜es INSERT DELAYED. Se max_relay_log_size (dispon´ a a ivel partir do MySQL 4.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 317 ´ escrita em um bloco no arquivo de log bin´rio. • myisam_recover_options O valor da op¸˜o --myisam-recover. Configurando este u parˆmetro com um valor baixo (100 ?) vocˆ pode for¸ar o MySQL a preferir chaves a e c em vez de varrer a tabela. • max_user_connections O valor m´ximo de conex˜es ativas para um unico usu´rio (0 a o ´ a = sem limite). Veja abaixo u os coment´rios sobre os limites de descritores de arquivos.14.3 [Replication Implemenca ca tation Details]. o a • max_connect_errors Se houver mais que este n´mero de conex˜es interrompidas a u o partir de uma m´quina est´ m´quina ter´ as pr´ximas conex˜es bloqueadas. Veja Se¸˜o A. • max_relay_log_size Dispon´ a partir da vers˜o 4. Se vocˆ tentar inserir dados em uma nova tabela depois co e que todas as threads INSERT DELAYED estiverem em uso. • max_tmp_tables (Esta op¸˜o ainda n˜o faz nada. rotacione o relay log. j´ que ele nunca ´ separado entre e a a e diversos logs bin´rios. Aumentar este valor u a aumente o n´mero de descritores de arquivos que o mysqld necessita.0. Se vocˆ configur´-lo com 0.11. n˜o faremos mais que este e a n´mero de busca de chave independente da cardinalidade da chave. Esta vari´vel a a lhe permite colocar diferentes restri¸˜es de tamanho no relay logs e logs bin´rios. a • max_write_lock_count Depois desta quantidade de bloqueios de escrita. ca . Desta forma.2. O otimizador MySQL assumir´ que quando pesquisar por linhas correa spondentes em uma tabela atrav´s da varredura da chave. e retornam milh˜es de a a o registros. e a a • max_connections O N´mero de clientes simultˆneos permitidos. e menos que 1 GB. o MySQL a e a nunca criar´ uma thread max delayed. que tomam muito tempo. P´gina 381) exceder o valor dado. vocˆ pode ter a e co e logs bin´rios maioores que max_binlog_size. Se uma escrita ao relay log ivel a (um tipo de log usado por slaves de replica¸˜o. a e • max_seeks_for_key Limite do n´mero m´ximo de buscas ao procurar linhas com base u a em uma chave. • max_sort_length O n´mero de bytes utilizados para ordenar valores BLOB ou TEXT u (somente os primeiros max_sort_lenght bytes de cada valor s˜o usados. a ca • max_join_size Joins que provavelmente forem ler mais que max_join_size registros retornam um erro. P´gina 912.6 [Muitas a ca conex˜es]. O padr˜o ´ 0. permite que alguns bloqueios de leitura sejam executados. o registro ser´ inserido como a se o atributo DELAYED n˜o fosse especificado. Configure este valor se os seus usu´rios tendem a realizar joins que a n˜o possuem uma cl´usula WHERE.0.14) ´ 0. se vocˆ tiver grandes transa¸˜es. Vocˆ a a a a o o e pode desbloquar uma m´quina com o comadno FLUSH HOSTS. o resto ´ a e ignorado). Vocˆ tem que configurar max_relay_log_size a e com 0 ou mais de 4096. No co a entanto. ent˜o max_binlog_size se aplicar´ bem aos relay logs.) N´mero m´ximo de tabelas temca a u a por´rias que um cliente pode manter abertas ao mesmo tempo. configurar a vari´vel com 0 far´ o MySQL usar max_binlog_size tanto para a a o log bin´rio quanto para o relay logs. a • max_heap_table_size N˜o permita cria¸˜o de tabelas heap maiores que este valor. veja Se¸˜o 4.

de preferˆncia ao m´todo de cache de chaves.cada ´ a indice em sua pr´pria thread. Se a cria¸˜o do arquivo tempor´rio para cria¸˜o ca a ca r´pida de ´ a indices fosse este valor maior que quando for usado o cache de chaves. e . ALTER TABLE ou LOAD DATA INFILE). Perceba que quando n´s n˜o esperamos dados de uma o a conex˜o. • myisam_max_extra_sort_file_size. Nota reparos com multi-threads est´ ainda sob c´digo de qualidade o a o alpha.3 e em bytes a partir desta vers˜o. • protocol_version A vers˜o do protocolo usada pelo servidor MySQL. u Este ´ o valor real dado para o sistema e pode ser diferente do valor que vocˆ passa ao e e mysqld como parˆmetro de inicializa¸˜o. o tempo m´ximo de espera ´ definido pelo write_timeout. tente co novamente net_retry_count vezes antes de parar. Isto ´ usado principalmente para for¸ar que e e e c longas chaves de caracteres em tabelas grandes usem o m´todo de cache de chaves mais e lenta para criar o ´ indice. Se vocˆ fizer v´rias leituras e a sequenciais. a co a • net_write_timeout N´mero de segundos para esperar pela escrita de um bloco em u uma conex˜o antes de abortar a escrita. a • open_files_limit N´mero de arquivos que o sistema permite que o mysqld abra. Veja tamb´m a a e e slave_read_timeout. at´ max_allowed_packet e e bytes. vocˆ pode desejar aumentar este valor. • myisam_max_sort_file_size O tamanho m´ximo do arquivo tempor´rio que ´ pera a e mitido ao MySQL usar enquanto recria os ´ indices (durante REPAIR. a • range_alloc_block_size Tamanho dos blocos que s˜o alocados ao se fazer uma a otimiza¸˜o da faixa. durante o processo reparo e por ordena¸~o os ´ ca indices de tabels MyISAM ser˜o criados em paralelo . mas se vocˆ tem muito pouca a e mem´ria. NOTE que este parˆmetro ´ fornecido em megabytes! a e • myisam_repair_threads. Se as instru¸˜es exco co cederem este valor. (Isto ´. NOTE que este parˆmetro ´ fornecido e e a e em megabytes antes da vers˜o 4. • net_retry_count Se uma leitura na porta de comunica¸˜es for interrompida.0.0-alpha • myisam_sort_buffer_size O buffer que ´ alocado ao ordenar o ´ e indice quando estiver fazendo um REPAIR ou estiver criando ´ indices com CREATE INDEX ou ALTER TABLE. a a • net_buffer_length O buffer de comunica¸˜es ´ configurado para este tamanho enco e tre queries. ca • port O valor da opcao --port.0. o buffer ´ aumentado automaticamente. o o a e tamanho experado das instru¸˜es SQL enviadas pelos clientes.) • net_read_timeout N´mero de segundos para esperar por mais dados de uma conex˜o u a antes de abortar a leitura. Ele ´ 0 em sistemas onde o MySQL n˜o pode a ca e a alterar o n´mero de arquivos abertos. Isto n˜o deve ser alterado normalmente. u • pid_file O valor da op¸˜o --pid-file.318 MySQL Technical Reference for Version 5. Se o tamanho do arquivo for maior que isto. ca • read_buffer_size (era record_buffer) Cada thread que faz uma leitura sequencial aloca um buffer deste tamanho para cada tabela lida. Este valor deve ser bem alto no FreeBSD j´ que interrup¸˜es internas s˜o enviadas para todas as threads. Se este valor ´ maior que um. pode configur´-lo para o tamanho esperado de uma consulta. o ´ indice ser´ criado a atrav´s do cache de chaves (que ´ mais lento).

Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 319 • read_rnd_buffer_ae (era record_rnd_buffer) Ao ler registros na ordem depois de uma ordena¸˜o. • query_prealloc_size Buffer persistente para an´lise e execu¸˜o da consulta. mas apenas a i-la ´ alter´-la ao executar alguma consulta especifica grande. o Se 0. Aumentar este u valor aumenta o n´mero de descritores de arquivos que o mysql necessita. ca o contador Slow_launch_threads ser´ incrementado.. Em teoria. Veja abaixo os ´ comenta´rios sobre os limites do descritor de arquivos. O MySQL u precisa de dois descritores de arquivos para cada tabela unica aberta. e a • query_cache_type Pode ser configurado com (somente num´rico) e Valor Alias Coment´rio a 0 OFF N˜o armazena ou recupera resultados a 1 ON Armazena todos os resultados exceto consultas SELECT SQL_NO_ CACHE . a • query_cache_size A mem´ria alocada para armazenar resultados de consultas antigas. a • socket O socket Unix utilizado pelo servidor. co a Veja Se¸˜o A. ca a a • table_cache O n´mero de tabelas abertas para todas as threads. ´ • safe_show_database N˜o exibe bancos de dados nos quais o usu´rio n˜o tem nenhum a a a privil´gios. ca • skip_locking Est´ desligado (OFF) se o mysqld usar bloqueio externo.. tornando-o “grande o suficiente” vocˆ pode fazer e o MySQL executar consultas sem ter que fazer uma unica chamada malloc. a cache de consulta ´ desabilitada (padr˜ot). Veja tamb´m safe_show_databases. a o • skip_show_databases Isto previne usu´rios de fazerem SHOW DATABASES se eles n˜o a a possuirem o privil´gio PROCESS_PRIV. Como esta ´ uma vari´vel espec´ e a ifica da thread. os registros s˜o lidos atrav´s deste buffer para evitar pesquisas em ca a e disco. Vocˆ pode conferir se necessita a e . • sort_buffer Cada thread que precisar fazer uma ordena¸˜o aloca um buffer deste ca tamanho. a a a (Padr˜o 1M).4. ca o • query_cache_limit N˜o armazena resultados que s˜o maiores que esta vari´vel.. N˜o ´ a ca a e liberado entre consultas.4 [Arquivos tempor´rios]. • slow_launch_time Se a cria¸˜o de threads demorar mais que este valor (em segundos). 2 DEMAND Armazena apenas consultas SELECT SQL_CACHE . Se vocˆ tiver a ca e problemas com fragmenta¸˜o de mem´ria ele pode ajudar a aumentar isto um pouco. P´gina 925. a • skip_networking Est´ ligado (ON) se somente permitimos conex˜es locais (socket). n˜o se pode defin´ globalmente. Isto pode aumentar a seguran¸a se vocˆ se e c e preocupa com o fato das pessoas poderem ver quais bancos de dados outros usu´rios a possuem.. Aumente este valor para opera¸˜es ORDER BY ou GROUP BY mais r´pidas. Isto pode melhorar a seguran¸a se vocˆ se preocupa com o fato das pessoas e c e estarem aptas a ver quais bancos de dados outros usu´rios possuem. a • query_alloc_block_size Tamanho dos blocos de aloca¸˜o de mem´ria que s˜o aloca o a cados para objetos criados durante a an´lise e execu¸˜o da consulta.. Pode melhorar bastante o ORDER BY se configurado com um valor alto. Veja tamb´m a e skip_show_databases.. e • slave_net_timeout N´mero de segundos para esperar por mais dados de uma conex˜o u a de master/slave antes de abortar a leitura. • server_id O valor da op¸˜o --server-id.

8. e a Para informa¸˜es sobre como o cache de tabelas funciona. Todas novas threads ser˜o a obtidas primeiramente do cache.INTERACTIVE_TIMEOUT dependendo do tipo do cliente . a tmp_table_size Se uma tabela tempor´ria em mem´ria exceder este tamanho. no Windows). Tornando-o “grande o suficiente” para a e caber todas as consulta em uma transa¸˜o comum vocˆ pode evitar muitas chamadas ca e malloc. P´gina 306.3 [SHOW STATUS]. Aua e mente o valor de tmp_table_size se vocˆ fizer v´rias consultas GROUP BY avan¸adas e e a c vocˆ tiver muita mem´ria.6. Veja Se¸˜o 5. Esta vari´vel pode ser aumentada para melhorar a performance se vocˆ tiver a e v´rias conex˜es novas.3 a ca [Tabelas Abertas]. a a e Na inicializa¸˜o da thread. ent˜o c a vocˆ deve aumentar o valor desta vari´vel. u a wait_timeout O n´mero de segundos que o servidor espera pela atividade em uma u conex˜o antes de fech´-la. Veja tamb´m interactive_timeout.7 [Table cache].0-alpha • • • • • • • • • • • aumentar o cache de tabela conferindo a vari´vel Opened_tables. ele pode ser definido com uma lista de caminhos separados por dois pontos (:) (ponto e v´ irgula (. O padr˜o ´ grande o suficiente para a a e opera¸˜es normais.WAIT_ ca e TIMEOUT ou GLOBAL.WAIT_TIMEOUT ´ inicializado por GLOBAL. a transaction_prealloc_block_size Buffer persistente para transaction_alloc_ blocks que n˜o ´ liberado entre as consultas.1. veja Se¸˜o 5.1. as threads dos clientes s˜o colocadas no cache se n˜o a a existir mais de thread_cache_size threads que antes.6. Se esta vari´vel for grande e vocˆ n˜o faz muitos a a e a FLUSH TABLES (que apenas for¸a todas as tabelas a serem fechadas e reabertas).) Examinando as diferen¸as entre e ca c Connections e Threads_create (veja Se¸˜o 4. e o tmpdir O diret´rio utilizado para arquivos tempor´rios e tabelas tempor´rias. Eles ser˜o usados de modo robin-round. P´gina 422. thread_stack O tamanho da pilha para cada thread. P´gina 306 para ca a maiores detalhes) pode ser visto o qu˜o eficente ´ o cache de threads atual. thdr_setconcurrency() permite que a aplica¸˜o forne¸a ao sistema de threads ca c uma dica com o n´mero desejado de threads que devem ser executados ao mesmo u tempo.8. o a o MySQL ir´ a convertˆ-la automaticamente para uma tabela MyISAM em disco. A partir o a a do MySQL 4.4. SESSION. co ca a timezone O fuzo hor´rio para este servidor.4 [Benchmarks do MySQL]. mysqld ir´ chamar thr_setconcurrency() com este a valor. (Normalmente isto n˜o d´ uma melhora de performance not´vel a o a a a se vocˆ possuir uma boa implementa¸˜o de threads. transaction_alloc_block_size Tamanho dos blocos de aloca¸˜o de mem´ria que s˜o ca o a alocados para consultas de armazenamento que s˜o parte de uma transa¸˜o que est´ a ca a para ser armazenada no log bin´rio ao se fazer um commit. a thread_cache_size Quantas threads devem ser mantidas em cache para reutiliza¸˜o.0.320 MySQL Technical Reference for Version 5. a table_type O tipo padr˜o de tabelas. a e thread_concurrency No Solaris. ca Quando um cliente desconecta. version O n´mero da vers˜o do servidor. V´rios dos limites detectados a pelo teste crash-me s˜o dependentes deste valor. a Este recurso pode ser usado para dividir a craga entre diversos discos f´ isicos. Veja Se¸˜o 4. e s´ quando o cache estiver vazio uma nova thread ´ o e criada. co ca P´gina 452.

5 SHOW [BDB] LOGS SHOW LOGS exibe estat´ isticas sobre os arquivos log existentes. P´gina 302. e • File exibe o caminho completo para o arquivo de log • Type exibe o tipo do arquivo log (BDB para arquivos de log Berkeley DB).5. ou IN USE se o arquivo ´ necess´rio para o subsistema de transa¸˜es) e a co 4.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 321 (como definido pela op¸˜o de conex˜o CLIENT_INTERACTIVE). P´gina 455. Atualmente ele s´ exibe ino forma¸˜es sobre arquivos de log Berkeley DB. Sen˜o s´ ´ poss´ a a o e ivel ver as pr´prias threads. a ca a • Closing tables Signiifica que a thread est´ descarregando os dados alterados na tabela a para o disco e fechando as tabelas usadas. a Este comando ´ muito util caso vocˆ obtenha a mensagem de erro ’too many connections’ e ´ e e deseja saber o que est´ ocorrendo. e a a Alguns estados normalmente vistos em mysqladmin processlist • Checking table A thread est´ realizando verifica¸˜o [autom´tica] da tabela. ca a a vocˆ deve verificar se o seu disco n˜o est´ cheio ou que o disco n˜o est´ com sobrecarga. poder´ ver todas as threads.12.6.7 [KILL]. Esta informa¸˜o tamb´m a ca ca e pode ser obtida com o comando mysqladmin processlist. Se vocˆ possuir o privil´gio e e SUPER. ent˜o somente os primeiros ca a e a ca a 100 caracteres de cada query seri˜o exibidos.1) ´ SHOW BDB LOGS. Veja tamb´m e A se¸˜o do manual que descreve o ajuste do MySQL cont´m algumas informa¸˜es de como ca e co sintonizar as vari´veis acima.0. a ca a a 4.8. o • Creating tmp table A thread est´ criando uma tabela tempor´ria para guardar uma a a parte do resultado para a consulta. . Se vocˆ n˜o utiliza a op¸˜o FULL. • Status exibe o status do arquivo log (FREE se o arquivo pode ser removido.1. a • Copying to tmp table on disk O resultado tempor´rio foi maior que tmp_table_size a e a thread agora est´ alterando a tabela tempor´ria na mem´ria para o disco para a a o economizar mem´ria.2 [Parˆmetros do servidor]. assim um alias para ele (dispon´ a partir co ivel do MySQL 4. Veja Se¸˜o 5. O MySQL reserva uma conex˜o extra por cliente a a com o privil´gio SUPER para garantir que vocˆ sempre consiga logar e conferir o sistema e e (assumindo que este privil´gio n˜o foi concedido para todos os usu´rios).6. Isto deve ser uma opera¸˜o r´pida.6 SHOW PROCESSLIST SHOW [FULL] PROCESSLIST exibe quais threads est˜o em execu¸˜o.8.6. • deleting from main table Ao executar a primeira parte de um delete multi-tabela e estamos deletando apenas da primeira tabela. a A partir da vers˜o 4. Se n˜o. Veja o Se¸˜o 4. e a a a a • Connect Out Slave est´ conectando ao master. o MySQL informa o nome de maquina para conex˜es TCP/IP a o no formato nome_maquina:client_port para tornar mais f´cil de se encontrar qual cliente a est´ fazendo o que. ca a interactive_timeout.

• Repair with keycache O c´digo de repara¸˜o est´ usando a cria¸˜o de chaves uma a o ca a ca uma atrav´s da cache de chaves. e ca • Upgrading lock O manipulador de INSERT DELAYED est´ tentando obter um lock para a inserir registros na tabela. • Killed Algu´m enviou um sinal para matar a thread e ela deve abortar a pr´xima vez e o que ele verificar o parˆmetro kill. • Flushing tables A thread est´ executando FLUSH TABLES e est´ esperando que todas a a as threads fechem as suas tabelas. e • Removing duplicates A consulta estava usando SELECT DISTINCT de tal modo que o MySQL n˜o podia otimizar o distinct em um estagio anterior. Ela liberou o lock. • Opening tables Isto simplesmente significa que a thread est´ tentando abrir uma a tabela. Para poder . Isto ´ muito mais lento que Repair by sorting. Se a vocˆ n˜o est´ usando m´ltiplos servidores mysqld que est˜o acessando a mesma tabela. a a • User Lock A thread est´ esperando um GET_LOCK(). a finaliza¸˜o ter´ efeito assim que as a ca a outras threads liberarem o bloqueio.0-alpha • deleting from reference tables Ao executar a segunda parte de um delete multitabela e estamos deletando o registros correspondentes em outras tabelas. Se a thread est´ bloqueada par outra thread. e a • Sorting for group A thread est´ fazendo uma ordena¸˜o para satisfazer a um GROUP a ca BY. • Sending data A thread est´ processando registros para uma instru¸˜o SELECT e a ca tamb´m est´ enviando dados ao cliente. • Updating A thread est´ procurando por registros para atualiz´-los.0. a menos que algo previna da a abertura. mas em alguns casos ainda pode levar um tempo curto para a thread morrer. • Repair by sorting O c´digo de repara¸˜o est´ utilizando ordenamento para recriar os o ca a ´ indices. • Reopen table A thread obteve um lock para a tabela. e e • Searching rows for update A thread esta fazendo uma primeira fase pra encontrar todos os registros coincidentes antes de atualiz´-los. mas notificou ap´s o lock que a o estrutura da tabela alterou. • Sleeping A thread est´ esperando que o cliente envie um novo comando a ela. a • Waiting for tables A thread recebeu uma notifica¸˜o que a estrutura de uma tabela ca foi alterada e ela precisa reabrir a tabela para receber a nova estrutura. e a a u a vocˆ pode desabilitar o lock de sistema com a op¸˜o --skip-external-locking. Por isto o MySQL fez a um est´gio extra para remover todos os registros duplicados antes de enviar o resultado a ao cliente. Este deve ser um procedimento muito r´pido. Isto deve ser feito se o UPDATE a est´ alterando o ´ a indice usado para encontrar os registros envolvidos. • Sorting for order A thread est´ fazendo uma ordena¸˜o para satisfazer a um ORDER a ca BY. Por exemplo um ALTER TABLE ou um LOCK TABLE pode prvenir a abertura de uma tabela at´ que o comando esteja finalizado. fechou a tabela e agora est´ tentando a reabr´ i-la. O parˆmetro ´ verificado em cada loop maior no a a e MySQL. a • System lock A thread est´ esperando um lock de sistema externo para a tabela.322 MySQL Technical Reference for Version 5.

P´gina 461. s char(60) default NULL. P´gina 546.0. RENAME a TABLE. ALTER TABLE. a 4.7 SHOW GRANTS SHOW GRANTS FOR usu´rio lista os comandos concedidos que devem ser usados para duplicar a os direitos de um usu´rio.8.2 a a a ca [CURRENT_USER()]. REPAIR TABLE. ´ 4. Se a thread permanecer em qualquer a co a destes estados por muitos segundos.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 323 reabrir a tabela ela deve esperar at´ que todas a outras threads tenham fechado a e tabela em quest˜o.8.3. Se¸˜o 5. PRIMARY KEY (id) ) TYPE=MyISAM SHOW CREATE TABLE cita os nomes de colunas e tabelas de acordo com o valor da op¸˜o ca SQL_QUOTE_SHOW_CREATE. Existem outros estados que n˜o s˜o mencionados anteriormente. ANALYZE TABLE ou OPTIMIZE TABLE.6.5.6.6. co a A maioria dos estados s˜o opera¸˜es muito r´pidas. ca a 4. mas a maioia deles s´ s˜o a a o a uteis para encontrar erros no mysqld. • waiting for handler insert O manipulador do INSERT DELAYED processou todas as inser¸˜es e est´ esperado por outras. row *************************** Table: t Create Table: CREATE TABLE t ( id INT(11) default NULL auto_increment.* TO ’root’@’localhost’ WITH GRANT OPTION | +---------------------------------------------------------------------+ Para listar as permiss˜es da sess˜o atual pode-se usar a fun¸˜o CURRENT_USER() (nova na o a ca vers˜o 4.8 SHOW CREATE TABLE Exibe uma instru¸˜o CREATE TABLE que ir´ criar a seguinte tabela: ca a mysql> SHOW CREATE TABLE t\G *************************** 1.9 SHOW WARNINGS | ERRORS SHOW WARNINGS [LIMIT row_count] .6.6) para descobrir com qual usu´rio a sess˜o foi autenticada. +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *. Veja Se¸˜o 6.6 [SET OPTION SQL_QUOTE_SHOW_CREATE]. a A notifica¸˜o acontece se outra thread usou FLUSH TABLES ou um dos seguintes ca comando na tabela em quest˜o: FLUSH TABLES nome_tabela. a mysql> SHOW GRANTS FOR root@localhost.8. pode haver um problema que precisa ser investigado.

3 rows affected. A vers˜o 4.1. out of range for column ’a’ at row 3 | | Warning | 1263 | Data truncated for column ’b’ at row 3 | +---------+------+---------------------------------------------------------------+ 4 rows in set (0. Isto pode ser retornado chamando mysql_warning_count(). Vocˆ pode recuperar o n´mero de erros de @error_count e avisos de @warning_count.00 sec) mysql> insert into t1 values(10.a visos e notas recebidos para o ultimo comando. UPDATE e ALTER. avisos e notas que vocˆ recebeu para o ultimo coe ´ mando enquanto SHOW ERRORS lhe mostra apenas o erro.’mysql’). e u SHOW WARNINGS mostra todos os erros. No caso de avisos desabila e itados. mysql> SHOW WARNINGS.324 MySQL Technical Reference for Version 5.0 apenas adicionamos a estrutura para avisos e poucos comandos MySQL ainda geraram avisos. b char(4)). simplesmente zere esta vari´vel. Query OK. +---------+------+---------------------------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------------------------+ | Warning | 1263 | Data truncated for column ’b’ at row 1 | | Warning | 1261 | Data truncated. +-------+------+-------------------------------+ | Level | Code | Message | +-------+------+-------------------------------+ | Note | 1051 | Unknown table ’no_such_table’ | +-------+------+-------------------------------+ Note que no MySQL 4. SET max_error_count=[count]. 0 rows affected (0. mysql> DROP TABLE IF EXISTS no_such_table. 4 warnings (0. NULL supplied to NOT NULL column ’a’ at row 2 | | Warning | 1262 | Data truncated. ca mysql> create table t1(a tinyint NOT NULL. ent˜o o contaa a .1. e Ele mostra os erros.15 sec) Records: 3 Duplicates: 0 Warnings: 4 mysql> show warnings.1.(NULL. O servidor MySQL envia de volta o n´mero total de avisos e erros que vocˆ recebe para o u e ultimo comando.0.1 suporta todos os tipos de avisos para LOAD a DATA INFILE e instru¸˜es DML tais como os comandos INSERT.’open source’). ´ At´ as mensagens max_error_count s˜o armazenadas (vari´veis global e espec´ e a a ificas da thread).(300. co Por exemplo.0.0-alpha SHOW ERRORS [LIMIT row_count] Este comando ´ implementado no MySQL 4. Por padr˜o ´ 64. aqui est´ um caso simple que produz avisos de convers˜o para instru¸˜es de a a co inser¸˜o. Os erros/avisos s˜o ´ a reiniciados para cada comando que utiliza uma tabela. Query OK. No caso de max_error_count ser 0.00 sec) O n´mero m´ximo de avisos pode ser espec´ u a ificado usando a vari´vel do servidor ’max_ a error_count’.’test’).

10 SHOW TABLE TYPES SHOW TABLE TYPES Este comando ´ implementado no MySQL 4. mysql> show variables like ’max_error_count’. 0 rows affected (0. 3 rows affected. Is replaced by MyISAM | .00 sec) mysql> set max_error_count=1.Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 325 dor de avisos ainda representa quantos avisos ocorreram.00 sec) mysql> alter table t1 modify b char. +--------+---------+-----------------------------------------------------------+ | Type | Support | Comment | +--------+---------+-----------------------------------------------------------+ | MyISAM | DEFAULT | Default type from 3.23 with great performance | | HEAP | YES | Hash based. mas nenhuma das mensagens s˜o a armazenadas. ou para ver qual ´ o tipo de ´ e e tabela padr˜o.6. o ca qual retorna apenas um mensagem de aviso embora o total de avisos seja 3.0. Isto ´ particca e ulamente util para verificar se um tipo de tabela ´ suportado. 3 warnings (0. useful for temporary tables | | MERGE | YES | Collection of identical MyISAM tables | | ISAM | YES | Obsolete table type. considere o seguinte instru¸˜o de tabela ALTER para o exemplo acima. +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_error_count | 64 | +-----------------+-------+ 1 row in set (0.8. e SHOW TABLE TYPES lhe mostra a informa¸˜o de status sobre o tipo de tabela. Por exemplo.00 sec) Records: 3 Duplicates: 0 Warnings: 3 mysql> show warnings. Query OK. stored in memory. a mysql> SHOW TABLE TYPES. Query OK. +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1263 | Data truncated for column ’b’ at row 1 | +---------+------+----------------------------------------+ 1 row in set (0. ao definir max error count=1.1.00 sec) mysql> 4.

Todos os bin´rios padr˜es do MySQL s˜o compilados com --with-extraa o a charsets=complex.Indexes | To create new databases and tables | Drop | Databases.6. Isto adicionar´ c´digo a todos os programas padr˜es para estarem a o o .8. e SHOW PRIVILEGES mostra a lista de privil´gios de sistema o servidor MySQL suporta. e mysql> show privileges. row-level locking and foreign keys | | BDB | NO | Supports transactions and page-level locking | +--------+---------+-----------------------------------------------------------+ 6 rows in set (0.7 Localiza¸˜o do MySQL e Utiliza¸˜o Internacional ca ca 4.1.326 MySQL Technical Reference for Version 5.0. Este tamb´m ´ o conjunto de caracteres aplic´vel nos e e e a EUA e oeste da Europa.Tables | To drop databases and tables | Grant | Databases.Tables | To give to other users those privileges yo | References | Databases.1 O Conjunto de Caracteres Utilizado para Dados e Ordena¸˜o ca Por padr˜o.7.Tables | To have references on tables | Reload | Server Admin | To reload or refresh tables.0. logs and priv | Shutdown | Server Admin | To shutdown the server | Process | Server Admin | To view the plain text of currently execut | File | File access on server | To read and write files on the server +------------+--------------------------+------------------------------------------14 rows in set (0.00 sec) A op¸˜o ’Support’ DEFAULT indica se um tipo de tabela particular ´ ´ suportado.Tables.00 sec) 4.0-alpha | InnoDB | YES | Supports transactions. e qual ´ o ca ee e tipo padr˜o. o MySQL utiliza o conjunto de caracteres ISO-8859-1 (Latin1) com ordena¸˜o a ca de acordo com o sueco/finlandˆs. ent˜o o campo a e a ’Support’ do InnoDB ter´ o valor DEFAULT. +------------+--------------------------+------------------------------------------| Privilege | Context | Comment +------------+--------------------------+------------------------------------------| Select | Tables | To retrieve rows from table | Insert | Tables | To insert data into tables | Update | Tables | To update existing rows | Delete | Tables | To delete existing rows | Index | Tables | To create or drop indexes | Alter | Tables | To alter the table | Create | Databases. Se o servidor ´ iniciado com --default-table-type=InnoDB. a 4.11 SHOW PRIVILEGES SHOW PRIVILEGES Este comando ´ implementado no MySQL 4.

a Se o cliente for compilado com o caminho diferente daquele onde o servidor est´ instalado e a o usu´rio que configurou o MySQL n˜o incluiu todos os conjuntos de caracteres no bin´rios a a a do MySQL. a Outros conjuntos de caracteres ser˜o carregados de um arquivo de defini¸˜es de conjuntos a co de caracteres quando necess´rios. P´gina 97. a a 4. o seguinte mapeamento ´ feito na string antes de fazer a e compara¸˜o: ca a ¨ -> ae o ¨ -> oe . a Ao ordenar e comparar strings.3. Isto lhe dar´ as seguintes caracteristicas. ca co co a Se o conjunto de caracteres for alterado durante a execu¸˜o do MySQL (que tamb´m pode alca e terar a ordena¸˜o).Cap´ ıtulo 4: Administra¸˜o do Bancos de Dados MySQL ca 327 aptos a lidar com o conjuntos de caracteres latin1 e todos os multi-byte no bin´rio. a O conjunto de caracteres determina quais s˜o os caracteres permitidos em nomes e qual a a forma de ordena¸˜o por cl´usulas ORDER BY e GROUP BY da instru¸˜o SELECT. ca a ca Vocˆ pode alterar o conjunto de caracteres com a op¸˜o --default-character-set e ca na inicializa¸˜o do servidor.1.1 German character set Para se fazer ordena¸˜o em Alem˜o. vocˆ deve iniciar o mysqld com --default-characterca a e set=latin1_de. deve ser especificado para o cliente onde ele pode encontrar os conjuntos de caracteres adcicionais que ser˜o necess´rios se o servidor executar com um conjunto de a a caracteres diferente do cliente.7. mysql_real_escape_string() ´ identico ` antiga fun¸˜o e a ca mysql_espace_string(). De outra forma seus ´ indices podem n˜o ser ordenados corretamente. deve-se executar o 0myisamchk -r -q --set-character-set=charset ca em todas as tabelas.3 [Op¸˜es de configura¸˜es]. Os conjuntos de caracteres dispon´ ca iveis dependem dos parˆmetros --with-charset=charset e --with-extra-charset= list-of-charset | a complex | all | none e os arquivos de configura¸˜es de conjuntos de caracteres listados co em ‘SHAREDIR/charsets/ Index’. O cliente ir´ alternar para o uso deste conjunto de caracteres a a nesta conex˜o. Pode-se for¸ar o cliente a usar conjuntos de caracteres espec´ c ificos especificando: [client] default-character-set=nome-conjunto-caracteres mas normalmente isto nunca ser´ necess´rio. Veja Se¸˜o 2. exceto pelo fato de usar a manipulador de conex˜o MySQL como a o primeiro parˆmetro. a Quando um cliente conecta a um servidor MySQL. a Deve ser utilizado mysql_real_escape_string() quando desejar ignorar seguˆncias de e caracteres em uma consulta SQL. o servidor envia o conjunto de caracteres padr˜o em uso ao cliente. Isto pode ser especificado colocando em um arquivo de op¸˜es do MySQL: co [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets onde o caminho aponta para onde os conjuntos de caracteres dinˆmicos do MySQL s˜o a a armazenados.

a u Os arquivos de linguagens est˜o localizados (por padr˜o) em ‘mysql_base_dir /share/LANGUAGE /’. Eslovaco. Se ele necessitar de alguns destes recursos. ¨.0-alpha u ¨ -> ue ß -> ss Todos os caracteres acentuados. s˜o convertidos para suas contra partes sem acentos e em a letras mai´sculas. A sintaxe para o arquivo ´ muito simples: e . Dinamarquˆs. Acentos s˜o removidos para todas as letras a u a exceto: ¨. Adicione MYSET para o final do arquivo ‘sql/share/charsets/Index’ Associe um n´mero unico ao mesmo. Estonian. Alem˜o. ¨.txt’. a Na seguinte se¸˜o. Norueguˆs. Norueguˆs-ny.conf’. Japonˆs. Portuguˆs. H´ngaro.2 Mensagens de Erros em Outras L´ inguas mysqld pode exibir mensagens de erros nas seguintes l´ inguas: Tcheco. 4. u ´ 2. Por exemplo: i shell> mysqld --language=swedish ou: shell> mysqld --language=/usr/local/share/swedish Perceba que todos as l´ inguas s˜o especificados em min´sculas. Inglˆs (padr˜o).328 MySQL Technical Reference for Version 5. (O arquivo ‘sql/share/charsets/latin1. ser´ simples.7. ¨.txt errmsg. deve-se editar o arquivo ‘ errmsg. a Por exemplo. Crie o ar