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. See Capítulo 7, Tipos de Tabela do MySQL.
Geralmente, você inicia o servidor mysqld
de
uma das três maneiras:
Invocando mysql.server
. Este script é
usado primariamente na inicialização e finalização do
sistema, e é descrito de forma mais completa em
Secção 2.4.3, “Inicializando e parando o MySQL automaticamente.”.
Invocando mysqld_safe
, que tenta
determinar as opções apropriadas para
mysqld
e então executá-lo com estas
opções. See Secção 4.8.2, “mysqld-safe
, o wrapper do mysqld
”.
Para o Windows NT/2000/XP, veja Secção 2.1.1.7, “Iniciando o MySQL no Windows NT, 2000, ou XP”.
Invocando o mysqld
diretamente.
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
Secção 2.4.1, “Problemas Executando o mysql_install_db
” e
Secção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.
Se o mysqld
está atualmente em execução,
você pode verificar as configurações que ele está usando
executando este comando:
shell> mysqladmin variables
ou
shell> mysqladmin -h 'your-host-name' variables
Se você obter o Errcode 13
, que significa
Permission denied
, ao iniciar o
mysqld
isto significa que você não pode ter
o direito de leitura/criação de arquivos no diretório do
banco de dados ou log. Neste caso você também deve iniciar o
mysqld
como usuário root
ou alterar a permissão para os arquivos e diretórios
envolvidos para uqe você tenha o direito de usá-los.
Se o mysqld_safe
inicia o servidor mas você
não consegue se conectar a ele, tenha certeza que você tem uma
entrada no 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. See
Secção E.1.2, “Criando Arquivos Trace (Rastreamento)”.
Se você estiver utilizando tabelas InnoDB, procure pelas opções especificas de inicialização do InnoDB. See Secção 7.5.3, “Opções de Inicialização do InnoDB”.
Se você estiver usando tabelas BDB (Berkeley DB), você deve se
familiarizar com as diferentes opções especificas de
inicialização do BDB. Secção 7.6.3, “Opções de Inicialização do BDB
”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.