У меня есть база данных MySQL с таблицами на движке InnoDB. Но сервер настроен на использование только одного файла ibdata0 без параметра innodb_file_per_table. Я хочу изменить это без создания дампа и восстановить его на перенастроенном сервере. Итак, мой план состоял в том, чтобы добавить параметр innodb_file_per_table
в my.cnf перезапустите сервер и принудительно используйте ALTER TABLE
перестроить все таблицы InnoDB.
Делать ALTER TABLE tablename ENGINE = InnoDB
должен создать .idb
файл для каждого .frm
файл в моем /val/lib/mysql/mydatabase
каталог, и это произошло (и я подумал переместить данные из ibdata
файл). Но после того, как я выключил сервер и удалил старый файл ibdata, я вижу все таблицы (SHOW TABLES
) но если я сделаю SELECT
в них я получаю такую ошибку:
ERROR 1146 (42S02): Table 'mytable' doesn't exist
Поэтому я полагаю, что некоторые данные остались в старом файле ibdata.
Я что-то пропустил? Есть ли способ делать то, что я хочу?
Нет, придется делать дамп и восстанавливать. Даже после выполнения alter table engine
Уловка, некоторые данные останутся в файле ibdata1.
Я сам столкнулся с этой проблемой, и сброс всех таблиц, а затем их повторный импорт без выключения mysql не работает. Перед удалением файла ibdata1 необходимо удалить все таблицы innodb.