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:

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ê 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.

Retornar