Russian English German Ukrainian

Компьютерная помощь

(066) 72-00-654     (098) 44-74-068

г. Днепр

ж/м Левобережный-3

MySQL: конвертация таблиц MyISAM в InnoDB и обратно

Перед тем как начать стоит убедиться, что в конфиге mysql включена поддержка InnoDB и другие параметры настроены верно.

Откройте конфиг mysql:

sudo nano /etc/mysql/my.cnf 

и убедитесь, что там нет или закоментирована сточка skip-innodb (если вы наоборот отказываетесь от innodb, то в последствии можете добавить эту строчку, это позволит сэкономить память на ненужном движке).

Так же для innodb убедитесь в правильности параметра innodb_data_file_path. Он должен быть похож на:

innodb_data_file_path = ibdata1:100M:autoextend

где 100M – минимальный создаваемый размер файла под хранение таблиц, autoextend – разрешает автоматическое увеличение этого файла.

Если у этого параметра установлен еще ключ max:NN – то либо удалите его совсем, либо выставите *NN* в максимальный размер для одной таблице, иначе импорт дампа может выпасть за этот лимит и придется его менять.

Или за место innodb_data_file_path использовать innodb_file_per_table, тогда под каждую таблицу будет использоваться свой отдельный файл.

Любые изменения в конфигурации потребует перезапуска mysql сервера.

sudo service mysql restart

Конвертация

Все операции выполняются в консоле.

Создание исходного дампа базы:

mysqldump --opt -u USER -p DBNAME > dbname.sql

Изменяем тип движка для таблиц:

для MyISAM → InnoDB:

sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' dbname.sql > dbname.innodb.sql

для InnoDB → MyISAM:

sed -i s/ENGINE=InnoDB/ENGINE=MyISAM/g dbname.sql > dbname.myisam.sql

Теперь удалим саму БД:

mysqladmin -u USER -p drop DBNAME

И создадим заново:

mysqladmin -u USER -p create DBNAME

Заливаем дамп обратно:

mysql -u USER -p DBNAME < dbname.{innodb|myisam}.sql
  • Сборка ПК для дома и офиса

  • Бесплатная диагностика

  • Гарантия

  • Самые низкие цены