Esta seção descreve alguns dos detalhes envolvidos no uso de MIT-pthreads.
Note que no Linux você NÃO
deve usar
MIT-pthreads mas instalar LinuxThreads! See
Secção 2.6.2, “Notas Linux (Todas as versões)”.
Se seu sistema não fornece suporte nativo a thread, você precisará construir o MySQL usando o pacote MIT-pthreads. Isto inclui antigos sistemas FreeBSD, SunOS 4.X, Solaris 2.4 e anteriores entre outros. See Secção 2.2.3, “Sistemas Operacionais suportados pelo MySQL”.
Note que a partir do MySQL 4.0.2, MIT-pthreads não fazem mais parte da distribuição fonte. Se você precisar deste pacote, você precisa fazer o download dele separadamente em http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
Depois do download, extraia este arquivo fonte no nível mais
alto do diretório de fontes do MySQL. Ele criará um novo
subdiretório mit-pthreads
.
Na maioria dos sitemas, você pode forçar o uso de
MIT-pthreads executando o configure
com a
opção --with-mit-threads
:
shell> ./configure --with-mit-threads
Construção em um diretório não fonte não é suportado com o uso de MIT-pthreads, porque nós queremos minimizar nossas alterações para este código.
As verificações que determinam se MIT-pthreads será usado
ou não, ocorrerá somente durante a parte do processo de
configuração que trata com o código do servidor. Se você
configurou a distribuição usando
--without-server
para construir somente o
código cliente, clientes não irão saber se o MIT-pthreads
está sendo usado e irá usar conexões socket Unix por
padrão. Como os sockets Unix não funcionam sob
MIT-pthreads, isto significa que você precisará usar
-h
ou --host
quando
executar programas clientes.
Quando o MySQL é compilado usando MIT-pthreads, travas de
sistema são desabilitadas por padrão por razões de
performance. Você pode dizer ao servidor para usar travas
de sistema com a opção
--external-locking
. Isto só é necessário
se você quiser executar dois servidores MySQL no mesmo
diretório de dados (no que não é recomendado)
Algumas vezes o comando pthread bind()
falha ao ligar a um socket sem nenhuma mensagem de erro
(pelo menos no Solaris). O resultado é que todas conexões
ao servidor falham. Por exemplo:
shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
A solução para isto é matar o servidor
mysqld
e reiniciá-lo. Isto só aconteceu
conosco quando forçamos uma queda do servidor e fizemos uma
reinicialização imediata.
Com MIT-pthreads, a chamada de sistema
sleep()
não é interrompível com
SIGINT
(break). Isto só é percebido
quando você executa mysqladmin --sleep
.
Você deve esperar pela chamada sleep()
para terminar, antes da interrução ser servida e o
processo parar.
Na ligação, você pode receber mensagens de alerta como estes (pelo menos no Solaris); elas podem ser ignoradas:
ld: warning: symbol `_iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken ld: warning: symbol `__iob' has differing sizes: (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4; file /usr/lib/libc.so value=0x140); /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
Alguns outros alertas também podem ser ignorados:
implicit declaration of function `int strtoll(...)' implicit declaration of function `int strtoul(...)'
Não colocamos readline
para funcionar
com MIT-pthreads. (Isto não é necessário, mas pode ser
interessante para alguns.)
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.