Различия между MySQL на Linux против Windows
В последнее время моя компания рассматривает возможность покупки приложения с использованием MySQL. Консультант предлагает два варианта:
- запуск приложений и сервера MySQL на сервере Windows 2008, или
- запустить сервер MySQL на Linux и приложения на виртуальной машине XP
Мне было интересно, если кто-нибудь может помочь мне получить правильную картину. Мои вопросы:
Есть ли разница в производительности между MySQL, работающей на Linux и Windows Server? Я просмотрел некоторые мнения, но нашел разные мнения. Если есть какие-то различия, что их вызывает?
Какой ключевой аспект, который влияет на производительность для сервера MySQL, работающего на Windows XP или Windows 2008 Server? Я имею в виду, мне все равно не нужны настройки сервера, верно?
(Моя команда работала как с Windows, так и с Linux-серверами, поэтому проблем с возможностями нет).
Спасибо за помощь.:)
3 ответа
Это вопрос, на который вы не получите абсолютного правильного или неправильного ответа, так как он зависит от субъективных мнений, основанных на опыте пользователей, поэтому люди голосуют за его закрытие.
Однако, чтобы помочь вам, я бы порекомендовал вам использовать MySQL в Linux. Есть ряд причин, по которым Linux лучше подходит для Windows, но некоторые из них есть; безопасность, стабильность и общие эксплуатационные расходы. Конечно, в Linux может быть сложнее настроить конфиги и демоны, чтобы убедиться, что ваш сервер работает нормально, но, в конце концов, это того стоит.
Решение о том, для какой ОС разрабатывать приложение, зависит от опыта и опыта вашего разработчика. Если они могут завершить лучший проект в более короткие сроки, используя Windows, то это то, что вы должны выбрать.
Основное отличие состоит в том, что имена файлов, создаваемые в linux, чувствительны к регистру, а файлы в Windows — нет.
Вот выдержка из соответствующей документации касательно чувствительности.
По умолчанию псевдонимы таблиц чувствительны к регистру в Unix, но не в Windows или Mac OS X. Следующий оператор не будет работать в Unix, поскольку он ссылается на псевдоним как a и как A: SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;
Однако это же утверждение разрешено в Windows.
Windows — это боль, но приложения могут иметь лучшее качество на сервере Windows 2008, чем на XP. Или позже на более новой версии Windows. MySQL должен представлять меньше различий на обеих платформах. Итак, насколько лучше будут работать приложения под Windows 2008 server?
Может быть, поддержка (XP!), Может быть поддержка определенных технологий MS.
Различия между mysql на linux vs windows
Недавно моя компания рассмотрела вопрос о покупке приложения с использованием MySQL. консультант предлагает два варианта:
- запуск приложений и сервера mysql на сервере Windows 2008 или
запустите сервер mysql в Linux и приложения на виртуальной машине xp
Мне было интересно, сможет ли кто-нибудь помочь мне правильно понять картинку. Мои вопросы:
Есть ли разница в производительности между MySQL, работающим на Linux и серверах Windows? Я просмотрел некоторые мнения, но нашел разные мнения. Если есть какие-то различия, что их вызывает?
какой ключевой аспект влияет на производительность сервера mysql, работающего на серверах Windows XP или Windows 2008? Я имею в виду, что мне вообще не нужны данные конфигурации сервера, верно?
(Моя команда работает как с окнами, так и с Linux-серверами, поэтому проблем с возможностями не возникает).
Спасибо за помощь.:)
Это вопрос, по которому вы не получите абсолютного права или неправильного ответа, так как его оставляют субъективные мнения, основанные на опыте пользователя, и почему люди голосуют, чтобы закрыть его.
Однако, чтобы помочь вам, я бы рекомендовал вам использовать MySQL в Linux. Существует ряд причин, по которым Linux — лучший выбор для окон, но некоторые из них самые большие; безопасности, стабильности и общих эксплуатационных расходов. Конечно, с Linux может быть сложнее настроить конфигурации и демоны, чтобы обеспечить правильную работу вашего сервера, но в конце концов, это стоит того.
Чтобы определить, какая ОС, на которой разрабатывать приложение, зависит от опыта и опыта вашего магазина. Если они могут закончить лучший проект за короткое время, используя окна, то это то, что вы должны выбрать.
Mysql для windows или linux
Эта глава описывает, как получить и установить 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 из любого типа дистрибутива (двоичного или исходного).
Рекомендуемый способ установки 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, выполните:
Чтобы выполнить стандартную минимальную установку, выполните:
Чтобы установить только клиентский пакет, выполните:
RPM помещает данные в /var/lib/mysql . RPM также создает соответствующие записи в /etc/rc.d , чтобы запустить сервер автоматически при начальной загрузке. Имейте в виду, что старый файл запуска (если таковой был Вами создан) будет затерт.
После установки из файлов RPM mysqld daemon должен работать, и Вы должны теперь иметь возможность начать использовать MySQL. Подробности в разделе «2.4 Послеустановочная настройка и тестирование».
Если что-то пошло не так, Вы можете найти подробную информацию в разделе «2.7 Установка MySQL из двоичного дистрибутива».
Следующие команды применимы к заранее откомпилированным двоичным дистрибутивам. Если Вы загружаете исходники, Вы будете должны компилировать и устанавливать их лично.
Если Вы не имеете копию дистрибутива 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 так:
Использование 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».
Проверьте домашнюю страницу MySQL http://www.mysql.com для поиска информации относительно текущей версии и того, где ее искать.
Наше основное зеркало загрузки размещено на:
Если Вы заинтересованы в создании своего зеркала MySQL, Вы можете использовать анонимный rsync: rsync://sunsite.dk/ftp/mirrors/mysql . Пожалуйста, пошлите e-mail на webmaster@mysql.com с сообщением о зеркале, которое будет добавлено к приведенному ниже списку.
Если Вы имеете проблемы при загрузке с нашего основного сайта, попробуйте использовать одно из зеркал, перечисленных в списке ниже.
Пожалуйста, сообщите о плохих или устаревших зеркалах на webmaster@mysql.com.
- Austria [Univ. of Technology/Vienna] WWWFTP
- Belgium [BELNET] WWWFTP
- Bulgaria [online.bg/Sofia] WWWFTP
- Czech Republic [Masaryk University in Brno] WWWFTP
- Czech Republic [www.sopik.cz] WWW
- Czech Republic [www.gin.cz] WWWFTP
- Denmark [Borsen] WWW
- Denmark [SunSITE] WWWFTP
- Estonia [OKinteractive] WWW
- France [mtesa.net] WWW
- France [fastorama.com, Chatenois] WWWFTP
- Finland [tonnikala.net] WWW
- Germany [Kernelnotes.de, Bonn] WWWFTP
- Germany [Wolfenbuettel] WWWFTP
- Greece [NTUA, Athens] WWWFTP
- Hungary [Xenia] WWWFTP
- Hungary [TiszaneT] WWWFTP
- Hungary [stop.hu] WWW
- Iceland [GM] WWWFTP
- Italy [feelinglinux.com] WWW
- Italy [Teta Srl] WWW
- Italy [tzone.it] WWW
- Ireland [Esat Net] WWWFTP
- Latvia [linux.lv] FTP
- Netherlands [Silverpoint] WWW
- Netherlands [Widexs BV] WWWFTP
- Netherlands [ProServe] WWW
- Poland [Sunsite] WWWFTP
- Poland [ncservice.com/Gdansk] WWW
- Portugal [Netc] WWWFTP
- Romania [roedu.net/Bucharest] FTP
- Russia [DirectNet] WWWFTP
- Russia [Scientific Center/Chernogolovka] FTP
- Sweden [Sunet] WWWFTP
- Switzerland [Sunsite] WWWFTP
- Turkey [proGEN] WWW
- UK [PLiG/UK] WWWFTP
- Ukraine [PACO] WWWFTP
- Ukraine [ISP Alkar Teleport/Dnepropetrovsk] WWW
- Yugoslavia [bolex.co.yu] WWWFTP
- Canada [Tryc] WWW
- Mexico [UNAM] WWWFTP
- USA [Hurricane Electric/San Jose] WWW
- USA [ValueClick, Los Angeles CA] WWWFTP
- USA [Wisconsin University/Wisconsin] WWWFTP
- USA [LinuxWired/Scottsdale, AZ] WWWFTP
- USA [adgrafix.com/Boston, MA] WWW
- USA [netNumina/Cambridge, MA] WWW
- USA [Ahaza Systems/Seattle, WA] WWWFTP
- Argentina [bannerlandia.com] WWWFTP
- Chile [Vision] WWW
- Chile [PSINet] WWWFTP
- Chile [Tecnoera] WWW
- China [linuxforum.net] WWW
- China [HKLPG/Hong Kong] WWW
- China [Gremlins/Hong Kong] WWWFTP
- China [shellhung.org/Hong Kong] WWWFTP
- Indonesia [incaf.net] WWW
- Indonesia [web.id] WWWFTP
- 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] WWWFTP
- Taiwan [TTN] WWW
- Taiwan [nctu.edu/HsinChu] WWW
- South-Africa [Mweb] WWW
- South Africa [The Internet Solution/Johannesburg] FTP
Авторы используют GNU Autoconf, так что возможно портирование MySQL на все современные системы с поддержкой потоков Posix и языка C++. C++ нужен только, чтобы откомпилировать код клиента, но не потоков. Все программное обеспечение разрабатывается прежде всего на Sun Solaris (Versions 2.5-2.7) и на SuSE Linux Version 7.x.
Обратите внимание, что для многих операционных систем, местная поддержка потоков работает только в последних версиях. MySQL компилировался успешно на следующих комбинациях пакетов потоков/операционных систем:
- AIX 4.x с местными потоками. Подробности в разделе 2.6.6.4 Замечания по IBM-AIX.
- Amiga.
- Tru64 Unix
- BSDI 2.x с пакетом MIT-pthreads. Подробности в разделе 2.6.4.6 Замечания по BSD/OS.
- BSDI 3.0, 3.1 и 4.x с местными потоками. Подробности в разделе 2.6.4.6 Замечания по BSD/OS.
- DEC Unix 4.x с местными потоками. Подробности в разделе 2.6.6.6 Замечания по Alpha-DEC-UNIX (Tru64).
- FreeBSD 2.x с пакетом MIT-pthreads. Подробности в разделе 2.6.4.1 Замечания по FreeBSD.
- FreeBSD 3.x и 4.x с местными потоками. Подробности в разделе 2.6.4.1 Замечания по FreeBSD.
- HP-UX 10.20 с пакетом MIT-pthreads. Подробности в разделе 2.6.6.2 Замечания по HP-UX Version 10.20.
- HP-UX 11.x с местными потоками. Подробности в разделе 2.6.6.3 Замечания по HP-UX Version 11.x.
- Linux 2.0+ с пакетом LinuxThreads 0.7.1+ или glibc 2.0.7+. Подробности в разделе 2.6.1 Замечания по Linux (все версии Linux).
- Mac OS X Server. Подробности в разделе 2.6.5 Замечания по Mac OS X.
- NetBSD 1.3/1.4 Intel и NetBSD 1.3 Alpha (требует GNU make). Подробности в разделе 2.6.4.2 Замечания по NetBSD.
- OpenBSD > 2.5 с местными потоками. OpenBSD SMP на многопроцессорных системах. Другими словами, когда процесс создает поток, он должен иметь возможность выполниться на любом из процессоров в системе.
- Общая стабильность и скорость файловой системы.
- Способность файловой системы иметь дело с большими файлами вообще и работать с ними эффективно в частности, если Ваши таблицы большие.
- Количество тестирований подобных конфигураций.
- Число пользователей, которые успешно выполнили MySQL на этой платформе в подобных конфигурациях. Если это число большое, возможности платформно-зависимых неприятностей намного меньшие.
Основываясь на вышеупомянутых критериях, можно сказать, что самые лучшие платформы для MySQL на сегодняшний день: на x86 SuSE Linux 7.1, с ядром 2.4 и ReiserFS (или любой подобный дистрибутив Linux), а на Sparc Solaris 2.7 или 2.8. FreeBSD занимает третье место, но в ней идет реконструкция библиотеки потоков, глядишь, и выплывет наверх.
Пожалуйста, обратите внимание, что сравнение выше не говорит, что одни OS вообще лучше или хуже, чем другие. Мы говорим относительно выбора OS для специализированной цели, а именно, для работы с 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 Этот тест пробует определять то, какие свойства база данных поддерживает, и каковы ее возможности и ограничения.
Этот раздел описывает заданное по умолчанию размещение каталогов, созданных при установке.
Двоичный дистрибутив установлен, распаковываясь в расположение установки, которое Вы выбираете (обычно /usr/local/mysql ), и создает следующие каталоги в этом расположении:
Каталог | Содержимое |
bin | Клиентские программы и сервер mysqld |
data | Файлы протоколов и баз данных |
include | Заголовочные (header) файлы |
lib | Библиотеки |
scripts | mysql_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 .
MySQL развивается быстро. MySQL AB использует следующую стратегию при модифицировании MySQL:
- Для каждой малой модификации, последнее число в номере версии будет увеличено. Когда появляются важные новые свойства или малые несовместимости с предыдущими версиями, будет увеличено второе число в номере версии. Первое же число изменится только, если есть изменения формата файлов.
- Устойчивые проверенные выпуски появляются приблизительно 1-2 раза в год, но если найдены маленькие ошибки, выйдет их исправление.
- Текущие (рабочие) выпуски появляются раз в 1-8 недель.
- Двоичные версии для некоторых платформ будут сделаны авторами MySQL для главных выпусков. Другие люди могут делать двоичные распределения для других систем, но, вероятно, менее часто.
- Патчи обычно станвятся доступными, как только будут найдены и устранены соответствующие им ошибки.
- Для некритических ошибок заплатки выходят только в случае, если их кто-то пришлет авторам MySQL. Иначе многие из них объединятся в большую заплату.
- Если имеется фатальная ошибка в выпуске, как можно скорее будет сделан следующий выпуск MySQL.
Текущий устойчивый выпуск: Version 3.23. Авторы пакета уже переместили активную разработку в Version 4.0. Ошибки все еще будут отлавливаться и исправляться в устойчивой версии по мере их обнаружения.
В 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 .
Как только Вы установили MySQL (неважно, из какого типа дистрибутива) Вы должны инициализировать таблицы предоставления привилегий, запустить сервер и удостовериться, что он работает нормально. Вы можете также принять меры, чтобы сервер был запущен и остановлен автоматически при запуске или парковке ОС Вашего компьютера.
Обычно Вы устанавливаете таблицы предоставления привилегий и запускаете сервер для установки из исходников примерно так:
Для двоичного дистрибутива (не RPM или pkg-пакетов!), скомандуйте:
Это создает базу данных 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 .
Тестирование подробно описано ниже:
В случае необходимости запустите сервер mysqld и установите начальные таблицы предоставления привилегий MySQL, содержащие привилегии, которые определяют, как пользователям позволяется соединяться с сервером. Это обычно сделается скриптом 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_ .
Если Вы не устанавливаете таблицы предоставления привилегий, следующая ошибка появится в журнале, когда Вы запускаете сервер: Вышеупомянутое может также случаться с двоичным дистрибутивом 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».
Цель скрипта mysql_install_db состоит в том, чтобы сгенерировать новые таблицы предоставления привилегий MySQL. Это не будет воздействовать на любые другие данные! Скрипт также не будет делать что-либо, если Вы уже имеете установленные таблицы предоставления привилегий MySQL!
Если Вы хотите пересоздать Ваши таблицы привилегий, Вы должны сначала завершить сервер mysqld , если он работает, а затем выполнить:
Этот раздел перечисляет проблемы, с которыми Вы можете столкнуться, когда выполняете mysql_install_db :
mysql_install_db не устанавливает таблицы предоставления привилегий . Вы можете выяснить, что mysql_install_db валится после вывода следующих сообщений: В этом случае, Вы должны исследовать журнал очень тщательно! Файл регистрации должен быть размещен в каталоге 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 . Вы можете определять иной сокет и временный каталог следующим образом: Подробности есть в разделе » 8.4.5 Как защитить или менять файл сокета MySQL /tmp/mysql.sock «. some_tmp_dir должен быть путем к некоторому каталогу, для которого Вы имеете разрешение на запись. Подробности в разделе «Приложение 2. Переменные окружения «. После этого Вы должны выполнить mysql_install_db и запустить сервер с помощью этих команд: 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 : Из mysql вручную выполните команды из mysql_install_db . Удостоверьтесь, что позже Вы выполняете mysqladmin flush-privileges или mysqladmin reload , чтобы сервер перезагрузил таблицы предоставления.
Если Вы собираетесь использовать таблицы, которые поддерживают транзакции (BDB, InnoDB), Вы должны сначала создать файл my.cnf и установить параметры запуска для тех типов таблиц, которые Вы планируете использовать. Подробности в разделе «7 Типы таблиц MySQL».
Вообще, Вы запускаете сервер mysqld одним из трех путей:
- Вызовом mysql.server . Этот скрипт используется прежде всего при запуске системы, и описан более подробно в разделе «2.4.3 Автоматический запуск и останов MySQL».
- Вызовом safe_mysqld , который пробует определить соответствующие параметры для mysqld и затем выполняет его с этими параметрами.. Подробности в разделе » 4.7.2 safe_mysqld, обертка вокруг mysqld».
- На NT-системах следует установить mysqld как сервис: Вы можете запускать и выключать сервер mysqld так: Заметьте, что в этом случае, Вы не можете использовать каких-либо опций для mysqld ! Можно удалить сервис:
- Запуская mysqld непосредственно.
Когда mysqld запускается, он переходит в каталог данных, где ожидает найти базы данных. Именно там будут записываться файлы протокола и pid (process ID).
Расположение каталога данных зависит от настроек при построении пакета. Однако, если mysqld ожидает найти каталог данных в одном месте, а он реально расположился где-нибудь в другом, сервер не будет работать правильно. Если Вы имеете проблемы с неправильными путями, Вы можете выяснить то, какие параметры понимает mysqld и заданные по умолчанию параметры настройки вызовом mysqld с опцией —help . Вы можете отменять значения по умолчанию, определяя правильные имена каталогов как параметры командной строки mysqld . Эти параметры также могут использоваться и с safe_mysqld .
Обычно Вы должны сообщить mysqld только основной каталог, в который MySQL установлен. Вы можете сделать это с помощью опции —basedir . Вы можете также использовать —help , чтобы проверить эффект изменения параметров (обратите внимание, что —help ДОЛЖНА быть последней опцией в вызове mysqld ). Конкретный пример:
Как только Вы определите параметры настройки путей к каталогам, запустите сервер без опции —help .
Любой метод, который Вы используете, чтобы запустить сервер, в случае провала отмечает ситуацию в журнале ошибок. Журналы размещены в каталоге данных (обычно /usr/local/mysql/data для двоичного дистрибутива, в /usr/local/var для исходников или в \mysql\data\mysql.err для Windows). Просмотрите каталог данных для поиска файлов с именами формы host_name.err и host_name.log , где host_name имя Вашего компьютера сервера. Затем проверьте последние строки файлов:
Если в файле протокола будет найдено нечто вроде:
Это означает, что Вы не запускали mysqld с —bdb-no-recover , и драйвер Berkeley DB выявил, что что-то пошло неправильно с журналами, когда пробовал восстанавливать Ваши базы данных. Чтобы продолжить работу, Вы должны переместить старый журнал Berkeley DB из каталога баз данных куда-то в другое место, где Вы можете позже исследовать его. Журналы именованы как log.0000000001 , где число увеличивается через какое-то время.
Если Вы управляете mysqld с поддержкой таблиц BDB, и mysqld падает в дамп ядра при запуске, это может быть из-за некоторых проблем с файлом регистрации BDB. В этом случае Вы можете попробовать запускать mysqld с опцией —bdb-no-recover . Если это помогает, то удалите все файлы log.* из каталога данных и попробуйте снова запустить mysqld .
Если Вы получаете следующую ошибку, это означает, что некоторая другая программа (или другой сервер mysqld ) уже использует TCP/IP порт или сокет, который пробует использовать mysqld :
Используйте 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 в настоящее время работает, Вы можете выяснить, какие параметры настройки он использует, выполняя эту команду:
Если safe_mysqld сервер запускает, но Вы не можете соединиться с ним, Вы должны удостовериться, что имеете запись в файле /etc/hosts , которая выглядит следующим образом:
Эта проблема происходит только на системах, которые не имеют рабочую библиотеку потоков, и для которых MySQL должен быть сконфигурирован так, чтобы использовать MIT-pthreads.
Если Вы не можете запустить mysqld , Вы можете попробовать сделать файл трассировки, чтобы найти проблему. Подробности в разделе «6.1.2 Создание файлов трассировки «.
Если Вы используете InnoDB-таблицы, обратитесь к специфическим параметрам запуска. Подробности в разделе «7.6.2 Параметры запуска InnoDB».
Если Вы используете таблицы BDB (Berkeley DB), Вы должны ознакомиться с различными специфическими параметрами запуска BDB. Подробности в разделе «7.5.3 Параметры запуска BDB».
Скрипты mysql.server и safe_mysqld могут использоваться, чтобы запустить сервер автоматически при запуске системы. Скрипт mysql.server может также использоваться для того, чтобы остановить сервер при парковке системы.
Скрипт mysql.server может использоваться, чтобы запустить или остановить сервер, вызывая его с параметрами start или 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 , чтобы запустить внешние скрипты, Вы должны дописать к нему следующее:
Вы можете также добавлять параметры для mysql.server в глобальный файл /etc/my.cnf . Типичный файл /etc/my.cnf может выглядеть следующим образом:
Скрипт mysql.server понимает следующие параметры: datadir , basedir и pid-file .
Следующая таблица показывает, какие группы опций читает из файлов настройки конкретный скрипт:
Скрипт | Группы опций |
mysqld | mysqld и server |
mysql.server | mysql.server , mysqld и server |
safe_mysqld | mysql.server , mysqld и server |
Вы можете всегда перемещать форму 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.
Вы можете использовать Ваши старые файлы данных без модификаций с 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 .
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() сократит строку результата, если она более длинная, чем заданный параметр длины.
Ничего такого, что воздействует на совместимость, не изменилось между 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 , но Вы все еще можете использовать старое имя в Ваших файлах запуска.
Если Вы управляете версией старше, чем 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 , старая клиентура выдаст сообщение об ошибке:
Новый интерфейс Perl DBI / DBD также поддерживает старый интерфейс mysqlperl . Единственное изменение, которое Вы должны сделать, если Вы используете интерфейс mysqlperl : нужно заменить параметры в функции connect() . Новые аргументы: host , database , user и password (параметры user и password теперь поменялись местами).
Следующие изменения могут воздействовать на запросы в старых программах:
- HAVING теперь должно быть определено перед любым предложением ORDER BY .
- Параметры для LOCATE() переставлены местами.
- Имеются некоторые новые зарезервированные слова. Наиболее известны: DATE , TIME и TIMESTAMP .
Если Вы используете MySQL Version 3.23, Вы можете копировать файлы .frm , .MYI и .MYD между различным архитектурами, которые поддерживают тот же самый формат с плавающей запятой.
MySQL ISAM -файлы данных и индекса ( .ISD и *.ISM , соответственно) зависимы от архитектуры. Если Вы хотите переместить Ваши прикладные программы на другую машину, которая имеет иную архитектуру или ОС, Вы не должны пробовать перемещать базу данных, просто копируя файлы на другую машину. Вместо этого используйте mysqldump .
По умолчанию mysqldump создаст файл с инструкциями SQL. Вы можете затем передать файл на другую машину и подать его на ввод клиента mysql .
Вызов mysqldump —help покажет то, какие параметры являются доступными. Если Вы перемещаете данные к более новой версии MySQL, Вы должны использовать mysqldump —opt с более новой версией, чтобы получить быстрый, компактный дамп.
Самый простой (хотя не самый быстрый) способ перемещать базу данных между двумя машинами состоит в том, чтобы выполнить следующие команды на машине, на которой база данных размещена сейчас:
Если Вы хотите копировать базу данных с удаленной машины через медленную сеть, Вы можете использовать:
Вы можете также сохранять результат в файле, затем передавать файл целевой машине и загружать файл в базу данных там. Например, Вы можете сбросить в дамп базу данных на исходной машине подобно этому:
Файл, созданный в этом примере сжат. Затем передайте это файл целевой машине и выполните эти команды там:
Вы можете также использовать mysqldump и mysqlimport , чтобы выполнить передачу базы данных. Для больших таблиц это намного быстрее, чем простое использование mysqldump . В командах, показанных ниже, DUMPDIR представляет полное имя каталога, который Вы используете, чтобы сохранить вывод из mysqldump .
Сначала создайте каталог для выходных файлов и дампа база данных:
Затем передайте файлы в каталоге DUMPDIR соответствующему каталогу на целевой машине и загрузите файлы в MySQL там:
Также не забудьте скопировать базу данных mysql потому, что именно там хранятся таблицы предоставления привилегий ( user , db , host ). Вам, вероятно, придется выполнять команды как MySQL-пользователь root на новой машине, пока Вы не имеете на ней базу данных mysql со старой.
После того, как Вы импортируете базу данных mysql на новую машине, выполните mysqladmin flush-privileges , чтобы сервер перезагрузил информацию таблицы предоставления привилегий.