Периодически сталкиваюсь с интересным явлением, когда на клиентских VPS mysql работает в режиме Innodb, а таблицы БД хранятся в формате MyIsam. Это может негативно повлиять на производительность. Вероятно, что проблема возникает из-за многократного переноса БД с одного VPS на другой или из-за обновления СУДБ. Но смотрится это довольно странно. Опишу решение и возможные проблемы.
Исходные данные: сервер mysql в режиме Innodb, БД с таблицами Myisam. БД неободимо конвертировать в InnoDB.
Как сделать дамп базы данных MySQL
1 |
mysqldump -uUSER -pPASSWORD DB_NAME > FILE_NAME.SQL |
На всякий случай — восстановление БД из дампа:
1 |
mysql -uUSER -pPASSWORD -f db_name < db_dump.sql |
Как создать новую БД
Можно и даже лучше это сделать из установленной на сервере панели управления, но можно и из консоли
- Из консоли mysql:
1 |
CREATE DATABASE db_name; |
убедимся, что БД создана
1 |
SHOW DATABASES; |
- Создаём новую БД и просматриваем список существующих из обычной консоли:
1 2 |
mysqladmin -u USER -pPASSWORD create new_bd mysqlshow -u USER -pPASSWORD |
Как конвертировать таблицы mysql из MyIsam в InnoDB
Объединим операцию по конвертации и переносу данных из дампа в БД
1 |
cat name_dump.sql | sed 's/ENGINE\=MyISAM/ENGINE\=InnoDB/g' | mysql -u root bd_name |
Если процесс завершился без сообщений об ошибках, то он удачно выполнен. Но бывает, что в таблицах MyIsam существуют FULLTEXT индексы, тогда при этой операции выведется сообщение об ошибке:
1 |
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes |
Для успешной конвертации MyIsam -> InnoDB FULLTEXT индексы необходимо удалить.
Как найти FULLTEXT индексы в таблице?
Можно посмотреть запрос по которому создавалась таблицы
1 |
mysql> SHOW CREATE TABLE countries; |
если среди текста попадётся следующая строка или строки, то индексы найдены
1 |
FULLTEXT KEY `key_name` (`col_list`) |
Как удалить FULLTEXT индекс?
1 |
ALTER TABLE table_name DROP INDEX key_name; |
После удаления FULLTEXT индексов следует создать новый дамп и повторить все операции.
Свежие комментарии