RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

2.6 Замечания по отдельным операционным системам

2.6.1 Замечания по Linux (все версии Linux)

Примечания ниже относительно glibc применяются только в ситуации, когда Вы формируете MySQL самостоятельно. Если Вы управляете Linux на x86 машине, в большинстве случаев для Вас намного лучше использовать двоичный дистрибутив. Авторы линкуют свой двоичный дистрибутив с самой лучшей исправленной версией glibc, которую могут найти, и с самыми лучшими параметрами компилятора в попытке сделать его подходящим для сервера с высокой загрузкой. Так что, если Вы читаете текст ниже и находитесь в сомнении относительно того, что Вы должны делать, стоит сначала попробовать применить двоичный дистрибутив, чтобы увидеть, отвечает ли он Вашим потребностяи, и строить свою версию только после того, как Вы обнаружили, что двоичный дистрибутив недостаточно хорош. В этом случае, авторы оценят замечания относительно этого процесса, чтобы в следующий раз лучше сформировать свой двоичный дистрибутив. Для типичного пользователя, даже для установок с большим количеством параллельных подключений и/или при превышении лимита в 2GB, двоичный дистрибутив в большинстве случаев представляет собой самый лучший выбор.

MySQL использует LinuxThreads в Linux. Если Вы используете старую версию Linux, которая не имеет glibc2, Вы должны установить LinuxThreads перед попыткой откомпилировать MySQL. Вы можете получить пакет LinuxThreads с адреса http://www.mysql.com/Downloads/Linux.

ОБРАТИТЕ ВНИМАНИЕ: Авторы MySQL видели некоторые странные проблемы с Linux 2.2.14 и MySQL на SMP-системах. Если Вы имеете SMP систему, рекомендуется обновить систему до Linux 2.4 ASAP! Ваша система будет быстрее и более устойчивой после этого!

Обратите внимание, что glibc Version 2.1.1 и раньше имеет фатальную ошибку в обработке pthread_mutex_timedwait, которая используется, когда Вы вызываете INSERT DELAYED. Рекомендую Вам не использовать INSERT DELAYED до обновления glibc.

Если Вы планируете иметь 1000+ параллельных подключений, Вы должны сделать некоторые изменения в LinuxThreads, перекомпилировать пакет и повторно слинковать MySQL с новой версией библиотекой libpthread.a. Увеличьте PTHREAD_THREADS_MAX в sysdeps/unix/sysv/linux/bits/local_lim.h до 4096 и уменьшите STACK_SIZE в `linuxthreads/internals.h' до 256 KB. Пути указаны относительно корня glibc. Обратите внимание, что MySQL не будет устойчив с 600-1000 подключениями, если STACK_SIZE задан в значение по умолчанию 2 MB.

Если Вы имеете проблему, с которой MySQL не может открывать достаточно файлов или подключений, может быть Вы не конфигурировали Linux, чтобы обработать достаточное число файлов.

В Linux 2.2 и выше Вы можете проверять число распределенных обработчиков:

cat /proc/sys/fs/file-max
cat /proc/sys/fs/dquot-max
cat /proc/sys/fs/super-max

Если Вы имеете больше, чем 16 MB памяти, Вы должны добавить нечто вроде следующего в Ваш скрипт начальной загрузки (например, /etc/rc/boot.local в SuSE):

echo 65536 > /proc/sys/fs/file-max
echo 8192 > /proc/sys/fs/dquot-max
echo 1024 > /proc/sys/fs/super-max

Вы можете также выполнять вышеупомянутое из командной строки как root, но в этом случае Ваши старые ограничения будут использоваться в следующий раз, когда система перезагрузится.

Вы должны также добавить в файл /etc/my.cnf:

[safe_mysqld]
open-files-limit=8192

Вышеупомянутое должно позволить MySQL создавать до 8192 подключений+файлы.

Константа STACK_SIZE в LinuxThreads управляет интервалом стеков потоков в адресном пространстве. Она должна быть достаточно большой, чтобы имелся участок памяти для стека каждого индивидуального потока, но достаточно маленькой, чтобы уберечь стек некоторого потока от столкновения с глобальной переменной mysqld. К сожалению, Linux-реализация mmap() не совсем правильно отображает адреса уже распределенных регионов при их очистке. Так что безопасность mysqld, как и любой другой поточной программы, зависит от поведения кода, который создает потоки. Выходит, что запросто можно влезть в свои же рабочие данные... Каждая программа должна самостоятельно следить за тем, куда и что она пишет. В mysqld Вы должны предписать это поведение, устанавливая приемлемое значение для переменной max_connections.

Если Вы формируете MySQL самостоятельно, и не хотите проблем с внесением исправлений в LinuxThreads, Вы должны установить max_connections к значению не выше, чем 500. Это должно быть еще меньше, если Вы имеете большой буфер ключей, большие таблицы heap или некоторые другие вещи, которые заставляют mysqld распределять много памяти, или если Вы управляете ядром 2.2 с 2GB-заплатой. Если Вы используете RPM version 3.23.25 (или позже) или двоичный дистрибутив, Вы можете безопасно устанавливать max_connections в 1500. Для STACK_SIZE в LinuxThreads рекомендуются значения в диапазоне 128K и 256K.

Если Вы используете много параллельных подключений, Вы можете страдать от "особенности" в ядре 2.2, которое оштрафует процесс за forking или клонирование в попытке предотвратить нападения типа fork bomb. Это заставит MySQL не масштабироваться как должно бы, когда Вы увеличиваете число параллельных клиентов. На однопроцессорных системах это проявится в очень медленном создании потоков, в результате чего может требоваться длительное время, чтобы подключиться к MySQL (до минуты!), и может требоваться еще столько же на закрытие соединения. Заплата для ядра доступна здесь ( http://www.mysql.com/Downloads/Patches/linux-fork.patch. Эта проблема была исправлена в ядре 2.4.

Авторы проверили MySQL на ядре 2.4 на машине с 2 CPU и нашли, что MySQL масштабируется теперь НАМНОГО лучше: не имелось фактически никакого замедления на производительности запросов вплоть до 1000 клиентов, а коэффициент масштабируемости (отношение максимальной производительности к производительности с одним пользователем) был 180%. Авторы наблюдали подобные результаты и на системе с 4 процессорами: фактически никакого замедления, поскольку число клиентуры увеличивалось до 1000, а коэффициент масштабируемости составил вообще 300%. Так что для высокой загрузки SMP-сервера определенно рекомендуется ядро 2.4. Авторы также обнаружили, что необходимо выполнить процесс mysqld с самым высоким возможным приоритетом, чтобы достигнуть максимальной эффективности. Это может быть выполнено добавлением команды renice -20 $$ в скрипт safe_mysqld. Это дало 60% рост производительности с 400 клиентами на 4-процессорной машине.

Имеется другая проблема, которая причиняет значительный вред эффективности MySQL, особенно на SMP-системах. Реализация mutex в LinuxThreads в glibc-2.1 очень плоха для программ со многими потоками, которые используют mutex только в течение короткого времени. На SMP-системе, если Вы компонуете MySQL со стандартным LinuxThreads, удаление процессоров из машины во многих случаях улучшает эффективность MySQL, как ни невероятно. Уже сделали заплату для glibc 2.1.3, linuxthreads-2.1-patch, чтобы исправить это поведение.

С glibc-2.2.2 MySQL version 3.23.36 использует адаптивный mutex, который намного лучше, чем исправленный glibc-2.1.3. Однако, что при некоторых условиях, текущий код mutex в glibc-2.2.2 причиняет вред MySQL эффективности. Возможность этого может быть уменьшена объявлением renicing для процесса mysqld к самому высокому приоритету. Впрочем, есть и заплатка на http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch. Вы должны применить ее в каталоге linuxthreads командой patch -p0 </tmp/linuxthreads-2.2.2.patch. В любом случае, если Вы компонуете пакет с glibc-2.2.2, Вы все еще должны исправить STACK_SIZE и PTHREAD_THREADS_MAX.

Лучше всего, чтобы Вы использовали вышеупомянутые заплаты, чтобы формировать специальную статическую версию libpthread.a и использовали ее только для статической компоновки MySQL. Я знаю, что заплаты безопасны для MySQL и сильно улучшают эффективность, но кто может сказать хоть что-нибудь относительно других прикладных программ? Если Вы компонуете другие прикладные программы с исправленной версией библиотеки, или формируете исправленную общедоступную версию и устанавливаете ее на Вашей системе, за последствия отвечайте сами.

Если Вы испытываете любые странные проблемы при установке MySQL, или с общим зависанием утилит, вероятно, что они вызваны компилятором или библиотекой. Если дело обстоит так, применение двоичного дистрибутива должно решить эти проблемы.

Одна известная проблема с двоичным дистрибутивом состоит в том, что со старыми Linux-системами, которые используют libc (подобно RedHat 4.x или Slackware), Вы получите некоторые с разрешением hostname. Подробности в разделе "2.6.1.1 Замечания по Linux для двоичных дистрибутивов".

При использовании LinuxThreads Вы увидите три процесса: один для менеджера LinuxThreads, второй для обработки соединений, а третий для сигналов.

Обратите внимание, что ядро Linux и библиотека LinuxThread могут по умолчанию иметь только 1024 процесса. Это означает, что Вы можете иметь только до 1020 подключений к MySQL на неисправленной системе. Страница http://www.volano.com/linuxnotes.html имеет информацию о том, как обойти это досадное ограничение.

Если Вы видите свалившийся процесс mysqld с помощью команды ps, это обычно означает, что Вы нашли ошибку в MySQL, или Вы имеете разрушенную таблицу. Подробности в разделе "8.4.1 Что делать, если MySQL рушится".

Чтобы получить дамп ядра под Linux, если mysqld завершается с сигналом SIGSEGV, Вы должны запустить mysqld с опцией --core-file. Обратите внимание, что Вы также, вероятно, должны поднять размер файла дампа (core file size), добавляя строку ulimit -c 1000000 в safe_mysqld или запуская safe_mysqld с опцией --core-file-sizes=1000000. Подробности в разделе "4.7.2 safe_mysqld, обертка вокруг mysqld".

Если Вы компонуете свой клиент MySQL и получаете ошибку:

ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such
file or directory

при его выполнении, проблемы можно избежать одним из следующих методов:

  • Скомпонуйте клиента со следующим флажком (вместо -Lpath): -Wl,r/path-libmysqlclient.so.
  • Скопируйте libmysqclient.so в /usr/lib.
  • Добавьте имя каталога, где размещен файл libmysqlclient.so к системной переменной LD_RUN_PATH перед запуском клиента.

Если Вы используете компилятор от Fujitsu (fcc/FCC) Вы будете иметь некоторые проблемы при компиляции MySQL потому, что заголовочные файлы Linux ориентированы на gcc.

Следующая простая строка в configure должна работать с fcc/FCC:

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE
               -DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O
               -K fast -K lib  -K omitfp -K preex --no_exceptions
               --no_rtti -D_GNU_SOURCE -DCONST=const
               -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO'
               -D_EXTERN_INLINE=static __inline'" ./configure
               --prefix=/usr/local/mysql --enable-assembler
               --with-mysqld-ldflags=-all-static --disable-shared
               --with-low-memory

2.6.1.1 Замечания по Linux для двоичных дистрибутивов

MySQL требует как минимум Linux Version 2.0.

ПРЕДУПРЕЖДЕНИЕ: Есть отчеты от некоторых пользователей MySQL, что они имеют серьезные проблемы стабильности MySQL с ядром Linux 2.2.14. Если Вы используете это ядро, Вы должны обновить его до 2.2.19 (или выше) или перейти на ядро 2.4. Если Вы имеете многопроцессорный сервер, то Вы должны серьезно рассмотреть использование 2.4, поскольку это даст Вам значительное увеличение быстродействия.

Двоичный релиз компонуется с опцией -static, что означает, что Вы обычно не должны заботиться о том, какую версию библиотек системы Вы имеете. Вы также не должны устанавливать LinuxThreads. Программа, скомпонованная с опцией -static, немного больше, чем динамически скомпонованная, но также и немного быстрее (на 3-5%). Одна проблема, однако, состоит в том, что Вы не можете применять определяемые пользователем функции (UDFs) со статически скомпонованной программой. Если Вы собираетесь писать или использовать функции UDF (это только для программистов на C или C++), Вы должны откомпилировать MySQL самостоятельно используя динамические связи.

Если Вы используете libc-систему (вместо glibc2-системы), Вы, вероятно, получите некоторые проблемы с преобразованием hostname и работой getpwnam() с двоичным дистрибутивом. Это потому, что glibc, к сожалению, зависит от некоторых внешних библиотек, чтобы работать с hostnames и getpwent(), даже когда она компилируется с опцией -static. В этом случае Вы, вероятно, получите следующее сообщение об ошибках, когда Вы выполняете mysql_install_db:

Sorry, the host 'xxxx' could not be looked up

Или следующую ошибку, когда Вы попробуете выполнять mysqld с опцией --user:

getpwnam: No such file or directory

Вы можете решить эту проблему одним из следующих путей:

  • Получить исходники MySQL (RPM или tar.gz) и поставить их вместо этого дистрибутива.
  • Выполнить mysql_install_db --force. Это не будет выполнять тест resolveip в mysql_install_db. Обратная сторона в том, что Вы не сможете использовать имена хостов в таблицах предоставления привилегий. Вы должны взамен использовать IP-адреса (если это не localhost). Если Вы используете старый выпуск MySQL, который не поддерживает --force, Вы должны удалить тест resolveip из mysql_install ручками.
  • Запустите mysqld командой su вместо опции --user.

Linux-Intel двоичный и RPM-дистрибутивы MySQL сконфигурированы для самого высокого возможного быстродействия.

Поддержка MySQL Perl требует Perl Version 5.004_03 или выше.

На некоторых версиях Linux 2.2 Вы можете получать ошибку Resource temporarily unavailable, когда Вы делаете много новых подключений к серверу mysqld через TCP/IP.

Проблема состоит в том, что Linux имеет задержку между тем, когда Вы закрываете TCP/IP-порт и тем, когда он фактически будет освобожден системой. Поскольку имеется участок памяти только для конечного числа портов TCP/IP, Вы получите вышеупомянутую ошибку, если Вы пробуете делать слишком много новых TCP/IP-подключений в течение маленького времени подобно тому, когда Вы выполняете эталонный тест MySQL test-connect через TCP/IP.

Единственное известное исправление этой проблемы должно использовать постоянные подключения в Ваших клиентах или применять сокеты, если сервер и программы-клиенты работают на одной и той же физической машине. Надеюсь, что ядро Linux 2.4 эту проблему в будущем снимет.

2.6.1.2 Замечания по Linux x86

MySQL требует libc Version 5.4.12 или выше. Известно, что он работает с libc 5.4.46. С glibc Version 2.0.6 и выше также должен работать. Имелись некоторые проблемы с glibc RPM из RedHat, так что, если Вы имеете проблемы, проверьте, имеются или нет любые модификации! RPM glibc 2.0.7-19 и 2.0.7-29, как известно, работают вполне прилично.

В некоторых старых версиях Linux вызов configure может производить ошибку подобно этому:

Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.
See the Installation chapter in the Reference Manual.

Сделайте то, что говорит сообщение об ошибках и добавьте символ подчеркивания к макрокоманде _P, которая имеет только один символ подчеркивания, затем попробуйте снова.

Вы можете получать некоторые предупреждения при компиляции. Показанные ниже могут игнорироваться:

mysqld.cc -o objs-thread/mysqld.o
mysqld.cc: In function `void init_signals()':
mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int'
mysqld.cc: In function `void * signal_hand(void *)':
mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'

В Debian GNU/Linux, если Вы хотите, чтобы MySQL запустился автоматически, когда система загружается, сделайте следующее:

shell> cp support-files/mysql.server /etc/init.d/mysql.server
shell> /usr/sbin/update-rc.d mysql.server defaults 99

mysql.server может быть найден в каталоге share/mysql под каталогом установок MySQL или в каталоге support-files дерева исходников MySQL.

Если mysqld всегда падает в дамп при запуске, проблема может быть в том, что Вы имеете старую /lib/libc.a. Попробуйте переименовать ее, затем удалить sql/mysqld, выполнить make install и запуститься снова. Об этой проблеме было сообщено для некоторых инсталляций Slackware.

Если Вы получаете следующую ошибку при компоновке mysqld, это означает, что Ваша libg++.a не установлена правильно:

/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definition of `_IO_putc'

Вы можете избежать использования libg++.a запуском configure примерно так:

shell> CXX=gcc ./configure

2.6.1.3 Замечания по Linux SPARC

В некоторых реализациях readdir_r() разрушен. Симптом этого: SHOW DATABASES всегда возвращает пустой набор. Это может быть исправлено удалением HAVE_READDIR_R из config.h после настройки, но перед компиляцией.

Некоторые проблемы требуют внесения исправлений в Вашу установку Linux. Заплата может быть найдена в http://www.mysql.com/Downloads/patches/Linux-sparc-2.0.30.diff. Эта заплата для дистрибутива Linux sparclinux-2.0.30.tar.gz, который является доступным на vger.rutgers.edu (версия Linux, которая никогда не была объединена с официальным выпуском 2.0.30). Вы должны также установить LinuxThreads Version 0.6 или более новую.

2.6.1.4 Замечания по Linux Alpha

MySQL Version 3.23.12 представляет собой первую версию MySQL, которая проверена на Linux-Alpha. Если Вы планируете использовать MySQL на Linux-Alpha, Вы должны гарантировать, что имеете эту версию или более новую.

Когда авторы компилировали стандартный двоичный дистрибутив MySQL, были применены следующие средства: SuSE 6.4, ядро 2.2.13-SMP, компилятор Compaq C (V6.2-504) и Compaq C++ (V6.3-005) на машине on a Compaq DS20 с Alpha EV6.

Вы можете находить вышеупомянутые трансляторы на http://www.support.compaq.com/alpha-tools. Используя эти трансляторы вместо gcc, получается приблизительно на 9-14% лучшая эффективность MySQL.

Обратите внимание, что строка выбора конфигурации оптимизировала двоичный код для текущего CPU. Это означает, что Вы можете использовать двоичный дистрибутив только, если Вы имеете процессор Alpha EV6. Пакет также компилируется статически, чтобы избежать разных библиотечных проблем.

CC=ccc CFLAGS="-fast" CXX=cxx CXXFLAGS="-fast -noexceptions
               -nortti" ./configure --prefix=/usr/local/mysql
               --disable-shared --with-extra-charsets=complex
               --enable-thread-safe-client
               --with-mysqld-ldflags=-non_shared
               --with-client-ldflags=-non_shared

Если Вы хотите использовать egcs, следующая строка настройки пригодится:

CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3
        -fomit-frame-pointer -felide-constructors -fno-exceptions
        -fno-rtti" ./configure --prefix=/usr/local/mysql
        --disable-shared

Некоторые известные проблемы при управлении MySQL на Linux-Alpha:

  • Отладка поточных прикладных программ, подобно MySQL, не будет работать с gdb 4.18. Вы должны загрузить и использовать gdb 5.0!
  • Если Вы пробуете компоновать mysqld статически при использовании gcc, возникающий в результате образ будет падать в дамп. Другими словами: НЕ используйте --with-mysqld-ldflags=-all-static с gcc!!!

2.6.1.5 Замечания по Linux PowerPC

MySQL должен работать на MkLinux с самым новым пакетом glibc (проверен с glibc 2.0.7).

2.6.1.6 Замечания по Linux MIPS

Чтобы получить MySQL, работающий на Qube2 (Linux Mips), Вы нуждаетесь в самой новой библиотеке glibc (известно, что glibc-2.0.7-29C2 работает нормально). Вы должны также использовать компилятор egcs C++ (egcs-1.0.2-9, gcc 2.95.2 или более новый).

2.6.1.7 Замечания по Linux IA64

Чтобы компилировать MySQL на Linux Ia64, Вы должны сделать следующее:

Использовать gcc-2.9-final с такими опциями:

CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions \
       -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler \
       --with-mysqld-ldflags=-all-static --disable-shared \
       --with-extra-charsets=complex

После make Вы получите ошибку, что sql/opt_range.cc не будет компилироваться (внутренняя ошибка транслятора). Чтобы исправить это, перейдите в каталог sql и снова введите make. Скопируйте строку настройки, но поменяйте в ней -O2 на -O0. Файл должен теперь компилироваться.

Теперь Вы можете сделать следующее:

cd ..
make
make_install

и mysqld должен быть готов выполниться.

На Ia64 клиенты MySQL используют общедоступные библиотеки. Это означает, что, если Вы устанавливаете двоичный дистрибутив в некоторое другое место, а не в /usr/local/mysql, Вы должны или изменить /etc/ld.so.conf или добавить путь к каталогу, где Вы имеете libmysqlclient.so к системной переменной LD_LIBRARY_PATH.

Подробности есть в разделе "8.3.1 Проблемы с компоновкой с библиотекой клиентов MySQL".

2.6.2 Замечания по Windows

Этот раздел описывает установку и использование MySQL в Windows. Эта информация также обеспечивается файлом README, который приходит с дистрибутивом MySQL для Windows.

2.6.2.1 Запуск MySQL под Windows 95 или в Windows 98

MySQL использует TCP/IP для связи сервера с клиентом. Из-за этого Вы должны установить TCP/IP на Вашей машине перед запуском MySQL. TCP/IP можно найти на Windows CD-ROM.

Обратите внимание, что, если Вы используете старый выпуск Win95 (например OSR2), вероятно, что Вы имеете старый пакет Winsock! MySQL требует Winsock 2! Вы можете обновить пакет Winsock с http://www.microsoft.com. Win98 имеет новую библиотеку Winsock 2, так что вышеупомянутое на нее не распространяется.

Чтобы запустить сервер mysqld, Вы должны запустить окно MS-DOS и напечатать:

C:\> C:\mysql\bin\mysqld

Это запустит mysqld на заднем плане без окна.

Вы можете уничтожить сервер MySQL, выполняя:

C:\> C:\mysql\bin\mysqladmin -u root shutdown

Обратите внимание, что Win95 и Win98 не поддерживают создание именованных каналов. В Win95 и Win98, Вы можете только использовать именованные каналы, чтобы подключиться к удаленной MySQL-системе, работающей под Windows NT. Сервер MySQL должен также поддерживать именованные каналы, конечно. Например, использование mysqld-opt под NT не будет позволять подключения через именованные каналы. Вы должны использовать mysqld-nt или mysqld-max-nt.

Если mysqld запускаться не хочет, пожалуйста, проверьте файл \mysql\data\mysql.err, чтобы увидеть, записал ли сервер там любое сообщение, чтобы указать причину проблемы. Вы можете также попробовать запустить сервер с параметром mysqld --standalone. В этом случае Вы можете получать некоторую полезную информацию, которая может помочь решить проблему, на экран.

Можно попробовать запустить mysqld с --standalone --debug. В этом случае mysqld будет писать журнал C:\mysqld.trace, который должен содержать причину, почему mysqld не запускается. Подробности в разделе "6.1.2 Создание файлов трассировки ".

2.6.2.2 Запуск MySQL под Windows NT или Windows 2000

Раздел по Win95/Win98 также применим к MySQL под NT/Win2000 со следующими небольшими поправками и особенностями:

Чтобы MySQL мог работать с TCP/IP на NT, Вы должны установить service pack 3 (или выше)!

Для NT/Win2000 имя сервера: mysqld-nt. Обычно Вы должны установить MySQL как сервис под NT/Win2000:

C:\> C:\mysql\bin\mysqld-nt --install

или

C:\> C:\mysql\bin\mysqld-max-nt --install

Под Windows NT Вы можете фактически устанавливать любой сервер как сервис, но только те, чьи имена заканчиваются на -nt.exe, обеспечивают поддержку для именованных каналов.

Вы можете запускать и завершать сервис MySQL командами:

C:\> NET START mysql
C:\> NET STOP mysql

Обратите внимание, что в этом случае Вы не можете использовать любые другие параметры для mysqld-nt!

Вы можете также выполнять mysqld-nt как автономную программу на NT, для этого Вы должны запустить mysqld-nt с параметрами! Если Вы запускаете mysqld-nt без параметров на NT, mysqld-nt пробует запускать себя как обслуживание с заданными по умолчанию сервисными параметрами. Если Вы остановили mysqld-nt, Вы должны запустить его с помощью NET START mysql.

Сервис будет установлен с именем MySQL. После установки он должен быть запущен через Services Control Manager (SCM) Utility, находящейся в Control Panel, или через команду NET START MySQL. Если любые параметры желательны, они должны быть определены как ``Startup parameters'' в SCM utility прежде, чем Вы запустите сервис MySQL. После запуска mysqld-nt может быть остановлен, используя mysqladmin или из SCM, или используя команду NET STOP MySQL. Если Вы используете SCM, чтобы остановить mysqld-nt, обычно имеется странное сообщение из SCM относительно mysqld shutdown normally. Когда сервер выполнен как сервис, mysqld-nt не имеет никакого доступа к консоли, так что никакие сообщения не могут быть замечены.

На NT Вы можете получать следующие сервисные сообщения об ошибках:

Permission DeniedОзначает, что не может найти mysqld-nt.exe.
Cannot RegisterОзначает, что путь неправилен.
Failed to install service.Означает, что сервис уже установлен, или что Service Control Manager не работает.

Если Вы имеете проблемы при установке mysqld-nt как сервиса, попробуйте запускать его с заданием полного пути:

C:\> C:\mysql\bin\mysqld-nt --install

Если это не работает, Вы можете запустить mysqld-nt, устанавливая путь в системном реестре.

Если Вы не хотите запускать mysqld-nt как сервис, можете запустить его следующим образом:

C:\> C:\mysql\bin\mysqld-nt --standalone

или

C:\> C:\mysql\bin\mysqld --standalone --debug

Последняя версия дает Вам трассировку отладки в файле C:\mysqld.trace. Подробности в разделе "6.1.2 Создание файлов трассировки ".

2.6.2.3 Запуск MySQL под Windows

MySQL поддерживает TCP/IP на всех платформах Windows и именованные каналы на NT. По умолчанию он должен использовать именованные каналы для локальных подключений на NT и TCP/IP для всех других случаев, если пользователь имеет установленный TCP/IP. Имя хоста определяет, какой протокол используется:

Имя хоста
Протокол
NULL (none)Под NT сначала попробовать именованный канал. Если ничего не вышло, использовать TCP/IP. Под Win95/Win98 использовать TCP/IP сразу.
.Именованный канал
localhostTCP/IP-связь с текущим хостом
hostnameTCP/IP

Вы можете вынуждать клиента MySQL использовать именованный канал, определяя опцию --pipe или указывая точку (.) как имя хоста. Применяйте опцию --socket, чтобы задать имя канала.

Вы можете проверять, работает или нет MySQL, выполняя следующие команды:

C:\> C:\mysql\bin\mysqlshow
C:\> C:\mysql\bin\mysqlshow -u root mysql
C:\> C:\mysql\bin\mysqladmin version status proc
C:\> C:\mysql\bin\mysql test

Если mysqld не спешит отвечать на подключения под Win95/Win98, вероятно, имеется проблема с Вашим DNS. В этом случае запустите mysqld с опцией --skip-name-resolve и используйте только localhost и IP-адреса в таблицах предоставления привилегий MySQL. Вы можете также не использовать DNS при соединении с mysqld-nt на NT, задавая параметр --pipe, чтобы определить использование именованных каналов. Этот прием работает для большинства клиентов MySQL.

Имеется две версии инструмента командной строки MySQL:
mysqlСкомпилирован с библиотеками Windows, которые предлагают очень ограниченные возможности редактирования текста.
mysqlcСобран с помощью Cygnus GNU compiler и библиотек, которые предлагают редактирование через readline.

Если Вы хотите использовать mysqlc.exe, Вы должны скопировать файл C:\mysql\lib\cygwinb19.dll в Ваш системный каталог Windows (\windows\system).

Заданные по умолчанию привилегии на Windows дают всем локальным пользователям полные привилегии для доступа ко всем базам данных без того, чтобы определить пароль. Чтобы сделать MySQL более безопасным, Вы должны установить пароли для всех пользователей и удалить строку в таблице mysql.user, которая имеет значения Host='localhost' и User=''.

Вы должны также добавить пароль для пользователя root. Следующий пример начинается с удаления анонимного пользователя, который может использоваться любым, чтобы обратиться к базе данных test, а затем устанавливается пароль для root:

C:\> C:\mysql\bin\mysql mysql
mysql> DELETE FROM user WHERE Host='localhost' AND User='';
mysql> QUIT
C:\> C:\mysql\bin\mysqladmin reload
C:\> C:\mysql\bin\mysqladmin -u root password your_password

После того, как вы установили пароль, если Вы хотите завершить сервер mysqld, Вы можете скомандовать:

C:\> mysqladmin --user=root --password=your_password shutdown

Если Вы используете старую shareware-версию MySQL Version 3.21 под Windows, вышеупомянутая команда будет терпеть неудачу с ошибкой: parse error near 'SET OPTION password'. Обновитесь до текущей версии MySQL, которая свободно доступна.

С текущими версиями MySQL Вы можете легко добавлять новых пользователей и изменять привилегии командами GRANT и REVOKE. Подробности в разделе "4.3.1 Синтаксис GRANT и REVOKE".

2.6.2.4 Соединение с удаленной системой MySQL из Windows через SSH

Имеется замечание относительно того, как соединяться, чтобы получить безопасное подключение к удаленному серверу MySQL через SSH (автор: David Carlson, dcarlson@mplcomm.com):

  • Установите клиент SSH на Вашей Windows-машине. Самый лучший известный мне коммерческий клиент SecureCRT доступен на http://www.vandyke.com. Другой вариант: f-secure с http://www.f-secure.com. Вы можете также найти некоторые свободные клиенты на Google как http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows. Крекеры к ним доступны на http://astalavista.box.sk
  • Запустите Windows SSH-клиент. Укажите: Host_Name=yourmysqlserver_URL_or_IP, userid=your_userid для входа на сервер (это далеко не всегда совпадает с логином/паролем для MySQL).
  • Установите пересылку порта (local_port: 3306, remote_host: yourmysqlservername_or_ip, remote_port: 3306) или локальную пересылку (port: 3306, host: localhost, remote port: 3306).
  • Сохраните все, иначе вы будете должны восстановить это в следующий раз.
  • Зайдите на сервер SSH сеансом, который Вы только что создали.
  • На Вашей Windows-машине запустите какую-либо прикладную программу ODBC (вполне подойдет Access).
  • Создайте новый файл в Windows и связь с MySQL через драйвер ODBC тем же самым путем, которым Вы это обычно делаете. Одно исключение: укажите localhost для хоста сервера MySQL, а не yourmysqlservername.

Вы должны теперь иметь ODBC-подключение к MySQL, зашифрованное посредством использования протокола SSH.

2.6.2.5 Разделение данных по различным дискам в Windows

Начиная с MySQL Version 3.23.16, серверы mysqld-max и mysql-max-nt в дистрибутивах MySQL компилируются с опцией -DUSE_SYMDIR. Это позволяет Вам помещать базу данных на другом диске, добавляя символическую связь с текущим (аналогично тому, как символические связи работают в Unix).

В Windows Вы делаете символическую связь с базой данных, создавая файл, который содержит путь к каталогу-адресату и пишете его в каталог mysql_data под именем database.sym. Обратите внимание, что символическая связь будет использоваться только, если каталог mysql_data_dir\database не существует.

Например, если каталог данных MySQL C:\mysql\data, и Вы хотите иметь базу данных foo, размещенной в D:\data\foo, Вы должны создать файл C:\mysql\data\foo.sym, который содержит текст D:\data\foo\. После того, как это сделано, все таблицы, созданные в базе данных foo, будут созданы в каталоге D:\data\foo.

Обратите внимание, что из-за снижения быстродействия при открытии таблиц, авторы не включили это дело по умолчанию, даже если Вы компилировали MySQL с соответствующей поддержкой. Чтобы запустить символические связи, Вы должны поместить в Ваш файл my.cnf или my.ini следующее:

[mysqld]
use-symbolic-links

В MySQL 4.0 связи включены по умолчанию. Зато Вы должны использовать опцию skip-symlink, если Вы хотите отключить это свойство.

2.6.2.6 Компиляция клиентов MySQL под Windows

В ваших исходных файлах Вы должны включить windows.h прежде, чем Вы включаете mysql.h:

#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#endif
#include <mysql.h>

Вы можете или связывать Ваш код с динамической библиотекой libmysql.lib, которая является только оберткой, чтобы загрузить по требованию libmysql.dll, или скомпоновать со статической библиотекой mysqlclient.lib.

Обратите внимание, что, поскольку библиотеки mysqlclient компилируются как threaded, Вы должны также компилировать Ваш код, как multi-threaded!

2.6.2.7 MySQL-Windows в сравнении с Unix MySQL

MySQL-Windows к настоящему времени доказал свою устойчивость, насколько под этой системой возможно существование устойчивых программ. Эта версия MySQL имеет те же самые свойства, что и соответствующая Unix-версия со следующими исключительными ситуациями:

Win95 и потоки
Win95 упускает приблизительно 200 байт основной памяти для каждого создания потока. Это не глюк, это такое свойство системы... Каждое подключение к MySQL создает новый поток, так что Вы не должны выполнять mysqld долго под Win95, если Ваш сервер обрабатывает много подключений! WinNT и Win98 не страдают от этой ошибки.
Конкурентное чтение
MySQL зависит от обращений pread() и pwrite(), чтобы быть способным смешивать INSERT и SELECT. В настоящее время используется mutexes, чтобы эмулировать pread()/pwrite(). Авторы в конечном счете заменят интерфейс уровня файла на виртуальный интерфейс так, чтобы использовать readfile()/writefile() на NT, чтобы получить большее быстродействие. Текущая реализация ограничивает число открытых файлов MySQL 1024, это означает, что Вы не способны выполнить так много параллельных потоков на NT, как в Unix.
Блочное чтение
MySQL использует блочное чтение для каждого подключения. Это означает:
  • Подключение не будет разъединено автоматически после 8 часов, как это случается с Unix-версией MySQL.
  • Если подключение висит, невозможно разорвать его без того, чтобы уничтожить заодно и MySQL.
  • mysqladmin kill не будет работать на спящем подключении.
  • mysqladmin shutdown не может прервать работу сервера, пока там бездействуют подключения.
Эти проблемы постепенно будут устранены.
Функции UDF
На текущий момент MySQL-Windows не поддерживает определяемые пользователем функции вообще.
DROP DATABASE
Вы не можете удалить базу данных, которая используется процессом.
Удаление задачи MySQL через системный менеджер задач
Вы не можете удалить MySQL через системный менеджер задач или утилиту shutdown в Win95. Вы должны завершать этот процесс только через mysqladmin shutdown.
Имена, нечувствительные к регистру
Имена файлов нечувствительны к регистру в Windows, так что база данных и имена таблиц также нечувствительны к регистру в Windows. Единственное ограничение: имена таблиц и базы данных должны быть определены, используя одинаковый регистр.
Символ каталога \
Компоненты имени пути в Win95 разделяются символом \, который также является управляющим символом в MySQL. Если Вы используете LOAD DATA INFILE или SELECT ... INTO OUTFILE, Вы должны задать двойной символ \:
mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
Альтернативно, используйте имена файлов Unix-стиля с символом `/', но уже с одним:
mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr;
mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
Ошибка "Can't open named pipe"
Если Вы используете MySQL 3.22 на NT с самой новой клиентурой mysql, Вы получите следующую ошибку:
error 2017: can't open named pipe to host: . pipe...
Это потому, что финальная версия MySQL по умолчанию использует именованные каналы на NT. Вы можете избегать этой ошибки, используя параметр --host=localhost с новой клиентурой MySQL или создавать файл опций C:\my.cnf, который включает следующее:
[client]
host = localhost
Ошибка "Access denied for user"
Если Вы получаете ошибку "Access denied for user: 'some-user@unknown' to database 'mysql'" при обращении к серверу MySQL на той же самой машине, это означает, что MySQL не может правильно преобразовать Ваше имя машины. Чтобы это обойти, Вы должны создать файл \windows\hosts со следующей информацией:
127.0.0.1       localhost
ALTER TABLE
В то время, как Вы выполняете инструкцию ALTER TABLE, таблица блокирована для использования другими потоками. Это потому, что в Windows Вы не можете удалять файл, который находится в использовании другими потоками. В будущем планируется найти способ работать без этой проблемы.
DROP TABLE на таблице, которая находится в использовании таблицей типа MERGE, не будет работать
Драйвер MERGE делает таблицу скрытой от MySQL. Потому, что Windows не позволяет Вам удалять файлы, которые являются открытыми, Вы сначала должны сбросить все таблицы из блока MERGE (командой FLUSH TABLES) или сначала удалить таблицу MERGE.

Имеются некоторые проблемы для любого, кто мог бы помочь с портированием пакета под Windows:

  • Сделайте однопользовательский сервер MYSQL.DLL. Это должно включать все из стандартного сервера MySQL, за исключением создания потоков. Это сделает MySQL намного проще, чтобы использовать в прикладных программах, которые не нуждаются в истинном протоколе клиент-сервер, и им не надо обращаться к серверу с других компьютеров.
  • Добавьте хорошие пиктограммы для начала и закрытия системы к MySQL.
  • Создайте инструмент, чтобы управлять записями системного реестра для параметров запуска MySQL. Чтение таких записей уже есть в mysqld.cc, но это должно быть переработано для ориентации на большее число параметров. Инструмент также должен быть способен модифицировать файл опций C:\my.cnf, если пользователь предпочитает применять его вместо системного реестра.
  • При регистрации mysqld как сервис с опцией --install (на NT) было бы хорошо, если бы Вы могли также добавлять заданные по умолчанию параметры в командной строке.
  • Неплохо бы научиться уничтожать mysqld из менеджера задач. Сейчас для этого надо использовать mysqladmin shutdown.
  • Надо портировать readline под Windows для использования в инструменте командной строки mysql.
  • Нужны GUI-версии стандартной клиентуры MySQL (mysql, mysqlshow, mysqladmin и mysqldump).
  • Было бы хорошо, если бы функции чтения и записи в сокет в net.c стали прерываемыми. Это сделало бы возможным уничтожать открытые процессы в Windows с помощью вызова mysqladmin kill.
  • mysqld всегда запускается с локалью "C". Следует сделать mysqld, который использует текущий язык для порядка сортировки.
  • Надо реализовать UDF-функции через библиотеки .DLL.
  • Добавить макрокоманды, чтобы использовать быстрее методы приращения и уменьшения, обеспеченные Windows.

Другие специфические для Windows проблемы описаны в файле README, который приходит с дистрибутивом MySQL-Windows.

2.6.3 Замечания по Solaris

В Solaris Вы можете сталкиваться с проблемой даже прежде, чем Вы получите распакованный дистрибутив MySQL! Solaris tar не может обрабатывать длинные имена файлов, так что Вы можете увидеть такую ошибку, когда Вы распаковываете 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), чтобы распаковать дистрибутив. Откомпилированная версия gtar для Solaris есть на http://www.mysql.com/Downloads.

Собственные потоки Sun работают только на Solaris 2.5 и выше. Для Version 2.4 и раньше MySQL автоматически использует MIT-pthreads. Подробности в разделе "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

Если Вы имеете ultra sparc, Вы можете получить примерно на 4% больше эффективности, добавляя "-mcpu=v8 -Wa,-xarch=v8plusa" к CFLAGS и CXXFLAGS.

Если Вы имеете компилятор Sun Workshop (Fortre) 5.3 (или новее), Вы можете выполнять configure так:

CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -xO4 -mt" ./configure --prefix=/usr/local/mysql \
                 --enable-assembler

В эталонных тестах MySQL получено ускорение на 6% на Ultrasparc при использовании Sun Workshop 5.3 в сравнении с gcc с опцией -mcpu.

Если Вы получаете проблему с fdatasync или sched_yield, Вы можете решить ее добавлением к строке настройки LIBS=-lrt.

Следующий параграф относится к компиляторам старше, чем WorkShop 5.3:

Вам, вероятно, также придется редактировать скрипт configure, чтобы изменить эту строку:

#if !defined(__STDC__) || __STDC__ != 1

на эту строку:

#if !defined(__STDC__)

Если Вы включаете __STDC__ с опцией -Xc, компилятор Sun не может компилировать с файлом заголовка Solaris pthread.h. Это ошибка Sun.

Если mysqld выдает сообщение об ошибках, показанное ниже, значит Вы пробовали компилировать MySQL компилятором Sun без включения опции процесса с параллельными потоками команд (-mt):

libc internal error: _rmutex_unlock: rmutex not held

Добавьте -mt в CFLAGS и CXXFLAGS, после чего попробуйте снова.

Если Вы получаете следующую ошибку при компиляции 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! По крайней мере для Solaris 2.5, почти все двоичные версии gcc имеют старые, непригодные, включаемые файлы, которые разорвут все программы, использующие потоки (и, возможно, другие программы)!

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 для обхода этого. Подробности в разделе "4.1.1 Опции командной строки mysqld".

Если Вы компонуете собственного MySQL-клиента, можете получить следующую ошибку, когда Вы попробуете выполнить его:

ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such
                      file or directory

Проблемы можно избежать одним из следующих методов:

  • Компонуйте клиента со следующим флажком (вместо -Lpath): -Wl,r/full-path-to-libmysqlclient.so.
  • Скопируйте libmysqclient.so в /usr/lib.
  • Добавьте имя каталога, где размещен libmysqlclient.so к системной переменной LD_RUN_PATH перед запуском клиента.

При использовании опции настройки --with-libwrap, Вы должны также включить библиотеки, в которых нуждается libwrap.a:

--with-libwrap="/opt/NUtcpwrapper-7.6/lib/libwrap.a -lnsl -lsocket

Если Вы имеете проблемы с выбором конфигурации, пробуя скомпоноваться с -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.

2.6.3.1 Замечания по Solaris 2.7/2.8

Вы можете нормально использовать двоичный код из Solaris 2.6 на Solaris 2.7 и 2.8. Большинство проблем Solaris 2.6 также есть и в Solaris 2.7 и 2.8.

Обратите внимание, что MySQL Version 3.23.4 и выше должен быть способен автоматически обнаружить новые версии Solaris и включить обход проблем!

Solaris 2.7/2.8 имеет некоторые ошибки во включаемых файлах. Вы можете видеть следующую ошибку, когда Вы используете gcc:

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition

Если это происходит, Вы можете сделать следующее, чтобы обойти проблему:

Скопируйте /usr/include/widec.h в файле .../lib/gcc-lib/os/gcc-version/include и поменяйте строку 41 с:

#if     !defined(lint) && !defined(__lint)
на
#if     !defined(lint) && !defined(__lint) && !defined(getwc)

Альтернативно, Вы можете непосредственно отредактировать файл /usr/include/widec.h. В любом случае Вы должен удалить config.cache и снова запустить скрипт configure!

Если Вы получаете показанные ниже ошибки при выполнении make, это потому, что скрипт configure не обнаружил файл curses.h (вероятно, из-за ошибки в /usr/include/widec.h):

In file included from mysql.cc:50:
/usr/include/term.h:1060: syntax error before `,'
/usr/include/term.h:1081: syntax error before `;'

Решение состоит в том, чтобы сделать одно из следующих действий:

  • Конфигурируйте с параметрами CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure.
  • Подправьте /usr/include/widec.h и перезапустите configure.
  • Удалите строку #define HAVE_TERM из файла config.h и снова выполните make.

Если Вы получаете проблему из-за того, что Ваш компоновщик не может найти -lz при попытке компоновки Вашей программы-клиента, вероятно, что Ваш файл libz.so установлен в /usr/local/lib. Вы можете исправить эту ситуацию одним из следующих методов:

  • Добавить /usr/local/lib в LD_LIBRARY_PATH.
  • Сделать на libz.so ссылку из /lib.
  • Если Вы используете Solaris 8, Вы можете устанавливать факультативный zlib с дистрибутивного CD Solaris 8.
  • Настройте MySQL с опцией --with-named-z-libs=no.

2.6.3.2 Замечания по Solaris x86

В Solaris 2.8 на x86 mysqld выпадает в дамп, если Вы запустите для него strip.

Если Вы используете gcc или egcs на Solaris x86, и Вы испытываете проблемы с дампами при загрузке, Вы должны использовать следующую команду выбора конфигурации configure:

CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \
          -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
          ./configure --prefix=/usr/local/mysql

Это обходит проблемы с libstdc++ и исключениями в C++.

Если это не помогает, Вы должны компилировать версию для отладки и выполнять ее с файлом трассировки или под отладчиком gdb. Подробности в разделе "6.1.3 Отладка mysqld под gdb".

2.6.4 Замечания по BSD

2.6.4.1 Замечания по FreeBSD

FreeBSD 3.x рекомендуется для работы MySQL, так как пакет потоков намного больше интегрирован в систему.

Самый простой способ установить пакет состоит в том, чтобы использовать mysql-server и mysql-client, доступные на http://www.freebsd.org.

Использование их дает Вам:

  • Работа MySQL со всей оптимизацией, известной для Вашей версии FreeBSD.
  • Автоматическая конфигурация и формирование.
  • Скрипты запуска, установленные в /usr/local/etc/rc.d.
  • Способность видеть перечень файлов, которые установлены pkg_info -L, и удалять их всех с помощью команды pkg_delete, если Вы больше не хотите использовать MySQL на этой машине.

Рекомендуется, чтобы Вы использовали MIT-pthreads на FreeBSD 2.x и местные потоки на Versions 3 и выше. Возможно выполнять пакет с местными потоками на некоторых поздних версиях 2.2.x, но Вы можете сталкиваться с проблемами при закрытии сервера mysqld.

MySQL Makefile требует для работы GNU make. Если Вы хотите компилировать MySQL, Вы должны сначала установить GNU make.

Убедитесь, что имеете правильную установку системы имен. Иначе Вы можете испытывать задержки сервера имен или сбои при соединении с mysqld.

Удостоверьтесь, что запись для localhost в файле /etc/hosts правильная (иначе Вы будете иметь проблемы при соединении с базой данных). Файл /etc/hosts должен начинаться со строки:

127.0.0.1       localhost localhost.your.domain

Если Вы обращаете внимание, что configure использует MIT-pthreads, Вы должны прочитать замечания по MIT-pthreads. Подробности в разделе "2.3.6 Замечания по MIT-pthreads ".

Если Вы получаете ошибку из скрипта make install, который не может найти /usr/include/pthreads, configure не обнаружил, что Вы нуждаетесь в MIT-pthreads. Это исправляется командой:

shell> rm config.cache
shell> ./configure --with-mit-threads

FreeBSD, как известно, имеет очень низкое заданное по умолчанию ограничение на число дескрипторов файла. Подробности в разделе "8.2.16 Файл не найден". Раскомментируйте секцию ulimit -n в safe_mysqld или поднимите ограничения для пользователя mysqld в /etc/login.conf (и пересоздайте его с cap_mkdb /etc/login.conf). Также убедитесь, что Вы устанавливаете соответствующий класс для этого пользователя в файле паролей, если Вы не используете значение по умолчанию (скомандуйте chpass mysqld-user-name). Подробности в разделе "4.7.2 safe_mysqld, обертка вокруг mysqld".

Если Вы получаете проблемы с текущей датой в MySQL, установка переменной TZ, вероятно, поможет. Подробности в разделе "Приложение 2. Переменные окружения ".

Чтобы получать безопасную и устойчивую систему, Вы должны использовать только ядра FreeBSD, которые отмечены как -STABLE.

2.6.4.2 Замечания по NetBSD

Чтобы компилировать пакет на NetBSD, Вы нуждаетесь в GNU make. Иначе компиляция рухнет, когда make попробует запустить lint на файлах C++.

2.6.4.3 Замечания по OpenBSD

Данная систем имеет несколько версий, в которых MySQL работает совершенно иначе. Поэтому невозможно дать каких-то конкретных рекомендаций для всех версий данной ОС. Рассмотрим отдельные версии.

2.6.4.4 Замечания по OpenBSD 2.5

В OpenBSD Version 2.5 Вы можете компилировать MySQL с местными потоками со следующими параметрами:

CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no

2.6.4.5 Замечания по OpenBSD 2.8

OpenBSD 2.8 имеет ошибку, которая вызывает проблемы с MySQL. Разработчики OpenBSD исправили ошибку, но только с 25 января 2001 новая версия доступна как ``-current''. Признаки этой ошибки: медленный ответ, высоко загружается CPU и ряд сбоев.

2.6.4.6 Замечания по BSD/OS

Данная систем имеет несколько версий, в которых MySQL работает совершенно иначе. Поэтому невозможно дать каких-то конкретных рекомендаций для всех версий данной ОС. Рассмотрим отдельные версии.

2.6.4.7 Замечания по BSD/OS Version 2.x

Если Вы получаете следующую ошибку при компиляции MySQL, Ваше значение ulimit для размера виртуальной памяти слишком низко:

item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)':
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1

Попробуйте использовать ulimit -v 80000 и снова выполнить make. Если это не работает, и Вы используете bash, попробуйте переключиться на csh или sh. Некоторые пользователи BSDI сообщили о проблемах с bash и ulimit.

Если Вы используете gcc, Вы можете также использовать флаг --with-low-memory для configure, чтобы собрать sql_yacc.cc.

Если Вы получаете проблемы с текущей датой в MySQL, установка переменной TZ, вероятно, поможет. Подробности в разделе "Приложение 2. Переменные окружения ".

2.6.4.8 Замечания по BSD/OS Version 3.x

Обновитесь до BSD/OS Version 3.1. Если это невозможно, установите BSDIpatch M300-038.

Используйте следующую команду для конфигурирования MySQL:

shell> env CXX=shlicc++ CC=shlicc2 ./configure \
           --prefix=/usr/local/mysql --localstatedir=/var/mysql \
           --without-perl \
           --with-unix-socket-path=/var/mysql/mysql.sock

Следующее, как правило, работает:

shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure \
           --prefix=/usr/local/mysql \
           --with-unix-socket-path=/var/mysql/mysql.sock

Вы можете изменять расположение каталога, если Вы желаете, или только использовать значения по умолчанию, не определяя любые расположения.

Если Вы имеете проблемы с эффективностью при тяжелой загрузке, попробуйте использовать опцию --skip-thread-priority для mysqld! Это выполнит все потоки с тем же самым приоритетом. На BSDI Version 3.1 это дает лучшую эффективность (по крайней мере, пока BSDI не исправит свой планировщик потоков).

Если Вы получаете ошибку "virtual memory exhausted" при компиляции, Вы должны попробовать использовать ulimit -v 80000 и снова выполнить make. Если это не работает, и Вы используете bash, попробуйте переключиться на csh или sh. Некоторые пользователи BSDI сообщили о проблемах с bash и ulimit.

2.6.4.9 Замечания по BSD/OS Version 4.x

BSDI Version 4.x имеет глюк с потоками. Если Вы хотите использовать MySQL на этой системе, Вы должны установить все связанные с потоками патчи. По крайней мере M400-023 должна быть установлена.

На некоторых версиях BSDI Version 4.x Вы можете получать проблемы с общедоступными библиотеками. Признаком этого является то, что Вы не можете выполнять любые программы пользователя, например, mysqladmin. В этом случае Вы должны реконфигурировать пакет, чтобы не использовать общедоступные библиотеки с опцией настройки --disable-shared.

Некоторые заказчики имели проблемы на BSDI 4.0.1: двоичный дистрибутив mysqld через некоторое время не мог открывать таблицы. Это потому, что некоторая связанная с системой ошибка заставляет mysqld изменять текущий каталог без того, чтобы просить об этом!

Либо обновитесь до версии 3.23.34 или более поздней, либо после выполнения configure перед запуском make удалите строку #define HAVE_REALPATH из config.h.

Обратите внимание, что вышеупомянутое означает, что Вы не сможете символически связать каталоги баз данных с другим каталогом баз данных или таблицу к другой базе данных на BSDI! (Создание символической связи с другим диском работает нормально).

2.6.5 Замечания по Mac OS X

2.6.5.1 Замечания по Mac OS X Public Beta

MySQL должен работать без проблем на Mac OS X Public Beta (Darwin).

2.6.5.2 Замечания по Mac OS X Server

Перед попыткой конфигурировать MySQL на Mac OS X server Вы должны сначала установить пакет pthread с http://www.prnet.de/RegEx/mysql.html.

Двоичный дистрибутив для Mac OS X компилируется на Rhapsody 5.5 со следующей строкой configure:

CC=gcc CFLAGS="-O2 -fomit-frame-pointer" CXX=gcc
CXXFLAGS="-O2 -fomit-frame-pointer" ./configure
          --prefix=/usr/local/mysql "--with-comment=Official MySQL binary"
          --with-extra-charsets=complex  --disable-shared

Вы могли бы также добавлять псевдонимы к файлу ресурсов Вашей оболочки, чтобы обращаться к утилитам mysql и mysqladmin из командной строки:

alias mysql '/usr/local/mysql/bin/mysql'
alias mysqladmin '/usr/local/mysql/bin/mysqladmin'

2.6.6 Замечания по прочим Unix

2.6.6.1 Замечания по HP-UX для двоичных дистрибутивов

Некоторые из двоичных дистрибутивов MySQL для HP-UX распространяются как базовый файл HP и как файл tar. Чтобы использовать базовый файл, Вы должны работать как минимум с HP-UX 10.x, чтобы иметь доступ к программным инструментальным средствам HP.

HP-версия MySQL компилировалась на сервере HP 9000/8xx под HP-UX 10.20, и использует MIT-pthreads. MySQL Version 3.22.26 и выше может быть собрана с местным пакетом потоков HP.

Другие конфигурации, которые могут работать:

  • HP 9000/7xx под HP-UX 10.20+
  • HP 9000/8xx под HP-UX 10.30

Следующие конфигурации почти наверняка не будут работать:

  • HP 9000/7xx или 8xx под HP-UX 10.x, где x < 2
  • HP 9000/7xx или 8xx под HP-UX 9.x

Чтобы устанавливать дистрибутив, используйте одну из команд ниже, где /path/to/depot полное имя пути базового файла:

  • Чтобы устанавливать все, включая сервер, клиента и инструментальные средства для разработки:
    shell> /usr/sbin/swinstall -s /path/to/depot mysql.full
    
  • Чтобы устанавливать только сервер:
    shell> /usr/sbin/swinstall -s /path/to/depot mysql.server
    
  • Чтобы устанавливать только клиента:
    shell> /usr/sbin/swinstall -s /path/to/depot mysql.client
    
  • Чтобы устанавливать только инструментальные средства для разработки:
    shell> /usr/sbin/swinstall -s /path/to/depot mysql.developer
    

Базовые места двоичных модулей и библиотек: /opt/mysql, данных: /var/opt/mysql. Базовый пакет также создает соответствующие записи в /etc/init.d и /etc/rc2.d, чтобы запустить сервер автоматически при начальной загрузке. Очевидно, что для установки надо работать в системе как root.

Чтобы устанавливать дистрибутив HP-UX tar.gz, Вы должны иметь копию GNU tar.

2.6.6.2 Замечания по HP-UX Version 10.20

Имеется пара маленьких проблем при компиляции MySQL на HP-UX. Рекомендуется, чтобы Вы использовали gcc вместо местного компилятора HP-UX потому, что gcc производит лучший код!

Лучше применить gcc 2.95 на HP-UX. Не используйте высокие флажки оптимизации (подобно -O6), поскольку это не может быть безопасно на HP-UX.

Обратите внимание, что MIT-pthreads не может компилироваться компилятором HP-UX потому, что он не может компилировать файлы ассемблера (.S).

Следующая строка конфигурации должна работать:

CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include
        -felide-constructors -fno-exceptions -fno-rtti" CXX=gcc
        ./configure --with-pthread --with-named-thread-libs='-ldce'
        --prefix=/usr/local/mysql --disable-shared

Если Вы компилируете gcc 2.95 самостоятельно, Вы НЕ должны компоновать его с библиотеками DCE (libdce.a или libcma.a) если Вы хотите компилировать MySQL с MIT-pthreads. Если Вы смешиваете пакеты DCE и MIT-pthreads, Вы получите mysqld, с которым Вы не сможете соединяться. Удалите библиотеки DCE, в то время как Вы компилируете gcc 2.95!

2.6.6.3 Замечания по HP-UX Version 11.x

Для HP-UX Version 11.x рекомендуется использовать MySQL Version 3.23.15 или более позднюю.

Из-за некоторых критических ошибок в стандартных библиотеках HP-UX Вы должны установить следующие заплаты перед попыткой выполнить MySQL на HP-UX 11.0:

PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative

Это решит проблему, что каждый получает EWOULDBLOCK из recv() и EBADF из accept() в потоковых прикладных программах.

Если Вы используете gcc 2.95.1 на неисправленной системе HP-UX 11.x, Вы получите ошибку:

In file included from /usr/include/unistd.h:11,
                 from ../include/global.h:125,
                 from mysql_priv.h:15,
                 from item.cc:19:
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
                 from mysql_priv.h:158,
                 from item.cc:19:

Проблема в том, что HP-UX, не определяет pthreads_atfork(). Это имеет противоречивые прототипы в /usr/include/sys/unistd.h:184 и /usr/include/sys/pthread.h:440 (в деталях разберемся позже).

Одно решение состоит в том, чтобы копировать /usr/include/sys/unistd.h в mysql/include и отредактировать unistd.h так, чтобы соответствовать определению в pthread.h:

183,184c183,184
< extern int pthread_atfork(void (*prepare)(), void (*parent)(),
<                           void (*child)());
---
> extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
>                           void (*child)(void));

После того, как это будет сделано, следующая строка выбора конфигурации должна нормально работать:

CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti
          -O3" ./configure --prefix=/usr/local/mysql --disable-shared

Имеется некоторая информация, которую пользователь HP-UX Version 11.x предоставил относительно компиляции MySQL оригинальным компилятором HP-UX:x:

 Environment:
      proper compilers.
         setenv CC cc
         setenv CXX aCC
      flags
         setenv CFLAGS -D_REENTRANT
         setenv CXXFLAGS -D_REENTRANT
         setenv CPPFLAGS -D_REENTRANT
     % aCC -V
     aCC: HP ANSI C++ B3910B X.03.14.06
     % cc -V /tmp/empty.c
     cpp.ansi: HP92453-01 A.11.02.00 HP C Preprocessor (ANSI)
     ccom: HP92453-01 A.11.01.00 HP C Compiler
     cc: "/tmp/empty.c", line 1: warning 501: Empty source file.

  configuration:
     ./configure  --with-pthread --prefix=/source-control/mysql     \
     --with-named-thread-libs=-lpthread --with-low-memory

    added '#define _CTYPE_INCLUDED' to include/m_ctype.h. This
    symbol is the one defined in HP's /usr/include/ctype.h:

     /* Don't include std ctype.h when this is included */
     #define _CTYPE_H
     #define __CTYPE_INCLUDED
     #define _CTYPE_INCLUDED
     #define _CTYPE_USING
     /* Don't put names in global namespace. */
  • Я должен был использовать флаг компиляции -D_REENTRANT, чтобы компилятор мог распознать прототип для localtime_r. Я не был уверен, где именно компилятор нуждался в этом, так что добавил это определение ко всем флажкам.
  • Флажки оптимизации, используемые MySQL (-O3), не распознаны компиляторами от HP. Я не изменял флажки.

Если Вы получаете следующую ошибку из configure

checking for cc option to accept ANSI C... no
configure: error: MySQL requires a ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.

Проверьте, что Вы не имеете путь к компилятору K&R перед путем к компиляторам HP-UX C и C++.

2.6.6.4 Замечания по IBM-AIX

Автоматическое обнаружение xlC отсутствует в Autoconf, так что команда configure требует примерно таких определений (этот пример для компилятора IBM):

export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDLFAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS
./configure --prefix=/usr/local --localstatedir=/var/mysql \
                --sysconfdir=/etc/mysql --sbindir='/usr/local/bin' \
                --libexecdir='/usr/local/bin' \
                --enable-thread-safe-client --enable-large-files

Выше даны параметры, используемые, чтобы скомпилировать дистрибутив MySQL, который доступен на http://www-frec.bull.com.

Если Вы изменяете -O3 на -O2 в вышеупомянутой строке выбора конфигурации, Вы должны также удалить опцию -qstrict (это ограничение компилятора IBM C).

Если Вы используете gcc или egcs, чтобы откомпилировать MySQL, Вы ДОЛЖНЫ использовать флажок -fno-exceptions, поскольку обработка исключительной ситуации в gcc/egcs не поточно-безопасна! Это проверено с egcs 1.1. Имеются также некоторые известные проблемы с оригинальным ассемблером IBM, который может генерировать плохой код, когда используется вместе с gcc.

Автор рекомендует следующую строку configure для egcs и gcc 2.95 на AIX:

CC="gcc -pipe -mcpu=power -Wa,-many" \
CXX="gcc -pipe -mcpu=power -Wa,-many" \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
          ./configure --prefix=/usr/local/mysql --with-low-memory

Опции -Wa,-many необходимы для нормального хода процесса. IBM знает про эту проблему, но не торопится ее исправлять. Я не знаю, требуется ли -fno-exceptions с gcc 2.95, но поскольку MySQL не использует исключительные ситуации, и вышеупомянутая опция генерирует более быстрый код, лучше, чтобы Вы всегда использовали эту опцию с egcs/gcc.

Если Вы имеете проблему с кодом ассемблера, попробуйте заменить -mcpu=xxx на значение для Вашего cpu. Обычно можно использовать значения power2, power или powerpc, альтернативно Вы могли бы использовать 604 или 604e.

Если Вы не знаете, чем является Ваш центральный процессор, скомандуйте "uname -m", это даст Вам строку, которая напоминает "000514676700", с форматом xxyyyyyymmss, где xx и ss всегда 0, yyyyyy уникальный идентификатор системы, а mm идентификатор CPU Planar. Диаграмма этих значений может быть найдена на http://www.rs6000.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. Это даст Вам тип и модель машины, которые Вы можете использовать, чтобы определить, какой центральный процессор Вы имеете.

Если Вы имеете проблемы с сигналами (MySQL неожиданно валится при высокой загрузке) Вы, возможно, нашли ошибку OS с потоками и сигналами. В этом случае Вы можете сообщать, чтобы MySQL не использовал сигналы, конфигурируя его так:

shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
           CXXFLAGS="-felide-constructors -fno-exceptions
                     -fno-rtti -DDONT_USE_THR_ALARM" \
           ./configure --prefix=/usr/local/mysql --with-debug
           --with-low-memory

Это не воздействует на эффективность MySQL, но имеет побочный эффект: Вы не сможете уничтожать клиентуру, которая является бездействующей, с помощью mysqladmin kill или mysqladmin shutdown.

На некоторых версиях AIX, компонующихся с libbind.a вызов getservbyname создает дамп ядра. Это ошибка AIX. Она должна быть сообщена в фирму IBM.

Для AIX 4.2.1 и gcc Вы должны сделать следующие изменения:

После конфигурирования, отредактируйте config.h и include/my_config.h и смените строку

#define HAVE_SNPRINTF 1

на

#undef HAVE_SNPRINTF

В mysqld.cc Вы должны добавить прототип для initgoups.

#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif

2.6.6.5 Замечания по SunOS 4

В SunOS 4 пакет MIT-pthreads необходим, чтобы компилировать MySQL, что в свою очередь означает, что Вы будете нуждаться в GNU make.

Некоторые системы SunOS 4 имеют проблемы с динамическими библиотеками и libtool. Вы можете использовать следующую строку для configure, чтобы избежать этой проблемы:

shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static

При компиляции readline Вы можете получить предупреждения относительно дубликата определений. Они могут спокойно игнорироваться.

При компиляции mysqld будет предупреждение implicit declaration of function. Можно игнорировать.

2.6.6.6 Замечания по Alpha-DEC-UNIX (Tru64)

Если Вы используете egcs 1.1.2 на Digital Unix, Вы должны обновиться до gcc 2.95.2, поскольку egcs в DEC имеет некоторые серьезные ошибки!

При компиляции поточных программ под Digital Unix документация рекомендует использовать опцию -pthread для cc и cxx и библиотеки -lmach -lexc (в дополнение к -lpthread). Вы должны выполнить configure так:

CC="cc -pthread" CXX="cxx -pthread -O" \
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

При построении mysqld Вы можете видеть пару предупреждений подобно вот этому:

mysqld.cc: In function void handle_connections()':
mysqld.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'

Вы можете безопасно игнорировать эти предупреждения. Они происходят потому, что скрипт configure может обнаруживать только ошибки, но не предупреждения.

Если Вы запускаете сервер непосредственно с командной строки, Вы можете иметь проблемы с этим, когда Вы регистрируете извне, по сети: Ваши ожидающие обработки процессы получают сигнал SIGHUP. Если это так, попробуйте запускать сервер таким образом:

shell> nohup mysqld [options] &

Вызов nohup заставляет команду игнорировать любой сигнал SIGHUP, посланный с терминала. Альтернативно, запустите сервер через safe_mysqld, который вызывает mysqld через nohup. Подробности в разделе " 4.7.2 safe_mysqld, обертка вокруг mysqld".

Если Вы получаете проблему при компиляции mysys/get_opt.c, удалите строку #define _NO_PROTO из начала этого файла!

Если Вы используете компилятор Compac's CC compiler, следующая строка выбора конфигурации должна работать:

CC="cc -pthread"
CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
CXX="cxx -pthread"
CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/local/mysql --with-low-memory \
            --enable-large-files --enable-shared=yes \
            --with-named-thread-libs="-lpthread -lmach -lexc -lc"
gnumake

Если Вы получаете проблему с libtool при компиляции с общедоступными библиотеками, то при компоновке mysql Вы способны обойти ее:

cd mysql
/bin/sh ../libtool --mode=link cxx -pthread  -O3 -DDBUG_OFF \
-O4 -ansi_alias -ansi_args -fast -inline speed \
-speculate all \ -arch host  -DUNDEF_HAVE_GETHOSTBYNAME_R \
-o mysql  mysql.o readline.o sql_string.o completion_hash.o \
../readline/libreadline.a -lcurses \
../libmysql/.libs/libmysqlclient.so  -lm
cd ..
gnumake
gnumake install
scripts/mysql_install_db

2.6.6.7 Замечания по Alpha-DEC-OSF1

Если Вы имеете проблемы при компиляции и имеете установленные DEC CC и gcc, попробуйте так запустить configure:

CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

Если Вы получаете проблемы с файлом c_asm.h, Вы можете создать и использовать пустой файл c_asm.h:

touch include/c_asm.h
CC=gcc CFLAGS=-I./include \
CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

Обратите внимание, что следующие проблемы с программой ld могут быть исправлены загрузкой последнего комплекта заплаток DEC (Compaq) с http://ftp.support.compaq.com/public/unix.

На OSF1 V4.0D с компилятором "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878)" транслятор имел некоторое странное поведение (неопределенные символы asm). /bin/ld также неправильный (проблемы с ошибкой _exit undefined при компоновке mysqld). На этой системе удалось собрать MySQL со следующей строкой для вызова configure, после замены /bin/ld на версию из OSF 4.0C:

CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql

С Digital compiler "C++ V6.1-029" следующее должно работать:

CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed \
       -speculate all -arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all \
         -arch host -noexceptions -nortti
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static \
            --disable-shared --with-named-thread-libs="-lmach -lexc -lc"

В некоторых версиях OSF1 функция alloca() неправильная. Исправьте это, удаляя строку в файле config.h, которая определяет 'HAVE_ALLOCA'.

Функция alloca() также может иметь неправильный прототип в /usr/include/alloca.h. Предупреждение об этом можно игнорировать.

configure автоматически использует следующие библиотеки потоков: --with-named-thread-libs="-lpthread -lmach -lexc -lc".

При использовании gcc, Вы можете также попробовать такой запуск скрипта configure:

shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....

Если Вы имеете проблемы с сигналами (MySQL неожиданно валится при высокой загрузке) Вы, возможно, нашли ошибку OS с потоками и сигналами. В этом случае Вы можете сообщать, чтобы MySQL не использовал сигналы, конфигурируя его так:

shell> CFLAGS=-DDONT_USE_THR_ALARM \
           CXXFLAGS=-DDONT_USE_THR_ALARM \
           ./configure ...

Это не воздействует на эффективность MySQL, но имеет побочный эффект: Вы не сможете уничтожать клиентуру, которая является бездействующей, с помощью mysqladmin kill или mysqladmin shutdown.

С gcc 2.95.2 Вы, вероятно, столкнетесь со следующей ошибкой:

sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566
Please submit a full bug report.

Чтобы это исправить, Вы должны изменить текущий каталог на sql и выдать последнюю строку запуска gcc, заменив в ней -O3 на -O0 (или добавив -O0 сразу после gcc, если Вы не имеете опции -O). После того, как это будет выполнено, Вы можете перейти в прежний каталог и снова выполнить оттуда make.

2.6.6.8 Замечания по SGI Irix

Если Вы используете Irix Version 6.5.3 или более новую, mysqld будет способен создать только, если Вы выполняете его как пользователь с привилегиями CAP_SCHED_MGT (подобно root) или даете серверу mysqld эту привилегию с следующей командой оболочки:

shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld

Вам, вероятно, придется разопределить некоторые вещи в config.h после выполнения configure, но перед компиляцией.

В некоторых реализациях Irix функция alloca() ошибочна. Если сервер mysqld рушится на некоторых инструкциях SELECT, удалите из config.h строки, которые определяют HAVE_ALLOC и HAVE_ALLOCA_H. Если mysqladmin create не работает, удалите из config.h строку, определяющую HAVE_READDIR_R. Вам, вероятно, придется также удалить строку HAVE_TERM_H.

SGI рекомендует, чтобы Вы установили все заплаты с этой страницы как набор: http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html.

Как минимум, Вы должны установить последние kernel rollup, rld и библиотеку libc.

Вы определенно нуждаетесь во всех заплатах POSIX на этой странице для поддержки потоков pthreads: http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html.

Если Вы получаете нечто вроде следующей ошибки при компиляции mysql.cc:

"/usr/include/curses.h", line 82: error(1084): invalid combination of type

Введите следующее в верхнем каталоге дерева исходников MySQL:

shell> extra/replace bool curses_bool < /usr/include/curses.h >
           include/curses.h
shell> make

Также имелись отчеты о проблемах с планировщиком. Если только один поток запущен, все работает медленно. Избегайте этого, запуская другого пользователя. Это может привести к увеличению быстродействия выполнения в 2-10 раз с этого времени для другого потока. Это плохо понятная проблема с потоками Irix. Вам, вероятно, придется импровизировать, чтобы найти оптимальное решение, пока это не может быть исправлено радикально.

Если Вы компилируете с gcc, Вы можете использовать следующий вызов команды configure:

CC=gcc CXX=gcc CXXFLAGS=-O3
./configure --prefix=/usr/local/mysql --enable-thread-safe-client \
            --with-named-thread-libs=-lpthread

На Irix 6.5.11 с собственным компилятором Irix C и C++ ver. 7.3.1.2, следующее, как сообщают, работает:

CC=cc CXX=CC
CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \
       -L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \
       -I/usr/local/include -L/usr/local/lib'
./configure --prefix=/usr/local/mysql --with-berkeley-db --with-innodb \
            --with-libwrap=/usr/local \
            --with-named-curses-libs=/usr/local/lib/libncurses.a

2.6.6.9 Замечания по SCO

Текущий порт проверен только на системах sco3.2v5.0.4 и sco3.2v5.0.5. Также имелось много прогресса на порте к sco 3.2v4.2.

Сейчас рекомендуемый транслятор на OpenServer: 2.95.2. С ним Вы должны компилировать MySQL так:

CC=gcc CXX=gcc ./configure ... (options)

  1. Для OpenServer 5.0.X Вы должны использовать GDS в Skunkware 95 (95q4c). Это необходимо потому, что GNU gcc 2.7.2 в Skunkware 97 не имеет GNU as. Вы можете также использовать egcs 1.1.2 или более новый с http://www.egcs.com. Если Вы используете egcs 1.1.2, Вы должны выполнить следующую команду:
    shell> cp -p /usr/include/pthread/stdtypes.h \
        /usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/
    

  2. Вы нуждаетесь в порте GCC 2.5.x для этой программы и в Development system. Они требуются в этой версии SCO Unix. Вы не можете использовать только GCC Dev system.
  3. Вы должны получить пакет FSU Pthreads и установить его сначала. Он может быть найден на http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-threads.tar.gz. Вы можете также получить откомпилированный пакет с http://www.mysql.com/Downloads/SCO/FSU-threads-3.5c.tar.gz.
  4. FSU Pthreads может компилироваться в SCO Unix 4.2 с tcpip, OpenServer 3.0 или Open Desktop 3.0 (OS 3.0 ODT 3.0), SCO Development System с установкой хорошего порта GCC 2.5.x ODT или OS 3.0, но там Вы будете нуждаться в хорошем порте GCC 2.5.x. Причем, там требуется SCO Unix Development system. Без нее не будет компоновщика и необходимых библиотек.
  5. Для сборки FSU Pthreads на Вашей системе, сделайте следующее:
    1. Запустите ./configure в каталоге threads/src и выберите опцию SCO OpenServer. Эта команда скопирует Makefile.SCO5 в Makefile.
    2. Запустите make.
    3. Чтобы устанавливать в каталог по умолчанию /usr/include, зайдите в систему как root, потом cd в каталог thread/src и выполните оттуда make install.
  6. Не забудьте использовать GNU make при создании MySQL.
  7. Если Вы не запускаете safe_mysqld как root, Вы, вероятно, получите только значение по умолчанию 110 открытых файлов на процесс. Сервер mysqld будет писать замечание относительно этого в журнал.
  8. В SCO 3.2V5.0.5 Вы должны использовать FSU Pthreads version 3.5c или новее. Вы должны также использовать gcc 2.95.2 или более новый! Следующая команда configure должна работать:
    shell> ./configure --prefix=/usr/local/mysql --disable-shared
    
  9. В SCO 3.2V4.2 Вы должны использовать FSU Pthreads version 3.5c или новее. Следующая команда configure должна работать:
    shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
               ./configure --prefix=/usr/local/mysql \
               --with-named-thread-libs="-lgthreads -lsocket -lgen \
               -lgthreads" --with-named-curses-libs="-lcurses"
    
    Вы можете получать некоторые проблемы с включаемыми файлами. В этом случае Вы можете найти новые SCO-специфичные включаемые файлы по адресу http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. Вы должны распаковать этот файл в каталог include дерева исходников MySQL.

Замечания для разработчиков под SCO:

  • MySQL должен автоматически обнаружить FSU Pthreads и скомпоновать mysqld с -lgthreads -lsocket -lgthreads.
  • Библиотеки разработок SCO повторно используются в FSU Pthreads. SCO утверждает, что функции библиотек повторно используемы, так что они должны применяться с FSU Pthreads. FSU Pthreads на OpenServer пробует использовать SCO-схему библиотек.
  • FSU Pthreads (по крайней мере версия на http://www.mysql.com) компонуется с GNU malloc. Если Вы сталкиваетесь с проблемами с использованием памяти, удостоверьтесь, что gmalloc.o включен в libgthreads.a и в libgthreads.so.
  • В FSU Pthreads следующие системные вызовы pthreads-зависимы: read(), write(), getmsg(), connect(), accept(), select() и wait().

Если Вы хотите устанавливать DBI на SCO, Вы должны отредактировать Makefile DBI-xxx и в каждом подкаталоге.

Обратите внимание на следующие изменения для gcc 2.95.2 или новее:

OLD:                                  NEW:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =
LD = ld                               LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib
LD = ld                               LD = gcc -G -fpic
OPTIMISE = -Od                        OPTIMISE = -O1

OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

Это потому, что Perl dynaloader не будет загружать DBI-модули, если они компилировались с icc или cc.

Perl работает лучше всего, когда компилируется с cc.

2.6.6.10 Замечания по SCO Unixware Version 7.0

Вы должны использовать версию MySQL, по крайней мере не ниже Version 3.22.13 потому, что та версия исправляет некоторые проблемы с Unixware.

Я компилировал MySQL следующей командой configure в Unixware 7.0.1:

CC=cc CXX=CC ./configure --prefix=/usr/local/mysql

Если Вы хотите использовать gcc, Вы должны использовать gcc 2.95.2 или более новый.

2.6.7 Замечания по OS/2

MySQL использует несколько открытых файлов. Из-за этого, Вы должны добавить нечто вроде следующего к Вашему файлу CONFIG.SYS:

SET EMXOPT=-c -n -h1024

Если Вы не сделаете это, Вы, вероятно, столкнетесь со следующей ошибкой:

File 'xxxx' not found (Errcode: 24)

При использовании с OS/2 Warp 3, требуется FixPack 29 или выше. Для OS/2 Warp 4 нужен FixPack 4 или выше. Это требование библиотеки Pthreads. MySQL должен быть установлен в раздел, который поддерживает длинные имена файлов, типа HPFS или FAT32.

Скрипт INSTALL.CMD должен быть выполнен собственным интерпретатором OS/2 CMD.EXE, и не может работать с оболочками замены, типа 4OS2.EXE.

Скрипт scripts/mysql-install-db был переименован. Он теперь назван install.cmd и является REXX-скриптом, который установит заданные по умолчанию параметры настройки защиты MySQL и создаст пиктограммы WorkPlace Shell для MySQL.

Динамическая поддержка модулей компилируется, но пока не полностью проверена. Динамические модули должны компилироваться, используя библиотеку поддержки Pthreads run-time library.

gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
    -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
mv example.dll example.udf

Обратите внимание: из-за ограничений OS/2, имена модулей UDF не должны превышать 8 символов. Модули сохранены в каталоге /mysql2/udf. Скрипт safe-mysqld.cmd поместит этот каталог в системную переменную BEGINLIBPATH. При использовании UDF-модуля, определенные расширения игнорируются, должны быть .udf. Например, в Unix общедоступный модуль мог бы быть именован как example.so, и Вы загрузите функцию из него примерно так:

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";

В OS/2 модуль будет именован как example.udf, но Вы не будете определять расширение модуля:

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example";

2.6.8 Замечания по BeOS

Разработчики пакета очень заинтересованы получением MySQL, чтобы работать на BeOS, но, к сожалению, не имеют человека, который знает BeOS или имеет время, чтобы сделать порт.

Разработчики пакета заинтересованы нахождением кого-то, чтобы сделать порт, и помогут им с любыми техническими вопросами, которые они могут иметь при выполнении порта.

Они уже предварительно говорили с некоторыми BeOS-разработчиками, которые сказали, что MySQL на 80%, перенесен на BeOS, но так и не получили известий от них вовремя.

2.6.9 Замечания по Novell Netware

Разработчики пакета очень заинтересованы получением MySQL, чтобы работать на Netware, но, к сожалению, не имеют человека, который знает Netware или имеет время, чтобы сделать порт.

Разработчики пакета заинтересованы нахождением кого-то, чтобы сделать порт, и помогут им с любыми техническими вопросами, которые они могут иметь при выполнении порта.

Поиск

 

Найди своих коллег!