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

2 Установка MySQL

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

  • За списком мест, из которых Вы можете получить MySQL, отправляю Вас в раздел "2.2.1 Как получить MySQL".
  • За списком того, которые платформы поддержаны, отсылаю Вас к разделу "2.2.2 ОС, поддерживаемые MySQL". Пожалуйста, обратите внимание, что не все ОС одинаково хороши для работы MySQL на них. На многих не получается развить должную эффективность. Подробности баталий с операционными системами есть в разделе "2.2.2 ОС, поддерживаемые MySQL".
  • Несколько версий MySQL доступны в двоичных и исходных кодах. Чтобы определить, которую версию и тип дистрибутива Вы должны использовать, обратитесь к разделу "2.2.3 Какую версию MySQL использовать". Когда Вы пребываете в сомнении, используйте двоичный дистрибутив, так оно надежнее.
  • Команды установки для двоичных и исходных дистрибутивов описаны в разделах "2.7 Установка двочного дистрибутива MySQL" и "2.3 Установка исходников MySQL". Каждый набор команд включает раздел по специфическим для ОС проблемам, с которыми Вы можете сталкиваться.
  • Процедуры, которые надо проделать после установки, рассмотрены в разделе "2.4 Послеустановочная настройка и тестирование". Эти процедуры применяются при установке 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-файлы, которые Вам понадобятся:

  • MySQL-VERSION.i386.rpm Сервер MySQL. Вы будете нуждаться в нем, если Вы не хотите соединяться с сервером MySQL на другой машине.
  • MySQL-client-VERSION.i386.rpm Стандартный клиент MySQL. Вы, вероятней всего, всегда будете устанавливать этот пакет.
  • MySQL-bench-VERSION.i386.rpm Тесты и бенчмарки. Требуют RPM-пакета msql-mysql-modules и поддержки языка Perl.
  • MySQL-devel-VERSION.i386.rpm Библиотеки и включаемые файлы заголовков необходимые, если Вы хотите компилировать другую MySQL клиентуру, типа модулей Perl.
  • MySQL-VERSION.src.rpm Исходные тексты для всех приведенных выше пакетов. Это может также использоваться, чтобы пробовать формировать RPM-пакеты для других архитектур (например, для Alpha или SPARC).

Чтобы увидеть все файлы в пакете 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.

Европа:

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

  • Canada [Tryc] WWW
  • Mexico [UNAM] WWW FTP
  • USA [Hurricane Electric/San Jose] WWW
  • USA [ValueClick, Los Angeles CA] WWW FTP
  • USA [Wisconsin University/Wisconsin] WWW FTP
  • USA [LinuxWired/Scottsdale, AZ] WWW FTP
  • USA [adgrafix.com/Boston, MA] WWW
  • USA [netNumina/Cambridge, MA] WWW
  • USA [Ahaza Systems/Seattle, WA] WWW FTP

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

Азия:

  • China [linuxforum.net] WWW
  • China [HKLPG/Hong Kong] WWW
  • China [Gremlins/Hong Kong] WWW FTP
  • China [shellhung.org/Hong Kong] WWW FTP
  • Indonesia [incaf.net] WWW
  • Indonesia [web.id] WWW FTP
  • Japan [Soft Agency] WWW
  • Japan [u-aizu.ac.jp/Aizu] FTP
  • Philippines [Ateneo de Zamboanga University] WWW
  • South Korea [Webiiz] WWW
  • South Korea [PanworldNet] WWW
  • Singapore [HJC] WWW FTP
  • Taiwan [TTN] WWW
  • Taiwan [nctu.edu/HsinChu] WWW

Африка:

  • South-Africa [Mweb] WWW
  • South Africa [The Internet Solution/Johannesburg] FTP

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, даже если все остальное совершенно, MySQL будет только столь же устойчив, как библиотека потоков.
  • Способность ядра и/или библиотеки потоков воспользоваться преимуществом SMP на многопроцессорных системах. Другими словами, когда процесс создает поток, он должен иметь возможность выполниться на любом из процессоров в системе.
  • Общая стабильность и скорость файловой системы.
  • Способность файловой системы иметь дело с большими файлами вообще и работать с ними эффективно в частности, если Ваши таблицы большие.
  • Количество тестирований подобных конфигураций.
  • Число пользователей, которые успешно выполнили 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 впервые или пробуете перенсти систему на ОС, для которой не имеется никакого двоичного дистрибутива, стоит воспользоваться устойчивым выпуском (в настоящее время Version 4.0.0-alpha). Обратите внимание, что все выпуски MySQL проверены с эталонными тестами MySQL и обширным набором тестов перед каждым выпуском.
  • Если Вы управляете старой системой и хотите наращивать вычислительные возможности, но не нажить при этом проблем, используйте последний дистрибутив старой серии (такой, где только последний номер версии больше, чем у Вашего).

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

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

  • Если Вы хотите устанавливать MySQL в некотором явном расположении. Стандартные двоичные дистрибутивы, готовые к запуску, не всегда это позволяют.
  • Чтобы удовлетворить различные требования пользователя, авторы обеспечивают две различных двоичных версии. Одна откомпилирована с нетранзакционными драйверами таблиц (маленькие и быстрые), вторая собрана с наиболее важными расширенными, например, транзакционно-безопасными таблицами. Обе версии компилируются из того же самого исходного дистрибутива. Вся клиентура MySQL может работать с обеими версиями. Расширенный дистрибутив MySQL отмечен суффиксом -max и сконфигурировано с теми же самыми параметрами, что и mysqld-max. Подробности в разделе "4.7.5 mysqld-max, расширенный сервер mysqld". Если Вы хотите использовать MySQL-Max RPM, Вы должны сначала установить стандартный MySQL RPM.
  • Если Вы хотите конфигурировать mysqld с некоторыми дополнительными свойствами, которых нет в стандартных двоичных дистрибутивах. Имеется список наиболее часто встречающихся дополнительных параметров, которые Вы можете хотеть использовать:
    • --with-berkeley-db
    • --with-innodb
    • --with-raid
    • --with-libwrap
    • --with-named-z-lib (это уже выполнено для некоторых из двоичных дистрибутивов)
    • --with-debug[=full]
  • Заданный по умолчанию двоичный дистрибутив обычно компилируется с поддержкой всех наборов символов и должен работать на ряде процессоров из того же самого семейства. Если Вы хотите сделать сервер MySQL быстрее, Вы можете перетранслировать его с поддержкой только тех наборов символов, в которых Вы нуждаетесь, другим компилятором (например, pgcc) или использовать параметры транслятора, которые являются лучше оптимизированными для Вашего процессора.
  • Если Вы нашли ошибку и сообщили об этом группе разработки MySQL, Вы, вероятно, получите заплату, так что Вы должны обратиться к исходникам, чтобы получить исправленную версию.
  • Если Вы хотите читать и/или изменять код на C и C++, который составляет MySQL, Вы должны получить исходники. Исходный текст всегда окончательное руководство. Дистрибутивы с исходниками также содержат большее количество тестов и примеров, чем двоичные.

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

  • Первое число (3) описывает формат файла. Все выпуски версии 3 имеют тот же самый формат файла.
  • Второе число (21) задает уровень выпуска. Обычно имеется два выпуска. Один стабильный (сейчас это 23), второй разрабатываемый (сейчас 4.0). Обычно оба устойчивы, но версия для разработки может иметь причуды, отсутствие документации по новым свойствам или может не компилироваться на некоторых системах.
  • Третье число (17) представляет собой номер версии внутри уровня выпуска. Это число будет увеличено для каждого нового дистрибутива. Обычно Вы должны скачать последнюю версию для того уровня выпуска, который Вы себе выбрали.
  • Суффикс (beta) указывает уровень стабильности выпуска. Возможны следующие суффиксы:
    • alpha указывает, что выпуск содержит некоторый большой раздел нового кода, который не был оттестирован на 100%. Известные ошибки (обычно там их нет) должны быть зарегистрированы в разделе News. Имеются также новые команды и расширения в большинстве alpha-версий. Активная разработка, которая может включать серьезные изменения кода, может происходить на alpha-версии, но все будет проверено перед выполнением выпуска. Не должно быть никаких известных ошибок в любом выпуске MySQL.
    • beta означает, что весь новый код был проверен. Никакие новые свойства, которые могли бы вызывать искажение на старом коде, не были добавлены. Не должно иметься никаких известных ошибок. Версия изменяется от alpha к beta когда нет сообщений о фатальных ошибках внутри alpha-версии по крайней мере за последний месяц, и не планируется добавлять любые свойства, которые могли бы сделать любую старую команду ненадежной.
    • gamma это такая бета-версия, которая была проверена временем, и, вроде бы, работает прекрасно. Только маленькие изменения могут быть внесены. Это то, что многие другие компании называют релизом.
    • Если не имеется никакого суффикса, это означает, что версия в полном порядке. Только исправления критических ошибок применяются к такому выпуску. Это то, что называется устойчивым выпуском.

Все версии 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Файлы протоколов и баз данных

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

  • Сервер mysqld установлен в каталог libexec, а не в каталог bin.
  • Каталог для данных var, а не data.
  • mysql_install_db установлен в каталог /usr/local/bin, а не в каталог /usr/local/mysql/scripts.
  • Файлы заголовков и билиотеки располагаются соответственно в каталогах include/mysql и lib/mysql, а не в include и lib.

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

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

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

  • Для каждой малой модификации, последнее число в номере версии будет увеличено. Когда появляются важные новые свойства или малые несовместимости с предыдущими версиями, будет увеличено второе число в номере версии. Первое же число изменится только, если есть изменения формата файлов.
  • Устойчивые проверенные выпуски появляются приблизительно 1-2 раза в год, но если найдены маленькие ошибки, выйдет их исправление.
  • Текущие (рабочие) выпуски появляются раз в 1-8 недель.
  • Двоичные версии для некоторых платформ будут сделаны авторами MySQL для главных выпусков. Другие люди могут делать двоичные распределения для других систем, но, вероятно, менее часто.
  • Патчи обычно станвятся доступными, как только будут найдены и устранены соответствующие им ошибки.
  • Для некритических ошибок заплатки выходят только в случае, если их кто-то пришлет авторам MySQL. Иначе многие из них объединятся в большую заплату.
  • Если имеется фатальная ошибка в выпуске, как можно скорее будет сделан следующий выпуск 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:
    • Вы можете редактировать mysql_install_db перед его запуском, изменять начальные привилегии, которые будут установлены в таблицы предоставления привилегий. Это полезно, если Вы хотите устанавливать MySQL на большом количестве машин с теми же самыми привилегиями. В этом случае Вы, вероятно, должны будете только добавить несколько дополнительных инструкций INSERT к таблицам mysql.user и mysql.db!
    • Если Вы хотите изменять что-то в таблицах предоставления привилегий после их установки, Вы можете выполнять mysql_install_db, а затем использовать mysql -u root mysql, чтобы соединиться с таблицами предоставления привилегий как MySQL-пользователь root и выдавать инструкции SQL, чтобы непосредственно изменить таблицы предоставления.
    • Возможно пересоздать таблицы предоставления полностью после того, как они уже были созданы. Вы могли бы сделать это, если Вы уже установили таблицы, но теперь хотите пересоздать их после редактирования скрипта mysql_install_db.
    Для большего количества информации относительно этих вариантов изучите раздел "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 одним из трех путей:

  • Вызовом mysql.server. Этот скрипт используется прежде всего при запуске системы, и описан более подробно в разделе "2.4.3 Автоматический запуск и останов MySQL".
  • Вызовом safe_mysqld, который пробует определить соответствующие параметры для mysqld и затем выполняет его с этими параметрами.. Подробности в разделе " 4.7.2 safe_mysqld, обертка вокруг mysqld".
  • На NT-системах следует установить mysqld как сервис:
    bin\mysqld-nt --install               # Install MySQL as a service
    
    Вы можете запускать и выключать сервер mysqld так:
    NET START mysql
    NET STOP mysql
    
    Заметьте, что в этом случае, Вы не можете использовать каких-либо опций для mysqld! Можно удалить сервис:
    bin\mysqld-nt --remove                # remove MySQL as a service
    
  • Запуская 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;

  • safe_mysqld зачем-то переименован в mysqld_safe.
  • Старые функции C API mysql_drop_db, mysql_create_db и mysql_connect теперь не поддерживаются. Для совместимости можно компилировать MySQL с опцией USE_OLD_FUNCTIONS.
  • Вы должны использовать TRUNCATE TABLE, когда Вы хотите удалить все строки из таблицы. (Потому, что TRUNCATE TABLE работает быстрее, чем DELETE FROM table_name).
  • Вы получите ошибку, если Вы имеете активные LOCK TABLES или транзакцию при попытке выполнить TRUNCATE TABLE или DROP DATABASE.

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:

  • Все таблицы, которые используют набор символов tis620, должны быть подправлены с помощью myisamchk -r или REPAIR TABLE.
  • Если Вы делаете DROP DATABASE на символически связанной базе данных, связь и первоначальная база данных будут удалены. Этого не случалось в версии 3.22 потому, что выбор конфигурации не обнаруживал системный вызов readlink).
  • OPTIMIZE TABLE теперь работает только для таблиц MyISAM. Для других типов Вы можете использовать ALTER TABLE, чтобы оптимизировать таблицу. В течение работы OPTIMIZE TABLE обрабатываемая таблица теперь блокирована.
  • MySQL-клиент mysql теперь по умолчанию запускается с опцией --no-named-commands (-g). Эта опция может быть заблокирована с помощью --enable-named-commands (-G). Это может вызывать проблемы несовместимости в некоторых случаях, например, в скриптах SQL, которые используют именованные команды без точки с запятой! Длинный формат команд все еще работает из первой строки.
  • Если Вы используете немецкий (german) символьный порядок сортировки, Вы должны обработать все Ваши таблицы с isamchk -r, поскольку авторы пакета сделали некоторые изменения в порядке сортировки!
  • Заданный по умолчанию тип возврата IF теперь будет зависеть от обоих параметров, а не только от первого параметра.
  • AUTO_INCREMENT не будет работать с отрицательными числами. Причина этого в том, что отрицательные числа вызывали проблемы при переходе от -1 к 0. AUTO_INCREMENT теперь для таблиц MyISAM работает намного быстрее, чем прежде. Для таблиц MyISAM старые числа больше многократно не используются, даже если Вы удаляете строки из таблицы.
  • CASE, DELAYED, ELSE, END, FULLTEXT, INNER, RIGHT, THEN и WHEN теперь представляют собой зарезервированные слова.
  • FLOAT(X) теперь истинный тип с плавающей запятой, а не значение с фиксированном числом десятичных чисел.
  • При объявлении DECIMAL(length,dec) параметр длины больше не включает место для знака или десятичной отметки.
  • Строка 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 Version 3.22 и Version 3.23, Вы не должны использовать опции --opt или --full в вызове mysqldump.
  • Проверьте все Ваши обращения к DATE_FORMAT() чтобы удостовериться, что имеется символ `%' перед каждым символом управления форматом данных.
  • mysql_fetch_fields_direct теперь функция (раньше это было макрокомандой) и возвращает указатель на MYSQL_FIELD вместо MYSQL_FIELD.
  • mysql_num_fields() больше не может использоваться на объекте MYSQL*: это теперь функция, которая берет как параметр MYSQL_RES*. Вы должны теперь использовать вместо этого mysql_field_count().
  • В MySQL Version 3.22 вывод SELECT DISTINCT ... почти всегда сортировался. В Version 3.23 Вы должны использовать GROUP BY или ORDER BY, чтобы получить сортируемый вывод.
  • SUM() теперь возвращает NULL вместо 0, если не имеется никаких строк соответствий. Это согласно ANSI SQL.
  • AND или OR со значениями NULL теперь возвратит NULL вместо 0. Это обычно воздействует на запросы, которые используют NOT на выражениях с AND/OR как NOT NULL=NULL. LPAD() и RPAD() сократит строку результата, если она более длинная, чем заданный параметр длины.

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, Вы должны сделать следующие изменения:

  • Весь код клиентов должен быть перекомпилирован. Если Вы используете ODBC, Вы должны получить новый драйвер MyODBC 2.x.
  • Скрипт scripts/add_long_password должен быть выполнен, чтобы преобразовать поле Password в таблице mysql.user к типу CHAR(16).
  • Все пароли должны быть переназначены в таблице mysql.user (чтобы стать 62-разрядными).
  • Формат таблиц не изменился, так что Вы не должны преобразовывать таблицы.

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 теперь поменялись местами).

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

  • HAVING теперь должно быть определено перед любым предложением ORDER BY.
  • Параметры для LOCATE() переставлены местами.
  • Имеются некоторые новые зарезервированные слова. Наиболее известны: DATE, TIME и TIMESTAMP.

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, чтобы сервер перезагрузил информацию таблицы предоставления привилегий.

Поиск

 

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