Недавно я обновил свой сервер CPanel с mySQL 5.5 до mySQL 5.6, так как теперь он поддерживает полнотекстовый поиск InnoDB. Теперь я не так хорош в mySQL, поэтому мне было интересно, есть ли что-то особенное, что мне нужно помнить, кроме запуска
ALTER TABLE my_table ENGINE=InnoDB;
Некоторые из моих таблиц имеют полнотекстовые индексы. Что с ними будет? Будут ли индексы преобразованы автоматически? Или мне придется потом заново их собирать вручную?
Если вы не измените ни один из параметров запуска FULLTEXT, преобразование MyISAM в InnoDB позаботится о создании индексов FULLTEXT для InnoDB.
Если вы можете подключиться к MySQL из интерфейса командной строки, запустите этот запрос
SELECT DISTINCT table_schema,table_name
FROM information_schema.statistics WHERE index_type='FULLTEXT';
Это даст вам каждую таблицу с индексом FULLTEXT.
Используя этот запрос, запустите этот запрос
SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB') Cmd
FROM (SELECT DISTINCT table_schema,table_name
FROM information_schema.statistics WHERE index_type='FULLTEXT') A
INNER JOIN information_schema.tables B USING (table_schema,table_name)
WHERE B.engine='MyISAM';
Это покажет вам все команды для преобразования таблиц MyISAM с индексами FULLTEXT в InnoDB.
Вы можете выгружать команды в текстовый файл.
SQL="SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB')"
SQL="${SQL} FROM (SELECT DISTINCT table_schema,table_name"
SQL="${SQL} FROM information_schema.statistics"
SQL="${SQL} WHERE index_type='FULLTEXT') A"
SQL="${SQL} INNER JOIN information_schema.tables B"
SQL="${SQL} USING (table_schema,table_name)"
SQL="${SQL} WHERE B.engine='MyISAM'"
mysql -uroot -p -ANe"${SQL}" > ConversionScript.sql
less ConversionScript.sql
Это создаст сценарий преобразования и позволит вам просмотреть его.
Если вас устраивает содержимое скриптов, войдите в mysql и запустите это:
mysql> source ConversionScript.sql