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:

Кожна таблиця зберігається в окремому файлі.

Тепер видалимо базу:

І перевіримо файли:

І корисні посилання: