| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-staticДругими словами, полная строка конфигурации для всех последних версий gcc должна быть подобна приведенной ниже: CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti" ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-staticВсе бинарные коды, которые мы поставляем с веб-сайта MySQL на http://www.mysql.com/, компилируются с максимальной оптимизацией и должны быть идеальными для большинства пользователей (see section 2.2.9 Бинарные коды MySQL, скомпилированные в MySQL AB). Существуют некоторые настройки, позволяющие сделать бинарный код даже еще быстрее, но их могут выполнять только опытные пользователи (see section 5.5.3 Как компиляция и линкование влияет на скорость MySQL). Если создать код не удается и при этом выдаются ошибки с указанием на компилятор или если компоновщик не в состоянии создать совместную библиотеку `libmysqlclient.so.#' (`#' представляет собой номер версии), то эту проблему можно обойти путем добавления к configure опции
--disable-shared . В этом случае configure не будет создавать совместную
библиотеку `libmysqlclient.so.#'.
DEFAULT на столбцах не-NULL (т.е. на столбцах, которые не
могут принимать значение NULL ). При указании этой опции команды INSERT
будут генерировать ошибку в случае, если явно не указаны величины для
всех столбцов, которые не могут принимать значение NULL . Чтобы
запретить использование величин по умолчанию, запустите configure , как
показано ниже:
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure --with-charset :
shell> ./configure --with-charset=CHARSET CHARSET может принимать одно из следующих значений: big5 , cp1251 ,
cp1257 , czech , danish , dec8 , dos , euc_kr , gb2312 , gbk , german1 , hebrew ,
hp8 , hungarian , koi8_ru , koi8_ukr , latin1 , latin2 , sjis , swe7 , tis620 ,
ujis , usa7 или win1251ukr (see section 4.6.1 Набор символов, применяющийся для записи данных и сортировки). Если требуется преобразовывать символы между сервером и
клиентом, следует рассмотреть команду SET CHARACTER SET (see section 5.5.6 Синтаксис команды SET ).
Предупреждение: если набор символов изменяется после создания
таблиц, необходимо запустить myisamchk -r -q --set-characted-set=charset на каждой таблице. В
противном случае индексы могут сортироваться неправильно (такое может
случиться, если вы установите MySQL, создадите ряд таблиц, затем
переконфигурируете MySQL с целью использования другого набора символов и
заново установите MySQL).
С помощью опции --with-extra-charsets=LIST можно
определить, какие дополнительные кодировки необходимо скомпилировать в
данном сервере.
Здесь LIST либо представляет собой разделенный пробелами
список кодировок, либо имеет значение complex для включения всех символов,
которые не могут быть загружены динамически, либо имеет значение all для
включения всех кодировок в бинарники.
--with-debug :
shell> ./configure --with-debugЗадание этой опции вызывает подключение надежного распределителя памяти, который может найти некоторые ошибки и обеспечить вывод информации о том, что происходит (see section D.1 Отладка сервера MySQL). --enable-thread-safe-client . При указании
этой опции будет создана библиотека libmysqlclient_r , с которой
следует линковать потоковые приложения (see section 8.4.8 Как создать клиентскую программу с потоками).
2.3.4 Установка из экспериментального набора исходных кодовПредупреждение: этот раздел необходимо читать только в том случае, если вы хотите помочь нам в тестировании нового кода. Пользователи, которые просто хотят установить MySQL и запустить его на своей системе, должны использовать стандартную версию дистрибутива (либо исходный код, либо бинарный дистрибутив). Чтобы получить самый последний из разработанных наборов исходных кодов, используйте следующие инструкции:
Вы также можете просматривать изменения, комментарии и исходный код в онлайн, например, по адресу http://mysql.bkbits.net:8080/mysql-4.1 для MySQL 4.1. Руководство находится в отдельном дереве, которое можно клонировать так: shell> bk clone bk://mysql.bkbits.net/mysqldoc mysqldoc 2.3.5 Проблемы с компиляцией?
На Solaris или Linux с использованием компилятора Решение многих проблем предполагает выполнение переконфигурирования. В случаях, когда переконфигурирование действительно необходимо, следует учитывать следующее:
2.3.6 Замечания по потокам MIT-pthreadsВ этом разделе описываются некоторые аспекты использования потоков MIT-pthreads. Следует иметь в виду, что под Linux использовать потоки MIT-pthreads нельзя, для этого необходимо установить LinuxThreads! See section 2.6.1 Примечания к Linux (Все версии Linux). Если ваша система сама по себе не обеспечивает поддержку потоков, то необходимо скомпоновать MySQL, используя пакет поддержки MIT-pthreads. К таким системам относятся старые системы FreeBSD, SunOS 4.x, Solaris 2.4 и более ранние, а также некоторые другие (see section 2.2.5 Операционные системы, поддерживаемые MySQL). Заметьте, с версии MySQL 4.0.2 потоки MIT более не присутствуют в поставке исходных текстов. Если вам действительно нужен этот пакет, вы можете его забрать с http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz
После загрузки, распакуйте этот архив в каталог исходных текстов MySQL.
Создастся новый каталог
2.3.7 Дистрибутив исходного кода для WindowsВам потребуются следующие средства:
Сборка MySQL
2.4 Послеустановочные настройка и тестированиеПосле установки MySQL (из бинарного дистрибутива или исходного кода) необходимо проинициализировать таблицы привилегий, запустить сервер и убедиться, что сервер работает нормально. Можно также организовать автоматический запуск и остановку сервера, когда операционная система соответственно начинает и прекращает работу. Обычно при установке из исходного кода для установки таблиц привилегий и запуска сервера нужно выполнить следующие команды: shell> ./scripts/mysql_install_db shell> cd mysql_installation_directory shell> ./bin/safe_mysqld --user=mysql & Для бинарного дистрибутива (но не для пакетов RPM или pkg) сделайте так: shell> cd mysql_installation_directory shell> ./scripts/mysql_install_db shell> ./bin/safe_mysqld --user=mysql & или shell> ./bin/mysqld_safe --user=mysql & Если вы используете MySQL 4.x.
Эти операции создают базу данных
Тестирование проще всего выполнить из каталога наивысшего уровня дистрибутива MySQL. Для бинарного дистрибутива таковым является ваш каталог инсталляции (обычно что-нибудь вроде `/usr/local/mysql'). Для дистрибутива в виде исходного кода это - главный каталог вашего набора исходных кодов MySQL.
В командах, представленных в настоящем разделе и последующих подразделах,
Подробное описание тестирования:
2.4.1 Проблемы при запуске
|
Скрипт | Группы опций |
mysqld | mysqld и server
|
mysql.server | mysql.server , mysqld , и server
|
safe_mysqld | mysql.server , mysqld , и server
|
See section 4.1.2 Файлы параметров `my.cnf'.
Файлы MySQL, содержащие структуру и данные, всегда можно перемещать между
различными версиями одной и той же архитектуры, если используется одна и
та же базовая версия MySQL. В настоящее время базовой является версия с
номером 3. При изменении кодировки во время работы MySQL (при этом также
может измениться порядок сортировки) необходимо запустить myisamchk -r -q --set-character-set=charset
на всех таблицах. В противном случае индексы могут сортироваться
неправильно.
В случае недоверия к новым версиям всегда можно переименовать старую
версию mysqld
, изменив ее имя на что-нибудь вроде
mysqld-old-version-number
. Если после этого mysqld
новой версии начнет
вести себя не так, как ожидалось, то можно просто прекратить работу новой
версии и перезапустить старую!
И, разумеется, при модернизации следует также сделать резервную копию старых баз данных.
После модернизации у вас могут возникнуть проблемы с перекомпилированными
клиентскими программами, такими как Commands out of sync
, или произойти
неожиданная смерть приложения (coredump). Причина может быть в том, что
при компиляции программ были использованы старые заголовочные или
библиотечные файлы. В этом случае следует проверить даты создания вашего
файла `mysql.h' и библиотеки `libmysqlclient.a', чтобы убедиться, что они
из нового дистрибутива MySQL. Если это не так, то программы нужно
перекомпилировать!
Если возникнут проблемы с запуском нового сервера mysqld
или трудности с
подключением без пароля, то нужно убедиться, что вы не используете старый
файл `my.cnf' из старой установки! Это можно проверить с помощью
program-name --print-defaults
. Если эта программа вместо имени программы
выводит что-нибудь иное, то ваш файл `my.cnf' является активным и
оказывает влияние на ход событий!
Каждый раз при установке нового релиза MySQL есть смысл создавать наново и
переустанавливать дистрибутив Msql-Mysql-modules
, особенно если вы
замечаете симптомы того, что ваши скрипты DBI
умирают после модернизации
MySQL.
В общем случае, чтобы выполнить апгрейд до версии 4.1 с более ранней:
mysql_fix_privilege_tables
для создания новых столбцов с паролями. Это нужно для более безопасной работы
с паролями.
Далее идет более подробный список вещей, на которые следует обратить внимание при апгрейде на 4.1:
mysql> SELECT cast("2001-1-1" as DATE) -> '2001-01-01'
SHOW CREATE TABLE
и mysqldump
.
(MySQL 4.0.6 и выше могут читать новые dump-файлы, но не прежние версии MySQL).
'YYYY-MM-DD HH:MM:DD'
.
Если вы хотите получить ее как число - вам следует добавить +0
к столбцу timestamp
.
Различные длины временных меток теперь не поддерживаются.
--shared_memory_base_name
.
Обратите внимание что формат определения таблиц (.frm) поменялся в 4.1. MySQL 4.0.11 может
читать новый файл формата, но более старые версии не могут. Если вам нужно перемещать таблицы с 4.1
на более старшие версии MySQL, вам следует использовать mysqldump
. See section 4.8.5 mysqldump
, Получение дампов данных и структуры таблицы.
В общем случае, вот что вам следует сделать для апгрейда к версии 4.0 с более старой:
mysql_fix_privilege_tables
чтобы добавить новые
привилегии и возможности в таблицы привилегий MySQL.
mysql_convert_table_format база данных
.
Обратите внимание, это нужно делать только если все таблицы в базе данных
являются таблицами типа ISAM или MyISAM. Если это не тот случай, вам тогда
следует выполнить ALTER TABLE имя_таблицы TYPE=MyISAM
для всех
ISAM-таблиц.
MySQL 4.0 будет работать, даже если вы не выполните эти шагы, но у вас не будет возможности использовать новые привилегии, которые предоставляет MySQL 4.0, и у вас могут быть проблемы при дальнейшем апгрейде к 4.1 или более новым серверам. Формат ISAM в MySQL 4.0 все еще работает, но он уже морально устарел и будет исключен из версии MySQL 5.0.
Старые клиенты должны работать с версией 4.0 без каких-либо проблем.
И даже если вы выполните эти шаги, вы сможете произвести даунгрейд к MySQL 3.23.52 или более новой, если у вас возникнут проблемы с MySQL 4.0. В этом случае вам потребуется выполнить mysqldump на всех таблицах, использующих полнотекстовые индексы и восстановить dump на версии 3.23. Причина заключается в том, что MySQL 4.0 использует новый формат полнотекстовых индексов.
Вот подробный список того, на что следует обратить внимание при апгрейде к 4.0:
mysql.user
. See section 4.3.1 Синтаксис команд GRANT
и REVOKE
.
Чтобы заставить эти
новые привилегии работать, следует запустить скрипт
mysql_fix_privilege_tables
. До выполнения данного скрипта у всех
пользователей будут привилегии SHOW DATABASES
, CREATE TEMPORARY TABLES
и LOCK TABLES
. Значения для привилегий SUPER
и EXECUTE
берутся
из PROCESS
, для REPLICATION SLAVE
и REPLICATION CLIENT
- из FILE
.
Чтобы скрипты, создающие новых пользователей, могли использовать новые
привилегии, их нужно модифицировать. Если в этих скриптах не
используется команда GRANT
, то сейчас самое время изменить их.
В версии
4.0.2 опция --safe-show-database
устарела и не рекомендуется (и она
больше ничего не делает). See section 4.2.3 Опции запуска mysqld
, относящиеся к безопасности.
Если в версии 4.0.2 для новых пользователей
возникают ошибки отказа в доступе, то следует проверить, не требуются
ли вам некоторые новые привилегии, которые не были нужны раньше. В
частности, для новых репликаций понадобится REPLICATION SLAVE
(вместо
FILE
).
myisam_max_extra_sort_file_size
и
myisam_max_extra_sort_file_size
теперь указываются в байтах (до 4.0.3
указывались в мегабайтах).
Внешняя блокировка файлов MyISAM/ISAM теперь выключена по умолчанию. Можно
включить ее обратно опцией --external-locking
. Для большинства
пользователей этого никогда не потребуется делать.
Из | В. |
myisam_bulk_insert_tree_size | bulk_insert_buffer_size
|
query_cache_startup_type | query_cache_type
|
record_buffer | read_buffer_size
|
record_rnd_buffer | read_rnd_buffer_size
|
sort_buffer | sort_buffer_size
|
warnings | log-warnings
|
err-log | --log-error (для mysqld_safe )
|
record_buffer
, sort_buffer
и warnings
все
еще работают в MySQL 4.0, но считаются уже морально устаревшими.
Из | В. |
SQL_BIG_TABLES | BIG_TABLES
|
SQL_LOW_PRIORITY_UPDATES | LOW_PRIORITY_UPDATES
|
SQL_MAX_JOIN_SIZE | MAX_JOIN_SIZE
|
QUERY_CACHE_TYPE | QUERY_CACHE_TYPE
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=#
вместо
SET SQL_SLAVE_SKIP_COUNTER=#
.
mysqld
--skip-locking
в
--skip-external-locking
и --enable-locking
в
--external-locking
.
SHOW MASTER STATUS
теперь возвращает пустой результат если двоичный журнал обновлений
не включен.
SHOW SLAVE STATUS
возвращает пустой результат если подчиненный сервер не инициализирован.
--temp-pool
включенной по умолчанию, т.к. это
дает лучшую производительность на некоторых ОС (в основном, на Linux).
DOUBLE
и FLOAT
теперь учитывают флаг
UNSIGNED
при хранении (раньше UNSIGNED
игнорировался для этих столбцов).
ORDER BY столбец DESC
теперь сортирует величины NULL
в первую очередь; в 3.23 это было не всегда так. Внимание: в MySQL 4.0.11 восстановлено
оригинальное поведение.
SHOW INDEX
имеет на 2 столбца больше (Null
и Index_type
), чем в версии
3.23.
CHECK
, SIGNED
, LOCALTIME
и LOCALTIMESTAMP
теперь являются зарезервированными словами.
|
, &
, <<
, >>
и ~
сейчас
является беззнаковым. Это может вызвать проблемы при использовании их
в контексте, где желателен результат со знаком. See section 6.3.5 Функции приведения типов.
UNSIGNED
, будет беззнаковым! Другими словами,
перед модернизацией до MySQL 4.0 вы должны проверить свои приложения
для случаев, где производится вычитание величины из беззнакового
объекта и предполагается ответ с отрицательным знаком, или вычитание
беззнаковой величины из целочисленного столбца. Данный режим можно
заблокировать, используя опцию --sql-mode=NO_UNSIGNED_SUBTRACTION
при
запуске mysqld
. See section 6.3.5 Функции приведения типов.
MATCH ... AGAINST (... IN BOOLEAN MODE)
на
таблицах, следует перестроить их заново при помощи REPAIR TABLE table_name USE_FRM
.
LOCATE()
и INSTR()
чувствительны к регистру, если один из аргументов
является двоичной строкой. В противном случае они не зависят от
регистра.
STRCMP()
при выполнении сравнений сейчас использует текущий набор
символов; это означает, что операция сравнения по умолчанию начиная с
данной версии является независимой от регистра.
HEX(string)
сейчас возвращает символы строки, преобразованные в
шестнадцатеричные. Если необходимо преобразовать число в
шестнадцатеричное представление, убедитесь, что HEX()
вызывается с
числовым аргументом.
INSERT INTO ... SELECT
параметр IGNORE
всегда
был разрешен. В версии 4.0.1 MySQL остановится (и, возможно,
произойдет откат) в случае ошибки, если IGNORE
не задан явно.
safe_mysqld
переименован в mysqld_safe
. Некоторое время
мы будем включать safe_mysqld
в дистрибутив как символическую ссылку на mysqld_safe
.
mysql_drop_db
, mysql_create_db
и mysql_connect
больше не будут поддерживаться, если вы не скомпилируете MySQL с
CFLAGS=-DUSE_OLD_FUNCTIONS
). Вместо перекомпиляции лучше пересобрать
клиента для использования нового 4.0 API.
MYSQL_FIELD
величины length
и max_length
изменены с
unsigned int
на unsigned long
. Это не должно вызывать проблем, за
исключением того, что при использовании величин с такими типами в
качестве аргументов в функциях класса printf()
могут генерироваться
предупреждающие сообщения.
TRUNCATE TABLE
при
(поскольку TRUNCATE TABLE
значительно быстрее, чем DELETE FROM
table_name
).
TRUNCATE TABLE
или DROP DATABASE
при наличии
активной команды LOCK TABLES
или транзакции вы получите ошибку.
BIGINT
необходимо использовать целые
числа (вместо строк, как было в MySQL 3.23). Возможность использования
строк для данного случая пока еще работает, но применение целых чисел
более эффективно.
SHOW OPEN TABLE
.
mysql_thread_init()
и
mysql_thread_end()
. See section 8.4.8 Как создать клиентскую программу с потоками.
DBD::mysql
необходимо
получить версию Msql-Mysql-modules
1.2218 или более новую, поскольку в
более старых модулях DBD
использовался не поддерживаемый вызов функции
drop_db()
.
RAND(seed)
возвращает иные последовательности случайных
чисел, чем в 3.23; это сделано для того, чтобы лучше различать
RAND(seed)
и RAND(seed+1)
.
IFNULL(A,B)
теперь по умолчанию
устанавливается более "общий" по отношению к типам A
и B
. Порядок
выбора - STRING
, REAL
или INTEGER
.
В версии MySQL 3.23 поддерживаются таблицы нового типа MyISAM
и старого
типа ISAM
. Старые таблицы не нуждаются в преобразовании для использования
их в версии 3.23. По умолчанию все новые таблицы будут создаваться с типом
MyISAM
(если вы не запускаете mysqld
с опцией --default-table-type=isam
).
Можно преобразовать таблицу ISAM
в таблицу MyISAM
при помощи команды
ALTER TABLE table_name TYPE=MyISAM
или при помощи Perl-скрипта
mysql_convert_table_format
.
Клиенты версий 3.22 и 3.21 должны работать с сервером версии 3.23 без каких-либо проблем.
Ниже перечислены моменты, на которые следует обратить внимание при модернизации до версии 3.23:
tis620
, должны быть
исправлены с помощью myisamchk -r
или REPAIR TABLE
.
DROP DATABASE
над базой данных, связанной
символической ссылкой, удаляются как данная ссылка, так и исходная
база данных (в 3.22 это было не так, поскольку программа configure
не
распознавала системный вызов readlink
).
OPTIMIZE TABLE
сейчас работает только с таблицами MyISAM
. Для других
типов таблиц можно использовать команду ALTER TABLE
для оптимизации
таблицы. Во время выполнения команды OPTIMIZE TABLE
оптимизируемая
таблица сейчас заблокирована для других потоков.
mysql
сервера MySQL сейчас по умолчанию начинает свою работу с
опцией --no-named-commands
(-g
). Данную опцию можно отключить с
помощью --enable-named-commands
(-G
). В некоторых случаях это может
вызывать проблемы несовместимости, например, в скриптах SQL, в которых
названные команды используются без точки с запятой! Команды большого
формата пока еще работают с начала строки.
MONTH()
), сейчас будут возвращать 0
для даты 0000-00-00
(в версии
MySQL 3.22 возвращалась величина NULL
).
isamchk -r
, так как в порядке
сортировки произведены некоторые изменения!
IF
теперь зависит от обоих
аргументов, а не только от первого.
AUTO_INCREMENT
теперь не будет работать с отрицательными числами;
причина в том, что отрицательные числа вызывали проблемы при переходе
от -1
к 0
. Для таблиц MyISAM
AUTO_INCREMENT
не обрабатывается на более
низком уровне и работает намного быстрее, чем раньше. Для таблиц
MyISAM
старые автоинкрементные номера также не используются повторно,
даже при удалении из таблицы строк.
CASE
, DELAYED
, ELSE
, END
, FULLTEXT
, INNER
, RIGHT
, THEN
и WHEN
сейчас являются зарезервированными словами.
FLOAT(X)
сейчас является настоящим типом данных с плавающей точкой, а
не величиной с фиксированным числом десятичных знаков.
DECIMAL(length,dec)
аргумент length
больше не включает
в себя место для знака или десятичной точки.
TIME
теперь должна представлять собой один из следующих
форматов: [[[DAYS] [H]H:]MM:]SS[.fraction]
или
[[[[[H]H]H]H]MM]SS[.fraction]
.
LIKE
сейчас сравнивает строки, используя те же правила сравнения
символов, что и =
. Если необходим старый режим работы, то можно
скомпилировать MySQL с флагом CXXFLAGS=-DLIKE_CMP_TOUPPER
.
REGEXP
сейчас является независимым от регистра символов для
нормальных (не двоичных) строк.
CHECK TABLE
или myisamchk
для таблиц MyISAM
(`.MYI') и isamchk
для таблиц ISAM
(`.ISM').
mysqldump
между версией MySQL
3.22 и версией 3.23, не следует использовать опцию --opt
или --all
для mysqldump
.
DATE_FORMAT()
, чтобы убедиться, что
перед каждым символом формата имеется `%' (в версии MySQL 3.22 и более
поздних этот синтаксис уже допускается).
mysql_fetch_fields_direct
сейчас является функцией (был макрос) и
возвращает указатель на MYSQL_FIELD
вместо MYSQL_FIELD
.
mysql_num_fields()
больше нельзя использовать на объектах
MYSQL*
(сейчас это функция, принимающая MYSQL_RES*
в качестве
аргумента, так что вместо нее следует применять mysql_field_count()
).
SELECT DISTINCT ...
почти всегда был
отсортированным. Чтобы получить отсортированный вывод в версии 3.23,
необходимо использовать GROUP BY
или ORDER BY
.
SUM()
сейчас возвращает NULL
вместо 0
при отсутствии
сопоставляемых строк: это сделано для соответствия с ANSI SQL.
AND
или OR
с величинами NULL
теперь будут возвращать NULL
вместо 0
. В основном, это влияет на запросы, в которых используется
NOT
на выражениях AND
/OR
, так как NOT NULL = NULL
. LPAD()
и RPAD()
будут укорачивать результирующую строку, если она длиннее, чем
аргумент длины.
В версии 3.21 по сравнению с 3.22 не было сделано никаких изменений,
влияющих на совместимость. Единственный подводный камень - это то, что для
новых таблиц, создающихся со столбцами типа DATE
, будет применяться новый
способ хранения даты. При использовании старой версии mysqld
получить
доступ к этим новым полям будет нельзя.
После установки версии MySQL 3.22 необходимо запустить новый сервер, а
затем выполнить скрипт mysql_fix_privilege_tables
. В результате будут
добавлены новые привилегии, необходимые для использования команды GRANT
.
Если вы забудете выполнить эти действия, то получите Access denied
при
попытке использовать ALTER TABLE
, CREATE INDEX
или DROP INDEX
. Если для
вашего привилегированного (root
) пользователя MySQL требуется пароль, то
следует указать его как аргумент в mysql_fix_privilege_tables
.
Изменен интерфейс C API к функции mysql_real_connect()
.Если вы
располагаете старой клиентской программой, вызывающей данную функцию, то
необходимо задать значение 0
для нового аргумента db
(или перекодировать
данный клиент, чтобы посылать значение элемента db
для более быстрых
подключений). Необходимо также вызывать mysql_init()
перед вызовом функции
mysql_real_connect()
! Это изменение было проведено для того, чтобы дать
возможность новой функции mysql_options()
сохранять опции в структуре
обработчика MYSQL
.
Имя относящейся к mysqld
переменной key_buffer
изменено на
key_buffer_size
, однако старое имя можно использовать по-прежнему.
Если вы работаете с версией выше, чем 3.20.28, и хотите перейти к 3.21, то необходимо сделать следующее:
Можно запустить сервер mysqld
версии 3.21 с опцией safe_mysqld
--old-protocol
, чтобы использовать его с клиентами из дистрибутива версии
3.20. В этом случае функция mysql_errno()
нового клиента не возвращает
никаких серверных ошибок, кроме CR_UNKNOWN_ERROR
(она предназначена для
клиентских ошибок), при этом сервер использует не новую, а старую функцию
проверки password()
.
Если вы не собираетесь использовать опцию --old-protocol
к mysqld
, то
необходимо будет выполнить следующие изменения:
MyODBC
2.x.
Password
в таблице mysql.user
к CHAR(16)
.
mysql.user
должны быть переназначены (чтобы
получить 62- разрядные пароли вместо 31- разрядных).
Версия MySQL 3.20.28 и выше может обрабатывать новый формат таблиц user
так, что это не отражается на клиентах. В более ранних, чем 3.20.28,
версиях MySQL пароли больше не будут работать с клиентами, если таблица
user
преобразована. Для уверенности следует прежде провести апгрейд по
меньшей мере до версии 3.20.28 и затем модернизировать до версии 3.21.
Новый код клиента работает с сервером mysqld
версии 3.20.x, так что в
случае каких-либо проблем с версией 3.21.x можно использовать старый
сервер 3.20.x без необходимости повторной перекомпиляции клиентов.
Если не применить опцию --old-protocol
для mysqld
, то старые клиенты
выдадут следующее сообщение об ошибке:
ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
Новый интерфейс Perl DBI
/DBD
также поддерживает старый интерфейс
mysqlperl
. Единственное изменение, которое следует произвести при
использовании mysqlperl
, модифицировать аргументы в функции connect()
.
Новыми аргументами являются: host
, database
, user
, и password
(аргументы
user
и password
поменялись местами). See section 8.2.2 Интерфейс DBI
.
Ниже перечислены изменения, которые могут повлиять на запросы в старых приложениях:
HAVING
теперь необходимо указывать перед любым выражением ORDER BY
.
LOCATE()
.
DATE
, TIME
и TIMESTAMP
.
При использовании MySQL 3.23 можно копировать файлы `.frm', `.MYI' и `.MYD' между различными архитектурами, поддерживающими одинаковый формат чисел с плавающей точкой (все проблемы, связанные с перестановкой байтов, берет на себя MySQL).
Имеющиеся в MySQL файлы данных и индексные файлы типа ISAM
(`.ISD' и
`*.ISM' соответственно) являются архитектурно-независимыми, а в ряде
случаев - зависимыми от операционной системы. Для переноса приложений на
компьютер с архитектурой или операционной системой, которые отличаются от
используемых на исходном компьютере, не следует пытаться перенести базу
данных путем простого копирования файлов на другой компьютер. Используйте
вместо этого mysqldump
.
По умолчанию mysqldump
создаст файл со всеми командами SQL. После этого
данный файл можно перенести на другой компьютер и подать его на вход
клиента mysql
.
Используя mysqldump --help
, просмотрите все доступные опции. При
перемещении данных на более новую версию MySQL следует применять mysqldump
--opt
более новой версии, чтобы получить быструю и компактную копию.
Самый простой (хотя и не самый быстрый) способ перемещения базы данных с компьютера на компьютер - запустить на компьютере, где размещается исходная база данных, следующие команды:
shell> mysqladmin -h 'other hostname' create db_name shell> mysqldump --opt db_name \ | mysql -h 'other hostname' db_name
Если вы хотите скопировать базу данных с удаленного компьютера через медленную сеть, то можно использовать:
shell> mysqladmin create db_name shell> mysqldump -h 'other hostname' --opt --compress db_name \ | mysql db_name
Можно также сохранять результат в файле, затем передавать этот файл на требуемый компьютер и загружать этот файл в расположенную там базу данных. Например, можно скопировать базу данных в файл на исходном компьютере как показано ниже:
shell> mysqldump --quick db_name | gzip > db_name.contents.gz
(Созданный в данном примере файл сжимается). Передайте этот файл с содержимым базы данных на требуемый компьютер и запустите там эти команды:
shell> mysqladmin create db_name shell> gunzip < db_name.contents.gz | mysql db_name
Для выполнения передачи базы данных можно также использовать mysqldump
и
mysqlimport
. В случае больших таблиц это намного более быстрый способ, чем
простое применение mysqldump
. В следующих командах DUMPDIR
представляет
собой полный путь к каталогу, используемому для хранения вывода из
mysqldump
.
Во-первых, создайте каталог для файлов вывода и дампа базы данных:
shell> mkdir DUMPDIR shell> mysqldump --tab=DUMPDIR db_name
Затем передайте эти файлы в каталог DUMPDIR
некоторого соответствующего
каталога на требуемом компьютере и загрузите там данные файлы в MySQL:
shell> mysqladmin create db_name # создание базы данных shell> cat DUMPDIR/*.sql | mysql db_name # создание таблиц в базе данных shell> mysqlimport db_name DUMPDIR/*.txt # загрузка данных в таблицы
Помимо этого, не забудьте скопировать базу данных mysql
, поскольку в ней
хранятся таблицы привилегий (user
, db
, host
). Возможно, на новом
компьютере будет нужно запустить команды в качестве пользователя root
MySQL, пока база данных mysql
не займет свое место.
После импорта базы данных mysql
на новый компьютер выполните mysqladmin
flush-privileges
, чтобы сервер перезагрузил информацию в таблицах
привилегий.
Приведенные ниже замечания о glibc
будут полезны только для случая, когда
вы собираете MySQL самостоятельно. Но обычно, если Linux работает на
машине с архитектурой x86, гораздо лучше использовать наши бинарные файлы.
Они линкуются с glibc
, к которой применены наиболее удачные патчи, и с
наиболее удачными опциями компилятора - все это сделано для того, чтобы
программа была пригодной для работы на сильно нагруженном сервере. Поэтому
если после прочтения данного раздела у вас возникнут сомнения относительно
дальнейших действий, попробуйте сначала использовать бинарные файлы -
возможно, они удовлетворят вашим требованиям. Если же окажется, что
бинарные файлы вас не устраивают, то можно попробовать заняться
собственноручной сборкой. Мы будем очень признательны за сообщение о том,
почему вам пришлось отказаться от работы с нашими бинарниками, - это
поможет нам в следующий раз собрать более удачную версию программы. Что же
касается обычных пользователей, то для них даже при установке,
рассчитанной на большое количество параллельных соединений и/или таблиц,
превосходящих по объему ограничение в 2 Гб, наши бинарные файлы будут
наилучшим вариантом выбора.
В операционной системе Linux MySQL использует LinuxThreads. Если у вас
старая система Linux, в которой отсутствует glibc2
, то прежде чем
предпринимать попытку компиляции MySQL, необходимо установить
LinuxThreads. Получить LinuxThreads можно по адресу
http://www.mysql.com/downloads/os-linux.html.
Примечание: на Linux 2.2.14 и MySQL, установленных на многопроцессорных (SMP) системах, могут возникать некоторые непонятные проблемы. В таком случае мы рекомендуем как можно быстрее сделать апгрейд версии ядра до 2.4: оно станет гораздо более быстрым и устойчивым.
Необходимо отметить, что версии glibc
до 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 Kб.
Пути указаны относительно корневого каталога glibc
. Заметим, что MySQL не
будет устойчиво работать при 600-1000 соединениях, если размер STACK_SIZE
останется по умолчанию 2 Mб.
Если MySQL не может открыть достаточное количество файлов или принять достаточное количество соединений, то это значит, что в Linux не сконфигурирована возможность открытия необходимого количества файлов.
В Linux 2.2 и более свежих версиях можно получить значение максимального количества файлов, которые можно открыть одновременно. Для этого необходимо выполнить:
cat /proc/sys/fs/file-max cat /proc/sys/fs/dquot-max cat /proc/sys/fs/super-max
В случае, если на машине установлено более 16 Mб памяти, к загрузочному скрипту (`/etc/init.d/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
, но в таком случае при перезагрузке компьютера будут использоваться
старые ограничения.
Альтернативно, вы можете установить эти параметры при загрузке, используя
утилиту sysctl
, которая используется во множестве поставок Linux (SuSE также добавила
ее, начиная с SuSE 8.0). Просто напишите такие значения в файл `/etc/sysctl.conf':
# увеличить некоторые значения для MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
Кроме того, необходимо добавить в `/etc/my.cnf':
[safe_mysqld] open-files-limit=8192
Добавление такой записи позволит MySQL создавать до 8192 соединений и файлов.
Размером стеков потоков в адресном пространстве управляет константа
STACK_SIZE
в LinuxThreads. Ее значение должно быть достаточно большим,
чтобы хватило места стеку каждого потока, но достаточно малым, чтобы
предотвратить попадание стеков некоторых потоков в область общих данных
mysqld
. К сожалению, опытным путем нам удалось обнаружить, что реализация
mmap()
на Linux в случае поступления запроса на выделение адреса, который
уже используется, вместо возвращения сообщения об ошибке успешно
освобождает все ранее выделенные области и обнуляет данные на всей
странице. Поэтому безопасность использования mysqld
или любого другого
потокового приложения зависит от "джентльменского" поведения кода,
создающего потоки. Пользователь должен принять меры для обеспечения
достаточно малого количества выполняемых потоков в любой момент времени,
чтобы стеки потоков не пересекались с динамически выделяемой памятью. В
случае mysqld
необходимо навязать это "джентльменское" поведение
установкой переменной max_connection
в разумных пределах.
Если вы собираете MySQL самостоятельно и не хотите заниматься патчами
LinuxThreads, то необходимо установить значение max_connections
так, чтобы
оно не превышало 500. Это значение должно быть еще меньше, если у вас
достаточно велик буфер ключей, большая таблица динамически выделяемой
памяти или имеются другие причины, по которым mysqld
занимает большие
объемы памяти, а также в случае, если вы используете ядро 2.2 с патчами
для 2 Гб. Если используются наши бинарные файлы или RPM версии не старше
3.23.25, то можно безопасно устанавливать max_connections
равным 1500 -
при условии, что буфер ключей или таблицы динамически выделяемой памяти
имеют небольшие размеры. Чем меньше STACK_SIZE
в LinuxThreads, тем больше
потоков можно безопасно создать. Рекомендуемая нами величина составляет от
128K до 256K.
При использовании множества одновременных соединений вы можете пострадать
от одной "особенности" ядра 2.2. Данная особенность заключается в том, что
процесс штрафуется за ветвление или порождение дочерних процессов - чтобы
предотвратить атаки ветвлением. Это приводит к неудачному масштабированию
MySQL при увеличении количества одновременных соединений. По нашим данным,
на однопроцессорных машинах из-за данной особенности создание потоков
происходит очень медленно, что может привести к большим затратам времени
на соединение с MySQL (до 1 минуты), и столько же может занять завершение
соединения. Что же касается многопроцессорных систем, то на них
наблюдалось постепенное снижение скорости по мере роста числа клиентов.
Пока мы пытались найти решение проблемы, один из пользователей прислал
патч к ядру, утверждая, что патч заметно улучшил работу его сайта. Патч
доступен по адресу
http://www.mysql.com/Downloads/Patches/linux-fork.patch. Мы провели
достаточно обширное тестирование этого патча как на развивающейся, так и
на промышленной версиях системы. Применение патча заметно улучшило
производительность MySQL
, не вызвав при этом никаких проблем, поэтому
теперь мы рекомендуем его пользователям, которые до сих пор используют
ядро 2.2 на сильно нагруженных серверах. Кроме того, эта проблема была
решена в ядре 2.4, поэтому если вас не устраивает производительность
системы, то, по-видимому, проще сделать ее апгрейд до 2.4, чем
использовать патчи к ядру 2.2. При обновлении системы, помимо исправления
этой ошибки, вы также получите возможность воспользоваться преимуществами
SMP.
При тестировании MySQL на двухпроцессорной машине с ядром 2.4 мы
обнаружили, что MySQL масштабируется гораздо лучше - фактически
отсутствовало замедление обработки запросов вплоть до 1000 соединений, а
фактор масштабируемости MySQL (который вычисляется как отношение
максимальной производительности к производительности при работе с одним
клиентом) достигал 180%. Подобные результаты мы наблюдали на
четырехпроцессорной системе - фактическое отсутствие замедления при росте
количества соединений до 1000 при факторе масштабируемости в 300%. Поэтому
для интенсивно нагруженных серверов мы настоятельно рекомендуем ядро 2.4.
Оказалось также, что для достижения максимума производительности на ядре
2.4 весьма важно запускать mysqld
с наибольшим возможным приоритетом. Для
этого следует добавить в скрипт safe_mysqld
команду renice -20 $$
. В наших
тестах на четырехпроцессорной машине увеличение приоритета привело к
повышению производительности на 60% при работе 400 клиентов.
В дополнение к этому мы сейчас занимаемся сбором информации о производительности MySQL с ядром 2.4 на четырех- и восьмипроцессорных системах. Если у вас есть доступ к таким системам и вы тестировали их производительность, пожалуйста, отправьте сообщение с результатами по адресу docs@mysql.com - мы добавим эти результаты в документацию.
Существует еще один нюанс, заметно влияющий на производительность
MySQL, особенно на многопроцессорных системах. В LinuxThreads в glibc-2.1
очень плохо реализованы mutex'ы для программ со множеством потоков, в
которых mutex хранится непродолжительное время. Парадоксально, но факт: в
случае, если на многопроцессорных системах собрать MySQL с
немодифицированными LinuxThreads, то при удалении процессора во много раз
увеличивается производительность. Для решения этой проблемы мы предлагаем
патч к glibc 2.1.
3
http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch.
В glibc-2.2.2
MySQL версии 3.23.36 использует адаптивный mutex, который
гораздо лучше даже ``патченного'' в glibc-2.3.1
. Однако предупреждаем, что
при некоторых условиях код mutex'а в glibc-2.2.2
"закручивается"
(overspin), а это ухудшает производительность MySQL. Шансы возникновения
такого события можно понизить, если повысить приоритет выполнения mysqld
.
Можно также исправить "закручивание" с помощью патча, доступного по адресу
http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch. Он содержит
в себе коррекцию "закручивания", максимальное количество потоков и размеры
стека - все вместе. Необходимо применить его в каталоге linuxthreads
командой patch -p0 </tmp/linuxthreads-2.2.2.patch
. Мы надеемся, что данный
патч будет в некотором виде включен в следующие выпуски glibc-2.2
. В любом
случае - если вы линкуете с использованием библиотеки glibc-2.2.2
, то пока
что необходимо исправлять STACK_SIZE
и PTHREAD_THREADS_MAX
. Мы не теряем
надежду, что в будущем значения по умолчанию будут приведены к более
приемлемым для сборки интенсивно нагруженного MySQL величинам, так что
самостоятельная сборка сведется к выполнению ./configure; make; make
install
.
Вышеупомянутые патчи мы рекомендуем использовать только для создания специальной статической версии `libpthread.a', а последнюю - применять только для статического линкования MySQL. Мы уверены, что для MySQL эти патчи безопасны и заметно улучшают его производительность, но относительно других приложений данных нет. Линкуя другие приложения с ``патченной'' версией библиотеки или собирая ее динамическую версию и устанавливая ее на свою систему, вы осознанно идете на риск по отношению к другим приложениям, использующим LinuxThreads.
В случае, если вам придется столкнуться с непонятными проблемами при инсталляции MySQL или при работе утилит, то причина, вероятнее всего, связана с библиотеками или компилятором. В таком случае проблему должно решить использование наших бинарных файлов.
Существует одна известная проблема с бинарным дистрибутивом, касающаяся
старых систем Linux, в которых используется libc
(таких как RedHat 4.x или
Slackware). Она проявляется в виде некоторых некритичных проблем с
разрешением имен (see section 2.6.1.1 Примечания к бинарным дистрибутивам Linux).
При использовании LinuxThreads одновременно работают как минимум три процесса. По сути это потоки. Один поток управляет LinuxThreads, один - обрабатывает соединения и еще один - обрабатывает различные сигналы.
Заметим, что ядро Linux и библиотека LinuxThreads по умолчанию могут поддерживать только 1024 потока. Это значит, что может существовать не более 1021 соединения с MySQL на системе, к которой не применялись патчи. Информацию о том, как обойти это ограничение, можно найти на странице http://www.volano.com/linuxnotes.html.
Если по результату работы команды ps вы видите, что mysqld
прекратил
работу,
то обычно причиной этого является либо обнаружение ошибки в MySQL, либо испорченная таблица (see section A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями).
Если при получении сигнала SIGSEGV
mysqld
просто умирает, то для получения
образа памяти (core dump) на Linux можно запустить mysqld
с опцией
--core-file
. Заметим, что при этом вам, возможно, придется увеличить
размер допустимого объема файла образа памяти путем добавления строки
ulimit -c 1000000
в safe_mysqld
или запуском safe_mysqld
с опцией
--core-file-size=1000000
(see section 4.7.2 safe_mysqld
, оболочка mysqld
).
Если при линковании собственного MySQL-клиента возникла ошибка:
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
то проблему можно обойти одним из следующих способов:
-Wl,r/path-libmysqlclient.so
. (вместо -Lpath
);
LD_RUN_PATH
перед запуском клиента.
Если вы используете компилятор Fujitsu (fcc / FCC
), то возможны некоторые
проблемы компиляции MySQL поскольку заголовки в Linux в значительной
степени ориентированы на gcc
.
Данная конфигурация должна работать с 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
Для работы MySQL необходим Linux версии не ниже 2.0.
Предупреждение: По данным, полученным нами от некоторых пользователей MySQL, на Linux с ядром 2.2.14 имеются серьезные проблемы с устойчивостью работы MySQL. Если вы используете это ядро, необходимо обновить его до версии 2.2.19 или выше, либо до ядра версии 2.4. Аргументы в пользу 2.4 становятся еще более весомыми при использовании многопроцессорной системы, поскольку переход на эту версию ядра приводит к заметному увеличению скорости.
Как правило, бинарный дистрибутив линкуется с опцией -static
, а это
значит, что обычно нет необходимости беспокоиться о том, какая версия
системных библиотек у вас установлена. Не требуется также устанавливать
LinuxThreads. Размер программы, слинкованной с опцией -static
, обычно
больше в сравнении с версией, собранной динамически, однако скорость
работы у нее выше (3-5%). Существует, однако, одна проблема. Она
заключается в том, что со статически слинкованными программами невозможно
использовать определяемые пользователем функции (user-definable function,
UDF). Если вы собираетесь писать или использовать UDF'ы (это информация,
касающаяся только программистов на C или C++), вам следует собственноручно
собрать MySQL с использованием динамического линкования.
При использовании систем, базирующихся на libc
(в отличие от
glibc2
-систем), могут возникать некоторые проблемы с разрешением имен
удаленных компьютеров и использованием getpwnam()
с бинарной версией (это
происходит из-за того, что, к сожалению, glibc
зависит от некоторых
внешних библиотек при разрешении имен и использовании getpwent()
, даже при
сборке с опцией -static
). В таком случае при запуске mysql_install_db
возможно появление следующего сообщения об ошибке:
Sorry, the host 'xxxx' could not be looked up
Или же - при запуске mysqld
с опцией --user
- сообщение об ошибке может
быть таким:
getpwnam: No such file or directory
Эту проблему можно решить одним из следующих способов:
tar.gz
).
mysql_install_db --force
, чтобы избежать проверки
resolveip
в mysql_install_db
. Оборотной стороной такого подхода
является невозможность работать с именами машин в таблицах прав
доступа - вместо них следует должны использовать IP-адреса (за
исключением localhost
). Если у вас старая поставка MySQL,
которая не поддерживает ключ --force
, то нужно просто удалить в редакторе
проверку resolveip
из mysql_install
.
mysqld
с помощью команды su вместо использования опции --user
.
RPM и бинарные файлы MySQL для Linux на архитектуре Intel оптимизированы для достижения наибольшей возможной скорости работы. Мы всегда стараемся использовать компиляторы, которые дают наиболее быстрый и устойчивый код.
Поддержка Perl в MySQL требует Perl версии не ниже 5.004_03.
На некоторых Linux версии 2.2 при попытке создать большое количество новых
соединений с сервером mysqld через TCP/IP вы можете получить сообщение об
ошибке Resource temporarily unavailable
(Ресурс временно недоступен).
Проблема заключается в задержке между закрытием сокета TCP/IP и реальным его освобождением системой в Linux. Поскольку существует ограниченное количество областей для поддержки TCP/IP, вы получите вышеназванную ошибку, если попытаетесь создать слишком много новых соединений TCP/IP на протяжении короткого отрезка времени (нечто подобное происходит при запуске теста на производительность MySQL `test-connect' поверх TCP/IP).
Об этой проблеме мы несколько раз сообщали в различные списки рассылки по Linux, однако удачного решения получить не удалось.
Единственное известное 'решение' данной проблемы заключается в том, что ваши клиенты должны работать с постоянными соединениями или использовать сокеты (в случае, если клиентская и серверная части находятся на одной машине). Остается надеяться, что эта проблема будет решена в ядре Linux 2.4.
Для MySQL необходимо наличие libc
версии 5.4.12 или выше. Известно, что
MySQL работает с libc
5.4.46, а также с glibc
версии 2.0.6 и более новыми.
Существуют некоторые проблемы с glibc
из пакетов в RedHat, поэтому в
случае возникновения проблем следует проверить, нет ли обновлений данной
версии! Известно, что glibc
из RPM версий 2.0.7-19 и 2.0.7-29
работоспособны.
Если вы используете Red Hat 8.0 или новую glibc 2.2.x вам следует запускать
mysqld с опцией --thread-stack=192K
. Если вы этого не сделаете, то
mysqld будет умирать в gethostbyaddr()
потому что новая glibc требует >
128Кбайт памяти стека для этого вызова. Такой размер стека установлен по
умолчанию в MySQL 4.0.10 и более новых.
При использовании для сборки MySQL gcc 3.0 и выше библиотеку libstdc++v3
необходимо установить до сборки; если вы не сделаете этого, то получите
сообщение об отсутствии символа __cxa_pure_virtual
во время линкования!
На некоторых старых версиях 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'
mysql.server
находится либо в каталоге `share/mysql' каталога инсталляции MySQL, либо в каталоге `support-files' каталога дерева исходных текстов
MySQL.
Возникновение следующей ошибки при линковании 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
В некоторых версиях Linux SPARC испорчена функция readdir_r()
. Это
проявляется в том, что SHOW DATABASES
всегда возвращает пустой набор.
Проблема может быть решена удалением HAVE_READDIR_R
из `config.h' - это
нужно делать после конфигурирования, но до компиляции.
MySQL версии 3.23.12 - первая версия MySQL, протестированная на Linux-Alpha. Поэтому если вы собираетесь использовать MySQL на Linux-Alpha, следует прежде всего убедиться, что вы используете либо эту версию, либо более свежую.
Мы тестировали MySQL на Alpha при помощи наших тестов на производительность и все работает превосходно.
При компиляции стандартных бинарных файлов MySQL мы использовали SuSE 7.0 для AXP с ядром 2.4.4-SMP, компилятор Compaq C (6.2-505) и компилятор Compaq C++ (6.3-006) на компьютере Compaq DS20 с процессором Alpha EV6.
Вышеупомянутый компилятор можно найти на http://www.support.compaq.com/alpha-tools/. Использование этого компилятора вместо gcc привело к улучшению производительности MySQL на 9-14%.
Отметим, что до версии MySQL 3.23.52 и 4.0.2 мы оптимизировали исполняемые файлы
только для единственной модели процессора (используя опцию компиляции -fast
); это означало
что вы можете использовать наши двоичные файлы только если у вас процессор Alpha EV6.
Для всех следующих версий мы добавили флаг -arch generic
к нашим опциям
компиляции, что позволяет работать бинарному файлу на всех процессорах Alpha.
Мы также собираем MySQL статически - во избежание проблем.
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \ CXXFLAGS="-fast -arch generic -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:
gdb 4.18
.
Вместо него необходимо установить и использовать gdb 5.1!
mysqld
с использованием gcc
результирующий файл при попытке запуска сбрасывает образ памяти на
диск (core dump) и умирает. Иными словами, не следует использовать с
gcc
опцию --with-mysqld-ldflags=-all-static
.
MySQL должен работать на MkLinux при наличии самого свежего пакета glibc
(проверено с glibc
2.0.7).
Для того чтобы MySQL работал на Qube2 (Linux Mips), необходима самая
свежая версия библиотеки glibc
(известно, что MySQL работает с
glibc-2.0.7-29C2
). Помимо этого, следует использовать компилятор egcs
C++
(egcs-1.0.2-9
, gcc 2.95.2
или выше).
Для компиляции MySQL на Linux IA64 мы применяем следующую команду
конфигурирования: используется gcc-2.96
:
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-comment=Official MySQL binary" --with-extra-charsets=complex
На IA64 бинарные файлы MySQL-клиента используют динамические библиотеки.
Это значит, что при установке нашего бинарного дистрибутива куда-либо,
кроме `/usr/local/mysql', необходимо либо модифицировать `/etc/ld.so.conf',
либо добавить путь к каталогу, в котором находится `libmysqlclient.so', к
переменной окружения LD_LIBRARY_PATH
.
See section A.3.1 Проблемы при линковании с клиентской библиотекой MySQL.
В данном разделе описывается использование MySQL в среде Windows. Эта информация также находится в файле `README', поставляемом с дистрибутивом MySQL Windows. See section 2.1.2 Установка MySQL на Windows.
В MySQL для соединения клиента с сервером используется TCP/IP (это обеспечивает для любого компьютера в сети возможность соединиться с вашим MySQL-сервером). Поэтому TCP/IP необходимо установить на машине до запуска MySQL. TCP/IP, в частности, имеется на CD-диске с дистрибутивом Windows.
Обратите внимание: если вы используете один из старых выпусков Windows 95 (например OSR2), то вполне вероятно, что у вас установлен старый пакет Winsock; а для работы MySQL необходим Winsock 2! Самую свежую версию Winsock можно получить по адресу http://www.microsoft.com/. Windows 98 содержит новую библиотеку Winsock 2, поэтому данное замечание к ней не относится.
Для запуска mysqld
необходимо открыть окно MS-DOS и выполнить:
C:\> C:\mysql\bin\mysqld
Это позволит запустить mysqld
в фоновом режиме без окна.
Работу MySQL-сервера можно остановить командой:
C:\> C:\mysql\bin\mysqladmin -u root shutdown
Это вызов программы администрирования MySQL от имени пользователя root
,
который по умолчанию соответствует пользователю Administrator
в системе
привилегий MySQL. Обратите внимание: система привилегий MySQL абсолютно
независима от каких-либо аккаунтов пользователей в среде Windows.
Заметим, что в Windows 95/98/Me не поддерживается создание именованных
каналов. Таким образом, именованные каналы вы можете использовать для
соединения с MySQL-сервером, работающем в системе Windows NT/2000/XP.
(Разумеется, MySQL-сервер также должен поддерживать именованные каналы.
Например, при работе mysqld-opt
в системе NT/2000/XP нельзя создавать
соединения с использованием именованных каналов; следует применять либо
mysqld-nt
, либо mysqld-max-nt
.)
Если mysqld
не запускается, следует проверить файл `\mysql\data\mysql.err',
на предмет записей, сделанных сервером, - они содержат объяснения причин,
вызвавших проблему. Можно также попробовать запустить сервер командой
mysqld --standalone
; в этом случае на экран будет выводиться некоторая
полезная информация, которая может помочь решить проблему.
В качестве последней попытки можно попробовать запустить mysqld
с флагами
--standalone --debug
. В этом случае mysqld
будет помещать записи в файл
отладки `C:\mysqld.trace'. Возможно, по содержимому этого файла вы сумеете
определить причину, по которой не запускается mysqld
.
See section D.1.2 Создание трассировочных файлов.
Для вывода всех флагов, которые ``понимает'' mysqld
, используйте команду
mysqld --help
.
Для того чтобы MySQL работал с TCP/IP на Windows NT 4, необходимо установить Service Pack 3 (или выше)!
Обычно MySQL устанавливается на Windows NT/2000/XP как сервис. В случае, если сервер уже работает, необходимо сначала завершить его работу при помощи следующей команды:
C:\mysql\bin> mysqladmin -u root shutdown
Это вызов программы администрирования MySQL от имени пользователя root
,
который по умолчанию соответствует пользователю Administrator
в системе
привилегий MySQL. Обратите внимание: система привилегий MySQL абсолютно
независима от каких-либо аккаунтов пользователей в системе Windows.
Теперь установим сервис сервера:
C:\mysql\bin> mysqld-max-nt --install
Если требуются какие-либо опции, они должны быть определены, как ``Start
parameters
'' в инструментальной программе Services
системы Windows перед
запуском сервиса MySQL.
Доступ к инструментальной программе Services
(Windows Service Control
Manager
) можно получить в Control Panel
(в Administrative Tools
в Windows
2000). Рекомендуется закрывать Services
при выполнении операций --instal
или --remove
- это предотвратит возникновение некоторых ошибок неизвестной
природы.
За информацией о том, какие бинарные файлы следует использовать для запуска сервера, обращайтесь к разделу See section 2.1.2.2 Подготовка конфигурации MySQL для Windows.
Отметим, что начиная с версии 3.23.44 MySQL имеется возможность
альтернативной установки сервиса - в режиме Manual
(если вам не требуется
автоматический запуск сервиса при загрузке операционной системы):
C:\mysql\bin> mysqld-max-nt --install-manual
Сервис устанавливается под именем MySQL. Сразу же после установки он может
быть запущен при помощи инструментальной программы Services
или командой
NET START MySQL
.
После запуска работа mysqld-max-nt
может быть завершена при помощи
mysqladmin из инструментальной программы Services
или командой NET STOP
MySQL
.
Если MySQL функционирует в качестве сервиса, то операционная система
автоматически завершает работу MySQL
-сервиса при программном завершении
работы компьютера. В версиях MySQL < 3.23.47 Windows ожидает всего лишь
несколько секунд завершения остановки, после чего уничтожает процесс
сервера базы данных, если превышено время ожидания (что может быть
потенциальной причиной возникновения проблем). Например, при следующем
запуске обработчик таблицы InnoDB
должен выполнять восстановление после
аварийного завершения. Начиная с MySQL версии 3.23.48, Windows ожидает
завершения процесса MySQL-сервера дольше. Если вы считаете, что этого
времени для вашей версии недостаточно, безопаснее запускать MySQL-сервер
не как сервис, а из командной строки и завершать его работу командой
mysqladmin shutdown
.
В Windows NT (но не в Windows 2000/XP) существует проблема, которая
заключается в том, что система по умолчанию ожидает окончания работы
сервиса только 20 секунд, после чего уничтожает процесс сервиса. Это
заданное по умолчанию значение можно увеличить с помощью редактора
Registry (Реестра), запустив `\winnt\system32\regedt32.exe' и отредактировав
значение WaitToKillServiceTimeout
в записи
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
. Следует задать
другое, большее значение в миллисекундах, например 120000, чтобы Windows
NT ожидала 120 секунд.
Необходимо заметить, что при работе в качестве сервиса mysqld-max-nt
не
имеет доступа к консоли, а следовательно, невозможно увидеть его
сообщения. Информация об ошибках находится в файле
`c:\mysql\data\mysql.err'.
Если вы столкнулись с проблемами установки mysqld-max-nt
в качестве
сервиса, попробуйте запустить его с указанием полного пути:
C:\> C:\mysql\bin\mysqld-max-nt --install
Если это не поможет, можно принудить mysqld-max-nt
стартовать
соответствующим образом, исправив путь в Registry!
Если вы не хотите запускать mysqld-max-nt
в качестве сервиса, его можно
запустить следующим образом:
C:\> C:\mysql\bin\mysqld-max-nt --standalone или C:\> C:\mysql\bin\mysqld --standalone --debug
В случае последнего варианта вы получите отладочную информацию в `C:\mysqld.trace'. See section D.1.2 Создание трассировочных файлов.
MySQL поддерживает TCP/IP на всех Windows-системах и именованные каналы в среде NT/2000/XP. По умолчанию MySQL использует именованные каналы для соединений с локальной машиной в среде NT/2000/XP и TCP/IP - во всех остальных случаях, если на клиентской машине установлен TCP/IP. Имя машины определяет используемый протокол:
Имя машины | Протокол |
NULL(отсутствует) | На NT/2000/XP пытается установить соединение через именованные каналы; если это не работает, используется TCP/IP. На 9x/Me используется TCP/IP. |
. | Именованные каналы. |
localhost | Соединение TCP/IP с локальной машиной |
имя удаленной машины | TCP/IP |
Чтобы заставить MySQL-клиента использовать именованные каналы, следует
добавить опцию --pipe
или задать .
в качестве имени машины для
соединения. Для определения имени канала используйте опцию --socket
.
В MySQL 4.1 вам следует использовать опцию --protocol=PIPE
.
Отметим, что начиная с версии 3.23.50 именованные каналы применяются
только в случае, если mysqld
запущен с опцией --enable-named-pipe
. Это
вызвано тем, что у некоторых пользователей применение именованных каналов
приводило к прекращению работы сервера MySQL.
Для проверки работоспособности 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 из командной строки:
Бинарный файл | Описание |
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-сервером с использованием SSH. Автором этих замечаний является Дэвид Карлсон (David Carlson) - dcarlson@mplcomm.com:
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/
Host_Name=адрес_своего_MySQL-сервера
. Задайте userid=свой_userid
для
соединения со своим сервером (может отличатся от вашего имени
пользователя/пароля для MySQL).
локальный порт - 3306
, удаленный хост
- адреса_вашего_mysql_сервера
, удаленный порт - 3306
) либо локальный
форвардинг (порт - 3306
, хост - localhost
, удаленный порт - 3306
).
localhost
, а не yourmysqlservername
.
В результате этих действий вы должны получить ODBC-соединение со своим MySQL-сервером, защищенное при помощи SSH-кодирования.
Начиная с 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.h' включить `windows.h':
#if defined(_WIN32) || defined(_WIN64) #include <windows.h> #endif #include <mysql.h>
Линковать свою программу можно либо с использованием динамической библиотеки `libmysql.lib', которая является просто оболочкой для загрузки `libmysql.dll' по требованию, либо со статической библиотекой `mysqlclient.lib'.
Отметим, что поскольку библиотеки mysqlclient
компилируются как потоковые
библиотеки, следует скомпилировать вашу программу так, чтобы была
разрешена многопочность!
На настоящий момент версия MySQL под Windows зарекомендовала себя как весьма устойчивая. Возможности этой версии и версии под Unix аналогичны, за исключением следующих моментов:
mysqld
на продолжительное
время, если ваш сервер обрабатывает много соединений! Другие версии
Windows не подвержены этой ошибке.
SELECT
и INSERT
в MySQL используются
функции pread()
и pwrite()
. В настоящее время для эмуляции
pread()
/pwrite()
мы применяем mutex'ы. Однако в наши планы на будущее
входит замена интерфейса файлового уровня виртуальным интерфейсом, чтобы
иметь возможность использовать интерфейс readfile()
/writefile()
на
NT/2000/XP - с целью ускорения работы. В текущей реализации число
одновременно открытых в MySQL файлов не может быть больше 1024; это
означает, что вы не сможете создать такое же количество одновременных
соединений с MySQL в NT/2000/XP, как в Unix.
mysqladmin kill
не работает для ``спящих'' соединений
mysqladmin shutdown
не может отработать до тех пор, пока существуют
``спящие'' соединения.
shutdown
; это можно сделать с помощью
mysqladmin shutdown
.
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
можно получить следующее сообщение об ошибке:
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:
mysqld
в качестве сервиса с флагом --install
(на NT)
было бы неплохо иметь возможность добавлять флаги по умолчанию к командной
строке. Сейчас эта проблема решается путем записи списка параметров в файл
`C:\my.cnf'.
mysqld
из диспетчера задач. Сейчас для
этого нужно применять mysqladmin shutdown
.
readline
в Windows для использования с
инструментальной программой, запускаемой из командной строки mysql
.
mysql
, mysqlshow
, mysqladmin
и
mysqldump
) будет очень полезна.
mysqladmin kill
в Windows.
mysqld
всегда стартует в местоположении "C", а не в местоположении,
установленном по умолчанию. С благодарностью будет принято исправление,
позволяющее использование программой mysqld
текущего значения
местоположения для порядка сортировки.
README
,
который находится в поставке MySQL-Windows.
В системе 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
.
LD_RUN_PATH
.
Если вы столкнулись с проблемами конфигурирования, пытаясь линковать с
опцией -lz
и у вас не установлена zlib
, существует два варианта:
--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
.
На 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
(эта запись должна быть цельной строкой, без пробелов).
configure
.
#define HAVE_TERM
из `config.h' и запустить make
повторно.
Если редактор связей не может обнаружить -lz
при линковании вашей
клиентской программы, то проблема, возможно, заключается в том, что файл
`libz.so' установлен в `/usr/local/lib'. Данную проблему можно решить любым из
приведенных выше способов:
LD_LIBRARY_PATH
.
--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 D.1.3 Отладка mysqld при помощи gdb).
В этом разделе находится информация относительно различных BSD-систем, а также конкретных версий этих систем.
Для работы Mysql рекомендуется FreeBSD версий 3.x, поскольку версия с потоками является намного более интегрированной.
Простейшим, а поэтому и более предпочтительным способом установки является
использование портов mysql-server
и mysql-client
из коллекции портов
FreeBSD, которая доступна по адресу http://www.freebsd.org/.
Использование этих портов обеспечивает:
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 E Переменные окружения.
Для получения безопасной и устойчивой системы следует использовать
только те ядра системы FreeBSD, которые обозначены как -RELEASE
.
Для компиляции на NetBSD необходимо, чтобы была установлена программа GNU
make
. В противном случае компиляция завершится аварийно при попытке make
запустить lint
на файлах C++.
На OpenBSD версии 2.5 можно компилировать MySQL с использованием собственных потоков. Необходимо указать следующие опции:
CFLAGS=-pthread CXXFLAGS=-pthread ./configure -with-mit-threads=no
По сообщениям наших пользователей, 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
Получение приведенной ниже ошибки при компиляции 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 E Переменные окружения).
Для конфигурирования 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
.
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! (Создание символической ссылки на другой диск допускается.)
На 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.
Прежде чем попытаться отконфигурировать 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
Некоторые бинарные поставки 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:
На следующих конфигурациях MySQL, скорее всего, работать не будет:
Для установки дистрибутива используйте одну из представленных ниже команд;
здесь /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
.
При компиляции 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 мы рекомендуем использовать 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
, описанный выше.
В 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.
На 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
повторно.
При использовании 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
В настоящее время пакет тестировался только на системах ``sco3.2v5.0.4'' и ``sco3.2v5.0.5''. Заметный прогресс отмечается в отношении пакета на ``sco3.2v4.2''.
В настоящее время в качестве компилятора под OpenServer мы рекомендуем gcc 2.95.2. Используя его, можно скомпилировать MySQL при помощи следующей строки:
CC=gcc CXX=gcc ./configure ... (опции)
./configure
в каталоге threads/src
и выберите опцию SCO
OpenServer. Эта команда скопирует Makefile.SCO5
в Makefile
.
make
.
root
, перейдите в каталог thread/src
и запустите make
install
.
make
при сборке MySQL.
safe_mysqld
не с правами пользователя root
вы получите
разрешение открывать одновременно только 110 файлов на процесс (это
значение установлено по умолчанию). mysqld
сообщит об этом в файле
протокола.
configure
должна выполняться корректно:
shell> ./configure --prefix=/usr/local/mysql --disable-shared
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):
mysqld
с использованием -lgthreads -lsocket -lgthreads
.
malloc
. При возникновении проблем с
использованием памяти, убедитесь, что `gmalloc.o' включен в `libgthreads.a' и
`libgthreads.so'.
read()
,
write()
, getmsg()
, connect()
, accept()
, select()
, and wait()
.
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 версий не ниже 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 используется достаточно много открытых файлов. Поэтому в свой файл `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";
Мы заинтересованы в том, чтобы MySQL работал в BeOS, но, к сожалению, среди нас нет никого, кто знал бы BeOS или обладал временем для создания портированной версии.
Если найдутся желающие создать портированную версию, то мы готовы оказать им помощь в решении любых технических вопросов, которые могут возникнуть при создании портированной версии.
У нас было предварительное общение с некоторыми разработчиками BeOS, утверждавших, что на 80% создана портированная версия MySQL под BeOS, однако уже на протяжении длительного времени мы не получали от них никаких известий.
Мы заинтересованы в том, чтобы MySQL работал на Novell NetWare, но, к сожалению, среди нас нет никого, кто достаточно хорошо разбирался бы в NetWare или обладал временем для создания портированной версии.
Мы хотели бы найти желающих создать портированную версию и готовы помочь им в решении любых технических вопросов, которые могут возникнуть при работе над ней.
Поддержка 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
.
Для установки модуля DBD
для MySQL под ActiveState Perl на Windows
необходимо выполнить следующие действия:
set HTTP_proxy=my.proxy.com:3128
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 содержит DBI
, DBD:MySQL
и DBD:ODBC
.
C:
, в результате чего вы получите
каталог `C:\PERL'.
perl
, выполнив команду perl -v
в оболочке DOS.
DBI
/DBD
Если Perl сообщает, что не может найти модуль `../mysql/mysql.so', то проблема, возможно, заключается в том, что Perl не может найти динамическую библиотеку `libmysqlclient.so'.
Эту проблему можно устранить, используя любой из следующих методов:
Msql-Mysql-modules
используйте perl
Makefile.PL -static -config
вместо perl Makefile.PL
.
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
.
Go to the first, previous, next, last section, table of contents.
|
Информация для рекламодателей | PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149 | Пресс-релизы — pr@citforum.ru |
Обратная связь Информация для авторов |
This Web server launched on February 24, 1997 Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum |
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее... |