info@celere.ru
+7(952)81-37-468
+7(952)81-37-468
Не всегда удобно хранить все MySQL базы и все таблицы одного серера в ibdata1
Зачастую, при росте БД возникает необходимость разнести базы на разные хранилища. Плюс, заметил, удаляя более-менее большие таблицы, ibdata1 не уменьшается в размерах, особенно чувствительно это, когда таблицы размерами с десятки Гб.
В общем - делюсь опытом, как перевести InnoDB из хранения в одном файле - в хранение - файл на таблицу.
Делается это очень просто.
1. Намечаем время работ, чтобы клиенты не страдали
2. Останавливаем все сервисы, которые коннектятся к базам
3. Делаем дампы нужных нам баз (на всякий случай закопировал и файлы конфигурации и файлы структуры таблиц с данными (/etc/mysql и /var/lib/mysql , ну или где они в вашем дистрибутиве лежат))
4. Удаляем все таблицы из баз
5. Выключаем mysqld
6. В файле my.cnf ищем строку (если есть) innodb_data_file_path и заменяем ее (если нет, то в секцию InnoDB просто добавляем) на:
innodb_data_file_path=ibdata1:10M:autoextend
innodb_file_per_table=1
7. Удаляем файлы
ibdata1
ib_logfile0
ib_logfile1
8. Запускаем mysqld
9. Заливаем базы обратно из дампов
10. В папках по пути /var/lib/mysql/базаваш/ должны появиться файлы *.ibd
11. Если все прошло успешно - запускаем все остановленные сервисы и удаляем копии файлов, которые делали.
12. Приятного чаепития :-)
Фешин В.А.
Ноя 07 2016