По мотивам предыдущего поста. :))
В интернете много всяких заметок по поводу преобразования MyISAM в InnoDB: и с помощью всяких скриптов, и утилит типа mysql_convert_table_format, и даже с помощью sed. Но нам сложности не нужны, поэтому предлагаю самый простой вариант. Во-первых, остановим сервер:
PS: конечно, рекомендую сделать бекап базы прежде чем конвертировать - на всякий случай.
В интернете много всяких заметок по поводу преобразования MyISAM в InnoDB: и с помощью всяких скриптов, и утилит типа mysql_convert_table_format, и даже с помощью sed. Но нам сложности не нужны, поэтому предлагаю самый простой вариант. Во-первых, остановим сервер:
# /etc/rc.d/mysql-server stopЗатем нужно убедиться, что в конфиге /etc/mysql/my.cnf нет строчки skip-innodb, а также присутствует строчка типа:
innodb_data_file_path = ibdata1:100M:autoextendЗатем логинимся в консоль MySQL:
mysql -u <username> -pИ вводим команду:
ALTER TABLE <tablename> ENGINE='InnoDB';Вот и всё! Моя гиговая табличка преобразовалась за шесть минут.
PS: конечно, рекомендую сделать бекап базы прежде чем конвертировать - на всякий случай.
Если уже конвертировать наживую - то лучше innodb_file_per_table сразу включать http://michael-xiii.blogspot.com/2011/10/mysql-innodbfilepertable.html
ReplyDeleteСпасибо за замечание, в будущем учту это. Но в текущем случае комп задействован под достаточно специфичный проект, где только 1 табличка и она постоянно разрастается. :)
DeleteПаш, я чего-то, наверное, не понимаю, но если ты остановишь сервер, то как ты к базе данных подключишься? )
ReplyDeleteда, это залет :)
DeleteА поправить в статье залёт?
Deletemysql -u username -p // подключаемся через ssh к серверу
DeleteSHOW DATABASES; // смотрим список баз данных
USE databasename; // выбираем нужную
ALTER TABLE ENGINE='InnoDB'; // конвертим нужную таблицу в базе
ну и в конце перезагружаем mysql сервер. У меня базу в полтора гигабайта переконвертило минут за пять. Кстати, можно названия таблиц указывать в одну строку через точку с запятой, например ALTER TABLE users ENGINE='InnoDB';ALTER TABLE news ENGINE='InnoDB';
Статья зашрвар полный
ReplyDeleteАФТАР АЛЕНЬ