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

2.3 Установка исходников MySQL

Прежде, чем Вы будете ставить исходники, проверьте, может быть Вас устроит двоичный дистрибутив. Дело в том, что авторы пакета сильно постарались, чтобы их двоичные дистрибутивы для разных платформ были сформированы с самыми лучшими возможными параметрами.

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

  • GNU gunzip для расжатия дистрибутива.
  • Подходящую версию tar, чтобы распаковать дистрибутив. GNU tar, как известно, работает. Sun tar имеет проблемы с именами файлов.
  • Компилятор ANSI C++. gcc >= 2.95.2, egcs >= 1.0.2 или egcs 2.91.66, SGI C++ и SunPro C++ это некоторые из компиляторов, которые, как известно, работают. libg++ не требуется при использовании gcc. gcc 2.7.x имеет ошибку, которая делает невозможным компиляцию некоторых совершенно нормальных файлов C++, типа sql/sql_base.cc. Если Вы имеете только gcc 2.7.x, Вы должны обновить компилятор, чтобы быть способными компилировать MySQL. gcc 2.8.1, как известно, имеет проблемы на некоторых платформах, так что этого нужно избежать, если там существует новый компилятор для этой платформы. gcc >= 2.95.2 рекомендуется при компиляции MySQL 3.23.x.
  • Хорошая программа make. GNU make всегда рекомендуется и иногда требуется. Если Вы имеете проблемы, я рекомендую попробовать GNU make 3.75 или более новую.

Если Вы используете недавнюю версию gcc, проверьте использование опции -fno-exceptions. ОЧЕНЬ ВАЖНО, чтобы Вы использовали ее. Иначе Вы можете компилировать двоичный код, который беспорядочно терпит крах. Я также рекомендую, чтобы Вы использовали -felide-contructors и -fno-rtti наряду с -fno-exceptions. Если сомневаетесь, сделайте следующее:

CFLAGS="-O3" CXX=gcc
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local/mysql --enable-assembler
            --with-mysqld-ldflags=-all-static

На большинстве систем это даст Вам быстрый и устойчивый двоичный код.

Если Вы сталкиваетесь с проблемами, ПОЖАЛУЙСТА ВСЕГДА ИСПОЛЬЗУЙТЕ mysqlbug при регистрации вопросов в mysql@lists.mysql.com. Даже если проблема не является ошибкой, mysqlbug собирает информацию системы, которая поможет другим решить Вашу проблему. Не используя mysqlbug,Вы уменьшаете вероятность получения решения для Вашей проблемы! Вы найдете mysqlbug в каталоге scripts после распаковки дистрибутива. Подробности в разделе "1.4.1 Как сообщать об ошибках и проблемах ".

2.3.1 Краткий обзор установки

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

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> scripts/mysql_install_db
shell> chown -R root  /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> /usr/local/mysql/bin/safe_mysqld --user=mysql &

Если Вы хотите иметь поддержку для таблиц InnoDB, Вы должны отредактировать файл /etc/my.cnf и удалить символ # перед параметрами, которые начинаются с innodb_.... Подробности в разделе "4.1.2 Файл опций my.cnf" и в разделе "7.6.2 Параметры запуска InnoDB ".

Вы можете добавлять новых пользователей, используя скрипт bin/mysql_setpermission, если Вы устанавливаете Perl-модули DBI и Msql-Mysql-modules.

Чтобы устанавливать исходники, выполните приведенные ниже действия, а затем перейдите к разделу "2.4 Послеустановочная настройка и тестирование" для инициализации пост-установки и тестирования:

  1. Выберите каталог, в который Вы хотите распаковать дистрибутив, и перейдите в него.
  2. Получите дистрибутивный файл с одного из сайтов, перечисленных в разделе "2.2.1 Как получить MySQL".
  3. Если Вы заинтересованы использованием таблиц Berkeley DB с MySQL, Вы должны получить исправленную версию исходного текста Berkeley DB. Пожалуйста, прочитайте главу по таблицам Berkeley DB перед продолжением установки. Подробности в разделе "7.5 Таблицы BDB или Berkeley_DB".
  4. Добавьте пользователя и группу, от имени которых будете запускать mysqld:
    shell> groupadd mysql
    shell> useradd -g mysql mysql
    
    Эти команды добавляют группу mysql и пользователя mysql. Синтаксис для useradd и groupadd может немного отличаться в различных версиях Unix. Они также могут быть названы adduser и addgroup.
  5. Распакуйте дистрибутив в текущий каталог:
    shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
    
    Эта команда создает каталог, именованный mysql-VERSION. Дистрибутивы представляют собой сжатые архивы с именами вроде mysql-VERSION.tar.gz , где VERSION определяет версию дистрибутива.
  6. Перейдите в верхний каталог распакованного дистрибутива:
    shell> cd mysql-VERSION
    
    Обратите внимание, что в настоящее время Вы должны конфигурировать и формировать MySQL из этого каталога. Вы не можете формировать его, находясь в каком-то ином каталоге.
  7. Конфигурируйте и компилируйте все:
    shell> ./configure --prefix=/usr/local/mysql
    shell> make
    
    Когда Вы выполняете configure, Вы можете определять некоторые дополнительные параметры. Выполните ./configure --help, чтобы получить перечень опций. В разделе " 2.3.3 Типичные опции configure" обсуждаются некоторые из наиболее полезных параметров. Если происходит сбой скрипта configure, и Вы собираетесь посылать сообщение об этом на mysql@lists.mysql.com, чтобы попросить о помощи, пожалуйста, включите в письмо строки из файла config.log, которые, как Вы думаете, могут помочь решить проблему. Также включите последнюю тройку строк из вывода configure, если configure прерывается. Регистрируйте отчет ошибки, используя скрипт mysqlbug. Подробности в разделе "1.4.1 Как сообщать об ошибках и проблемах ". Если компиляция не проходит нормально, обратитесь к разделу "2.3.5 Проблемы компиляции".
  8. Установите готовый пакет:
    shell> make install
    
    Скорее всего, Вы должны выполнить эту команду как root.
  9. Создайте таблицы предоставления привилегий MySQL (необходимо только, если Вы не устанавливали MySQL прежде):
    shell> scripts/mysql_install_db
    
    Обратите внимание, что версии MySQL старше, чем Version 3.22.10, запускали сервер MySQL, когда Вы выполняли скрипт mysql_install_db. Это больше не так!
  10. Измените принадлежность бинарных файлов на root и задайте в качестве владельца каталога данных пользователя, от имени которого будет работать сервер mysqld:
    shell> chown -R root  /usr/local/mysql
    shell> chown -R mysql /usr/local/mysql/var
    shell> chgrp -R mysql /usr/local/mysql
    
    Первая команда изменяет атрибут владельца файлов (owner) на пользователя root, второй изменяет атрибут владельца каталога данных на пользователя mysql, а третий меняет атрибут группы владельца каталога данных (group) на группу mysql.
  11. Если Вы хотите, чтобы MySQL запустился автоматически, когда Вы загружаете Вашу машину, Вы можете копировать support-files/mysql.server в место, где Ваша система имеет файлы запуска. Большее количество информации может быть найдено непосредственно в скрипте support-files/mysql.server и в разделе "2.4.3 Автозапуск и завершение MySQL ".

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

shell> /usr/local/mysql/bin/safe_mysqld --user=mysql &

Если эта команда немедленно валится с диагностикой mysqld daemon ended, Вы можете найти некоторую информацию в файле mysql-data-directory/'hostname'.err. Вероятная причина в том, что Вы уже имеете запущенный сервер mysqld. Подробности в разделе "4.1.4 Запуск нескольких серверов MySQL на одной машине".

2.3.2 Применение патчей (заплаток)

Иногда заплаты появляются в списке рассылки или помещаются в области заплат сайта MySQL ( http://www.mysql.com/Downloads/Patches).

Чтобы применить заплату из списка рассылки, сохраните сообщение, в котором пришла заплата, перейдите в верхний каталог Вашего дерева исходников MySQL и введите оттуда команды:

shell> patch -p1 < patch-file-name
shell> rm config.cache
shell> make clean

Заплаты с FTP-сайта распространяются как простые текстовые файлы или как файлы, сжатые gzip. Примените простую заплату как показано выше для заплат из списка рассылки. Чтобы применить сжатую заплату, из верхнего каталога Вашего дерева исходников MySQL надо ввести следующее:

shell> gunzip < patch-file-name.gz | patch -p1
shell> rm config.cache
shell> make clean

После применения патча, выполните команды по настройке, компиляции и установке сервера. После make install перезапустите сервер.

Вы должны завершить работу сервера перед выполнением make install. Для этого используйте команду mysqladmin shutdown. Некоторые системы не позволяют Вам устанавливать новую версию программы, если она заменяет собой ту версию, которая в настоящее время выполняется.

2.3.3 Типичные опции configure

Скрипт configure дает Вам хороший контроль над тем, как Вы конфигурируете свой дистрибутив MySQL. Чтобы получить список опций, configure, выполните команду:

shell> ./configure --help

Некоторые из наиболее часто используемых параметров configure подробно описаны ниже:

  • Чтобы компилировать только клиентов и библиотеки MySQL, но не сервер, используйте опцию --without-server:
    shell> ./configure --without-server
    
    Если Вы не имеете компилятора C++, mysql не скомпилируется (есть одна программа-клиент, которая требует наличия C++). В этом случае Вы можете удалить код в выборе конфигурации, который проверяет наличие компилятора C++, и снова выполнить ./configure с опцией --without-server. Шаг компиляции все еще будет пробовать формировать mysql, но Вы можете игнорировать любые предупреждения относительно mysql.cc. Если make останавливается, попытайтесь применить make -k, чтобы сообщить, чтобы процесс продолжался, даже если происходят ошибки.
  • Если Вы не хотите, чтобы Ваши журналы и каталоги баз данных размещались под каталогом /usr/local/var, используйте вызов configure в следующем виде:
    shell> ./configure --prefix=/usr/local/mysql
    shell> ./configure --prefix=/usr/local \
                           --localstatedir=/usr/local/mysql/data
    
    Первая команда изменяет префикс установки так, чтобы все было установлено под /usr/local/mysql, а не в /usr/local. Вторая команда сохраняет заданный по умолчанию префикс установки, но отменяет заданное по умолчанию расположение для каталогов баз данных (обычно /usr/local/var) и изменяет его на /usr/local/mysql/data.
  • Если Вы используете Unix, и Вы хотите использовать сокет для MySQL, размещенный не в заданном по умолчанию расположении (обычно в каталоге /tmp или в /var/run), используйте такой вызов configure:
    shell> ./configure \
               --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
    
    Обратите внимание, что данный файл должен быть абсолютным именем! Вы можете также позже изменять расположение mysql.sock, используя файлы опций MySQL. Подробности в разделе "8.4.5 Как защищать или менять файл сокета MySQL /tmp/mysql.sock".
  • Если Вы хотите компилировать статически связанные программы (например, сделать двоичный дистрибутив с лучшим быстродействием или обойти проблемы с некоторыми дистрибутивами RedHat Linux), запустите configure примерно так:
    shell> ./configure --with-client-ldflags=-all-static \
                           --with-mysqld-ldflags=-all-static
    
  • Если Вы используете gcc и не имеете установленных библиотек libg++ или libstdc++, Вы можете сообщить, чтобы configure использовал gcc как Ваш компилятор C++:
    shell> CC=gcc CXX=gcc ./configure
    
    Когда Вы используете gcc как Ваш компилятор C++, он не будет пытаться компоновать с libg++ или libstdc++. Имеются некоторые общие системные переменные, которые надо установить в зависимости от того компилятора, который Вы используете:
    gcc 2.7.2.1CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
    egcs 1.0.3aCC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
    gcc 2.95.2CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"
    pgcc 2.90.29 или более новыйCFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti"
    В большинстве случаев Вы можете достичь приемлемо оптимальных файлов MySQL, используя параметры из таблицы выше, и добавляя следующие параметры в строку для вызова configure:
    --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) компилируются с полной оптимизацией и должны быть пригодны для большинства пользователей.Подробности в разделе "2.2.6 Двоичные версии MySQL, скомпилированные MySQL AB". Имеются некоторые вещи, которые Вы можете подправить, чтобы сделать версию более быстрой, но это только для продвинутых пользователей. Подробности в разделе "5.5.3 Как компиляция и компоновка воздействует на быстродействие MySQL".

    Если процесс построения кода валится с ошибкой создания разделяемой библиотеки libmysqlclient.so.# (`#' представляет собой код версии), Вы можете обойти эту проблему, задавая опцию --disable-shared в строке для вызова configure. В этом случае configure не будет формировать общедоступную библиотеку libmysqlclient.so.#.

  • Вы можете конфигурировать MySQL, чтобы не использовать значения DEFAULT для не пустых столбцов (то есть столбцов, которым не позволяют иметь значение NULL). Это заставляет инструкции INSERT генерировать ошибку, если Вы явно не определяете значения для всех столбцов, которые требуют значения не-NULL. Чтобы подавить использование значений по умолчанию, выполните выбор конфигурации подобно этому:
    shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
    
  • По умолчанию MySQL использует набор символов ISO-8859-1 (Latin1). Чтобы изменять заданный по умолчанию набор, используйте опцию --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. Подробности в разделе "4.6.1 Набор символов, используемый для данных и сортировки". Если Вы хотите преобразовывать символы между клиентом и сервером, Вы должны изучить команду SET OPTION CHARACTER SET. Подробности в разделе "5.5.6 Синтаксис SET".

    Предупреждение: Если Вы изменяете наборы символов, создав любые таблицы, Вы должны выполнить на каждой таблице myisamchk -r -q. Иначе Ваши индексы могут сортироваться неправильно. Это может случиться, если Вы устанавливаете MySQL, создаете некоторые таблицы, затем реконфигурируете MySQL, чтобы использовать иной набор символов, и повторно устанавливаете его. С опцией --with-extra-charset=LIST Вы можете определять, которые дополнительные наборы символов должны быть скомпилированы в код сервера. Здесь LIST является или списком набора символов, разделяемых пробелами с параметром complex, чтобы включить все символы, которые не могут быть динамически загружены, или all, чтобы включить все наборы символов.

  • Чтобы конфигурировать MySQL с отладкой кода, используйте опцию --with-debug:
    shell> ./configure --with-debug
    
    Это заставляет включить безопасный распределитель памяти, что может находить некоторые ошибки, и обеспечивает вывод относительно того, что происходит. Подробности в разделе " 6.1 Отладка сервера MySQL".
  • Если Ваши клиентские программы используют потоки, Вы должны также компилировать поточно-безопасную версию библиотеки MySQL-пользователей с параметром выбора конфигурации --enable-thread-safe-client. Это создаст библиотеку libmysqlclient_r, с которой Вы должны скомпоновать свои прикладные программы.
  • Параметры, которые относятся к специфическим системам, могут быть найдены в специфическом для системы разделе этого руководства. Подробности в разделе "2.6 Замечания по отдельным операционным системам".

2.3.4 Установка из дерева исходников для разработки

ПРЕДОСТЕРЕЖЕНИЕ: Вы должны читать этот раздел только, если Вы заинтересованы в помощи авторам и отладке кода. Если Вы только хотите получить MySQL и использовать его на своей системе, Вы должны использовать стандартный дистрибутив (двоичный или с исходниками).

Чтобы получить самое современное дерево источников разработок, используйте эти команды:

  1. Скачайте BitKeeper с сайта http://www.bitmover.com/cgi-bin/download.cgi. Вам нужна версия Bitkeeper 2.0 или более новая для доступа к репозитарию.
  2. Следуйте командам, чтобы установить его.
  3. Когда BitKeeper установлен, надо использовать эту команду, если Вы хотите получить код MySQL 3.23:
    shell> bk clone bk://work.mysql.com:7000 mysql
    

    Для получения кода версии 4.0, используйте такую команду:

    shell> bk clone bk://work.mysql.com:7001 mysql-4.0
    

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

  4. Вы будете нуждаться в GNU autoconf, automake, libtool и макропроцессоре m4, чтобы выполнить следующий набор команд. Если Вы получаете некоторую странную ошибку в течение этой стадии, проверьте, что Вы действительно имеете установленный libtool!
    shell> cd mysql
    shell> bk -r edit
    shell> aclocal; autoheader; autoconf;  automake;
    shell> ./configure  # Add your favorite options here
    shell> make
    

    Совокупность стандартных скриптов выбора конфигурации размещена в подкаталоге BUILD. В самом простом случае Вы можете использовать BUILD/compile-pentium-debug. Чтобы компилировать на различной архитектуре, измените скрипт, убрав из него параметры, которые являются специфическими для Pentium.

  5. Когда формирование выполнено, запустите make install. Будьте внимательным с этим на промышленной машине: команда может записывать поверх Вашей работающей установки. Если Вы имеете другую установку MySQL, задайте для ./configure другие значения для параметров prefix, tcp-port и unix-socket-path.
  6. Если Вы дошли до стадии make, но дистрибутив не компилируется, пожалуйста, сообщите об этом на bugs@lists.mysql.com. Если Вы установили последние версии требуемых инструментальных средств GNU, и они разрушаются при попытке обработать наши файлы конфигурации, пожалуйста, сообщите об этом. Однако, если Вы выполняете aclocal и получаете ошибку command not found или подобную проблему, не сообщайте об этом. Вместо этого, удостоверьтесь, что все необходимые инструментальные средства установлены, и что Ваша переменная PATH установлена правильно, так что Ваша оболочка может находить их.
  7. После того, как начальная операция bk clone получила исходное дерево, Вы должны периодически выполнять bk pull, чтобы получать модификации.
  8. Вы можете исследовать хронологию изменений дерева со всеми diffs, используя bk sccstool. Если Вы видите некоторый забавный diffs или код, относительно которого есть вопросы, без колебаний посылайте запрос на internals@lists.mysql.com. Также, если Вы думаете, что Вы имеете лучшую идею относительно того, как что-то сделать, посылайте e-mail на тот же самый адрес с патчем. bk diffs произведет заплату для Вас после того, как Вы сделали изменения для исходника. Если Вы не имеете времени на кодирование Вашей идеи, только пошлите ее описание.
  9. BitKeeper имеет хорошую утилиту справки, к которой Вы можете обращаться через bk helptool.

2.3.5 Проблемы при компиляции?

Все программы MySQL компилируются чисто, без предупреждений, на Solaris с применением gcc. На других системах предупреждения могут происходить из-за различий в системе и включаемых файлов. В разделе "2.3.6 Замечания по MIT-pthreads" есть подробности для предупреждений, которые могут происходить при использовании MIT-pthreads. Для других проблем проверьте список ниже.

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

  • Если configure выполнен после того, как он уже был выполнен, это может использовать информацию, которая была собрана в течение предыдущего обращения. Эта информация сохранена в файле config.cache. Когда configure запускается, он ищет этот файл и читает его содержание, если файл существует, при условии, что информация все еще правильна. При реконфигурировании это не так.
  • Каждый раз, когда Вы выполняете configure, Вы должны снова выполнить make, чтобы перетранслировать пакет. Однако, Вы можете удалять старые объектные файлы потому, что они компилировались, используя иные параметры конфигурации.

Чтобы избавиться от старой информации о конфигурации или объектных файлов, выполните эти команды перед повторным запуском configure:

shell> rm config.cache
shell> make clean

Альтернативно, Вы можете выполнять make distclean.

Список ниже описывает некоторые из проблем при компиляции MySQL, которые были найдены наиболее часто:

  • Если Вы получаете ошибки при компиляции sql_yacc.cc, типа тех что показаны ниже, Вы, вероятно, исчерпали память или место для свопа:
    Internal compiler error: program cc1plus got fatal signal 11
      или
    Out of virtual memory
      или
    Virtual memory exhausted
    
    Проблема состоит в том, что gcc требует огромные объемы памяти для компиляции sql_yacc.cc со встроенными функциями. Попробуйте вызвать configure с опцией --with-low-memory:
    shell> ./configure --with-low-memory
    
    Эта опция добавляет -fno-inline, если Вы используете gcc, или -O0, если Вы используете что-то иное. Вы должны опробовать опцию --with-low-memory даже, если Вы имеете так много памяти, что не ожидаете ее исчерпания. Эта проблема наблюдалась даже на системах с громадными аппаратными конфигурациями, и опция --with-low-memory обычно ее решает.
  • По умолчанию configure указывает c++ как имя компилятора и GNU c++ компонуется с -lg++. Если Вы используете gcc, такое поведение может вызать проблемы в течение конфигурации, типа этой:
    configure: error: installation or configuration problem:
    C++ compiler cannot create executables.
    
    Вы можете также наблюдать, что проблемы в течение трансляции касаются g++, libg++ или же libstdc++.

    Одна из причин этих проблем в том, что Вы не можете иметь g++, или Вы можете иметь g++, но не libg++ или libstdc++. Изучите файл config.log. Он должен содержать точную причину того, почему Ваш компилятор c++ не работал! Чтобы обойти эти проблемы, Вы можете использовать gcc как компилятор C++. Попробуйте устанавливать системную переменную CXX в значение "gcc -O3". Например, так:

    shell> CXX="gcc -O3" ./configure
    
    Это работает потому, что gcc компилирует исходники C++ также, как g++, но по умолчанию не выполняет компоновку с библиотеками libg++ или libstdc++. Другой способ решить эти проблемы, конечно, состоит в том, чтобы установить g++, libg++ и libstdc++.
  • Если Ваша компиляция свалилась с ошибками, типа любой из следующих, Вы должны обновить свою версию make до GNU make:
    making all in mit-pthreads
    make: Fatal error in reader: Makefile, line 18:
    Badly formed macro assignment
      или
    make: file `Makefile' line 18: Must be a separator (:
      или
    pthread.h: No such file or directory
    
    Solaris и FreeBSD, как известно, имеют ненадежные программы make. GNU make Version 3.75 работает.
  • Если Вы хотите определять флажки, которые нужно использовать Вашим компиляторам C или C++, делайте это, добавляя флажки к системным переменным CFLAGS и CXXFLAGS. Вы можете также определять имена трансляторов, используя переменные CC и CXX. Например:
    shell> CC=gcc
    shell> CFLAGS=-O3
    shell> CXX=gcc
    shell> CXXFLAGS=-O3
    shell> export CC CFLAGS CXX CXXFLAGS
    
    Подробности в разделе "2.2.6 Двоичные версии MySQL, скомпилированные MySQL AB", там есть список определений, которые были найдены полезными на различных системах.
  • Если Вы получаете сообщение об ошибке, подобное приведенному ниже, Вы должны обновить gcc:
    client/libmysql.c:273: parse error before `__attribute__'
    
    gcc 2.8.1, как известно, работает, но рекомендуется использовать вместо него gcc 2.95.2 или egcs 1.0.3a.
  • Если Вы получаете ошибки типа тех, что показаны ниже, при компиляции mysqld, стало быть скрипт configure правильно не обнаруживали тип последнего параметра для вызовов accept(), getsockname() или getpeername():
    cxx: Error: mysqld.cc, line 645: In this statement, the referenced
         type of the pointer value "&length" is "unsigned long", which
         is not compatible with "int".
    new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
    

    Чтобы исправить это, отредактируйте файл config.h (который сгенерирован configure). Ищите эти строки:

    /* Define as the base type of the last arg to accept */
    #define SOCKET_SIZE_TYPE XXX
    
    Смените XXX на size_t или int, в зависимости от Вашей операционной системы. Обратите внимание, что Вы должны делать это, каждый раз, когда Вы выполняете configure, поскольку configure всегда пересоздает файл config.h.
  • Файл sql_yacc.cc сгенерирован из sql_yacc.yy. Обычно процесс компиляции не должен создавать sql_yacc.cc потому, что MySQL поставляется с уже сгенерированной копией. Однако, если Вы должны освежить данный файл, Вы можете сталкиваться с этой ошибкой:
    "sql_yacc.yy", line xxx fatal: default action causes potential...
    
    Это знак того, что Ваша версия yacc несовершенная. Вы, вероятно, должны установить bison (GNU-версия yacc) и использовать его вместо своей версии.
  • Если Вы должны отладить mysqld или MySQL-клиента, запустите configure с опцией --with-debug, это перетранслирует и скомпонует Вашу клиентуру с новой библиотекой пользователей. Подробности в разделе " 6.2 Отладка клиентов MySQL".

2.3.6 Замечания по MIT-pthreads

Этот раздел описывает некоторые из проблем в использовании MIT-pthreads.

Обратите внимание, что в Linux Вы не должны использовать MIT-pthreads, а установить вместо него LinuxThreads! Подробности в разделе "2.6.1 Замечания по Linux (все версии Linux)".

Если Ваша система не обеспечивает местную поддержку потоков, Вы должны формировать MySQL с применением пакета MIT-pthreads. Это включает старые системы FreeBSD, SunOS 4.x, Solaris 2.4 и ранее и некоторые другие. Подробности в разделе "2.2.2 Операционные системы, поддерживаемые MySQL".

  • На большинстве систем, Вы можете вынуждать MIT-pthreads использоваться, вызовом configure с опцией --with-mit-threads:
    shell> ./configure --with-mit-threads
    

    Формирование дистрибутива не в каталоге исходников не поддержано при использовании MIT-pthreads, поскольку разработчикам MySQL лень править код.

  • Проверки, которые определяют, использовать ли MIT-pthreads, происходят только в течение части процесса конфигурации, который имеет дело с кодом сервера. Если Вы конфигурировали дистрибутив, используя опцию --without-server, чтобы формировать только код пользователя, клиентура не будет знать, используется или нет MIT-pthreads, и по умолчанию использует Unix-подключения через сокеты. Поскольку Unix-сокеты не работают под MIT-pthreads, это означает, что Вы будете должны использовать параметры -h или --host, когда Вы выполняете клиентов.
  • Когда MySQL компилируется, используя MIT-pthreads, блокировка системы по умолчанию не используется по причинам эффективности. Вы можете сообщить, чтобы сервер использовал блокировку системы опцией --use-locking.
  • Иногда pthread-команда bind() не может связаться с сокетом без любых сообщений об ошибках (по крайней мере, на Solaris). Результат то, что все подключения к серверу терпят неудачу. Например:
    shell> mysqladmin version
    mysqladmin: connect to server at '' failed;
    error: 'Can't connect to mysql server on localhost (146)'
    
    Решение для этого состоит в том, чтобы перезапустить mysqld.
  • С MIT-pthreads системный вызов sleep() не прерывается сигналом SIGINT (break). Это важно только, когда Вы выполняете mysqladmin --sleep. Вы должны ждать завершения обращения sleep(). Только после этого процесс наконец завершится.
  • При компоновке Вы можете получать предупреждающие сообщения подобно этим (по крайней мере, на Solaris). Они могут игнорироваться:
    ld: warning: symbol `_iob' has differing sizes:
        (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
    file /usr/lib/libc.so value=0x140);
        /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
    ld: warning: symbol `__iob' has differing sizes:
        (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
    file /usr/lib/libc.so value=0x140);
        /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
    
  • А вот эти предупреждения тоже можно спокойно не замечать:
    implicit declaration of function `int strtoll(...)'
    implicit declaration of function `int strtoul(...)'
    

Поиск

 

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