На NT/2000/XP пытается установить соединение через именованные каналы; если это не работает, используется TCP/IP. На 9x/Me используется TCP/IP.
Чтобы заставить MySQL-клиента использовать именованные каналы, следует добавить опцию --pipe или задать . в качестве имени машины для соединения. Для определения имени канала используйте опцию --socket. В MySQL 4.1 вам следует использовать опцию --protocol=PIPE.
Отметим, что начиная с версии 3.23.50 именованные каналы применяются только в случае, если mysqld запущен с опцией --enable-named-pipe. Это вызвано тем, что у некоторых пользователей применение именованных каналов приводило к прекращению работы сервера 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 на входящие соединения под Windows 9x/Me возникают задержки, то это, скорее всего, вызвано проблемами с вашим DNS. В таком случае следует запускать mysqld с опцией --skip-name-resolve и в таблицах привилегий MySQL использовать только localhost и IP-адреса. Избежать работы с DNS при соединении с MySQL-сервером mysqld-nt, работающим под NT/2000/XP, можно путем применения опции --pipe, которая задает использование именованных каналов. Сказанное выше справедливо для большинства клиентов MySQL.
Бинарный файл | Описание |
mysql | Собран ``родными'' средствами Windows, обеспечивает весьма ограниченные возможности редактирования текста. |
mysqlc | Собран с использованием компилятора и библиотек Cygnus GNU, которые обеспечивают редактор readline. |
Если вы хотите использовать `mysqlc.exe', сначала необходимо скопировать `C:\mysql\lib\cygwinb19.dll' в системный каталог Windows (`\windows\system' или в другое аналогичное место).
По умолчанию всем пользователям Windows предоставляются полные права доступа ко всем базам данных без ввода пароля. Чтобы обеспечить большую безопасность MySQL, необходимо задать пароль для каждого пользователя и удалить запись в таблице mysql.user, содержащую Host='localhost' и User=' `.
Необходимо также установить пароль для пользователя root. Приведенный ниже пример начинается с удаления возможности анонимного доступа, который может быть использован любым пользователем для установки пароля для пользователя 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 после того, как установлен пароль для пользователя root, нужно использовать команду:
C:\> mysqladmin --user=root --password=your_password shutdown
Если у вас работает старая испытательная версия MySQL 3.21 под Windows, вышеприведенная команда не выполнится и приведет к сообщению об ошибке: parse error near `SET password'. Для решения этой проблемы следует выполнить загрузку и обновление до последней доступной бесплатно версии MySQL.
В текущей версии MySQL вы можете легко добавлять новых пользователей и изменять их привилегии при помощи команд GRANT и REVOKE (see section 4.3.1 Синтаксис команд GRANT и REVOKE).
Соединение с 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/CryptographySSH/Clients/Windows/
Запустите Windows-клиент SSH. Установите Host_Name=адрес_своего_MySQL-сервера. Задайте userid=свой_userid для соединения со своим сервером (может отличатся от вашего имени пользователя/пароля для MySQL).
Задайте перенаправление портов или организуйте удаленный форвардинг (нужно сделать следующие установки: локальный порт - 3306, удаленный хост - адреса_вашего_mysql_сервера, удаленный порт - 3306) либо локальный форвардинг (порт - 3306, хост - localhost, удаленный порт - 3306).
Сохраните выполненные установки, иначе вам придется в следующий раз делать все заново.
Соединитесь со своим сервером, используя только что созданный вами SSH-сеанс.
Запустите в Windows какое-либо ODBC-приложение (например Access).
Создайте в Windows новый файл и ссылку на MySQL, используя ODBC-драйвер обычным образом, за исключением того, что вместо имени вашего MySQL-сервера следует указывать localhost, а не yourmysqlservername.
В результате этих действий вы должны получить ODBC-соединение со своим MySQL-сервером, защищенное при помощи SSH-кодирования.
Распределение данных в Windows между несколькими различными дисками
Начиная с MySQL версии 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 не включается использование символических ссылок по умолчанию, даже если вы собрали MySQL с поддержкой данной возможности. Чтобы обеспечить возможность разрешения символических ссылок, вы должны поместить в свой файл `my.cnf' или `my.ini' следующие строки:
[mysqld] use-symbolic-links
В MySQL 4.0 использование символических ссылок по умолчанию будет включено. Если вы хотите запретить эту возможность, то для данной версии MySQL необходимо использовать опцию skip-symlink.
Компиляция MySQL-клиентов в среде Windows
В файлах исходных текстов следует перед `mysql.h' включить `windows.h':
#if defined(_WIN32) || defined(_WIN64) #include #endif #include
Линковать свою программу можно либо с использованием динамической библиотеки `libmysql.lib', которая является просто оболочкой для загрузки `libmysql.dll' по требованию, либо со статической библиотекой `mysqlclient.lib'.
Отметим, что поскольку библиотеки mysqlclient компилируются как потоковые библиотеки, следует скомпилировать вашу программу так, чтобы была разрешена многопочность!
Сравнительные характеристики MySQL под Windows и под Unix
На настоящий момент версия MySQL под Windows зарекомендовала себя как весьма устойчивая. Возможности этой версии и версии под Unix аналогичны, за исключением следующих моментов:
Windows 95 и потоки
При создании каждого потока в Windows 95 теряется приблизительно 200 байтов основной памяти. А поскольку каждое соединение с MySQL создает новый поток, на Windows 95 не следует запускать mysqld на продолжительное время, если ваш сервер обрабатывает много соединений! Другие версии Windows не подвержены этой ошибке.
Параллельное чтение
Для обработки смешанных запросов SELECT и INSERT в MySQL используются функции pread() и pwrite(). В настоящее время для эмуляции pread()/pwrite() мы применяем mutex'ы. Однако в наши планы на будущее входит замена интерфейса файлового уровня виртуальным интерфейсом, чтобы иметь возможность использовать интерфейс readfile()/writefile() на NT/2000/XP - с целью ускорения работы. В текущей реализации число одновременно открытых в MySQL файлов не может быть больше 1024; это означает, что вы не сможете создать такое же количество одновременных соединений с MySQL в NT/2000/XP, как в Unix.
Чтение с блокировкой
В MySQL для каждого соединения используется чтение с блокировкой. Это означает, что:
Соединение не будет автоматически закрыто по истечении 8 часов, как в случае Unix-версии MySQL.
В случае ``зависания'' соединения невозможно оборвать его без остановки MySQL.
mysqladmin kill не работает для ``спящих'' соединений
mysqladmin shutdown не может отработать до тех пор, пока существуют ``спящие'' соединения.
Перечисленные проблемы мы планируем решить, когда наши разработчики под Windows придумают изящный способ их решения.
DROP DATABASE
Нельзя удалить базу данных, если она используется каким-либо потоком.
Остановка MySQL из диспетчера задач
В Windows 95 нельзя остановить MySQL из диспетчера задач или с помощью инструментальной программы shutdown; это можно сделать с помощью mysqladmin shutdown.
Имена, не зависящие от регистра символов
Имена файлов в Windows не зависят от регистра символов, поэтому имена таблиц и баз данных в MySQL под Windows также не зависимы от регистра. Единственное ограничение заключается в том, что имена баз данных и таблиц в пределах одного выражения должны задаваться с использованием одинакового регистра символов (see section 6.1.3 Чувствительность имен к регистру).
Символ каталогов `\'
Компоненты путей в Windows 95 разделяются символом `\', который также является символом экранирования в 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 именованные каналы применяются по умолчанию. Чтобы избежать таких ошибок, следует использовать с новым клиентом MySQL флаг --host=localhost или создать файл флагов `C:\my.cnf', содержащий следующие строки:
[client] host = localhost
Начиная с версии 3.23.50 именованные каналы используются только в случае, если mysqld запущен с флагом --enable-named-pipe.
Ошибка 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, не будет работать в Windows, так как отображение таблицы, которое выполняет обработчик MERGE, скрыто от верхнего уровня MySQL. Поскольку в Windows нельзя удалять открытые файлы, вначале следует сбросить все MERGE-таблицы (используя FLUSH TABLES) или удалить все MERGE-таблицы перед удалением таблицы. Мы исправим эту ошибку одновременно с введением оператора VIEW. Операторы DATA DIRECTORY и INDEX DIRECTORY в CREATE TABLE в Windows игнорируются, поскольку Windows не поддерживает символические ссылки.
Ниже приведены некоторые открытые вопросы для всех, кто захочет помочь нам в работе над выпусками под Windows:
Требуется создать однопользовательский сервер `MYSQL.DLL'. Он должен включать все возможности стандартного MySQL-сервера, за исключением потоков. Это заметно упростит использование MySQL в приложениях, которые не нуждаются в настоящем клиент-серверном взаимодействии и в доступе к базе с других машин.
Нужно было бы добавить в инсталляционный пакет нескольких симпатичных иконок для старта и остановки MySQL.
При регистрации mysqld в качестве сервиса с флагом --install (на NT) было бы неплохо иметь возможность добавлять флаги по умолчанию к командной строке. Сейчас эта проблема решается путем записи списка параметров в файл `C:\my.cnf'.
Было бы удобно останавливать mysqld из диспетчера задач. Сейчас для этого нужно применять mysqladmin shutdown.
Требуется перенести readline в Windows для использования с инструментальной программой, запускаемой из командной строки mysql.
GUI версия стандартных MySQL-клиентов (mysql, mysqlshow, mysqladmin и mysqldump) будет очень полезна.
Было бы хорошо, если бы чтение и запись сокетов из `net.c' можно было бы прерывать. Это позволило бы останавливать открытые потоки командой mysqladmin kill в Windows.
mysqld всегда стартует в местоположении "C", а не в местоположении, установленном по умолчанию. С благодарностью будет принято исправление, позволяющее использование программой mysqld текущего значения местоположения для порядка сортировки.
Требуется добавить макрос для ускорения безопасного для потоков метода инкремента/декремента, обеспечиваемого Windows.
Остальные, специфические для Windows вопросы, можно найти в файле README, который находится в поставке MySQL-Windows.
Примечания к Windows
В данном разделе описывается использование MySQL в среде Windows. Эта информация также находится в файле `README', поставляемом с дистрибутивом MySQL Windows. See section 2.1.2 Установка MySQL на Windows.
можно нормально использовать бинарные
На Solaris 2.7 и 2. 8 можно нормально использовать бинарные файлы для Solaris 2.6. Большинство вопросов по работе с Solaris 2.6 относятся также и к Solaris 2.7 и 2.8.
Необходимо отметить, что MySQL версии 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.
На 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 (see section E.1.3 Отладка mysqld при помощи gdb).
Примечания к Solaris
В системе 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 section 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 section 4.1.1 Параметры командной строки mysqld.
Если вы линкуете собственный MySQL-клиент, то при попытке его запустить может выдаваться следующее сообщение об ошибке:
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
Проблему можно решить одним из следующих способов:
Линковать клиент со следующими опциями (вместо -Lpath): -Wl,r/полный-путь-к-libmysqlclient.so.
Скопировать `libmysqclient.so' в `/usr/lib'.
Перед запуском своего клиента добавить путь к каталогу, в котором находится `libmysqclient.so', к переменной окружения LD_RUN_PATH.
Если вы столкнулись с проблемами конфигурирования, пытаясь линковать с опцией -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.
Примечания к FreeBSD
Для работы Mysql рекомендуется FreeBSD версий 3.x, поскольку версия с потоками является намного более интегрированной.
Простейшим, а поэтому и более предпочтительным способом установки является использование портов mysql-server и mysql-client из коллекции портов FreeBSD, которая доступна по адресу http://www.freebsd.org/.
Использование этих портов обеспечивает:
работоспособный MySQL со всеми возможностями оптимизации, доступными на данной версии FreeBSD;
автоматическую конфигурацию и сборку;
установку скриптов, запускающих MySQL, в `/usr/local/etc/rc.d';
возможность получения списка установленных файлов по команде pkg_info -L и удаления их при помощи команды pkg_delete в случае, если вы более не нуждаетесь в MySQL на данной машине.
Рекомендуется использовать MIT-pthreads на FreeBSD версий 2.x и собственные потоки для 3.x и более поздних версий FreeBSD. На некоторых последних версиях 2.2.x возможно применение собственных потоков, но при этом не исключены проблемы с остановкой mysqld.
Для сборки MySQL в соответствии с Makefile'ом необходима программа GNU make (gmake). Прежде чем выполнять сборку MySQL, следует установить GNU make.
Удостоверьтесь, что используемый вами сервер имен работает корректно. В противном случае возможны задержки или ошибки при соединении с mysqld.
Убедитесь в корректности записи localhost в файле `/etc/hosts' (при отсутствии или ошибочности этой записи возникнут проблемы соединения с базой). Файл `/etc/hosts' должен начинаться с записи:
127.0.0.1 localhost localhost.your.domain
Предлагаемый способ сборки и установки MySQL на FreeBSD с использованием gcc (версии 2.95.2 или более поздней):
CC=gcc CFLAGS="-O2 -fno-strength-reduce" \ CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions -felide-constructors \ -fno-strength-reduce" \ ./configure --prefix=/usr/local/mysql --enable-assembler gmake gmake install ./scripts/mysql_install_db cd /usr/local/mysql ./bin/mysqld_safe &
Если программа configure решила использовать MIT-pthreads, необходимо ознакомится с примечаниями по MIT-pthreads (see section 2.3.6 Замечания по потокам MIT-pthreads).
Если при выполнении make install возникла ошибка, сообщающая о невозможности нахождения `/usr/include/pthreads' (can't find `/usr/include/pthreads'), это значит, что configure не определил необходимость использования MIT-pthreads. Для исправления данной ошибки необходимо выполнить следующие команды:
shell> rm config.cache shell> ./configure --with-mit-threads
Как известно, в FreeBSD по умолчанию установлено очень небольшое значение для количества одновременно открытых файлов (see section A.2.16 Не найден файл (File not found)). Чтобы исправить положение, следует раскомментировать секцию ulimit -n в скрипте safe_mysqld или повысить ограничение для пользователя mysqld в `/etc/login.conf' (не забудьте перестроить его командой cap_mkdb
`/etc/login.conf'). Помимо этого, имеет смысл проверить установку подходящего класса для этого пользователя в файле паролей, если не используется значение по умолчанию (при помощи chpass mysqld-user-name). See section 4.7.2 safe_mysqld, оболочка mysqld.
При наличии значительного объема оперативной памяти можно рассмотреть вариант перестройки ядра, чтобы разрешить MySQL использовать более чем 512Mб оперативной памяти. Чтобы получить больше информации, обратитесь к option MAXDSIZ в конфигурационном файле LINT.
В случае возникновения проблем с текущей датой в MySQL ситуацию может исправить правильная установка переменной TZ. See section F Переменные окружения.
Для получения безопасной и устойчивой системы следует использовать только те ядра системы FreeBSD, которые обозначены как -RELEASE.
Примечания к NetBSD
Для компиляции на NetBSD необходимо, чтобы была установлена программа GNU make. В противном случае компиляция завершится аварийно при попытке make
запустить lint на файлах C++.
с использованием собственных потоков. Необходимо
На OpenBSD версии 2.5 можно компилировать MySQL с использованием собственных потоков. Необходимо указать следующие опции:
CFLAGS=-pthread CXXFLAGS=-pthread ./configure -with-mit-threads=no
По сообщениям наших пользователей, OpenBSD
По сообщениям наших пользователей, OpenBSD 2.8 содержит ошибку в реализации потоков, которая вызывает проблемы с MySQL. Разработчики OpenBSD устранили эту ошибку, но к 25 января 2001 года исправленная версия доступна только в ветви ``-current''. Симптомы этой ошибки реализации потоков следующие: медленный ответ, высокая загрузка, большая загрузка процессора и аварийная остановка программы.
Получение сообщения об ошибке вроде Error in accept:: Bad file descriptor или ошибки 9 при попытке открыть таблицу либо каталог означает, что вы не заказали достаточно дескрипторов файлов для MySQL.
В этом случае попробуйте запустить safe_mysqld от имени пользователя root
с опциями:
--user=mysql --open-files-limit=2048
Примечания к BSD/OS версий 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 (see section F Переменные окружения).
Примечания к BSD/OS версий 3.x
Для конфигурирования 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
При желании вы можете изменить местоположение каталогов или использовать значения по умолчанию, не определяя никаких путей.
Если возникнут проблемы с производительностью при большой нагрузке, попробуйте при запуске mysqld использовать опцию --skip-thread-priority! Применение данной опции приведет к тому, что все потоки будут работать с одинаковым приоритетом; на BSDI версии 3.1 это обеспечивало повышение производительности (по крайней мере, пока не был исправлен планировщик потоков).
В случае получения сообщения об ошибке virtual memory exhausted во время компиляции попробуйте выполнить ulimit -v 80000 и запустить make повторно. Если это не поможет, а в качестве оболочки у вас используется bash, попробуйте перейти на csh или sh: некоторые пользователи BSDI сообщали о проблемах с bash и ulimit.
Примечания к BSD/OS версий 4.x
BSDI версий 4.x содержит ошибку, имеющую отношение к потокам. Если вы планируете использовать MySQL на этой системе, необходимо предварительно установить все патчи, относящиеся к реализации потоков. По крайней мере, должен быть установлен M400-023.
На некоторых системах BSDI версий 4.x вы можете столкнуться с проблемами при использовании динамических библиотек. Проявляется это как невозможность выполнить какую-либо клиентскую программу, например mysqladmin. В данном случае необходимо переконфигурировать MySQL с запретом использовать динамические библиотеки, указав для скрипта configure опцию --disable-shared.
Некоторые пользователи сообщали нам о проблемах на BSDI 4.0.1, которые проявляются в том, что через некоторое время после начала работы mysqld не может открыть таблицы. Это происходит потому, что из-за какой-то системной или библиотечной ошибки mysqld изменяет текущий каталог без какого-либо запроса!
Для решения проблемы необходимо либо обновить MySQL до версии 3.23.34, либо после запуска configure удалить строку #define HAVE_REALPATH из файла `config.h' перед запуском make.
Отметим, что вышеописанные действия приведут к невозможности создать символическую ссылку из одних каталогов базы данных на другой каталог базы данных или символическую ссылку на таблицу в другой базе данных на BSDI! (Создание символической ссылки на другой диск допускается.)
Примечания к BSD
В этом разделе находится информация относительно различных BSD-систем, а также конкретных версий этих систем.
Mac OS X 10.x
На Mac OS X 10.x MySQL должен работать без каких-либо проблем. Для этой операционной системы нет необходимости в патчах к pthread!
Это также касается Mac OS X 10.x Server. Компиляция для серверной платформы ничем не отличается от компиляции для клиентской версии. Однако учтите, что Mac OS X Server поставляется с предустановленным MySQL.
See section 2.1.3 Установка MySQL на MacOS X.
Mac OS X Server 1.2 (Rhapsody)
Прежде чем попытаться отконфигурировать MySQL на сервере Mac OS X, необходимо установить пакет pthread, который находится по адресу http://www.prnet.de/RegEx/mysql.html.
Наши бинарные файлы для Mac OS X компилируются на Rhapsody 6.3 со следующими конфигурационными параметрами:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --disable-shared
Возможно, вам понадобится добавить псевдонимы в файл ресурсов оболочки - для доступа к mysql и mysqladmin из командной строки:
alias mysql '/usr/local/mysql/bin/mysql' alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
Или же вы можете просто добавить путь /usr/local/mysql/bin к переменной окружения PATH, скажем, путем добавления в файл `$HOME/.tcshrc':
setenv PATH $PATH:/usr/local/bin
Примечания к бинарному дистрибутиву HP-UX
Некоторые бинарные поставки MySQL для HP-UX распространяются как файлы HP depot и tar. Для использования файла depot у вас должна быть установлена версия HP-UX не выше 10.x - для того, чтобы обеспечить возможность работы с HP-инструментарием работы с depot-файлами.
Версия MySQL для HP была скомпилирована на сервере HP 9000/8xx в системе HP-UX 10.20 с использованием MIT-pthreads. Известно, что она хорошо работает в этой конфигурации. MySQL версии 3.22.26 и выше можно также собрать с использованием собственных потоков HP.
Другие конфигурации, на которых возможна работа MySQL:
HP 9000/7xx running HP-UX 10.20+
HP 9000/8xx running HP-UX 10.30
На следующих конфигурациях MySQL, скорее всего, работать не будет:
HP 9000/7xx or 8xx running HP-UX 10.x where x < 2
HP 9000/7xx or 8xx running HP-UX 9.x
Для установки дистрибутива используйте одну из представленных ниже команд; здесь /path/to/depot - полный путь к 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
depot помещает бинарные исполняемые файлы и библиотеки в `/opt/mysql', а данные - в `/var/opt/mysql'. depot также создает соответствующие строки в `/etc/init.d' и `/etc/rc2.d' для автоматического запуска сервера при загрузке машины. Очевидно, что для установки необходимо обладать правами пользователя root.
Для установки на HP-UX дистрибутива tar.gz на машине должен быть установлен GNU tar.
UX существует пара небольших проблем.
При компиляции MySQL на HP- UX существует пара небольших проблем. Мы рекомендуем применять вместо собственного компилятора HP-UX gcc, потому что код, созданный gcc, лучше!
Для HP-UX рекомендуется использование gcc 2.95. Не следует применять высокие уровни оптимизации (наподобие -O6), поскольку на HP-UX это может быть небезопасно.
Должна работать следующая строка конфигурации для gcc 2.95:
CFLAGS="-DHPUX -I/opt/dce/include -fpic" \ 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 3.1:
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \ CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --with-pthread \ --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
Примечания к HP-UX версий 11.x
Для HP-UX версий 11.x мы рекомендуем использовать MySQL не ниже 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 в системе, к которой не были применены патчи, возникнет ошибка:
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'. Ниже приведен результат работы diff:
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
Если вы используете MySQL 4.0.5 с компилятором HP-UX, то вам подойдет (проверено на cc B.11.11.04):
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --with-extra-character-set=complex
Вы можете игнорировать ошибки, подобные этой:
aCC: warning 901: unknown option: `-3': use +help for online documentation
При получении следующего сообщения об ошибке при работе 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++.
Еще одна причина, по которой вы не сможете скомпилировать MySQL, заключается в том, что вы забыли указать флаг +DD64, описанный выше.
Примечания к IBM-AIX
В Autoconf пропущено автоматическое определение xlC, поэтому при компиляции MySQL следует задавать команду 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 LDFLAGS="-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.
Для использования 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 в соответствие со своим процессором. Обычно достаточно использовать power2, power или powerpc, но, возможно, необходимо будет указать 604 или 604e. Хотя это и не приветствуется, но использование "power" будет безопасным почти всегда, даже на power2-машинах.
Если вы не знаете, какой у вас процессор, следует запустить uname -m. Данная команда возвращает строку наподобие "000514676700", формат которой xxyyyyyymmss, где xx и ss всегда 0, yyyyyy - уникальный идентификатор системы и mm - идентификатор процессора Planar. Карта этих значений находится по адресу http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm.
В соответствии с данной картой можно узнать тип и модель машины, а уже по ним -определить тип процессора.
Возникновение проблем с сигналами (MySQL неожиданно умирает при большой нагрузке) может означать, что вы столкнулись с ошибкой операционной системы в работе с потоками и сигналами. В этом случае можно запретить 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 вызывает аварийную остановку программы с сохранением образа памяти на диск (core dump). Это ошибка 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
Если вам нужно выделить много памяти процессу mysqld, недостаточно указать ulimit -d unlimited. Вам также потребуется в mysqld_safe установить что-то вроде:
export LDR_CNTRL='MAXDATA=0x80000000'
Больше информации об использовании большого количества памяти - здесь: http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm.
для компиляции MySQL необходимо
На SunOS 4 для компиляции MySQL необходимо использовать MIT-pthreads, что, в свою очередь, влечет за собой необходимость в GNU make.
На некоторых SunOS 4 возникают проблемы с динамическими библиотеками и libtool. Во избежание этих проблем можно использовать приведенную ниже строку configure:
shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static
При компиляции readline могут выдаваться предупреждения о дублирующихся определениях. На них можно не обращать внимания.
При компиляции mysqld возникают предупреждения об implicit declaration of function. На них также можно не обращать внимания.
При использовании egcs на 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 вместо вас (see section 4.7.2 safe_mysqld, оболочка mysqld).
Если вы столкнулись с проблемами компиляции `mysys/get_opt.c', следует просто удалить строку #define _NO_PROTO в начале этого файла!
Для компилятора CC от Compaq используйте следующий код:
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 \ -noexceptions -nortti" 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
В случае проблем компиляции при
В случае проблем компиляции при установленных 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/.
При использовании OSF/1 4.0D и компилятора DEC C V5.6-071 на 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-компилятором "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"
В некоторых версиях OSF/1 испорчена функция 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 неожиданно аварийно завершает работу при большой нагрузке), может означать, что вы обнаружили ошибку при работе операционной системы с потоками и сигналами. В данном случае можно запретить 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 повторно.
Примечания к SGI Irix
При использовании Irix 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.
Вам следует, как минимум, установить последние обновления (rollup) ядра, последние обновления rld и последние обновления libc.
Для поддержки pthreads обязательно следует установить все патчи POSIX со страницы:
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
Мы получали также сообщения о проблемах управления. Если выполняется только один поток, то работа идет очень медленно. Однако если запустить еще одну программу-клиент, то можно получить ускорение в несколько раз (от двукратного до десятикратного соответственно) и для других потоков. Причины описанной проблемы с потоками в 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++ компиляторами версии 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-innodb --with-berkeley-db \ --with-libwrap=/usr/local \ --with-named-curses-libs=/usr/local/lib/libncurses.a
Примечания к Caldera (SCO)
В настоящее время пакет тестировался только на системах ``sco3.2v5.0.4'' и ``sco3.2v5.0.5''. Заметный прогресс отмечается в отношении пакета на ``sco3.2v4.2''.
В настоящее время в качестве компилятора под OpenServer мы рекомендуем gcc 2.95.2. Используя его, можно скомпилировать MySQL при помощи следующей строки:
CC=gcc CXX=gcc ./configure ... (опции)
На OpenServer 5.0.X необходимо использовать gcc-2.95.2p1 или более свежую версию от Skunkware - http://www.caldera.com/skunkware/ и выбрать пакет для OpenServer или получить его по ftp по адресу ftp2.caldera.com в каталоге pub/skunkware/osr5/devtools/gcc.
Следует использовать портированную версию GCC 2.5.x для этого продукта и систему Development. Они необходимы для данной версии Caldera (SCO) Unix. Использовать просто систему GCC Dev нельзя.
Необходимо загрузить пакет 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.
FSU Pthreads могут быть скомпилированы на Caldera (SCO) Unix 4.2 c tcpip. На OpenServer 3.0 или Open Desktop 3.0 (OS 3.0 ODT 3.0) с использованием Caldera (SCO) Development System вам понадобится хороший пакет GCC 2.5.x ODT или OS 3.0. Однако при отсутствии хорошо портированной версии возникнет масса проблем. Для портирования этой программы требуется система SCO Unix Development. Без нее у вас не будет необходимых библиотек и редактора связей.
Для сборки FSU Pthreads в своей системе нужно выполнить следующие действия:
Запустите ./configure в каталоге threads/src и выберите опцию SCO OpenServer. Эта команда скопирует Makefile.SCO5 в Makefile.
Запустите make.
Для установки в каталог по умолчанию - `/usr/include' войдите в систему с правами пользователя root, перейдите в каталог thread/src и запустите make install.
Не забудьте использовать GNU make при сборке MySQL.
При запуске safe_mysqld не с правами пользователя root вы получите разрешение открывать одновременно только 110 файлов на процесс (это значение установлено по умолчанию). mysqld сообщит об этом в файле протокола.
На SCO 3.2V5.0. 5 вы должны использовать FSU Pthreads версии 3.5c или выше, а также gcc 2.95.2 или более новую версию! Приведенная ниже команда configure должна выполняться корректно:
shell> ./configure --prefix=/usr/local/mysql --disable-shared
На SCO 3.2V4.2 следует использовать FSU Pthreads версии 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. Этот архив следует распаковать в каталог дерева исходных текстов MySQL с именем include
Замечания по разработке под Caldera (SCO):
MySQL должен автоматически обнаруживать FSU Pthreads и линковать mysqld
с использованием -lgthreads -lsocket -lgthreads.
Библиотеки разработки в Caldera (SCO) реентрантны в FSU Pthreads. Специалисты Caldera утверждают, что библиотечные функции Caldera реентрантны, поэтому они должны быть реентрантны с FSU Pthreads. FSU Pthreads на OpenServer пытаются использовать SCO-схему, чтобы создать реентрантные библиотеки.
FSU Pthreads (по крайней мере версия на http://www.mysql.com/) поставляется как линкованная с GNU malloc. При возникновении проблем с использованием памяти, убедитесь, что `gmalloc.o' включен в `libgthreads.a' и `libgthreads.so'.
В FSU Pthreads используют pthread следующие системные вызовы: read(), write(), getmsg(), connect(), accept(), select(), and wait().
CSSA-2001-SCO.35.2 (в списках заказов патч упоминается как патч по системе безопасности erg711905-dscr_remap) (версия 2.0.0) портит FSU-потоки и вызывает неустойчивую работу mysqld. Если вы собираетесь запускать mysqld на машине с установленным OpenServer 5.0.6, этот патч применять не следует.
Если необходимо установить DBI на Caldera (SCO), следует отредактировать Makefile в DBI-xxx и каждом подкаталоге.
Для приведенного ниже кода подразумевается использование gcc 2.95.2 или более новой версии:
СТАРЫЙ: НОВЫЙ: 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
НОВЫЙ: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
Это вызвано тем, что dynaloader из Perl не загружает DBI-модулей, если они скомпилированы компиляторами icc или cc.
Perl будет работать лучше, если его скомпилировать компилятором cc.
Вы должны использовать MySQL версий
Вы должны использовать MySQL версий не ниже 3.22.13, поскольку в этой версии исправлены некоторые проблемы, связанные с переносимостью под Unixware.
Нам удалось скомпилировать MySQL следующей командой configure на Unixware версии 7.0.1:
CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
Если вы хотите использовать gcc, необходимо использовать gcc версии 2.95.2 или новее.
Caldera поставляет libsocket.so.2 с ftp://stage.caldera.com/pub/security/tools для исправлений безопасности в более ранних, чем OSR506, системах. Кроме того, исправление telnetd на ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/ предназначено и для libsocket.so.2, и для libresolv.so.1. Там же находятся инструкции для установки на более ранние, чем OSR506, системы.
Устанавливать вышеупомянутые патчи лучше до попытки компиляции/использования MySQL.
В MySQL используется достаточно много
В MySQL используется достаточно много открытых файлов. Поэтому в свой файл `CONFIG.SYS' вам нужно добавить код вроде приведенного ниже:
SET EMXOPT=-c -n -h1024
В противном случае вы можете столкнуться со следующей ошибкой:
File 'xxxx' not found (Errcode: 24)
При использовании MySQL с 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.
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'; скрипт s`afe-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";
Примечания к BeOS
Мы заинтересованы в том, чтобы MySQL работал в BeOS, но, к сожалению, среди нас нет никого, кто знал бы BeOS или обладал временем для создания портированной версии.
Если найдутся желающие создать портированную версию, то мы готовы оказать им помощь в решении любых технических вопросов, которые могут возникнуть при создании портированной версии.
У нас было предварительное общение с некоторыми разработчиками BeOS, утверждавших, что на 80% создана портированная версия MySQL под BeOS, однако уже на протяжении длительного времени мы не получали от них никаких известий.
Примечания к Novell NetWare
Мы заинтересованы в том, чтобы MySQL работал на Novell NetWare, но, к сожалению, среди нас нет никого, кто достаточно хорошо разбирался бы в NetWare или обладал временем для создания портированной версии.
Мы хотели бы найти желающих создать портированную версию и готовы помочь им в решении любых технических вопросов, которые могут возникнуть при работе над ней.
Установка Perl на Unix
Поддержка Perl для MySQL обеспечивается средствами клиентского интерфейса DBI/DBD. See section 8.2 Интерфейс Perl API для MySQL. Для клиентского кода Perl DBD/DBI
требуется версия Perl 5.004 или выше. При использовании более старой версии Perl данный интерфейс не будет работать.
Для поддержки Perl в MySQL также требуется, чтобы была установлена программная поддержка клиентов MySQL. Если вы установили MySQL из файлов RPM, то клиентские программы находятся в RPM-пакете MySQL-client, а их программная поддержка - в RPM-пакете MySQL-devel. Убедитесь, что у вас установлена последняя версия RPM.
С версии 3.22.8 поддержка Perl поставляется отдельно от основного дистрибутива MySQL. Если вы хотите установить поддержку Perl, то необходимые файлы можно получить с http://www.mysql.com/downloads/api-dbi.html.
Дистрибутивы Perl поставляются как сжатые tar-архивы с именами наподобие `MODULE-VERSION.tar.gz', где MODULE - имя модуля и VERSION
- номер версии. Необходимо взять дистрибутивы Data-Dumper, DBI и Msql-Mysql-modules и установить их в указанном порядке. Процедура установки приведена ниже. Показанный пример приведен для модуля Data-Dumper, но сама процедура одинакова для всех трех дистрибутивов:
Распакуйте дистрибутив в текущем каталоге:
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
Эта команда создает каталог с именем `Data-Dumper-VERSION'.
Перейдите в каталог, куда распаковался дистрибутив:
shell> cd Data-Dumper-VERSION
Соберите дистрибутив и скомпилируйте:
shell> perl Makefile.PL shell> make shell> make test shell> make install
Команда make test является важной, поскольку она проверяет, работает ли модуль. Следует учитывать, что если эта команда выполняется во время установки Msql-Mysql-modules для проверки кода интерфейса, то сервер MySQL при этом должен работать, или же данный тест потерпит неудачу.
Каждый раз при установке нового выпуска MySQL полезно создать заново и переустановить дистрибутив Msql-Mysql-modules, особенно если замечаются такие симптомы, как смерть скриптов DBI после модернизации MySQL (имеется в виду coredump).
Если вы не обладаете правами установки модулей Perl в системном каталоге или локальных модулей Perl, то для вас окажется полезной следующая ссылка:
http://www.iserver.com/support/contrib/perl5/modules.html
Следует смотреть в рубрике Installing New Modules that Require Locally Installed Modules.
Установка ActiveState Perl на Windows
Для установки модуля DBD для MySQL под ActiveState Perl на Windows необходимо выполнить следующие действия:
Получить ActiveState Perl с http://www.activestate.com/Products/ActivePerl/ и установить его.
Открыть оболочку DOS.
Если это необходимо, то установить переменную HTTP_proxy. Например, можно попытаться сделать следующее:
set HTTP_proxy=my.proxy.com:3128
Запустить программу PPM:
C:\> c:\perl\bin\ppm.pl
Установить DBI, если этого еще не сделано:
ppm> install DBI
Если все прошло успешно, то запустить следующую команду:
install \ ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
Эти команды должны работать по крайней мере с версией ActiveState Perl 5.6.
Если приведенные выше команды у вас не работают, то вместо этого необходимо установить драйвер MyODBC и подключить сервер MySQL через ODBC:
use DBI; $dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") || die "Got error $DBI::errstr when connecting to $dsn\n";
Установка дистрибутива Perl для MySQL на Windows
Дистрибутив Perl для MySQL содержит DBI, DBD:MySQL и DBD:ODBC.
Загрузите дистрибутив Perl для Windows с http://www.mysql.com/downloads/os-win32.html.
Разархивируйте дистрибутив в C:, в результате чего вы получите каталог `C:\PERL'.
Добавьте в ваш путь каталог `C:\PERL\BIN'.
Добавьте в ваш путь каталог `C:\PERL\BIN\MSWIN32-x86-thread' или `C:\PERL\BIN\MSWIN32-x86'.
Протестируйте работу perl, выполнив команду perl -v в оболочке DOS.
Проблемы использования интерфейса Perl DBI/DBD
Если Perl сообщает, что не может найти модуль `../mysql/mysql.so', то проблема, возможно, заключается в том, что Perl не может найти динамическую библиотеку `libmysqlclient.so'.
Эту проблему можно устранить, используя любой из следующих методов:
Для сборки дистрибутива Msql-Mysql-modules используйте perl Makefile.PL -static -config вместо perl Makefile.PL.
Скопируйте `libmysqlclient.so' в каталог, где находятся другие динамические библиотеки (`/usr/lib' или `/lib').
Под Linux можно добавить путь к каталогу, где находится `libmysqlclient.so' в файл `/etc/ld.so.conf'.
Добавьте каталог, в котором находится `libmysqlclient.so', в переменную окружения LD_RUN_PATH.
Если вы получаете от DBD-mysql представленные ниже ошибки, то, скорее всего, у вас используется компилятор gcc (или старый бинарный код, скомпилированный с gcc):
/usr/bin/perl: can't resolve symbol '__moddi3' /usr/bin/perl: can't resolve symbol '__divdi3'
Добавьте в команду линкования при сборке библиотеки `mysql.so', -L/usr/lib/gcc-lib/... -lgcc (нужно проверить вывод из make для `mysql.so' при компиляции клиента Perl). Опция -L должна указывать путь к каталогу, где находится `libgcc.a' в вашей системе.
Еще одна причина появления ошибок может заключаться в том, что оба модуля - Perl и MySQL не скомпилированы вместе компилятором gcc. В этом случае данное несоответствие можно устранить, скомпилировав оба модуля компилятором gcc.
Если при выполнении тестов вы получаете от модуля Msql-Mysql-modules следующие ошибки:
t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169,
то это означает, что в строку линкования необходимо включить библиотеку сжатия -lz. Для этого необходимо внести следующее изменение в файл `lib/DBD/mysql/Install.pm':
$sysliblist .= " -lm";
на
$sysliblist .= " -lm -lz";
После этого необходимо выполнить команду make realclean и затем повторить процесс инсталляции сначала.
Если вы хотите использовать эти модули в системе, которая не поддерживает динамического линкования (вроде Caldera/SCO), то можно сгенерировать статическую версию Perl, включающую DBI и DBD-mysql. Она будет работать следующим образом: нужно создать версию Perl, слинкованную с кодом DBI, и установить ее поверх текущего Perl. Затем эта версия используется для сборки версии Perl, которая дополнительно включает слинкованный код DBD, и
устанавливается уже она.
В операционной системе Caldera (SCO) необходимо иметь следующий набор переменных окружения:
shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib или shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\ /usr/skunk/man:
Вначале следует создать модуль Perl, включающий статически слинкованный DBI. Это делается путем выполнения следующих команд в каталоге, где располагается дистрибутив DBI:
shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl
Затем необходимо установить новый модуль Perl. Вывод команды make perl укажет точную команду make, которую необходимо будет выполнить для завершения установки. Для Caldera (SCO) это будет команда make -f Makefile.aperl inst_perl MAP_TARGET=perl.
Затем нужно использовать только что созданный модуль Perl для создания еще одного модуля Perl, который также включает в себя статически слинкованный модуль DBD::mysql. Это делается путем выполнения следующих команд в каталоге, где располагается дистрибутив Msql-Mysql-modules:
shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl
И в завершение осталось установить этот новый модуль Perl. Какую команду для этого использовать, вы опять узнаете из вывода make perl.