XOOPS Brasil

 

2.4. Configurações e Testes Pós-instalação

Uma vez instalado o MySQL (de uma distribuição binária ou fonte), você deve inicializar as tabelas de concessões, iniciar o servidor e ter certeza que o servidor está funcionando bem. Você pode também desejar que o servidor inicie e pare automaticamente quando seu sistema iniciar e desligar.

Normalmente você instala as tabelas de concessões e inicia o servidor assim para instalações baseadas em uma distribuição fonte:

shell> ./scripts/mysql_install_db
shell> cd diretorio_instalação_mysql
shell> ./bin/mysqld_safe --user=mysql &

Para uma distribuição binária (sem ser pacotes RPM ou PKG), faça isto:

shell> cd diretorio_instalação_mysql
shell> ./bin/mysql_install_db
shell> ./bin/mysqld_safe --user=mysql &

O script mysql_install_db cria o banco de dados mysql que irá armazenar todos privilégios do banco de dados, o banco de dados test que você poderá usar para testar o MySQL e também entradas de privilégio para o utilizador que usa o mysql_install_db e o utilizador root. As estrandas são criadas sem senhas. O script mysqld_safe inicia o servidor mysqld. (Se sua versão for anterior a 4.0, use safe_mysqld em vez de mysqld_safe.)

mysql_install_db não irá sobrescrever nenhuma tabela de privilégios antiga, então deve ser seguro executá-lo em quaisquer circunstâncias. Se você não deseja ter o banco de dados test você pode removê-lo com mysqladmin -u root drop test depois de iniciar o servidor.

Testes são geralmente facilmente feitos de um diretório raiz da distribuição MySQL. Para uma distribuição binária, este é seu diretório de instalação (normalmente algo como /usr/local/mysql). Para uma distrubuição fonte, este é o diretório principal da sua árvore fonte do MySQL.

Nos comandos mostrados abaixo nesta seção e nas seguintes subseções, BINDIR é o caminho para a localização na qual os programas como mysqladmin e mysqld_safe estão instalados. Para uma distribuição binária este é o diretório bin. Para uma distribuição fonte, BINDIR é provavelmente /usr/local/bin, a menos que você especifique um diretório de instalação diferente de /usr/local quando você executa configure. EXECDIR é a localização na qual o servidor mysqld está instalado. Para uma distribuição binária, isto é o mesmo que BINDIR. Para uma distribuição fonte, EXECDIR é provavelmente /usr/local/libexec.

Os testes são descritos em detalhes abaixo:

  1. Se necessário, inicie o servidor mysqld e configure as tabelas de concessões iniciais contendo os privilégios que determinam como os utilizadores estão permitidos a conectar ao servidor. Isto é feito normalmente com o script mysql_install_db:

    shell> scripts/mysql_install_db
    

    Normalmente, mysql_install_db precisa ser executado somente na primeira vez que você instala o MySQL. Portanto, se você estiver atualizando uma instalação existente, você pode pular este passo. (entretanto, mysql_install_db é realmente seguro de usar e não irá atualizar nenhuma tabela que já exista, então se você não tem certeza do que fazer, você pode sempre executar mysql_install_db.)

    mysql_install_db cria seis tabelas (user, db, host, tables_priv, columns_priv e func) no banco de dados mysql. Uma descrição dos privilégios iniciais é fornecido em Seção 4.4.4, “Configurando os Privilégios Iniciais do MySQL”. De forma resumidao, estes privilégios permitem que o utilizador root faça qualquer coisa no MySQL, e permitem a qualquer um a criar ou usar bancos de dados com o nome de 'test' ou iniciando com 'test_' .

    Se você não configurar as tabelas de concessões, o seguinte erro irá aparecer no arquivo log quando você não iniciar o servidor:

    mysqld: Can't find file: 'host.frm'
    

    O erro acima pode também ocorrer com uma distribuição binária do MySQL se você não iniciar o MySQL executando o ./bin/mysqld_safe! Veja mais informações sobre isto na Seção 4.8.2, “mysqld-safe, o wrapper do mysqld.

    Você deve precisar executar mysql_install_db como root. Entretanto, se você preferir, pode executar o servidor MySQL como um utilizador (não-root) sem privilégios, desde que o utilizador possa ler e escrever arquivos no diretório de banco de dados. Instruções para executar o MySQL como um utilizador sem privilégios é detalhado em Seção A.3.2, “Como Executar o MySQL Como Um Utilizador Normal”

    Se você tiver problemas com o mysql_install_db, veja Seção 2.4.1, “Problemas Executando o mysql_install_db.

    Existem algumas alternativas para executar o script mysql_install_db como ele é fornecido na distribuição MySQL:

    • Você pode querer editar o mysql_install_db antes de executá-lo, para alterar os privilégios iniciais que são instalados nas tabelas de concessões. Isto é útil se você deseja instalar o MySQL em várias máquinas com os mesmos privilégios. Neste caso, é provável que você só precise adicionar algumas instruções INSERT extras para as tabelas mysql.user e mysql.db.

    • Se você deseja alterar o conteúdo da tabelas de concessões depois de instalá-las, você pode executar mysql_install_db, então usar mysql -u root mysql para conectar às tabelas de concessões como o utilizador root e usar instruções SQL para modificá-las diretamente.

    • É possível recriar as tabelas de permissões completamente depois delas já terem sido criadas. Você pode querer fazer isto se você já instalou as tabelas mas deseja recriá-las depois das edições mysql_install_db.

    Para maiores informações sobre estas alternativas, veja Seção 4.4.4, “Configurando os Privilégios Iniciais do MySQL”.

  2. Inicie o servidor MySQL assim:

    shell> cd diretorio_instalacao_mysql
    shell> bin/mysqld_safe &
    

    Se a sua versão do MySQL for mais antiga do que 4.0, substitua bin/safe_mysqld por bin/mysqld_safe no comando:

    Se você tiver problemas iniciando o servidor, veja Seção 2.4.2, “Problemas Inicializando o Servidor MySQL”.

  3. Use mysqladmin para verificar se o servidor está em execução. Os seguintes comandos fornecem um teste simples para conferir se o servidor está em funcionamento e respondendo às conexões:

    shell> BINDIR/mysqladmin version
    shell> BINDIR/mysqladmin variables
    

    A saída de mysqladmin version varia muito pouco dependendo de sua plataforma e versão do MySQL, mas deve ser similar a esta mostrada abaixo:

    shell> BINDIR/mysqladmin version
    mysqladmin Ver 8.14 Distrib 3.23.32, for linux on i586
    Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license.
    Server version 3.23.32-debug
    Protocol version 10
    Connection Localhost via Unix socket
    TCP port 3306
    UNIX socket /tmp/mysql.sock
    Uptime: 16 sec
    Threads: 1 Questions: 9 Slow queries: 0
    Opens: 7 Flush tables: 2 Open tables: 0
    Queries per second avg: 0.000
    Memory in use: 132K Max memory used: 16773K
    

    Para ter uma idéia do que você pode fazer com BINDIR/mysqladmin, invoque-o com a opção --help.

  4. Verifique se você pode desligar o servidor:

    shell> BINDIR/mysqladmin -u root shutdown
    
  5. Verifique que você possa reiniciar o servidor. Faça isto usando mysqld_safe ou chamado o mysqld diretamente. Por exemplo:

    shell> BINDIR/mysqld_safe --log &
    

    Se o mysqld_safe falhar, tente executá-lo do diretório de instalação do MySQL (se você já não estiver lá). Se não funcionar, veja Seção 2.4.2, “Problemas Inicializando o Servidor MySQL”.

  6. Execute alguns testes básicos para verificar se o servidor está funcionando. A saída deve ser similar ao mostrado abaixo:

    shell> BINDIR/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql |
    +-----------+
    shell> BINDIR/mysqlshow mysql
    Database: mysql
    +--------------+
    | Tables |
    +--------------+
    | columns_priv |
    | db |
    | func |
    | host |
    | tables_priv |
    | user |
    +--------------+
    shell> BINDIR/mysql -e "SELECT host,db,user FROM db" mysql
    +------+--------+------+
    | host | db | user |
    +------+--------+------+
    | % | test | |
    | % | test_% | |
    +------+--------+------+
    

    Também existe uma suite de benchmark no diretório sql-bench (sob o diretório de instalação do MySQL) que você pode usar para comparar como o MySQL se comporta em diferentes plataformas. O diretório sql-bench/Results contém os resultados de várias execuções em diferentes bancos de dados e plataformas. Os seguintes módulos Perl adicionais são necessários para executar o pacote de benchamrk:

    DBI
    DBD-mysql
    Data-Dumper
    Data-ShowTable
    

    Estes módulos podem ser obtidos em CPAN http://www.cpan.org/. Veja mais informações sobre isto na Seção 2.7.1, “Instalando Perl no Unix”.

    O diretório sql-bench/Results contém os resultados de várias execuções em diferentes bancos de dados e plataformas. Para executar todos testes, execute estes comandos:

    shell> cd sql-bench
    shell> run-all-tests
    

    Se você não possui o diretório sql-bench, você provavelmente está usando uma distribuição binária RPM. (Distribuições fontes RPMs incluem o diretório com os benchmarks.) Neste caso, você deve primeiramente instalar a suite de benchmark antes de poder usá-lo. A partir da versão 3.22 do MySQL, começaram a existir arquivos RPMs de benchmark chamados mysql-bench-VERSION-i386.rpm que contém código ie dados de benchmark.

    Se você tem uma distribuição fonte, você também pode executar os testes no subdiretório tests. Por exemplo, para executar auto_increment.tst, faça isto:

    shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
    

    Os resultados esperados são mostrados no arquivo ./tests/auto_imcrement.res.

2.4.1. Problemas Executando o mysql_install_db

O propósito do script mysql_install_db é gerar novas tabelas de privilégios. Ele não irá afeter nenhum outro dado! Ele também não fará nada se você já tem a tabela de privilégio do MySQL instalada.

Se você deseja refazer suas tabelas de privilégios, você deve desligar o servidor mysqld, se ele já está executando, então faça assim:

mv diretorio-dados-mysql/mysql diretorio-dados-mysql/mysql-old
mysql_install_db

Esta seção relaciona alguns problemas que podem ser encontrados ao executar mysql_install_db:

  • mysql_install_db não instala as tabelas de permissões

    Você pode descobrir que o mysql_install_db falha ao instalar as tabelas de permissões e termina depois de mostrar as seguintes mensagens:

    starting mysqld daemon with databases from XXXXXX
    mysql daemon ended
    

    Neste caso, você deve examinar o arquivo de log com muito cuidado! O log deve se encontrar no diretório XXXXXX nomeado pela mensagem de erro, e deve indicar porque mysqld não inicializa. Se você não entende o que aconteceu, inclua o log quando você postar um relato de erro usando mysqlbug! Veja mais informações sobre isto na Seção 1.7.1.3, “Como relatar erros ou problemas”.

  • Já existe um daemon mysqld sendo executado

    Neste caso, provavelmente não será necessário executar o mysql_install_db. Você deve executar o mysql_install_db somente uma vez, quando você instalar o MySQL da primeira vez.

  • Instalair um segundo daemon mysqld não funciona quando um daemon

    estiver em execução.

    Isto pode acontecer quando você já tiver uma instalação do MySQL existente, mas deseja colocar uma nova instalação em um diferente lugar (por exemplo, para testes, ou talvez você simplesmente deseja executar duas instalações ao mesmo tempo). Geralmente o problema que ocorre quando você tenta executar o segundo servidor é que ele tenta usar o mesmo socket e porta que o outro. Neste caso você irá obter a mensagem de erro: Can't start server: Bind on TCP/IP port: Address already in use ou Can't start server: Bind on unix socket.... Veja mais informações sobre isto na Seção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.

  • Você não tem direito de escrita no diretório /tmp

    Se você não tem direito de escrita para criar um arquivo socket no local padrão (em /tmp) ou permissão para criar arquivos temporáris em /tmp, você irá obter um erro quando executar mysql_install_db ou quando iniciar ou usar mysqld.

    Você pode especificar socket e diretório temporário diferentes, como segue:

    shell> TMPDIR=/algum_dir_tmp/
    shell> MYSQL_UNIX_PORT=/algum_dir_tmp/mysqld.sock
    shell> export TMPDIR MYSQL_UNIX_PORT
    

    Veja mais informações sobre isto na Seção A.4.5, “Como Proteger ou AlterarHow to Protect or Change the MySQL Socket File /tmp/mysql.sock.

    algum_dir_tmp deve ser o caminho para o mesmo diretório no qual você tem permissão de escrita. Veja mais informações sobre isto na Apêndice F, Variáveis de Ambientes do MySQL.

    Depois disto você deve estar apto para executar mysql_install_db e iniciar o servidor com estes comandos:

    shell> scripts/mysql_install_db
    shell> BINDIR/mysqld_safe &
    

  • mysqld falha imediatamente

    Se você estiver executando RedHat Versão 5.0 com uma versão de glibc anterior a 2.0.7-5 você deve ter certeza que você instalou todos os patches para a glibc! Existe muita informação sobre isto nos arquivos das listas de mensagens do MySQL. Links para os arquivos de correio estão disponíveis online em http://lists.mysql.com/. Veja também Seção 2.6.2, “Notas Linux (Todas as versões)”.

    Você pode também iniciar o mysqld manualmente usando a opção --skip-grant-tables e adicionar a informação de privilégios usando o mysql:

    shell> BINDIR/mysqld_safe --skip-grant-tables &
    shell> BINDIR/mysql -u root mysql
    

    Do mysql, execute manualmente os comandos SQL em mysql_install_db. Tenha certeza de executar mysqladmin flush_privileges ou mysqladmin reload após dizer ao servidor para recarregar as tabelas de permissões.

2.4.2. Problemas Inicializando o Servidor MySQL

Se você for usar tabelas que suportem transações (BDB, InnoDB), primeiro deve-se criar um arquivo my.cnf e configurar opções de inicialização para os tipos de tabelas que você planeja usar. Veja mais informações sobre isto na Capítulo 7, Tipos de Tabela do MySQL.

Geralmente, você inicia o servidor mysqld de uma das três maneiras:

Quando o daemon mysqld inicia, ele altera o diretório para o diretório de dados. É neste diretório que ele espera gravar arquivos de log e o arquivo pid (com o ID do processo) e onde ele espera encontrar os bancos de dados.

A localização do diretório de dados é especificada quando a distribuição é compilada. Entretanto, se o mysqld espera encontrar o diretório de dados em lugar diferente de onde ele realmente está no seu sistema, ele não funcionará corretamente. Se você tiver problemas com caminhos incorretos você pode encontrar quais opções o mysqld permite e quais são as configurações do caminho padrão chamando o mysqld com a opção --help. Você pode sobrescrever os padrões especificando os caminhos corretos como argumentos de linha de comando ao mysqld. (Estas opções também podem ser usadas com o mysqld_safe).

Normalmente você precisaria indicar ao mysqld somente o diretório base sob o qual o MySQL é instalado. Você pode fazer isso usando a opção --basedir. Você pode também usar --help para conferir o efeito das opeções para se alterar o caminho (perceba que --help deve ser a opção final do comando mysqld. Por exemplo:

shell> EXECDIR/mysqld --basedir=/usr/local --help

Uma vez que você determina as configurações de caminho que você deseja, inicie o servidor sem a opção --help.

Qualquer que tenha sido o método utilizado para iniciar o servidor, se houver falha na inicialização, confira o arquivo de log para ver se você pode entender o porquê. Arquivos log estão localizados no diretório dados (normalmente /usr/local/mysql/data para uma distribuição binária, /usr/local/var para uma distribuição fonte, \mysql\data\mysql.err no Windows.) Procure no diretório de dados por arquivos com nomes no formato nome_maquina.err e nome_maquina.log onde nome_maquina é o nome do servidor. Então confira as últimas linhas destes arquivos:

shell> tail nome_maquina.err
shell> tail nome_maquina.log

Se você encontrar algo como o seguinte no arquivo log:

000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed
000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory
000729 14:50:10 Can't init databases

Significa que você não inicializou o mysqld com --bdb-no-recover e o Berkeley DB encontrou algo errado com seus arquivos log quando ele tentou recuperar seus bancos de dados. Para poder continuar, você deve mover o antigo arquivo log Berkeley DB do diretório do banco de dados para outro lugar, onde poderá examiná-los posteriormente. Os arquivos log são nomeados log.0000000001, onde o número irá incrementar com o tempo.

Se você estiver executando o mysqld com suporte a tabelas BDB e o mysqld falhar no início, pode ser devido a alguns problemas com o arquivo de recuperação BDB. Neste caso você pode tentar iniciar o mysqld com --bdb-no-recover. Se isto ajudar, então você pode remover todos os arquivos log.* do diretório de dados e tentar iniciar o mysqld novamente.

Se você obter o seguinte erro, significa que algum outro programa (ou outro servidor mysqld) já está usando a porta TCP/IP ou socket mysqld está tentando usar:

Can't start server: Bind on TCP/IP port: Address already in use
ou
Can't start server: Bind on unix socket...

Use ps para ter certeza que você não tem outro servidor mysqld em execução. Se você não consegue encontrar outro servidor, você pode tentar executar o comando telnet sua_maquina numero_porta_tcp-ip e apertar ENTER várias vezes. Se você não obter uma mensagem como telnet: Unable to connect to remote host: Connection refused, algo está usando a mesma porta TCP/IP que o mysqld está tentando usar. Veja Seção 2.4.1, “Problemas Executando o mysql_install_db e Seção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.

Se o mysqld está atualmente em execução, você pode verificar as configurações que ele está usando executando este comando:

shell> mysqladmin variables

ou

shell> mysqladmin -h 'your-host-name' variables

Se você obter o Errcode 13, que significa Permission denied, ao iniciar o mysqld isto significa que você não pode ter o direito de leitura/criação de arquivos no diretório do banco de dados ou log. Neste caso você também deve iniciar o mysqld como utilizador root ou alterar a permissão para os arquivos e diretórios envolvidos para uqe você tenha o direito de usá-los.

Se o mysqld_safe inicia o servidor mas você não consegue se conectar a ele, tenha certeza que você tem uma entrada no arquivo /etc/hosts que parece com isto:

127.0.0.1 localhost

Este problema só ocorre em sistemas que não possuem uma biblioteca thread funcional e para o qual o MySQL deve estar configurado para usar MIT-pthreads.

Se você não consegue iniciar o mysqld você pode tentar criar um arquivo para rastreamento de erros (trace) para encontrar o problema. Veja mais informações sobre isto na Seção E.1.2, “Criando Arquivos Trace (Rastreamento)”.

Se você estiver utilizando tabelas InnoDB, procure pelas opções especificas de inicialização do InnoDB. Veja mais informações sobre isto na Seção 7.5.3, “Opções de Inicialização do InnoDB”.

Se você estiver usando tabelas BDB (Berkeley DB), você deve se familiarizar com as diferentes opções especificas de inicialização do BDB. Seção 7.6.3, “Opções de Inicialização do BDB.

2.4.3. Inicializando e parando o MySQL automaticamente.

Os scripts mysql.server e mysqld_safe podem ser usados para iniciar o servidor automaticamente na inicialização do sistema. mysql.server também pode ser usado para parar o servidor.

O script mysql.server pode ser usado para inicializar ou parar o servidor utilizando-o com os argumentos start ou stop:

shell> mysql.server start
shell> mysql.server stop

mysql.server pode ser encontrado no diretório share/mysql sob o diretório de instalação do MySQL ou no diretório support-files da árvore fonte do MySQL.

Note que se você usa o pacote RPM do Linux (MySQL-server-VERSÃO.rpm), o script mysql.server já estará instalada como /etc/init.d/mysql - você não precisa instalá-lo manualmente. Veja Seção 2.1.2, “Instalando o MySQL no Linux” para mais informações sobre pacotes RPM Linux.

No Mac OS X, você pode instalar um pacote do MySQL Startup Item separado para habilitar a inicialização automática do MySQL no boot so sistema. Veja Seção 2.1.3, “Instalando o MySQL no Mac OS X” para maiores detalhes.

Antes do mysql.server iniciar o servidor, ele vai para o diretório de instalação do MySQL, e então chama o mysqld_safe. Você pode precisar editar o mysql.server se tiver uma distribuição binária instalada em um local não-padrão. Modifique-o para chamar o diretório (cd) apropriado antes de executar o safe_mysql. Se você deseja que o servidor seja executado com um utilizador específico, adicione uma linha user apropriada para o arquivo /etc/my.cnf, como será visto posteriormente nesta seção.

mysql.server stop desliga o servidor MySQL enviando um sinal para ele. Você pode desligar o servidor manualmente executando mysqladmin shutdown.

Você precisa adicionar estes comandos start e stop nos lugares apropriados de seus arquivos /etc/rc.* quando você quiser iniciar o MySQL automaticamente no seu servidor.

On most current Linux distributions, it is sufficient to copy the file mysql.server into the /etc/init.d directory (or /etc/rc.d/init.d on older Red Hat systems). Afterwards, run the following command to enable the startup of MySQL on system bootup:

shell> chkconfig --add mysql.server

No FreeBSD o script de inicialização normalmente deve ir no diretório /usr/local/etc/rc.d/. A página do manual rc(8) também diz que os scripts neste diretório só são executados, se o seu nome de base corresponder padrão global da sheel *.sh. Qualquer outro arquivo ou diretório presente dentro do diretório são silenciosamente ignorados. Em outra palavras, no FreeBSD você deve instalar o arquivo mysql.server como /usr/local/etc/rc.d/mysql.server.sh para habilitar a inicialização automática.

Como uma alternativa para o exposto acima, alguns sistemas operacionais também usam /etc/rc.local ou /etc/init.d/boot.local para inicializar serviços adicionais durante o boot. Para iniciar o MySQL usando este método, você poderia poderia adicionar algo como o seguinte a ele:

/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'

Você também pode adicionar opções para mysql.server em um arquivo global /etc/my.cnf. Um típico arquivo /etc/my.cnf pode parecer com isto:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
basedir=/usr/local/mysql

O script mysql.server entende as seguintes opções: datadir, basedir e pid-file.

A seguinte tabela mostra quais grupos de opções cada script de inicialização lê dos arquivos de opções:

ScriptGrupos de opções
mysqld[mysqld], [server] e [mysqld-major-version]
mysql.server[mysql.server], [mysqld], e [server]
mysqld_safe[mysql.server], [mysqld], e [server]

Para compatibilidade com versões anteriores, o mysql.server também lê o grupo [mysql_server] e mysqld_safe também lê o grupo [safe_mysqld]. No entanto, você deve atualizar os seus arquivos de opções para usar os grupos [mysql.server] e [mysqld_safe].

Veja mais informações sobre isto na Seção 4.1.2, “Arquivo de Opções my.cnf.