Модернизация с версии 3.21 до версии 3.22
В версии 3.21 по сравнению с 3.22 не было сделано никаких изменений, влияющих на совместимость. Единственный подводный камень - это то, что для новых таблиц, создающихся со столбцами типа DATE , будет применяться новый способ хранения даты. При использовании старой версии mysqld получить доступ к этим новым полям будет нельзя.
После установки версии MySQL 3.22 необходимо запустить новый сервер, а затем выполнить скрипт mysql_fix_privilege_tables . В результате будут добавлены новые привилегии, необходимые для использования команды GRANT . Если вы забудете выполнить эти действия, то получите Access denied при попытке использовать ALTER TABLE , CREATE INDEX или DROP INDEX . Если для вашего привилегированного (root ) пользователя MySQL требуется пароль, то следует указать его как аргумент в 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 , однако старое имя можно использовать по-прежнему.
Модернизация с версии 3.20 до версии 3.21
Если вы работаете с версией выше, чем 3.20.28, и хотите перейти к 3.21, то необходимо сделать следующее:
Можно запустить сервер mysqld версии 3.21 с опцией safe_mysqld --old-protocol , чтобы использовать его с клиентами из дистрибутива версии 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- разрядные пароли вместо 31- разрядных).
Формат таблиц не изменялся, следовательно, в преобразовании каких-либо таблиц необходимости нет.
Версия MySQL 3.20.28 и выше может обрабатывать новый формат таблиц user так, что это не отражается на клиентах. В более ранних, чем 3.20.28, версиях MySQL пароли больше не будут работать с клиентами, если таблица user преобразована. Для уверенности следует прежде провести апгрейд по меньшей мере до версии 3.20.28 и затем модернизировать до версии 3.21.
Новый код клиента работает с сервером 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 поменялись местами). See section 8.2.2 Интерфейс DBI .
Ниже перечислены изменения, которые могут повлиять на запросы в старых приложениях:
HAVING теперь необходимо указывать перед любым выражением ORDER BY .
Произведена замена параметров в LOCATE() .
Появилось несколько новых зарезервированных слов. Наиболее значимыми из них являются DATE , TIME и TIMESTAMP .
1 2 3 4 5
8 8 8
| |