Notas Solaris
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 MariaDB irá automaticamente usar MIT-pthreads. Leia "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 MariaDB e acima - o MariaDB 3.23 não inclui as modificações exigidas para suportar isto.
No benchmark do MariaDB, 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 MariaDB 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 MariaDB 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 MariaDB 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 MariaDB:
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 MariaDB 4.0. Use apenas --back_log=50
. Leia "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:
- Ligue o cliente com a seguinte opção (em vez de
-Lpath
):-Wl,r/full-path-to-libmysqlclient.so
. - Copie o arquivo
libmysqclient.so
para/usr/lib
. - Adicione o caminho do diretório onde
libmysqlclient.so
está localizado à variável de ambienteLD_RUN_PATH
antes de executar seu cliente.
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 MariaDB 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
.