Миграция php4 / mysql4 в php5 / mysql5: переключиться на InnoDB? - PullRequest
2 голосов
/ 14 апреля 2009

У меня есть устаревшее веб-приложение php4 / mysql4 (MyISAM, db содержит несколько cms, некоторые пользовательские данные, некоторое приложение-календарь). Теперь я собираюсь перейти на новый сервер с php5 / mysql5.

Стоит ли переходить на InnoDB при переносе базы данных mysql? - ожидаемые преимущества / недостатки / риски? - MyISAM устарела или будет когда-нибудь? Или я могу безопасно сохранить его? - Я слышал, что MyISAM легко портится, а как насчет InnoDB? - InnoDB проще или безопаснее для резервного копирования и восстановления?

Может ли он сломать мой код, когда я изменяю (нарушаю запросы SQL) или нарушать логику (из-за измененного механизма блокировки), и если да, то каковы типичные сценарии?

(Для вопросов php я создал другой вопрос: Перенос php4 / mysql4 на php5 / mysql5: ожидаемые проблемы с php? )

Ответы [ 2 ]

3 голосов
/ 14 апреля 2009

Ключевая вещь, на которую вы должны обратить внимание, это то, как используется ваша база данных. Если он больше Read, чем Write, тогда вы должны придерживаться MyISAM, если его больше Write, чем Read, вы должны заглянуть в InnoDB.

Если вы хотите узнать разницу между InnoDB и MyISAM, то В Википедии есть большой список их различий.

MyISAM использует блокировку на уровне таблицы при записи в любую существующую строку, тогда как InnoDB использует блокировку на уровне строки.

Для больших приложений баз данных, где часто обновляется много строк, блокировка на уровне строк имеет решающее значение, поскольку одиночная блокировка на уровне таблицы значительно снижает параллелизм в базе данных.

2 голосов
/ 14 апреля 2009

Стоит отделить обновление MySQL v4 / v5 от обновлений таблицы. Это уменьшает потенциальный круг проблем.

Тем не менее, если перезапуск базы данных является редким явлением, потратьте некоторое время на проверку параметров сервера InnoDB перед обновлением v4 / v5, так как многие из них нуждаются в перезапуске базы данных. Рекомендуются два типа: innodb_file_per_table = 1 и innodb_flush_log_at_tx_commit = 1 (ищите их), и вам также следует обратить внимание на innodb_buffer_pool_size, поскольку почти наверняка он будет слишком низким, если никто его не изменил.

MyISAM будет в течение долгого времени. Это очень надежный формат на диске, который обладает некоторыми качествами, полезными для многих ситуаций. В частности, он имеет быстрый SELECT, который может быть полезен для небольшой таблицы, в которой нет или очень мало обновлений. Тем не менее, очень горячая таблица (много-много SELECT с) выиграет от перехода на InnoDB, потому что MyISAM не поддерживает одновременное чтение.

MyISAM почти всегда переживает сбой базы данных, при этом требуется всего лишь REPAIR TABLE. InnoDB не всегда так везет. MyISAM также может быть скопирован из базы данных; даже если вы не заблокируете таблицу заранее, вы, скорее всего, получите файл, который будет просто работать. InnoDB файлы не такие добрые; Вот почему существует innodb_hot_copy.

Недавно мы прошли обновление MySQL v4 / v5, и у нас была только одна проблема с SQL: смешанный режим JOIN s. Парсер версии 4 был довольно прощающим, когда смешивал неявные объединения таблиц с явными предложениями LEFT JOIN. Версия 5 не такая уж прощающая. Поэтому мы воспользовались возможностью, чтобы просмотреть приложение и обновить все JOIN s до явных JOIN s. Помимо одного или двух пропущенных мест это было очень успешно.

Я бы порекомендовал вам настроить тестовую среду с использованием PHP 4 и MySQL v5. Это позволит вам проверить все это.

...