No Solaris, você deve ter problemas mesmo antes de descompactar
a distribuição MySQL! O tar
do Solaris não
pode tratar grandes nomes de arquivos, portanto você pode ver
um erro deste tipo quando descompactar o MySQL:
x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks tar: directory checksum error
Neste caso, você deve usar o GNU tar
(gtar
) para desempacotar a distribuição.
Você pode encontrar uma cópia pré-compilada para Solaris em
http://www.mysql.com/downloads/os-solaris.html.
As threads nativas da Sun funcionam somente no Solaris 2.5 e superior. Para a versão 2.4 e anteriores, o MySQL irá automaticamente usar MIT-pthreads. See Secção 2.3.6, “Notas MIT-pthreads”.
Se você obter o seguinte erro de configure:
checking for restartable system calls... 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 você deve atualizar seu
compilador para uma versão mais nova. Você também pode
resolver este problema inserindo a seguinte linha no arquivo
config.cache
:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
Se você está usando Solaris em um SPARC, o compilador
recomendado é o gcc
2.95.2. Você pode
encontrá-lo em
http://gcc.gnu.org/.
Perceba que egcs
1.1.1 e
gcc
2.8.1 não são estáveis no SPARC!
A linha do configure
recomendado quando
usando gcc
2.95.2 é:
CC=gcc CFLAGS="-O3" \ CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler
Se você possui um ultra sparc, você pode obter 4% a mais de performance adicionando "-mcpu=v8 -Wa,-xarch=v8plusa" para a CFLAGS e CXXFLAGS.
Se você possui o compilador Sun Workshop (Fortre) 5.3 (ou mais
novo), você pode executar configure
da
seguinte forma:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \ ./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 parâmetros de compilação:
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \ CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \ ./configure --prefix=/usr/local/mysql --enable-assembler
Para criar um binário de 64 bits do Solaris usando
gcc
, e -m64
para
CFLAGS
e CXXFLAGS
. Note
que isto só funciona com o MySQL 4.0 e acima - o MySQL 3.23
não inclui as modificações exigidas para suportar isto.
No benchmark do MySQL, conseguimos um aumento de velocidade de 4% em um UltraSPARC usando o Forte 5.0 no modo 32 bit em comparação com o uso do gcc 3.2 com o parametro -mcpu.
Se você criar um binário de 64 bits, ele será 4$ mais lento
que o binário de 32 bits, mas o mysqld
poderá tratar mais threads e memória.
Se você tiver um problema com fdatasync
ou
sched_yield
, você pode corrigir isto
adicionando LIBS=-lrt
para a linha de
configuração
O seguinte paragráfo é relevante somente para compiladores mais antigos que o WorkShop 5.3:
Você também pode ter que editar o script
configure
para alterar esta linha:
#if !defined(__STDC__) || __STDC__ != 1
para isto:
#if !defined(__STDC__)
Se você ligar __STDC__
com a opção
-Xc
, o compilador Sun não pode compilar com
o arquivo de cabeçalho pthread.h
do
Solaris. Isto é um bug da Sun (compilador corrompido ou arquivo
include corrompido).
Se o mysqld
emitir a mensagem de erro
mostrada abaixo quando você executá-lo, você deve tentar
compilar o MySQL com o compilador Sun sem habilitar a opção
multi-thread (-mt
):
libc internal error: _rmutex_unlock: rmutex not held
Adicione -mt
a CFLAGS
e
CXXFLAGS
e tente novamente.
Se você estiver usando a versão SFW do gcc (que vem com o
Solaris 8), você deve adicionar
/opt/sfw/lib
a variável de ambiente
LD_LIBRARY_PATH
antes de executar a
configuração.
Se você estiver usando o gcc disponível em
sunfreeware.com
, você pode ter muitos
problemas. Você deve recompilar o gcc e GNU binutils na
máquina que você o executará para evitar qualquer problema.
Se você obter o seguinte erro quando estiver compilando o MySQL
com gcc
, significa que seu
gcc
não está configurado para sua versão
de Solaris:
shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ...
./thr_alarm.c: In function `signal_hand':
./thr_alarm.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 com seu compilador
gcc
atual! Ao menos para o Solaris 2.5, a
maioria das versões binárias de gcc
tem
arquivos inúteis e antigos que irão quebrar todos programas
que usam threads (e possivelmente outros programas)!
O Solaris não fornece versões estáticas de todas bibliotecas
de sistema (libpthreads
) e
libdl
), portanto você não pode compilar o
MySQL com --static
. Se você tentar fazer isto,
receberá o erro:
ld: fatal: library -ldl: not found ou undefined reference to `dlopen' ou cannot find -lrt
Se vários processos tentar conectar muito rapidamente ao
mysqld
, você verá este erro no 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 solução
para esta situação. Note que
--set-variable=nome=valor
e -O
nome=valor
está obsoleto desde o MySQL 4.0. Use
apenas --back_log=50
. See
Secção 4.1.1, “Opções de Linha de Comando do mysqld
”.
Se você está ligando seu próprio cliente MySQL, você deve obter o seguinte erro quando tentar executá-lo:
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
O problema pode ser evitado por um dos seguintes métodos:
Se você tiver problemas com o configure tentando ligar com
-lz
e você não tem a
zlib
instalada, você terá duas opções:
Se você deseja usar o protocol de comunição de compactado você precisará obter e instalar a zlib from ftp.gnu.org.
Configure com --with-named-z-libs=no
.
Se você estiver usando o gcc e tiver problemas carregando
funções UDF
no MySQL, tente adicionar
-lgcc
para a linha de ligação para a
função UDF
.
Se você deseja que o MySQL inicie automaticamente, você pode
copiar support-files/mysql.server
para
/etc/init.d
e criar um link simbólico para
ele, chamado /etc/rc.3.d/S99mysql.server
.
Como o Solaris não suporta core files para aplicações
setuid()
, você não pode obter um core file
do mysqld
se você estiver usando a opção
--user
.
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.