В системе Solaris проблемы подстерегают вас еще до распаковки дистрибутива MySQL! Программа tar в Solaris ``не умеет'' работать с длинными именами файлов, поэтому при попытке распаковать 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
В этом случае для распаковки
дистрибутива необходимо
использовать GNU-версию программы
tar (gtar).
Скомпилированную версию данной
программы для Solaris можно загрузить
с
http://www.mysql.com/downloads/os-solaris.html.
Собственные потоки Sun работают только начиная с версии Solaris 2.5. Для версии 2.4 и более ранних MySQL автоматически использует MIT-pthreads (see Раздел 2.3.6, «Замечания по потокам MIT-pthreads»).
Следующее сообщение об ошибке конфигурации:
checking for restartable system calls... configure: error can not run test programs while cross compiling
означает, что имели место какие-то
ошибки в установке компилятора! В
этом случае необходимо обновить
ваш компилятор до более свежей
версии. Эту проблему можно также
решить, вставив в файл
config.cache следующую
строку:
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
При использовании Solaris на SPARC мы
рекомендуем компилятор
gcc 2.95.2. Его можно
получить по адресу
http://gcc.gnu.org/.
Отметим, что egcs 1.1.1 и
gcc 2.8.1 работают на SPARC
ненадежно!
Рекомендуемая строка для
configure при использовании
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
Если используется UltraSPARC, то при добавлении строки "-mcpu=v8 -Wa,-xarch=v8plusa" к переменным CFLAGS и CXXFLAGS можно получить повышение производительности на 4%.
При использовании компилятора Sun
Fortre версии 5.0 (или выше) можно
запускать configure
следующим образом:
CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -xO4 -mt" \ ./configure --prefix=/usr/local/mysql --enable-assembler
Можно создать 64-разрядный исполняемый код с помощью:
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
В тестах на производительность MySQL с Sun Fortre 5.0 мы получили 4%-ное ускорение на UltraSPARC по сравнению с gcc 3.2 с опцией -mcpu.
Если вы создаете 64-разрядный код, он на 4% медленнее чем 32-разрядный, но mysqld можно обслуживать больше потоков и использовать больше памяти.
В случае возникновения проблем с
fdatasync или
sched_yield их можно решить
путем добавления LIBS=-lrt к
командной строке запуска
конфигурирования.
Последующий абзац относится только к более ранним, чем WorkShop 5.3, компиляторам:
Отредактировать скрипт configure можно, заменив строку:
#if !defined(__STDC__) || __STDC__ != 1
строкой:
#if !defined(__STDC__)
При включении __STDC__ с
помощью опции -Xc
компилятор Sun не сможет
откомпилировать программу с
файлом pthread.h из системы
Solaris. Это ошибка Sun (испорченный
компилятор или испорченный
включаемый файл).
Если при запуске mysqld
выдает приведенное ниже сообщение
об ошибке:
libc internal error: _rmutex_unlock: rmutex not held
необходимо попробовать собрать
MySQL, используя компилятор Sun с
опцией запрещения многопоточности
(-mt). Добавьте опцию
-mt к CFLAGS и
CXXFLAGS и попробуйте
запустить mysqld еще раз.
При использовании SFW версии gcc
(поставляемой с Solaris 8) необходимо к
переменной окружения
LD_LIBRARY_PATH перед
конфигурированием добавить
/opt/sfw/lib.
При работе с gcc от
sunfreeware.com может
возникнуть множество
неприятностей. Во избежание
проблем необходимо
перекомпилировать gcc и бинарные
инструментальные программы GNU в
той системе, где вы собираетесь их
использовать.
Получение нижеследующей ошибки
при компиляции MySQL компилятором
gcc означает, что
gcc не сконфигурирован
под вашу версию 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'
В этом случае нужно взять самую
свежую версию gcc и
скомпилировать ее установленным
gcc-компилятором! Почти
все бинарные версии gcc
(по крайней мере для Solaris 2.5)
содержат старые, непригодные к
использованию включаемые файлы,
которые портят все программы,
использующие потоки (а возможно, и
другие программы)!
В Solaris не обеспечиваются
статические версии всех системных
библиотек (libpthreads и
libdl), поэтому
компилировать MySQL с опцией
-static нельзя. При попытке
такой компиляции вы получите одно
из приведенных ниже сообщений об
ошибке:
ld: fatal: library -ldl: not found или undefined reference to `dlopen' или cannot find -lrt
Если слишком много процессов
одновременно пытаются установить
соединение с mysqld, то в
файле протокола MySQL появится
следующее сообщение об ошибке:
Error in accept: Protocol error
Для решения этой проблемы можно
попытаться запустить сервер с
опцией --set-variable back_log=50.
Внимание: --set-variable не
используется в MySQL 4.0. Просто
используйте --back_log=50. See
Раздел 4.1.1, «Параметры командной строки mysqld».
Если вы линкуете собственный MySQL-клиент, то при попытке его запустить может выдаваться следующее сообщение об ошибке:
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
Проблему можно решить одним из следующих способов:
Если вы столкнулись с проблемами
конфигурирования, пытаясь
линковать с опцией -lz и у
вас не установлена zlib,
существует два варианта:
Если вы хотите иметь возможность использовать протокол взаимодействия со сжатием, необходимо получить и установить zlib с ftp.gnu.org.
Сконфигурировать с
--with-named-z-libs=no.
Если при использовании
gcc вы столкнулись с
проблемами загрузки UDF-функций в
MySQL, попробуйте добавить
-lgcc к строке, отвечающей
за линкование UDF-функций.
Для того чтобы MySQL-сервер стартовал
автоматически, можно скопировать
support-files/mysql.server в
/etc/init.d и создать на него
символическую ссылку
/etc/rc3.d/S99mysql.server.
Поскольку Solaris не поддерживает
файлы образа памяти для
приложений, использующих
setuid(), невозможно
получить файл образа памяти
программы mysqld при
использовании опции --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.
© 1995-2005 MySQL AB. All rights reserved.
