The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Базы данных, SQL" / Оглавление документа

2 Установка MySQL

Эта глава описывает, как получить и установить MySQL:

2.1 Быстрая стандартная установка MySQL

2.1.1 Установка MySQL на Linux

Рекомендуемый способ установки MySQL на Linux: используя файл RPM. MySQL RPM в настоящее время формируются на системе RedHat Version 6.2, но должны работать и на других версиях Linux, которые поддерживают rpm и используют библиотеку glibc.

Если Вы имеете проблемы с файлом RPM, например, если Вы получаете ошибку ``Sorry, the host 'xxxx' could not be looked up'', почитайте раздел "2.6.1.1 Замечания по Linux для двоичного дистрибутива".

RPM-файлы, которые Вам понадобятся:

Чтобы увидеть все файлы в пакете RPM, выполните:

shell> rpm -qpl MySQL-VERSION.i386.rpm

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

shell> rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm

Чтобы установить только клиентский пакет, выполните:

shell> rpm -i MySQL-client-VERSION.i386.rpm

RPM помещает данные в /var/lib/mysql. RPM также создает соответствующие записи в /etc/rc.d, чтобы запустить сервер автоматически при начальной загрузке. Имейте в виду, что старый файл запуска (если таковой был Вами создан) будет затерт.

После установки из файлов RPM mysqld daemon должен работать, и Вы должны теперь иметь возможность начать использовать MySQL. Подробности в разделе "2.4 Послеустановочная настройка и тестирование".

Если что-то пошло не так, Вы можете найти подробную информацию в разделе "2.7 Установка MySQL из двоичного дистрибутива".

2.1.2 Установка MySQL на Windows

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

Если Вы не имеете копию дистрибутива MySQL, Вы должны сначала скачать ее с http://www.mysql.com/downloads/mysql-3.23.html.

Если Вы планируете соединяться с MySQL из некоторой другой программы, Вы, вероятно, также будете нуждаться в драйвере MyODBC. Вы можете скачать его с http://www.mysql.com/downloads/api-myodbc.html.

Чтобы устанавливать любой дистрибутив, разожмите его программой unzip в некотором пустом каталоге и выполните программу Setup.exe.

По умолчанию MySQL-Windows конфигурирован так, чтобы быть установленным в C:\mysql. Если Вы хотите устанавливать MySQL в другом месте, установите его сначала в C:\mysql, а потом переместите установку в то, где Вы хотите ее видеть. Если Вы перемещаете MySQL, Вы должны указать, где все размещено, с помощью опции --basedir при запуске сервера. Например, если Вы переместили MySQL в D:\programs\mysql, Вы должны запустить mysqld так:

C:\> D:\programs\mysql\bin\mysqld --basedir D:\programs\mysql

Использование mysqld --help отображает все параметры, которые понимает mysqld!

Со всеми более новыми MySQL версиями Вы можете также создавать файл C:\my.cnf, который хранит любые заданные по умолчанию параметры для сервера MySQL. Скопируйте файл \mysql\my-xxxxx.cnf в C:\my.cnf и отредактируйте его, чтобы он соответствовал Вашей установке. Обратите внимание, что Вы должны определить все пути с помощью `/' вместо `\'. Если Вы используете `\', Вы должны определить этот символ дважды, так как `\' представляет собой управляющий символ в MySQL.

Начиная с MySQL 3.23.38, Windows-дистрибутив включает файлы для нормального и для MySQL-Max. Основная польза от использования нормальной версии mysqld.exe в том, что она работает немного быстрее и использует меньшее количество ресурсов.

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

mysqldОткомпилирован с полной отладкой и автоматической проверкой распределения памяти, символическими связями, таблицами BDB и InnoDB.
mysqld-optОптимизирован без поддержки для транзакционных таблиц.
mysqld-ntОптимизирован для NT с поддержкой именованных каналов. Вы можете выполнять эту версию и на Win98, но в этом случае, никакие именованные каналы не будут созданы, и Вы должны иметь установленный TCP/IP.
mysqld-maxОптимизирован с поддержкой символических связей, а также таблиц BDB и InnoDB.
mysqld-max-ntПодобно mysqld-max, но с поддержкой именованных каналов.

Все приведенные выше бинарные файлы оптимизированы для процессора Pentium Pro, но должны работать на любом процессоре Intel >= i386.

ОБРАТИТЕ ВНИМАНИЕ: Если Вы хотите использовать таблицы InnoDB, имеются некоторые параметры запуска, которые должны быть определены в Вашем файле my.ini! Подробности в разделе " 7.6.2 Опции запуска InnoDB".

2.2 Общие проблемы установки

2.2.1 Как получить MySQL

Проверьте домашнюю страницу MySQL http://www.mysql.com для поиска информации относительно текущей версии и того, где ее искать.

Наше основное зеркало загрузки размещено на:

http://mirrors.sunsite.dk/mysql

Если Вы заинтересованы в создании своего зеркала MySQL, Вы можете использовать анонимный rsync: rsync://sunsite.dk/ftp/mirrors/mysql . Пожалуйста, пошлите e-mail на webmaster@mysql.com с сообщением о зеркале, которое будет добавлено к приведенному ниже списку.

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

Пожалуйста, сообщите о плохих или устаревших зеркалах на webmaster@mysql.com.

Европа:

Северная Америка:

Южная Америка:

Азия:

Африка:

2.2.2 ОС, поддерживаемые MySQL

Авторы используют GNU Autoconf, так что возможно портирование MySQL на все современные системы с поддержкой потоков Posix и языка C++. C++ нужен только, чтобы откомпилировать код клиента, но не потоков. Все программное обеспечение разрабатывается прежде всего на Sun Solaris (Versions 2.5-2.7) и на SuSE Linux Version 7.x.

Обратите внимание, что для многих операционных систем, местная поддержка потоков работает только в последних версиях. MySQL компилировался успешно на следующих комбинациях пакетов потоков/операционных систем:

Обратите внимание, что не все платформы одинаково хорошо подходят для работы MySQL. Как хорошо некоторая платформа подходит для задания с высокой загрузкой, определена следующими факторами:

Основываясь на вышеупомянутых критериях, можно сказать, что самые лучшие платформы для MySQL на сегодняшний день: на x86 SuSE Linux 7.1, с ядром 2.4 и ReiserFS (или любой подобный дистрибутив Linux), а на Sparc Solaris 2.7 или 2.8. FreeBSD занимает третье место, но в ней идет реконструкция библиотеки потоков, глядишь, и выплывет наверх...

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

2.2.3 Какую версию MySQL использовать

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

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

В следующих случаях лучше использовать именно исходники:

MySQL при своем именовании версий использует числа выпуска, которые состоят из трех чисел и суффикса. Например, имя выпуска, подобное mysql-3.21.17-beta, интерпретируется таким образом:

Все версии MySQL проходят стандартные и эталонные тесты, чтобы гарантировать, что они относительно безопасны.

Обратите внимание, что все выпуски были проверены по крайней мере с:

Внутренний набор теста
Это часть промышленной системы заказчика. Имеет много таблиц с сотнями мегабайт данных.
Эталонный набор MySQL
Это выполняет диапазон общих запросов. Представляет собой тест, чтобы видеть, сделал ли последний пакет оптимизации код фактически быстрее.
Тест crash-me
Этот тест пробует определять то, какие свойства база данных поддерживает, и каковы ее возможности и ограничения.

2.2.4 Размещение установки

Этот раздел описывает заданное по умолчанию размещение каталогов, созданных при установке.

Двоичный дистрибутив установлен, распаковываясь в расположение установки, которое Вы выбираете (обычно /usr/local/mysql), и создает следующие каталоги в этом расположении:

КаталогСодержимое
binКлиентские программы и сервер mysqld
dataФайлы протоколов и баз данных
includeЗаголовочные (header) файлы
libБиблиотеки
scriptsmysql_install_db
share/mysqlФайлы сообщений об ошибках
sql-benchБенчмарки (эталонные тесты)

Дистрибутив из исходных кодов будет установлен после того, как Вы его сконфигурируете и откомпилируете. По умолчанию, шаг установки копирует файлы в следующие подкаталоги в /usr/local:

КаталогСодержимое
binКлиентские программы и скрипты
include/mysqlЗаголовочные (header) файлы
infoДокументация в формате Info
lib/mysqlБиблиотеки
libexecСервер mysqld
share/mysqlФайлы сообщений об ошибках
sql-benchБенчмарки (эталонные тесты)+тест crash-me
varФайлы протоколов и баз данных

Внутри каталога установок, размещение установки из исходного кода отличается от таковой из двоичного дистрибутива так:

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

2.2.5 Как обновлять версию

MySQL развивается быстро. MySQL AB использует следующую стратегию при модифицировании MySQL:

Текущий устойчивый выпуск: Version 3.23. Авторы пакета уже переместили активную разработку в Version 4.0. Ошибки все еще будут отлавливаться и исправляться в устойчивой версии по мере их обнаружения.

2.2.6 Двоичные версии MySQL, откомпилированные MySQL AB

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

Эти дистрибутивы сгенерированы scripts/make_binary_distribution и сконфигурированы со следующими трансляторами и параметрами:

SunOS 4.1.4 2 sun4c с gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-assembler
SunOS 5.5.1 (и выше) sun4u с egcs 1.0.3a или 2.90.27 или 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 --with-extra-charsets=complex --enable-assembler
SunOS 5.6 i86pc с gcc 2.8.1
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
Linux 2.0.33 i386 с pgcc 2.90.29 (egcs 1.0.3a)
CFLAGS="-O3 -mpentium -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentium -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-extra-charsets=complex
Linux 2.2.x для x686 с gcc 2.95.2
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 --disable-shared --with-extra-charset=complex
SCO 3.2v5.0.4 i386 с gcc 2.7-95q4
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
AIX 2 4 с gcc 2.7.2.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
OSF1 V4.0 564 alpha с gcc 2.8.1
CC=gcc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
Irix 6.3 IP32 с gcc 2.8.0
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
BSDI BSD/OS 3.1 i386 с gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
BSDI BSD/OS 2.1 i386 с gcc 2.7.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex

Любой, кто имеет более оптимальные параметры для любой из конфигураций, перечисленных выше, может всегда отправлять по почте их в лист рассылки разработчиков по адресу internals@lists.mysql.com.

RPM-дистрибутивы до MySQL Version 3.22 создавались пользователями. Начиная с версии Version 3.22, RPM-пакеты генерируются в MySQL AB.

Если Вы хотите компилировать версию для отладки MySQL, Вы должны добавить --with-debug или --with-debug=full к вышеупомянутым строкам выбора конфигурации и удалить все параметры -fomit-frame-pointer.

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> ./bin/mysql_install_db
shell> ./bin/safe_mysqld --user=mysql &

Это создает базу данных mysql, которая хранит все привилегии, базу данных test, которую Вы можете использовать, чтобы проверить MySQL, а также записи для пользователя, который выполняет mysql_install_db и для администратора root (без любых паролей). Это также запускает сервер mysqld.

Скрипт mysql_install_db не будет перезаписывать старые таблицы привилегии, так что должен безопасно выполняться в любых обстоятельствах. Если Вы не хотите иметь базу данных test, Вы можете удалить ее командой mysqladmin -u root drop test.

Тестирование наиболее легко выполняется из верхнего каталога дистрибутива MySQL. Для двоичного дистрибутива это Ваш каталог установки (обычно что-то вроде /usr/local/mysql). Для исходников это основной каталог Вашего дерева исходного кода MySQL.

В командах, показанных ниже в этом разделе и в следующих подразделах, BINDIR означает путь к месту, в которое установлены программы, подобные mysqladmin и safe_mysqld. Для двоичного дистрибутива это каталог bin внутри дистрибутива. Для исходников BINDIR, вероятно, /usr/local/bin, если Вы не определили другой каталог установок вместо /usr/local, когда Вы выполнили configure. EXECDIR задает расположение, в которое установлен сервер mysqld. Для двоичного дистрибутива это BINDIR. Для исходников EXECDIR, вероятно, будет /usr/local/libexec.

Тестирование подробно описано ниже:

  1. В случае необходимости запустите сервер mysqld и установите начальные таблицы предоставления привилегий MySQL, содержащие привилегии, которые определяют, как пользователям позволяется соединяться с сервером. Это обычно сделается скриптом mysql_install_db:
    shell> scripts/mysql_install_db
    

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

    Скрипт mysql_install_db создает шесть таблиц (user, db, host, tables_priv, columns_priv и func) в базе данных mysql. Описание начальных привилегий дано в разделе "4.3.4 Установка начальных привилегий MySQL". Кратко, эти привилегии позволяют MySQL-пользователю root делать что угодно, а любому другому пользователю только создавать или использовать базы данных с именем 'test' или начинающемся на test_.

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

    mysqld: Can't find file: 'host.frm'
    
    Вышеупомянутое может также случаться с двоичным дистрибутивом MySQL, если Вы не запускаете MySQL, выполняя именно ./bin/safe_mysqld! Подробности в разделе "4.7.2 safe_mysqld, обертка вокруг mysqld". Вы должны выполнить mysql_install_db как root. Однако, если Вы считаете это невозможным, можете выполнять сервер MySQL как непривилегированный пользователь (не-root), при условии, что этот пользователь может читать и писать файлы в каталоге баз данных. Команды для управления MySQL от имени непривилегированного пользователя есть в разделе "8.3.2 Как запустить MySQL от имени нормального пользователя". Если Вы имеете проблемы с mysql_install_db, изучите раздел "2.4.1 Проблемы с запуском mysql_install_db". Имеются некоторые варианты запуска mysql_install_db, поскольку это обеспечивается в дистрибутиве MySQL: Для большего количества информации относительно этих вариантов изучите раздел "4.3.4 Установка начальных привилегий MySQL".
  2. Запустите сервер MySQL:
    shell> cd mysql_installation_directory
    shell> bin/safe_mysqld &
    
    Если Вы имеете проблемы при запуске сервера, обратитесь за дополнительной информацией к разделу "2.4.2 Проблемы при запуске сервера MySQL".
  3. Используйте mysqladmin, чтобы проверить, что сервер запустился. Следующие команды обеспечивают простой тест, чтобы проверить, что сервер работает и отвечает на подключения:
    shell> BINDIR/mysqladmin version
    shell> BINDIR/mysqladmin variables
    
    Вывод mysqladmin version немного изменяется в зависимости от Вашей платформы и версии MySQL, но должен быть подобен показанному ниже:
    shell> BINDIR/mysqladmin version
    mysqladmin  Ver 8.14 Distrib 3.23.32, for linux on i586
    Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license
    
    Server version          3.23.32-debug
    Protocol version        10
    Connection              Localhost via Unix socket
    TCP port                3306
    UNIX socket             /tmp/mysql.sock
    Uptime:                 16 sec
    
    Threads: 1  Questions: 9  Slow queries: 0  Opens: 7
    Flush tables: 2  Open tables: 0 Queries per second avg: 0.000
    Memory in use: 132K  Max memory used: 16773K
    
    Чтобы узнать подробно о том, что еще Вы можете делать с BINDIR/mysqladmin, вызовите программу с опцией --help.
  4. Проверьте, что Вы можете завершить сервер:
    shell> BINDIR/mysqladmin -u root shutdown
    
  5. Проверьте, что Вы можете перезапускать сервер. Делайте это, используя safe_mysqld или непосредственно mysqld. Например:
    shell> BINDIR/safe_mysqld --log &
    
    Если safe_mysqld сбоит, попробуйте запустить его из каталога установки MySQL, если Вы еще не там. Если это не работает, обратитесь за подробностями к разделу "2.4.2 Проблемы при запуске сервера MySQL".
  6. Выполните некоторые простые тесты, чтобы проверить, что сервер работает. Вывод должен быть подобен тому, что показывается ниже:
    shell> BINDIR/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    +-----------+
    
    shell> BINDIR/mysqlshow mysql
    Database: mysql
    +--------------+
    |    Tables    |
    +--------------+
    | columns_priv |
    | db           |
    | func         |
    | host         |
    | tables_priv  |
    | user         |
    +--------------+
    
    shell> BINDIR/mysql -e "select host,db,user from db" mysql
    +------+--------+------+
    | host | db     | user |
    +------+--------+------+
    | %    | test   |      |
    | %    | test_% |      |
    +------+--------+------+
    
    Имеется также эталонный набор тестов в каталоге sql-bench (в каталоге установки MySQL), который Вы можете использовать, чтобы сравнить, как MySQL выполняется на различных платформах. Каталог sql-bench/Results хранит результаты выполнения на разных системах. Чтобы выполнять все тесты, введите эти команды:
    shell> cd sql-bench
    shell> run-all-tests
    
    Если Вы не имеете каталога sql-bench, Вы, вероятно, используете пакет RPM для двоичного дистрибутива. Дистрибутивные пакеты RPM с исходниками включают эталонный каталог. В этом случае, Вы должны сначала установить эталонный набор. Начмная с MySQL Version 3.22, имеются эталонные файлы RPM, названные mysql-bench-VERSION-i386.rpm, которые содержат эталонный код и данные. Если Вы имеете дистрибутив с исходниками, Вы можете также выполнять тесты в подкаталоге tests. Например, чтобы выполнить тест auto_increment.tst, скомандуйте:
    shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
    
    Ожидаемые результаты показываются в файле ./tests/auto_increment.res.

2.4.1 Проблемы при запуске mysql_install_db

Цель скрипта mysql_install_db состоит в том, чтобы сгенерировать новые таблицы предоставления привилегий MySQL. Это не будет воздействовать на любые другие данные! Скрипт также не будет делать что-либо, если Вы уже имеете установленные таблицы предоставления привилегий MySQL!

Если Вы хотите пересоздать Ваши таблицы привилегий, Вы должны сначала завершить сервер mysqld, если он работает, а затем выполнить:

mv mysql-data-directory/mysql mysql-data-directory/mysql-old
mysql_install_db

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

mysql_install_db не устанавливает таблицы предоставления привилегий.
Вы можете выяснить, что mysql_install_db валится после вывода следующих сообщений:
starting mysqld daemon with databases from XXXXXX
mysql daemon ended
В этом случае, Вы должны исследовать журнал очень тщательно! Файл регистрации должен быть размещен в каталоге XXXXXX, указанном в сообщении об ошибке, и он должен указать, почему mysqld не запустился.
Уже есть работающий сервер mysqld.
В этом случае, Вы, вероятно, вообще не должны выполнять mysql_install_db. Скурипт mysql_install_db следует выполнять только однажды, когда Вы устанавливаете MySQL в первый раз.
Второй сервер mysqld не работает, когда первый сервер уже запущен.
Это может случиться, когда Вы уже имеете существующую установку MySQL, но хотите поместить новую установку в иное место (например, для тестирования, или, возможно, Вы просто хотите выполнять две инсталляции в то же самое время). Вообще проблема, которая происходит, когда Вы пробуете выполнять второй сервер, состоит в том, что он пробует использовать те же самые сокет и порт, что и старый. В этом случае Вы получите сообщение об ошибке: Can't start server: Bind on TCP/IP port: Address already in use или Can't start server : Bind on unix socket.... Подробности в разделе "4.1.3 Установка нескольких серверов на одной и той же машине".
Вы не имеете доступ на запись к каталогу /tmp.
Если Вы не имеете доступ на запись к каталогу, чтобы создать файл сокета в заданном по умолчанию месте (в каталоге /tmp) или разрешения создавать временные файлы в /tmp, Вы получите ошибку при запуске mysql_install_db или mysqld. Вы можете определять иной сокет и временный каталог следующим образом:
shell> TMPDIR=/some_tmp_dir
shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock
shell> export TMPDIR MYSQL_UNIX_PORT
Подробности есть в разделе " 8.4.5 Как защитить или менять файл сокета MySQL /tmp/mysql.sock". some_tmp_dir должен быть путем к некоторому каталогу, для которого Вы имеете разрешение на запись. Подробности в разделе "Приложение 2. Переменные окружения ". После этого Вы должны выполнить mysql_install_db и запустить сервер с помощью этих команд:
shell> scripts/mysql_install_db
shell> BINDIR/safe_mysqld &
mysqld немедленно рушится.
Если Вы имеете дело с RedHat Version 5.0 с glibc старше, чем 2.0.7-5, Вы должны удостовериться, что установили все заплаты для glibc! Имеется много информации относительно этого в архиве почты MySQL. Связь с архивом почты доступна интерактивно на http://www.mysql.com/documentation. Также следует ознакомиться с разделом "2.6.1 Замечания по Linux (все версии Linux)". Вы можете также запустить mysqld вручную, используя опции --skip-grant-tables и добавлять информацию о привилегиях самостоятельно, используя mysql:
shell> BINDIR/safe_mysqld --skip-grant-tables &
shell> BINDIR/mysql -u root mysql
Из mysql вручную выполните команды из mysql_install_db. Удостоверьтесь, что позже Вы выполняете mysqladmin flush-privileges или mysqladmin reload, чтобы сервер перезагрузил таблицы предоставления.

2.4.2 Проблемы при запуске сервера MySQL

Если Вы собираетесь использовать таблицы, которые поддерживают транзакции (BDB, InnoDB), Вы должны сначала создать файл my.cnf и установить параметры запуска для тех типов таблиц, которые Вы планируете использовать. Подробности в разделе "7 Типы таблиц MySQL".

Вообще, Вы запускаете сервер mysqld одним из трех путей:

Когда mysqld запускается, он переходит в каталог данных, где ожидает найти базы данных. Именно там будут записываться файлы протокола и pid (process ID).

Расположение каталога данных зависит от настроек при построении пакета. Однако, если mysqld ожидает найти каталог данных в одном месте, а он реально расположился где-нибудь в другом, сервер не будет работать правильно. Если Вы имеете проблемы с неправильными путями, Вы можете выяснить то, какие параметры понимает mysqld и заданные по умолчанию параметры настройки вызовом mysqld с опцией --help. Вы можете отменять значения по умолчанию, определяя правильные имена каталогов как параметры командной строки mysqld. Эти параметры также могут использоваться и с safe_mysqld.

Обычно Вы должны сообщить mysqld только основной каталог, в который MySQL установлен. Вы можете сделать это с помощью опции --basedir. Вы можете также использовать --help, чтобы проверить эффект изменения параметров (обратите внимание, что --help ДОЛЖНА быть последней опцией в вызове mysqld). Конкретный пример:

shell> EXECDIR/mysqld --basedir=/usr/local --help

Как только Вы определите параметры настройки путей к каталогам, запустите сервер без опции --help.

Любой метод, который Вы используете, чтобы запустить сервер, в случае провала отмечает ситуацию в журнале ошибок. Журналы размещены в каталоге данных (обычно /usr/local/mysql/data для двоичного дистрибутива, в /usr/local/var для исходников или в \mysql\data\mysql.err для Windows). Просмотрите каталог данных для поиска файлов с именами формы host_name.err и host_name.log, где host_name имя Вашего компьютера сервера. Затем проверьте последние строки файлов:

shell> tail host_name.err
shell> tail host_name.log

Если в файле протокола будет найдено нечто вроде:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

Это означает, что Вы не запускали mysqld с --bdb-no-recover, и драйвер Berkeley DB выявил, что что-то пошло неправильно с журналами, когда пробовал восстанавливать Ваши базы данных. Чтобы продолжить работу, Вы должны переместить старый журнал Berkeley DB из каталога баз данных куда-то в другое место, где Вы можете позже исследовать его. Журналы именованы как log.0000000001, где число увеличивается через какое-то время.

Если Вы управляете mysqld с поддержкой таблиц BDB, и mysqld падает в дамп ядра при запуске, это может быть из-за некоторых проблем с файлом регистрации BDB. В этом случае Вы можете попробовать запускать mysqld с опцией --bdb-no-recover. Если это помогает, то удалите все файлы log.* из каталога данных и попробуйте снова запустить mysqld.

Если Вы получаете следующую ошибку, это означает, что некоторая другая программа (или другой сервер mysqld) уже использует TCP/IP порт или сокет, который пробует использовать mysqld:

Can't start server: Bind on TCP/IP port: Address already in use
   или
Can't start server : Bind on unix socket...

Используйте ps, чтобы удостовериться, что Вы не имеете другого сервера mysqld. Если Вы не можете его найти, Вы можете попробовать выполнить команду telnet your-host-name tcp-ip-port-number и нажать RETURN несколько раз. Если Вы не получаете сообщений об ошибках подобно telnet: Unable to connect to remote host: Connection refused, стало быть что-то использует TCP/IP порт, который пробует занять mysqld. Подробности в разделах "2.4.1 Проблемы с запуском mysql_install_db" и в "4.1.4 Выполнение нескольких серверов на одной и той же машине".

Если mysqld в настоящее время работает, Вы можете выяснить, какие параметры настройки он использует, выполняя эту команду:

shell> mysqladmin variables

или

shell> mysqladmin -h 'your-host-name' variables

Если safe_mysqld сервер запускает, но Вы не можете соединиться с ним, Вы должны удостовериться, что имеете запись в файле /etc/hosts, которая выглядит следующим образом:

127.0.0.1       localhost

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

Если Вы не можете запустить mysqld, Вы можете попробовать сделать файл трассировки, чтобы найти проблему. Подробности в разделе "6.1.2 Создание файлов трассировки ".

Если Вы используете InnoDB-таблицы, обратитесь к специфическим параметрам запуска. Подробности в разделе "7.6.2 Параметры запуска InnoDB".

Если Вы используете таблицы BDB (Berkeley DB), Вы должны ознакомиться с различными специфическими параметрами запуска BDB. Подробности в разделе "7.5.3 Параметры запуска BDB".

2.4.3 Автоматический запуск и останов MySQL

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

Скрипт mysql.server может использоваться, чтобы запустить или остановить сервер, вызывая его с параметрами start или stop:

shell> mysql.server start
shell> mysql.server stop

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

Прежде, чем mysql.server запустит сервер, он сменит текущий каталог на каталог установки MySQL, а затем вызовет safe_mysqld. Вы должны подредактировать mysql.server, если Вы имеете двоичный дистрибутив, который Вы установили в ненормативное расположение. Измените параметр в вызове cd на соответствующий каталог перед вызовом safe_mysqld. Если Вы хотите, чтобы сервер работал от имени определенного пользователя, добавьте соответствующую строку user к файлу /etc/my.cnf, как показано ниже в этом разделе.

mysql.server stop завершает сервер, посылая ему сигнал. Вы можете достичь того же эффекта вручную, выполнив команду mysqladmin shutdown.

Вы можете добавить команды запуска и завершения к соответствующим местам в файлах /etc/rc*, когда Вы начинаете использовать MySQL для промышленных прикладных программ. Обратите внимание, что, если Вы изменяете mysql.server, а потом проапгрейдите MySQL, измененная версия будет перезаписана, так что Вы должны сделать копию Вашей версии.

Если Ваша система использует /etc/rc.local, чтобы запустить внешние скрипты, Вы должны дописать к нему следующее:

/bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld --user=mysql &'

Вы можете также добавлять параметры для mysql.server в глобальный файл /etc/my.cnf. Типичный файл /etc/my.cnf может выглядеть следующим образом:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql

Скрипт mysql.server понимает следующие параметры: datadir, basedir и pid-file.

Следующая таблица показывает, какие группы опций читает из файлов настройки конкретный скрипт:

СкриптГруппы опций
mysqldmysqld и server
mysql.servermysql.server, mysqld и server
safe_mysqldmysql.server, mysqld и server

2.5 Апгрейд и даунгрейд MySQL

Вы можете всегда перемещать форму MySQL и файлы данных между различными версиями на той же самой архитектуре, пока Вы имеете ту же самую основную версию MySQL. Текущая основная версия 3. Если Вы изменяете набор символов при управлении MySQL (который может также изменять порядок сортировки), Вы должны выполнить myisamchk -r -q на всех таблицах. Иначе Ваши индексы нельзя будет упорядочивать правильно.

Если Вы боитесь новых версий, Вы можете всегда переименовать Ваш старый mysqld на что-то вроде mysqld-'old-version-number'. Если Ваш новый mysqld сделает что-то непредвиденное, Вы можете просто закрыть его и перезапустить старую версию mysqld!

Когда Вы делаете обновление, Вы, конечно, должны также зарезервировать Ваши старые базы данных.

Если после обновления Вы испытываете проблемы с перекомпиляцией программ пользователя, подобно Commands out of sync, или получаете неожиданные дампы ядра, Вы, вероятно, использовали старые заголовки или не тот библиотечный файл при компиляции Ваших программ. В этом случае Вы должны проверить дату для Вашего файла mysql.h и библиотеки libmysqlclient.a, чтобы проверить, что они из нового дистрибутива MySQL. Если это не так, перекомпилируйте Ваши программы!

Если Вы получаете некоторые проблемы, например, новый сервер mysqld не хочет запускаться, или Вы не можете соединиться без пароля, проверьте, что Вы не имеете старый файл my.cnf из Вашей старой установки! Вы можете проверить это командой program-name --print-defaults. Если это выводит что-нибудь другое, чем имя программы, Вы имеете активный файл my.cnf, который будет воздействовать на все вокруг!

Неплохо бы повторно установить дистрибутив Msql-Mysql-modules всякий раз, когда Вы устанавливаете новый выпуск MySQL, особенно, если Вы обращаете внимание на нехорошие признаки, типа Ваших скриптов DBI, сбрасывающих дамп ядра после апгрейда MySQL.

2.5.1 Апгрейд с Version 3.23 на Version 4.0

Вы можете использовать Ваши старые файлы данных без модификаций с Version 4.0. Если Вы хотите перемещать Ваши данные с сервера MySQL 4.0 на старый сервер, Вы должны использовать mysqldump.

Старые клиенты могут работать с новым сервером версии 4.0 без проблем.

Следующий список сообщает, что Вы должны не упустить при обновлении до Version 4.0;

2.5.2 Апгрейд с Version 3.22 на Version 3.23

MySQL Version 3.23 поддерживает таблицы нового типа MyISAM и старого типа ISAM. Вы не должны преобразовывать Ваши старые таблицы, чтобы использовать их с Version 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 без каких-либо проблем.

Следующий список сообщает, что Вы должны не упустить при обновлении до Version 3.23:

2.5.3 Апгрейд с Version 3.21 на Version 3.22

Ничего такого, что воздействует на совместимость, не изменилось между Version 3.21 и 3.22. Единственная ловушка в том, что новые таблицы, которые созданы со столбцами типа DATE, используют новый способ хранить дату. Вы не можете обращаться к этим новым полям из старой версии mysqld.

После установки MySQL Version 3.22 Вы должны запустить новый сервер, а затем выполнить скрипт mysql_fix_privilege_tables. Это добавит новые привилегии для команды GRANT. Если Вы забудете сделать это, получите ошибку Access denied, когда попробуете использовать ALTER TABLE, CREATE INDEX или DROP INDEX. Если Ваш MySQL-пользователь root требует пароль, Вы должны задать его как параметр 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, но Вы все еще можете использовать старое имя в Ваших файлах запуска.

2.5.4 Апгрейд с Version 3.20 на Version 3.21

Если Вы управляете версией старше, чем Version 3.20.28, и хотите перейти на Version 3.21, Вы должны сделать следующее:

Вы можете запустить сервер mysqld Version 3.21 вызовом safe_mysqld --old-protocol, чтобы использовать с клиентами из дистрибутива Version 3.20. В этом случае новая клиентская функция mysql_errno() не будет возвращать серверных ошибок, только CR_UNKNOWN_ERROR (но это работает для ошибок клиента), а сервер использует старый способ проверки пароля функцией password().

Если Вы НЕ используете опцию --old-protocol с mysqld, Вы должны сделать следующие изменения:

MySQL Version 3.20.28 и выше может обрабатывать новый формат таблицы user без того, чтобы воздействовать на клиентуру. Если Вы имеете MySQL версии ниже, чем Version 3.20.28, пароли больше не будут работать с ним, если Вы преобразуете таблицу user.

Новый код клиентов работает с сервером 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 теперь поменялись местами).

Следующие изменения могут воздействовать на запросы в старых программах:

2.5.5 Апгрейд для других архитектур

Если Вы используете MySQL Version 3.23, Вы можете копировать файлы .frm, .MYI и .MYD между различным архитектурами, которые поддерживают тот же самый формат с плавающей запятой.

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). Вам, вероятно, придется выполнять команды как MySQL-пользователь root на новой машине, пока Вы не имеете на ней базу данных mysql со старой.

После того, как Вы импортируете базу данных mysql на новую машине, выполните mysqladmin flush-privileges, чтобы сервер перезагрузил информацию таблицы предоставления привилегий.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру