Как сменить MyISAM на InnoDB?

Главные вкладки

Комментарии

Аватар пользователя yaguar yaguar 18 ноября 2014 в 15:18

А может вообще на SQLite перейти? Вот только на Drupal 7 не очень то хочется переходить, так как под него нет некоторых модулей, например, капчи в поворачивающимися картинками. Да и долгое это занятие.
Достали эти постоянные падения MySQL.

Аватар пользователя yaguar yaguar 18 ноября 2014 в 16:27

Практика показывает обратное.
Один полупустой сайт на MySQL (MyISAM) лежит раз в месяц, в то время как у сайта на SQLite с базой на гектар такой падучей не замечал.
А если ещё через PHPMyAdmin дампы лить, то вообще ужас - он для этого не приспособлен. Поэтому приходится исключительно под рутом из командной строки - никакого комфорта. SQLite этих проблем лишена.

Аватар пользователя yaguar yaguar 18 ноября 2014 в 17:12

Уменьшил время хранения логов до суток. А то создавались на много гектар и вешали MySQL. А таблица MyISAM лишена транзакций (каменный век) и соответственно портилась при зависании. Посмотрим.

А как правильно сконвертировать в InnoDB? Будет достаточно просто в блокноте в дампе заменить и залить под рутом через командную строку?

Аватар пользователя jura12 jura12 18 мая 2020 в 12:12

мне помог этот скрипт для друпал 7 от Harald Leithner . в phpmyadmin выбираешь базу данных и выполняешь скрипт.

DROP PROCEDURE IF EXISTS convertToInnodb;
DELIMITER //
CREATE PROCEDURE convertToInnodb()
BEGIN
mainloop: LOOP
  SELECT TABLE_NAME INTO @convertTable FROM information_schema.TABLES
  WHERE `TABLE_SCHEMA` LIKE DATABASE()
  AND `ENGINE` LIKE 'MyISAM' ORDER BY TABLE_NAME LIMIT 1;
  IF @convertTable IS NULL THEN
    LEAVE mainloop;
  END IF;
  SET @sqltext := CONCAT('ALTER TABLE `', DATABASE(), '`.`', @convertTable, '` ENGINE = INNODB');
  PREPARE convertTables FROM @sqltext;
  EXECUTE convertTables;
  DEALLOCATE PREPARE convertTables;
  SET @convertTable = NULL;
END LOOP mainloop;

END//
DELIMITER ;

CALL convertToInnodb();
DROP PROCEDURE IF EXISTS convertToInnodb;