XOOPS Brasil

 

Capítulo 4. Administração do Bancos de Dados MySQL

Índice

4.1. Configurando o MySQL
4.1.1. Opções de Linha de Comando do mysqld
4.1.2. Arquivo de Opções my.cnf
4.2. Executando Múltiplos MySQL Servers na Mesma Máquina
4.2.1. Executando Múltiplos Servidores no Windows
4.2.2. Executando Múltiplos Servidores no Unix
4.2.3. Usando Programas Clientes em um Ambiente Multi-Servidor
4.3. Detalhes Gerais de Segurança e o Sistema de Privilégio de Acesso do MySQL
4.3.1. Segurança Geral
4.3.2. Como Tornar o MySQL Seguro contra Crackers
4.3.3. Opções de Inicialização para o mysqld em Relação a Segurança.
4.3.4. Detalhes de Segurança com LOAD DATA LOCAL
4.3.5. O Que o Sistema de Privilégios Faz
4.3.6. Como o Sistema de Privilégios Funciona
4.3.7. Privilégios Fornecidos pelo MySQL
4.3.8. Conectando ao Servidor MySQL
4.3.9. Controle de Acesso, Estágio 1: Verificação da Conexão
4.3.10. Controle de Acesso, Estágio 2: Verificação da Requisição
4.3.11. Hashing de Senhas no MySQL 4.1
4.3.12. Causas dos Erros de Accesso Negado
4.4. Gerenciamento das Contas dos Utilizadores no MySQL
4.4.1. A Sintaxe de GRANT e REVOKE
4.4.2. Nomes de Utilizadores e Senhas do MySQL
4.4.3. Quando as Alterações nos Privilégios tem Efeito
4.4.4. Configurando os Privilégios Iniciais do MySQL
4.4.5. Adicionando Novos Utilizadores ao MySQL
4.4.6. Deletando Utilizadores do MySQL
4.4.7. Limitando os Recursos dos Utilizadores
4.4.8. Configurando Senhas
4.4.9. Mantendo Sua Senha Segura
4.4.10. Usando Conexões Seguras
4.5. Prevenção de Disastres e Recuperação
4.5.1. Backups dos Bancos de Dados
4.5.2. Sintaxe de BACKUP TABLE
4.5.3. Sintaxe de RESTORE TABLE
4.5.4. Sintaxe de CHECK TABLE
4.5.5. Sintaxe do REPAIR TABLE
4.5.6. Utilizando myisamchk para Manutenção de Tabelas e Recuperação em Caso de Falhas
4.5.7. Configurando um Regime de Manutenção das Tabelas
4.5.8. Obtendo Informações sobre as Tabelas
4.6. Adiministração do Banco de Dados e Referência de Linguagem
4.6.1. Sintaxe de OPTIMIZE TABLE
4.6.2. Sintaxe de ANALYZE TABLE
4.6.3. Sintaxe de CHECKSUM TABLE
4.6.4. Sintaxe de FLUSH
4.6.5. Sintaxe de RESET
4.6.6. Sintaxe de PURGE MASTER LOGS
4.6.7. Sintaxe de KILL
4.6.8. Sintaxe de SHOW
4.7. Localização do MySQL e Utilização Internacional
4.7.1. O Conjunto de Caracteres Utilizado para Dados e Ordenação
4.7.2. Mensagens de Erros em Outras Línguas
4.7.3. Adicionando um Novo Conjunto de Caracteres
4.7.4. Os Vetores de Definições de Caracteres
4.7.5. Suporte à Ordenação de Strings
4.7.6. Suporte à Caracteres Multi-byte
4.7.7. Problemas com Conjuntos de Caracteres
4.8. Utilitários e Scripts do Lado do Servidor MySQL
4.8.1. Visão Geral dos Scripts e Utilitários do Lado Servidor
4.8.2. mysqld-safe, o wrapper do mysqld
4.8.3. mysqld_multi, programa para gerenciar múltiplos servidores MySQL
4.8.4. myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL
4.8.5. mysqld-max, om servidor mysqld extendido
4.9. Utilitários e Scripts do Lado do Cliente MySQL
4.9.1. Visão Geral dos Utilitários e Scripts do Lado do Cliente
4.9.2. mysql, A Ferramenta de Linha de Comando
4.9.3. mysqlcc, The MySQL Control Center
4.9.4. mysqladmin, Administrando um Servidor MySQL
4.9.5. mysqlbinlog, Executando as Consultas a Partir de um Log Binário
4.9.6. Usando mysqlcheck para Manutenção de Tabelas e Recuperação em Caso de Falhas
4.9.7. mysqldump, Descarregando a Estrutura de Tabelas e Dados
4.9.8. mysqlhotcopy, Copiando Bancos de Dados e Tabelas do MySQL
4.9.9. mysqlimport, Importando Dados de Arquivos Texto
4.9.10. mysqlshow, Exibindo Bancos de Dados, Tabelas e Colunas
4.9.11. mysql_config, Opções para compilação do cliente MySQL
4.9.12. perror, Explicando Códigos de Erros
4.9.13. Como Executar Comandos SQL a Partir de um Arquivo Texto
4.10. Os Arquivos de Log do MySQL
4.10.1. O Log de Erros
4.10.2. O Log de Consultas
4.10.3. O Log de Atualizações
4.10.4. O Log Binário
4.10.5. O Log para Consultas Lentas
4.10.6. Manutenção do Log de Arquivo
4.11. Replicação no MySQL
4.11.1. Introdução
4.11.2. Visão Geral da Implementação da Replicação
4.11.3. Detalhes de Implementação da Replicação
4.11.4. Como Configurar a Replicação
4.11.5. Recursos de Replicação e Problemas Conhecidos
4.11.6. Opções de Inicialização da Replicação
4.11.7. Instruções SQL para Controle do Servidor Master
4.11.8. Instruções SQL para Controle do Servidor Slave
4.11.9. FAQ da Replicação
4.11.10. Problemas com Replicação
4.11.11. Relatando Problemas de Replicação

4.1. Configurando o MySQL

4.1.1. Opções de Linha de Comando do mysqld

Na maioria dos casos você deve gerenciar as opções do mysqld por meio dos arquivos de opções. Veja mais informações sobre isto na Seção 4.1.2, “Arquivo de Opções my.cnf.

mysqld e mysqld.server lêem opções dos grupos mysqld e server. mysqld_safe lê as opções dos grupos mysqld, server, mysqld_safe e mysqld_safe. Um servidor MySQL embutido normalmente lê opções do grupos server, embedded e xxxxx_SERVER, onde xxxxx é o nome da aplicação.

mysqld aceita os seguintes opções de linha de comando. Aqui está uma lista das mais comuns. Para uma lista completa execute mysqld --help. As opções usadas para replicação estào listadas em uma seção separada, veja Seção 4.11.6, “Opções de Inicialização da Replicação”.

  • --ansi

    Utilizar a sintaxe ANSI SQL no lugar da sintaxe MySQL Veja mais informações sobre isto na Seção 1.8.2, “Executando o MySQL no modo ANSI”.

  • -b, --basedir=path

    Encaminho para o diretório de instalação. Todos os caminhos normalmente são resolvidos em relação a este.

  • --big-tables

    Permite grandes conjuntos de resultados salvando todos os conjuntos temporários em um arquivo. Ele resolve a maioria dos erros 'table full', mas também abaixa a velocidade das consultas nas quais as tabelas em memória seriam suficientes. Desde a Versão 3.23.2, o MySQL é capaz de resolver isto automaticamente usando memória para pequenas tabelas temporárias e trocando para o disco as tabelas, quando for necessário.

  • --bind-address=IP

    Endereço IP para ligar.

  • --console

    Grava a mensagem de erro no stderr/stdout mesmo se --log-error é espeficado. No Windows o mysqld não fechará a tela de console se esta opção é usada.

  • --character-sets-dir=path

    Diretório onde estão os conjuntos de caracteres. Veja mais informações sobre isto na Seção 4.7.1, “O Conjunto de Caracteres Utilizado para Dados e Ordenação”.

  • --chroot=path

    Coloca o daemon mysqld no diretorio chroot durante a inicialização. Medida de segurança recomendada desde o MySQL 4.0 (MySQL 3.23 não está apto a fornecer um chroot 100% fechado. Limita os comandos LOAD DATA INFILE e SELECT ... INTO OUTFILE.

  • --core-file

    Grava um arquivo core se o mysqld morrer. Para alguns sistemas você deve também especificar --core-file-size para mysqld_safe. Veja mais informações sobre isto na Seção 4.8.2, “mysqld-safe, o wrapper do mysqld. Note que em alguns sistemas, como Solaris, você não consiguirá um arquivo core se você também estiver usando a opção --user.

  • -h, --datadir=caminho

    Encaminha para o diretório raiz dos bancos de dados.

  • --debug[...]=

    Se o MySQL está configurado com --with-debug, você pode usar esta opção para obter um arquivo de rastreamento indicando o que o mysqld está fazendo. Veja mais informações sobre isto na Seção E.1.2, “Criando Arquivos Trace (Rastreamento)”.

  • --default-character-set=conjunto_caracter

    Configura o conjunto de caracteres padrão. Veja mais informações sobre isto na Seção 4.7.1, “O Conjunto de Caracteres Utilizado para Dados e Ordenação”.

  • --default-table-type=tipo

    Configura o tipo de tabela padrão. Veja mais informações sobre isto na Capítulo 7, Tipos de Tabela do MySQL.

  • --delay-key-write[= OFF | ON | ALL]

    Como o DELAYED KEYS do MyISAM deve ser usado. Veja mais informações sobre isto na Seção 5.5.2, “Parâmetros de Sintonia do Servidor”.

  • --delay-key-write-for-all-tables; No MySQL 4.0.3 você deve usar --delay-key-write=ALL.

    Não descarrega buffers das chaves entre escritas em nenhuma tabela MyISAM. Veja mais informações sobre isto na Seção 5.5.2, “Parâmetros de Sintonia do Servidor”.

  • --des-key-file=filename

    Read the default keys used by DES_ENCRYPT() and DES_DECRYPT() from this file.

  • --enable-external-locking (era --enable-locking)

    Habilita o bloqueio do sistema. Perceba que se usar esta opção em um sistema que não possui um lockd() completamente funcional (como no Linux) você pode fazer com que o mysqld entre em deadlock.

  • --enable-named-pipe

    Habilita suporte para named pipes (somente no NT/Win2000/XP).

  • -T, --exit-info

    Esta é uma máscara binária com diferêntes parâmetros que pode ser usada para depurar o servidor mysqld; Esta opção não deve ser usada por alguém que não a conheça muito bem!

  • --flush

    Atualiza todas as alterações no disco depois de cada comando SQL. Normalmente o MySQL só faz a escrita de todas as alterações no disco depois de cada comando SQL e deixa o sistema operacional lidar com a sincronização com o disco. Veja mais informações sobre isto na Seção A.4.1, “O Que Fazer Se o MySQL Continua Falhando”.

  • -?, --help

    Mostra uma pequena ajuda e sai.

  • --init-file=arquivo

    Lê comandos SQL do arquivo especificado na inicialização.

  • -L, --language=...

    Mensagens de erro do cliente na língua especificada. Pode ser fornecido como um caminho completo. Veja mais informações sobre isto na Seção 4.7.2, “Mensagens de Erros em Outras Línguas”.

  • -l, --log[=arquivo]

    Log de conexões e consultas ao arquivo. Veja mais informações sobre isto na Seção 4.10.2, “O Log de Consultas”.

  • --log-bin=[arquivo]

    Registra todas as consultas que alteram dados em arquivo. Usado para backup e replicação. Veja mais informações sobre isto na Seção 4.10.4, “O Log Binário”.

  • --log-bin-index[=arquivo]

    Arquivo de índice para nomes de arquivos de log binario. Veja mais informações sobre isto na Seção 4.10.4, “O Log Binário”.

  • --log-error[=arquivo]

    Registra mensagens de erro e inicialização neste arquivo. Veja mais informações sobre isto na Seção 4.10.1, “O Log de Erros”.

  • --log-isam[=arquivo]

    Log de todas alterações ISAM/MyISAM no arquivo (usado somente quando estiver depurando bancos ISAM/MyISAM).

  • --log-long-format

    Registra algumas informações extras nos aruivos de log (log de atualizações, log binário de atualizações e log de consultas lentas, independente de qual está ativado). Por exemplo, nome do utilizador e timestamp são registrados para a consulta. Se você estiver usando --log-slow-queries e --log-long-format, então consultas que não estão usando índices são registradas ao log de consultas lentas. Note que --log-long-format está obsoleto a partir do MySQL versão 4.1, quando --log-short-format foi introduzido (--log-long-format é a configuração padrão desde a versão 4.1). Note também que a partir do MySQL 4.1, a opção --log-queries-not-using-indexes está disponível para propósito de registro de consultas que não usam índices para o log de consultas lentas.

  • --log-queries-not-using-indexes

    Se você estiver usando --log-slow-queries, então consultas que não estão usando índices estão registradas no log de consultas lentas. Esta opções está disponível a partir do MySQL 4.1. Veja mais informações sobre isto na Seção 4.10.5, “O Log para Consultas Lentas”.

  • --log-short-format

    Registra menos informações extras nos aruivos de log (log de atualizações, log binário de atualizações e log de consultas lentas, independente de qual está ativado). Por exemplo, nome do utilizador e timestamp são registrados para a consulta. Esta opção foi introduzida no MySQL 4.1.

  • --log-slow-queries[=arquivo]

    Log de todas as consultas que levam mais de long_query_time segundos de execução para um arquivo. Note que o padrão para a quantidade de informação registrada alterou no MySQL 4.1. Veja as opções --log-long-format e --log-long-format para mais detalhes. Veja mais informações sobre isto na Seção 4.10.5, “O Log para Consultas Lentas”.

  • --log-update[=arquivo]

    Log de atualizações para file.# onde # é um número único se não for fornecido. Veja mais informações sobre isto na Seção 4.10.3, “O Log de Atualizações”. O log de atualização estáobsoleto e será removido no MySQL 5.0; você deve usar o log binário em seu lugar (--log-bin). Veja mais informações sobre isto na Seção 4.10.4, “O Log Binário”. A partir da versão 5.0, usar --log-update apenar ligará o log binário.

  • --low-priority-updates

    Operações de alterações das tabelas (INSERT/DELETE/UPDATE) irão ter prioridade menor do que as selects. Isto também pode ser feito usando {INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ... para baixar a prioridade de somente uma consulta, ou SET OPTION SQL_LOW_PRIORITY_UPDATES=1 para alterar a prioridade em uma única thread. Veja mais informações sobre isto na Seção 5.3.2, “Detalhes sobre Lock de Tabelas”.

  • --memlock

    Bloqueia o processo mysqld na memória. Isto funciona somente se o seu sistema suportar a chamada de sistema mklockall() (como no Solaris). Isto pode ajudar se você tiver um problema no qual o sistema operacional faz com que o mysqld faça a troca em disco. Note que o uso desta opção exige que você execute o servidor como root, que normalmente não é uma boa idéia por razões de segurança.

  • --myisam-recover [=opção[,opção...]]] onde opção é qualquer combinação

    de DEFAULT, BACKUP, FORCE ou QUICK. Você também pode configurar isto explicitamente para "" se você deseja desabilitar esta opção. Se esta opção for usada, o mysqld irá conferir na abertura se a tabela está marcada como quebrada ou se a tabela não foi fechada corretamente. (A última opção funciona somente se você estiver executando com --skip-locking). Se este for o caso mysqld irá executar uma conferência na tabela. Se a tabela estiver corrompida, o mysqld irá tentar repará-la.

    As seguintes opções afetam no funcionamento da reparação.

    OpçãoDescrição
    DEFAULTO mesmo que não fornecer uma opção para --myisam-recover.
    BACKUPSe os dados da tabela foram alterados durante a recuperação, salve um backup do arquivo de dados nome_tabela.MYD como nome_tabela_dia_hora.BAK.
    FORCEExecute a recuperação mesmo se perdermos mais de uma linha do arquivo .MYD.
    QUICKNão confira as linhas na tabela se não existir nenhum bloco apagado.

    Antes da tabela ser reparada automaticamente, o MySQL irá adicionar uma nota no log de erros. Se você desejar que a recuperação da maioria dos problemas não tenha a intervenção de algum utilizador, devem ser usadas as opções BACKUP,FORCE. Isto irá forçar um reparo de uma tabela mesmo se alguns registros forem apagados, mas ele manterá o arquivo de dados antigo como um backup para que você possa examinar posteriormente o que aconteceu.

  • --new

    A partir da versão 4.0.12, a opção --new pode ser usada para fazer o servidor se comportar como 4.1 em certos aspectos, facilitando a atualização da versão 4.0 para 4.1:

  • --pid-file=caminho

    Encaminha para o arquivo pid usado pelo mysqld_safe.

  • -P, --port=...

    Número da porta para conexões TCP/IP.

  • -o, --old-protocol

    Utilize o protocolo 3.20 para compatibilidade com alguns clientes muito antigos. Veja mais informações sobre isto na Seção 2.5.5, “Atualizando da versão 3.20 para 3.21”.

  • --one-thread

    Usa somente uma thread (para depuração sobre Linux). Esta opção está disponível apenas se o servidor está construído com a depuração habilitada. Veja mais informações sobre isto na Seção E.1, “Depurando um Servidor MySQL”.

  • --open-files-limit=

    Para alterar o número de descritores de arquivos disponíveis para o mysqld. Se isto não estiver configurado com 0, então o mysqld usará este valor para reservar descritores de arquivos para usar com setrlimit(). Se este valor é 0 então o mysqld reservará max_connections*5 ou max_connections + table_cache*2 (que é sempre é maior) número de arquivos. Você deve tentar aumentar isto se o mysqld lhe retornar o erro 'Too many open files'.

  • -O, --set-variable=name=value

    Fornece um valor para uma variável. --help lista as variáveis. Você pode encontrar uma descrição completa para todas as variáveis na seção SHOW VARIABLES deste manual. Veja mais informações sobre isto na Seção 4.6.8.4, “SHOW VARIABLES. A seção de sintonia dos parâmetros do servidor inclui informações sobre como otimizá-los. Por favor, note que --set-variable=name=value e -O name=value estão obsoletos desde o MySQL 4.0, apenas use --var=opção. Veja mais informações sobre isto na Seção 5.5.2, “Parâmetros de Sintonia do Servidor”.

    No MySQL 4.0.2 pode-se definir uma variável diretamente com --variable-name=opção e set-variable não é mais preciso no arquivo de opções.

    Se você quiser restringir o valor máximo uma opção de inicialização pode ser definida com SET, você pode definí-la usando a opção de linha de comando --maximum-variable-name. Veja mais informações sobre isto na Seção 5.5.6, “Sintaxe de SET.

    Note que quando um valor é atribuído a uma variável, o MySQL pode carrigí-lo automaticamente para permanecer dentro de uma faixa dada e também ajusta o valor um pouco para corrigir para o algoritmo usado.

  • --safe-mode

    Salta alguns estágios de otimização.

  • --safe-show-database

    Com esta opção, o comando SHOW DATABASES retorna apenas aqueles bancos de dados para os quais o utilizador tem algum tipo de privilégio. Desde a versão 4.0.2 esta opção esta obsoleta e não faz nada (a opção está habilitada por padrão) já que agora temos o privilégio SHOW DATABASES. Veja mais informações sobre isto na Seção 4.4.1, “A Sintaxe de GRANT e REVOKE.

  • --safe-user-create

    Se isto estiver ativo, um utilizador não pode criar novos utilizadores com o comando GRANT, se o utilizador não ter o privilégio de INSERT na tabela mysql.user ou em alguma coluna desta tabela.

  • --skip-bdb

    Disabilita o uso de tabelas BDB. Isto economizará memória e pode aumentar a velocidade de algumas operações.

  • --skip-concurrent-insert

    Desliga a habilidade de selecionar e inserir ao mesmo tempo em tabelas MyISAM. (Isto só é usado se você achar que encontrou um erro neste recurso).

  • --skip-delay-key-write;

    No MySQL 4.0.3 você deve usar --delay-key-write=OFF. Ignore a opção DELAY_KEY_WRITE para todas as tabelas. Veja mais informações sobre isto na Seção 5.5.2, “Parâmetros de Sintonia do Servidor”.

  • --skip-grant-tables

    Esta opção faz com que o servidor não use o sistema de privilégio. Isto dá a todos acesso pleno a todos os bancos de dados! (Você pode dizer a um servidor em execução para iniciar a usar as tabelas de permissão novamente executando mysqladmin flush-privileges ou mysqladmin reload.)

  • --skip-host-cache

    Nunca utiliza cache para nomes de máquina para resoluções de nomes mais rápidos, mas pesquisa o servidor DNS em todas conexões. Veja mais informações sobre isto na Seção 5.5.5, “Como o MySQL Utiliza o DNS”.

  • --skip-innodb

    Disabilita o uso de tabelas Innodb. Isto irá economizar memória, espaço em disco e aumentar a velocidade de algumas operações.

  • --skip-external-locking (era --skip-locking)

    Não utilizar bloqueio de sistema. Para usar isamchk ou myisamchk você deve desligar o servidor. Veja mais informações sobre isto na Seção 1.2.3, “Estabilidade do MySQL”. Perceba que na Versão 3.23 do MySQL pode ser usado REPAIR e CHECK para reparar/conferir tabelas MyISAM.

  • --skip-name-resolve

    Nomes de máquinas não são resolvidos. Todos os valores da coluna Host nas tabelas de permissões devem conter números IP ou localhost. Veja mais informações sobre isto na Seção 5.5.5, “Como o MySQL Utiliza o DNS”.

  • --skip-networking

    Não escutair conexões TCP/IP. Toda interação com mysqld deve ser feito através de named pipes ou sockets Unix. Esta opção é altamente recomendada para sistemas onde requisições locais são permitidas. Veja mais informações sobre isto na Seção 5.5.5, “Como o MySQL Utiliza o DNS”.

  • --skip-new

    Não utilizar rotinas novas, possívelmente erradas.

  • --skip-symlink

    Opção obsoleta a partir da 4.0.13; use --skip-symbolic-links em seu lugar.

  • --symbolic-links, --skip-symbolic-links

    Habilita ou desabilita suporte a link simbólico. Esta opção tem efeitos diferentes no Windows e Unix.

    No Windows, habilitar links simbílicos lhe permite estabelecer um link simbólico a um diretório de banco de dadosi criando um arquivo directory.sym que contém o caminho para o diretório real. Veja mais informações sobre isto na Seção 5.6.1.3, “Usando Links Simbólicos para Bancos de Dados no Windows”.

    No Unix, habilitar links simbólicos, significa que você pode ligar uma tabela MyISAM ou um arquivo de dados em outro dirtório com as opções INDEX DIRECTORY ou DATA DIRECTORY da instrução CREATE TABLE. Se você deletar ou renomear a tabela, os arquivos para o qual o link simbólico aponta também será deletado/renomeado.

  • --skip-safemalloc

    Se o MySQL é configurado com --with-debug=full, todos os programas verificam a memória por erros para cada operação de alocação e liberação de memória. Esta consistência é muito lenta, assim para o servidor você pode evitá-la, quando você não precisar dela usando a opção --skip-safemalloc.

  • --skip-show-database

    Não permite o comando 'SHOW DATABASE', a menos que o utilizador tenha privilégio SHOW DATABASES.

  • --skip-stack-trace

    Não gravar os rastreamentos de pilha. Esta opção é útil quando você estiver executando o mysqld sob um depurador. El alguns sistemas você também deve usar esta opção para conseguir um arquivo core. Veja mais informações sobre isto na Seção E.1, “Depurando um Servidor MySQL”.

  • --skip-thread-priority

    Desabilita o uso de prioridade das threads para um tempo de resposta mais rápido.

  • --socket=path

    No Unix, o arquivo socket para usar em conexões locais no lugar do padrão /tmp/mysql.sock. No Windows, o nome do pipe para usar em conexões locais que usam named pipe (padrão MySQL).

  • --sql-mode=value[,value[,value...]]

    Os valores de opção pode ser qualquer combinação de: REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, ONLY_FULL_GROUP_BY, NO_UNSIGNED_SUBTRACTION, NO_AUTO_VALUE_ON_ZERO, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_DIR_IN_CREATE, MYSQL323, MYSQL40, DB2, MAXDB, MSSQL, ORACLE, POSTGRESQL, ou ANSI. O valor também pode ficar vazio (--sql-mode="") se você desejar limpá-la.

    NO_AUTO_VALUE_ON_ZERO afeta o tratamento de colunas AUTO_INCREMENT. Normalmente, você gera a próxima sequência de números da coluna inserindo NULL ou 0 nela. NO_AUTO_VALUE_ON_ZERO omite este comportamento para 0, assim apenas NULL gera a próxima sequência de números. Este modo pode ser útil se 0 foi armazenado em uma coluna AUTO_INCREMENT da tabela (isto não é recomendado). Por exemplo, se você fizer um dumpo de uma tabela com mysqldump e então recarregá-la, normalmente o MySQL ira gerar uma nova sequência de números quando encontrar valores 0, resultando em uma tabela com conteúdo diferente daquele do qual foi feito o dump. Habilitando NO_AUTO_VALUE_ON_ZERO antes de recarregar o arquivo de dump soluciona este problema. (A partir do MySQL 4.1.1, quando este valor se tornar disponível, o mysqldump inclui automaticamente a saída do dump para habilitar NO_AUTO_VALUE_ON_ZERO.)

    Diversos dos valores de opção são usados para compatibilidade com outros servidores. Se especificado, eles fazer o servidor omitir da saída de SHOW CREATE TABLE aquelas partes da instrução que não são entendidas pelas versões anteriores do MySQL ou outros servidores de banco de dados. Usar estes valores de opções resulta em instruções CREATE TABLE que são mais portáveis para usar com outros servidores:

    • Os valores NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_DIR_IN_CREATE, e NO_KEY_OPTIONS causam a omissão da tabela de opções, ou opções pertencentes a definição de colunas ou índices.

    • Os valroes MYSQL323 e MYSQL40 são para compatibilidade com o MySQL 3.23 e MySQL 4.0.

    • O valor usado para compatibilidade com outros servidores são DB2, MAXDB, MSSQL, ORACLE, e POSTGRESQL.

    Estas opções também afetam a saída do mysqldump, porque este programa usa SHOW CREATE TABLE para obter a instrução de criação da tabela a qual ele inclue em sua própria saída.

    Diversos valores de opções podem ter um efeito complexo porque eles são atalhos para um grupo ou conjunto de valores. Por exemplo, você pode dizer ao servidor para executar em modo ANSI usando a opção --sql-mode=ansi (ou --ansi), que é equivalente a especificar ambas das seguintes opções de linhas de comando:

    --sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY
    --transaction-isolation=SERIALIZABLE
    

    Note que especificar o modo ANSI desta forma também tem o efeito de configurar o nível de isolação da transação.

    Para mais informações sobre executar o servidor em modo ANSI, veja Seção 1.8.2, “Executando o MySQL no modo ANSI”.

    Outros valores de ``grupos'' são DB2, MAXDB, MSSQL, ORACLE, e POSTGRESQL. Esepcificar qualquer um dele ativa os valores PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, e NO_KEY_OPTIONS.

    A opção --sql-mode foi adicionada no MySQL 3.23.41. O valor NO_UNSIGNED_SUBTRACTION foi adicionado na versão 4.0.0. NO_DIR_IN_CREATE foi adicionado na versão 4.0.15. NO_AUTO_VALUE_ON_ZERO, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, MYSQL323, MYSQL40, DB2, MAXDB, MSSQL, ORACLE, POSTGRESQL, e ANSI foram adicionados na versão 4.1.1.

  • --temp-pool

    Usar esta opção fará com que a maioria dos arquivos temporários criados pelo servidor para usarem um pequeno conjunto de nomes, em vez de um único nome para cada novo arquivo. Isto é para contornar um problema no kernel do Linux ao tratar com a criação de muitos arquivos novos com nomes diferentes. Com o comportamento antigo, o Linux parece ter ``perda'' de memória, já que ela é alocada na cache de entrada do diretório em vez da cache de disco.

  • --transaction-isolation={ READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE }

    Configura o nível de isolação da transação padrão. Veja mais informações sobre isto na Seção 6.7.6, “Sintaxe SET TRANSACTION.

  • -t, --tmpdir=path

    Caminho do diretório usado para criar os arquivos temporários. Ele pode ser útil se o seu diretório padrão /tmp está em uma partição muito pequena para armazenar tabelas temporárias. A partir do MySQL 4.1, esta opção aceita diversos caminhos usados do modo round-robin. Os caminhos devem ser separados por dois pontos (:) (ponto e vírgula (;) no Windows). Eles serão usados de acordo com o método round-robin.

  • -u, --user=[nome_utilizador | id_utilizador]

    Executar o servidor mysqld como o utilizador nome_utilizador ou id_usário (numérica). (``User'' neste contexto se refere a conta de login do sistema, não um utilizador MySQL listado na tabela de permissões.)

    Esta opção é obrigatória quando o mysqld é iniciado como utilizador root. O servidor irá alterar o ID do utilizador durante sua inicialização, fazendo com que ele seja executado como este utilizador particular em vez de root. Veja mais informações sobre isto na Seção 4.3.2, “Como Tornar o MySQL Seguro contra Crackers”.

    A partir do MySQL 3.23.56 e 4.0.12: Para evitar um possível furo na segurança onde um utilizador adiciona uma opção --user=root a algum arquivo my.cnf (fazendo o servidor executar como root, o mysqld usa apenas a primeira opção --user especificada e produz um aviso se houver múltiplas opções --user.

    As opções em /etc/my.cnf e datadir/my.cnf são processadas antes de uma opção de linha de comando, assim é recomendado que você coloque uma opção --user em /etc/my.cnf e especifique um outro valor diferente de root. A opção em /etc/my.cnf será encontrada antes de qualques outra opção --user, o que assegura que o servidor não execute como root, e que um aviso seja exibido se qualquer outra opção --user for encontrada.

  • -V, --version

    Mostra a informação da versão e sai.

  • -W, --log-warnings

    Imprime avisos como Aborted connection... no arquivo .err. É recomendável habilitar esta opção, por exemplo, se você estiver usando replicação (você obterá a mensagem sobre o que está acontecendo como falhas de rede e reconexões). Veja mais informações sobre isto na Seção A.2.10, “Erros de Comunicação / Comunicação Abortada”.

    Esta opção se chamava --warnings.

Pode se alterar a maioria dos valores de um servidor em execução com o comnado SET. Veja mais informações sobre isto na Seção 5.5.6, “Sintaxe de SET.

4.1.2. Arquivo de Opções my.cnf

O MySQL pode, desde a versão 3.22, ler as opções padrões de inicialização para o servidor e para clientes dos arquivos de opções.

No Windows, o MySQL lê opções padrões dos seguintes arquivos:

Nome do ArquivoPropósito
Windows-directory\my.iniOpções globais
C:\my.cnfOpções globais

Windows-directory é a localização do seu diretório Windows.

No Unix, o MySQL lê opções padrões dos seguintes arquivos:

Nome do arquivoPropósito
/etc/my.cnfOpções globais
DATADIR/my.cnfOpções específicas do servidor
defaults-extra-fileO arquivo especificado com --defaults-extra-file=#
~/.my.cnfOpções específicas do utilizador

DATADIR é o diretório de dados do MySQL (normalmente /usr/local/mysql/data para instalações binárias ou /usr/local/var para instalações de código fonte). Perceba que este é o diretório que foi especificado na hora da configuração, não o especificado com --datadir quando o mysqld inicia! (--datadir não tem efeito sobre o local onde o servidor procura por arquivos de opções, porque ele procura pelos arquivos antes de processar qualquer argumento da linha de comando.)

Note que no Windows, você deve especificar todos os caminhos no arquivo de opção com / no lugar de \. Se for utilizado o \, será necessário digitá-lo duas vezes, pois o \ é o caractere de escape no MySQL.

O MySQL tenta ler os arquivos de opções na ordem listada acima. Se múltiplos arquivos de opções existirem, uma opção especificada em um arquivo lido depois recebe a precedência sobre a mesma opção especificada em um arquivo lido anteriormente. Opções especificadas na linha de comando recebem a precedência sobre opções especificadas em qualquer arquivo de opções. Algumas opções podem ser especificadas usando variáveis de ambiente. Opções especificadas na linha de comando ou nos arquivos de opção tem precendencia sobre valores nas variáveis de ambiente. Veja mais informações sobre isto na Apêndice F, Variáveis de Ambientes do MySQL.

Os seguintes programas suportam arquivos de opções: mysql, mysqladmin, mysqld, mysqld_safe, mysql.server, mysqldump, mysqlimport, mysqlshow, mysqlcheck, myisamchk, e myisampack.

Desde a versão 4.0.2, você pode usar o prefixo loose para opções de linha de comando (ou opções no my.cnf). Se uma opção possui o prefixo loose, o programa que a ler não finalizará com um erro se uma opção for desconhecida, mas apenas enviará um aviso:

shell> mysql --loose-no-such-option

Você pode usar arquivos de opções para especificar qualquer opção extendida que o programa suporte! Execute o programa com --help para obter uma lista das opções disponíveis.

Um arquivo de opções pode conter linhas na seguinte forma:

  • #comentario

    Linhas de comentário iniciam com o caractere ‘#’ ou ‘;’. Comentários podem iniciar no meio de uma linha também. Linhas vazias são ignoradas.

  • [grupo]

    grupo é o nome do programa ou grupo para o qual você irá configurar as opções. Depois de uma linha de grupo, qualquer linha de opção ou set-variable são referentes ao grupo até o final do arquivo de opções ou outra linha de início de grupo.

  • opção

    Isto é equivalente à --opção na linha de comando.

  • opção=valor

    Isto é equivalente à --opção=valor na linha de comando. Por favor, note que você deve colocar um argumento entre aspas duplas, se o argumento de uma opção conter um caracter de comentário.

  • set-variable = nome=valor

    Isto é equivalente à --set-variable nome=valor na linha de comando.

    Por favor, notem que --set-variable está obsoleto desde o MySQL 4.0; a partir desta versão os nomes das variáveis de programa podem ser usados como nome de opções. Na linha de comando, use apenas --nome=valor. Em um arquivo de opção, use nome=valor.

O grupo [client] permite especificar opções para todos clientes MySQL (não o mysqld). Este é o grupo perfeito de se usar para espeficar a senha que você usa para conectar ao servidor. (Mas tenha certeza que o arquivo de opções só pode ser lido e gravado por você)

Se você quiser criar opções que devem ser lidas por uma versão específica do servidor mysqld você pode fazer isto com [mysqld-4.0], [mysqld-4.1] etc:

[mysqld-4.0]
new

A nova opção acima só será usada com o versões 4.0.x do servidor MySQL.

Perceba que para opções e valores, todos espaços em branco são automaticamente apagados. Você pode usar a sequencia de escape '\b', '\t', '\n', '\r', '\\' e '\s' no valor da string ('\s' == espaço).

Aqui está um típico arquivo de opções globais.

[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer_size=16M
set-variable = max_allowed_packet=1M
[mysqldump]
quick

Aqui está um típico arquivo de opções do utilizador

[client]
# A senha seguinte será enviada para todos clientes MySQL
password="minha_senha"
[mysql]
no-auto-rehash
set-variable = connect_timeout=2
[mysqlhotcopy]
interactive-timeout

Se você tem uma distribuição fonte, você encontrará arquivos de exemplo de configuração chamados my-xxxx.cnf no diretório support-files. Se você tem uma distribuição binária olhe no diretório de instalação DIR/support-file, onde DIR é o caminho para o diretório de instalação (normalmente C:\mysql ou /usr/local/mysql). Atualmente existem arquivos de configuração para sistemas pequenos, médios, grandes e enormes. Você pode copiar my-xxxx.cnf para seu diretório home (renomeie a cópia para .my.cnf para experimentar.

Todos os programas MySQL que suportam arquivos de opções aceitam opções:

OpçãoDescrição
--no-defaultsNão lê nenhum arquivo de opções.
--print-defaultsImprima o nome do programa e todas opções.
--defaults-file=caminho-para-arquivo-padrãoUtilize somente o arquivo de configuração específicado.
--defaults-extra-file=caminho-para-arquivo-padrãoLeia este arquivo de configuração depois do arquivo de configuração global mas antes do arquivo de configuração do utilizador.

Perceba que as opções acima devem vir primeiro na linha de comando para funcionar, com exceção que --print-defaults deve ser usado logo depois dos comandos --defaults-file ou --defaults-extra-file.

Notas para desenvolvedores: O tratamento de arquivos de opções é implementado simplesmente processando todos as opções coincidentes (isto é, opções no grupo apropriado) antes de qualquer argumento da linha de comando. Isto funciona bem para programas que usam a última instância de uma opção que é especificada diversas vezes. Se você tem um programa antigo que trata opções especificadas várias vezes desta forma mas não lê arquivos de opções, você só precisa adicionar duas linhas para lhe dar esta capacidade. Verifique o código fonte de qualquer um dos clientes MySQL padrão para ver como fazer isto.

Nos scripts shell você pode usar o comando my_print_defaults para analisar os arquivos de opção. O seguinte exemplo mostar a saída que my_print_defaults pode produzir quando quando pedido para mostrar as opções encontradas nos grupos [client] e [mysql]:

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash