Mysql поділ і зменшення файлу ibdata1, rtfm linux, devops і системне адміністрування
Файл ibdata1 є частиною InnoDB. і зберігає в собі дані таблиць, їх індекси та іншу службову інформацію.
Згодом - цей файл може збільшитися до зовсім непристойних розмірів.
Що б спростити роботу з цим файлів - можна розділити його, створивши окремий файл для кожної бази даних і таблиці, за допомогою опції innodb_file_per_table.
В MySQL версії 5.6 і вище ця опція включена за замовчуванням, в старіших - необхідно виконати деякі додаткові дії.
В даному випадку мається:
Створюємо директорію для бекапів:
Створюємо резервну копію всіх наявних баз:
Перевіряємо її наявність:
Перевіряємо наявні бази:
Видаляємо всі бази, крім баз mysql і information_schema:
Перевіряємо залишилися бази:
Зупиняємо MySQL сервер:
Видаляємо старі файли:
Видалити треба все лог-файли - ib_logfil *.
Редагуємо файл /etc/my.cnf. і в блоці [mysqld] додаємо рядок:
Тут вказується, що InnoDB повинен створювати окремі файли .ibd і .frm для зберігання інформації і індексів для кожної таблиця, замість того, що б зберігати їх все в одному файлі.
Другий параметр - задає розміщення файлу ibdata1 (тому що шлях не вказано - буде використовуватися "сховище" MySQL - / var / lib / mysql), з початковим розміром в 10МБ, і автоматичним збільшенням при необхідності до максимум 1 ГБ.
При досягненні ліміту - його можна буде або збільшити, або додамо другий файл так:
На помилку Native table 'performance_schema'. '*' Has the wrong structure поки не звертаємо уваги.
Відновлюємо наші бази даних:
Запускаємо mysql_upgrade. що б згенерувати нову базу performance_schema:
Створимо нову таблицю в базі db_1:
Кожна таблиця зберігається в окремому файлі.
Тепер видалимо базу:
І перевіримо файли:
І корисні посилання: