2.5.2 Модернизация с версии 3.23 до версии 4.0
В общем случае, вот что вам следует сделать для апгрейда к версии 4.0 с более старой:
-
Выполнить скрипт
mysql_fix_privilege_tables
чтобы добавить новые
привилегии и возможности в таблицы привилегий MySQL.
-
Подредактировать скрипты запуска MySQL или конфигурационные файлы, чтобы не использовать
устаревшие опции, описанные ниже.
-
Преобразовать ваши старые ISAM-файлы в формат MyISAM следующей командой:
mysql_convert_table_format база данных
.
Обратите внимание, это нужно делать только если все таблицы в базе данных
являются таблицами типа ISAM или MyISAM. Если это не тот случай, вам тогда
следует выполнить ALTER TABLE имя_таблицы TYPE=MyISAM
для всех
ISAM-таблиц.
-
Удостоверьтесь, что у вас не используется никакие клиенты MySQL, что используют
динамические библиотеки (например, Perl Msql-Mysql-modules). Если у вас есть
такие, их следует перекомпилировать, т.к. структуры в `libmysqlclient.so'
изменились.
MySQL 4.0 будет работать, даже если вы не выполните эти шагы, но у вас
не будет возможности использовать новые привилегии, которые предоставляет MySQL 4.0,
и у вас могут быть проблемы при дальнейшем апгрейде к 4.1 или более новым серверам.
Формат ISAM в MySQL 4.0 все еще работает, но он уже морально устарел и будет исключен
из версии MySQL 5.0.
Старые клиенты должны работать с версией 4.0 без каких-либо проблем.
И даже если вы выполните эти шаги, вы сможете произвести даунгрейд к
MySQL 3.23.52 или более новой, если у вас возникнут проблемы с MySQL 4.0. В этом
случае вам потребуется выполнить mysqldump на всех таблицах, использующих полнотекстовые
индексы и восстановить dump на версии 3.23. Причина заключается в том, что MySQL 4.0
использует новый формат полнотекстовых индексов.
Вот подробный список того, на что следует обратить внимание при апгрейде к 4.0:
-
В MySQL 4.0 появилось большое количество новых привилегий в таблице
mysql.user
. See section 4.3.1 Синтаксис команд GRANT
и REVOKE
.
Чтобы заставить эти
новые привилегии работать, следует запустить скрипт
mysql_fix_privilege_tables
. До выполнения данного скрипта у всех
пользователей будут привилегии SHOW DATABASES
, CREATE TEMPORARY TABLES
и LOCK TABLES
. Значения для привилегий SUPER
и EXECUTE
берутся
из PROCESS
, для REPLICATION SLAVE
и REPLICATION CLIENT
- из FILE
.
Чтобы скрипты, создающие новых пользователей, могли использовать новые
привилегии, их нужно модифицировать. Если в этих скриптах не
используется команда GRANT
, то сейчас самое время изменить их.
В версии
4.0.2 опция --safe-show-database
устарела и не рекомендуется (и она
больше ничего не делает). See section 4.2.3 Опции запуска mysqld
, относящиеся к безопасности.
Если в версии 4.0.2 для новых пользователей
возникают ошибки отказа в доступе, то следует проверить, не требуются
ли вам некоторые новые привилегии, которые не были нужны раньше. В
частности, для новых репликаций понадобится REPLICATION SLAVE
(вместо
FILE
).
-
Параметры запуска
myisam_max_extra_sort_file_size
и
myisam_max_extra_sort_file_size
теперь указываются в байтах (до 4.0.3
указывались в мегабайтах).
Внешняя блокировка файлов MyISAM/ISAM теперь выключена по умолчанию. Можно
включить ее обратно опцией --external-locking
. Для большинства
пользователей этого никогда не потребуется делать.
-
Следующие переменные/опции были переименованы:
Из | В.
|
myisam_bulk_insert_tree_size | bulk_insert_buffer_size
|
query_cache_startup_type | query_cache_type
|
record_buffer | read_buffer_size
|
record_rnd_buffer | read_rnd_buffer_size
|
sort_buffer | sort_buffer_size
|
warnings | log-warnings
|
err-log | --log-error (для mysqld_safe )
|
Опции запуска record_buffer
, sort_buffer
и warnings
все
еще работают в MySQL 4.0, но считаются уже морально устаревшими.
-
Следующие SQL-переменные переименованы.
Из | В.
|
SQL_BIG_TABLES | BIG_TABLES
|
SQL_LOW_PRIORITY_UPDATES | LOW_PRIORITY_UPDATES
|
SQL_MAX_JOIN_SIZE | MAX_JOIN_SIZE
|
SQL_QUERY_CACHE_TYPE | QUERY_CACHE_TYPE
|
Старые имена в MySQL 4.0 работают, но уже не рекомендованы к использованию.
-
Вы должны использовать
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=#
вместо
SET SQL_SLAVE_SKIP_COUNTER=#
.
-
Переименовали опцию запуска
mysqld
--skip-locking
в
--skip-external-locking
и --enable-locking
в
--external-locking
.
-
SHOW MASTER STATUS
теперь возвращает пустой результат если двоичный журнал обновлений
не включен.
-
SHOW SLAVE STATUS
возвращает пустой результат если подчиненный сервер не инициализирован.
-
mysqld теперь обладает опцией
--temp-pool
включенной по умолчанию, т.к. это
дает лучшую производительность на некоторых ОС (в основном, на Linux).
-
Столбцы
DOUBLE
и FLOAT
теперь учитывают флаг
UNSIGNED
при хранении (раньше UNSIGNED
игнорировался для этих столбцов).
-
ORDER BY столбец DESC
теперь сортирует величины NULL
в первую очередь; в 3.23 это было не всегда так. Внимание: в MySQL 4.0.11 восстанавлено
оригинальное поведение.
-
SHOW INDEX
имеет на 2 столбца больше (Null
и Index_type
), чем в версии
3.23.
-
CHECK
, SIGNED
, LOCALTIME
и LOCALTIMESTAMP
теперь являются зарезервированными словами.
-
Результат работы всех поразрядных операторов
|
, &
, <<
, >>
и ~
сейчас
является беззнаковым. Это может вызвать проблемы при использовании их
в контексте, где желателен результат со знаком. See section 6.3.5 Функции приведения типов.
-
Замечание: результат операции вычитания между целыми величинами, одна
из которых имеет тип
UNSIGNED
, будет беззнаковым! Другими словами,
перед модернизацией до MySQL 4.0 вы должны проверить свои приложения
для случаев, где производится вычитание величины из беззнакового
объекта и предполагается ответ с отрицательным знаком, или вычитание
беззнаковой величины из целочисленного столбца. Данный режим можно
заблокировать, используя опцию --sql-mode=NO_UNSIGNED_SUBTRACTION
при
запуске mysqld
. See section 6.3.5 Функции приведения типов.
-
Для того чтобы использовать
MATCH ... AGAINST (... IN BOOLEAN MODE)
на
таблицах, следует перестроить их заново при помощи REPAIR TABLE table_name USE_FRM
.
-
LOCATE()
и INSTR()
чувствительны к регистру, если один из аргументов
является двоичной строкой. В противном случае они не зависят от
регистра.
-
STRCMP()
при выполнении сравнений сейчас использует текущий набор
символов; это означает, что операция сравнения по умолчанию начиная с
данной версии является независимой от регистра.
-
HEX(string)
сейчас возвращает символы строки, преобразованные в
шестнадцатеричные. Если необходимо преобразовать число в
шестнадцатеричное представление, убедитесь, что HEX()
вызывается с
числовым аргументом.
-
В версии 3.23 в команде
INSERT INTO ... SELECT
параметр IGNORE
всегда
был разрешен. В версии 4.0.1 MySQL остановится (и, возможно,
произойдет откат) в случае ошибки, если IGNORE
не задан явно.
-
Скрипт
safe_mysqld
переименован в mysqld_safe
. Некоторое время
мы будем включать safe_mysqld
в дистрибутив как символическую ссылку на mysqld_safe
.
-
Старые функции C API
mysql_drop_db
, mysql_create_db
и mysql_connect
больше не будут поддерживаться, если вы не скомпилируете MySQL с
CFLAGS=-DUSE_OLD_FUNCTIONS
). Вместо перекомпиляции лучше пересобрать
клиента для использования нового 4.0 API.
-
В структуре
MYSQL_FIELD
величины length
и max_length
изменены с
unsigned int
на unsigned long
. Это не должно вызывать проблем, за
исключением того, что при использовании величин с такими типами в
качестве аргументов в функциях класса printf()
могут генерироваться
предупреждающие сообщения.
-
Если необходимо удалить из таблицы все строки, но вам не нужно знать,
сколько строк было удалено, следует использовать
TRUNCATE TABLE
при
(поскольку TRUNCATE TABLE
значительно быстрее, чем DELETE FROM
table_name
).
-
При попытке выполнить
TRUNCATE TABLE
или DROP DATABASE
при наличии
активной команды LOCK TABLES
или транзакции вы получите ошибку.
-
Для хранения величин в столбцах
BIGINT
необходимо использовать целые
числа (вместо строк, как было в MySQL 3.23). Возможность использования
строк для данного случая пока еще работает, но применение целых чисел
более эффективно.
-
Изменен формат
SHOW OPEN TABLE
.
-
Многопоточные клиенты должны использовать
mysql_thread_init()
и
mysql_thread_end()
. See section 8.4.8 Как создать клиентскую программу с потоками.
-
При желании перекомпилировать модуль Perl
DBD::mysql
необходимо
получить версию Msql-Mysql-modules
1.2218 или более новую, поскольку в
более старых модулях DBD
использовался не поддерживаемый вызов функции
drop_db()
.
-
В версии 4.0
RAND(seed)
возвращает иные последовательности случайных
чисел, чем в 3.23; это сделано для того, чтобы лучше различать
RAND(seed)
и RAND(seed+1)
.
-
Тип результата, возвращаемый
IFNULL(A,B)
теперь по умолчанию
устанавливается более "общий" по отношению к типам A
и B
. Порядок
выбора - STRING
, REAL
или INTEGER
.
Add your own comment.