MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQL2.5.2 Модернизация с версии 3.23 до версии 4.0
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 .
|