Конвертация типа движка таблиц MySQL из MyISAM в InnoDB и обратно, Отключение движка innodb

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

Я про­во­жу кон­вер­та­цию sql дам­па из-за это­го созда­ет даун­тайм на вре­мя операции.

 

Предварительно

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

Открой­те кон­фиг mysql  /etc/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 сервера.

Конвертация

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

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

    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 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

Отключение движка innodb на mysql 5.5

Если вы не пла­ни­ру­е­те исполь­зо­вать дви­жок innodb базе дан­ных mysql, его мож­но отклю­чить. Обыч­но нуж­но рас­ком­мен­ти­ро­вать опцию в фай­ле my.cnf:

skip-innodb

В новых вер­си­ях mysql 5.5 этой опции уже не доста­точ­но, база не запус­ка­ет­ся. Ошиб­ка при запус­ке mysql - "unknown unsupported storage engine innodb". Если у вас подоб­ная ситу­а­ция, необ­хо­ди­мо доба­вить еще одну опцию:

default-storage-engine=myisam

При этом нуж­но пом­нить, что эти опции долж­ны быть раз­ме­ще­ны в сек­ции [mysqld] кон­фи­гу­ра­ци­он­но­го фай­ла my.cnf базы mysql. Если про­сто доба­вить эти пара­мет­ры, то будет ошиб­ка при запус­ке mysql.