На главную Напишите нам! Напишите нам!
14-11-2012
колонтитул в word 2007, 0000002111

Установка исходного дистрибутива MySQL (Проблемы с компиляцией?)

На Solaris или Linux с использованием компилятора gcc все программы MySQL у нас компилируются чисто и без каких-либо предупреждений. В других системах могут возникать предупреждения из-за различий включаемых системных файлов (по поводу предупреждений, которые могут возникать при использовании потоков 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
    

    Проблема заключается в том, что для компиляции sql_yacc.cc со встраиваемыми функциями компилятору gcc требуется значительное количество памяти. Попробуйте произвести запуск 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++ ! Чтобы обойти эти проблемы, можно в качестве компилятора C++ использовать gcc. Попробуйте установить переменную окружения CXX в gcc -O3. Например:

    shell> CXX="gcc -O3" ./configure
    

    Эта команда работает, поскольку gcc компилирует исходные коды C++ так же хорошо, как и g++, но по умолчанию не линкует libg++ или libstdc++. Есть, конечно, и другая возможность устранения этих проблем, которая заключается в установке g++, libg++ и libstdc++. Однако мы не рекомендовали бы использовать libg++ или libstdc++ с MySQL, поскольку это только увеличит размер бинарного кода mysqld без предоставления каких-либо преимуществ. Некоторые версии этих библиотек в прошлом также вызывали непонятные проблемы у пользователей MySQL.

  • Если процесс компиляции завершается аварийно и выводятся такие ошибки, как приведены ниже, то вам следует сделать апгрейд своей версии 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 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
    

    В разделе Бинарные коды 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) и использовать вместо yacc.

  • При необходимости отладки mysqld или клиента MySQL запустите configure с опцией --with-debug, затем перекомпилируйте и слинкуйте эти программы с новой клиентской библиотекой.

Отладка клиента MySQL

Чтобы иметь возможность отладки клиента MySQL с помощью встроенного отладчика, необходимо сконфигурировать сборку MySQL с --with-debug или --with-debug=full.

Перед запуском клиента следует установить переменную окружения MYSQL_DEBUG:

shell> MYSQL_DEBUG=d:t:O,/tmp/client.trace
shell> export MYSQL_DEBUG

Это заставит клиента генерировать трассировочный файл в /tmp/client.trace.

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

shell> mysql --debug=d:t:O,/tmp/client.trace

приведенный выше вызов снабдит вас полезной информацией для отчета об ошибках.

Если ваш клиент, имея "правильный" на первый взгляд код, отказывается устойчиво работать, необходимо проверить, соответствует ли включаемый файл mysql.h файлу вашей библиотеки mysql. Очень распространенная ошибка заключается в том, что используется старый файл mysql.h из MySQL старой установки с новой библиотекой MySQL.

Обзор быстрой установки MySQL

Для установки 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 &
или
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &

если запускается версия MySQL 4.x.

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

Если вы используете исходный код RPM, выполните следующую команду:

shell> rpm --rebuild --clean MySQL-VERSION.src.rpm

Эта команда создаст бинарный код RPM, который вы можете установить.

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

Ниже следует более подробное описание установки.

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

  1. Выберите каталог, в котором вы хотите распаковать дистрибутив, и откройте его.

  2. Если вы заинтересованы в том, чтобы использовать с MySQL таблицы Berkeley DB, то необходимо получить версию исходного кода таблиц Berkeley DB с патчами. Кроме того, прежде чем предпринимать какие-либо действия, ознакомьтесь, пожалуйста, с разделом, посвященным таблицам Berkeley DB. Дистрибутивы исходного кода MySQL поставляются в виде сжатых архивов tar с именами наподобие mysql-VERSION.tar.gz, где VERSION представляет собой число.

  3. Добавьте пользователя и группу для запуска mysqld следующим образом:

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    

    Эти команды добавляют группу mysql и пользователя mysql. Данный синтаксис для useradd и groupadd в различных версиях Unix может иметь некоторые отличия. Приведенные выше команды могут также иметь другие названия - adduser и addgroup соответственно. Пользователю и группе можно назначить какие-нибудь иные, отличные от mysql имена.

  4. Распакуйте дистрибутив в текущем каталоге:

    shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
    

    Эта команда создает каталог с именем mysql-VERSION.

  5. Перейдите из каталога распакованного дистрибутива в каталог высшего уровня:

    shell> cd mysql-VERSION
    

    Учтите, что теперь необходимо конфигурировать и компоновать MySQL из этого каталога высшего уровня. Построить MySQL в другом каталоге нельзя.

  6. Сформируйте релиз и скомпилируйте весь код:

    shell> ./configure --prefix=/usr/local/mysql
    shell> make
    

    При запуске configure вам, возможно, понадобится указать некоторые опции. Чтобы получить список опций, запустите ./configure --help. Некоторые наиболее полезные опции рассмотрены в разделе Типичные опции configure. Если configure не работает и вы собираетесь посылать письмо с просьбой о помощи на <mysql@lists.mysql.com>, то просьба включить в него те строки из config.log, которые, по вашему мнению, могут помочь решить данную проблему. Кроме того, если выполнение configure преждевременно прекращается, в письмо следует включить несколько последних строк вывода из configure. Для отсылки отчета об ошибке используйте скрипт mysqlbug. Если компиляция не выполняется, то обращайтесь к разделу Проблемы с компиляцией?, в котором содержатся рекомендации по решению ряда часто встречающихся проблем.

  7. Установите весь код:

    shell> make install
    

    Возможно, необходимо запустить эту команду как root.

  8. Создайте таблицы привилегий MySQL (это необходимо только в случае, если нет ранее установленной версии MySQL ):

    shell> scripts/mysql_install_db
    

    Учтите, что в версиях MySQL до 3.22.10 работа сервера MySQL начиналась при запуске mysql_install_db. Сейчас это не так!

  9. Измените принадлежность бинарного кода 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, вторая - атрибут owner каталога данных на пользователя mysql, а третья - атрибут group на группу mysql.

  10. Если вы хотите установить поддержку интерфейса Perl DBI/DBD, обращайтесь к разделу.

  11. Если вы хотели бы, чтобы работа MySQL начиналась автоматически при начальной загрузке компьютера, то можно скопировать support-files/mysql.server в то место, где находятся файлы запуска вашей системы. Более подробную информацию можно найти в самом скрипте support-files/mysql.server и в разделе.

После завершения установки данный дистрибутив необходимо проинициализировать и протестировать:

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

Если эта команда прекращает работу немедленно после останова демона mysqld, то некоторую информацию можно найти в файле mysql-data-directory/'hostname'.err. Причина, возможно, заключается в том, что уже запущен другой сервер mysqld.

колонтитулы в word 2007, 000000211111
Класс!
 
Яндекс.Метрика
Копирование возможно при указании прямой индексируемой гиперссылки
0000002