Тож у мене є тестовий db-сервер, який був налаштований у потоці реплікації. Над назвою пройшла оптимізація, яка швидко заповнила простір у файлах datadir. Mysql покірно чекав ще місця.
Цей datadir є файловою системою, яка використовується ТІЛЬКИ в якості datadir mysql, щоб звільнити більше нічого.
У мене була 4 тестова таблиця innodb тесту, яка не була частиною потоку реплікації, тому я зрозумів, що я спробую щось перевірити, чи не спрацює це, і будучи тестовим середовищем, я не надто переживав, якщо все піде жахливо не так.
Ось такі кроки я зробив
- Розмив стіл, який я збирався перенести
- Розмістив блокування читання на ньому (хоча нічого до нього не було написано, і він не був у потоці реплікації)
- Скопіювали файли .frm і .ibd у файлову систему без запасного приміщення
- Розблокували стіл
- Урізана ця таблиця - це звільнило достатньо місця для оптимізації, щоб закінчити, щоб реплікація знову почала перемішуватися.
- Перестаньте рабом / відключенням mysql
- Скопіюйте файл із tmp назад у dir даних
- Перезапустіть mysql
У журналі .err нічого не відображається, речі виглядають добре. Я підключаю і використовую mydb; і дивіться таблицю, з якою я возився, у шоу-таблицях. Але, якщо я спробую
select * from testtable limit 10;
Я отримую помилку
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
З того, що я можу сказати до цих пір, я можу прочитати з усіх інших таблиць просто чудово, і реплікація розпочала резервне копіювання без будь-яких скарг.
Чи можу я щось зробити, щоб відновитися після цього? Я можу відновити його з нуля, якщо потрібно, але було цікаво, що думають інші про це підприємство взагалі. Чи було щось про серію кроків, які я зробив, які б закінчилися б / бездоганнішими результатами?
Що робити, якщо це не тестовий сервер, я не міг би просто "зробити це" і подивитися, що відбувається? Який найкращий спосіб тимчасово звільнити місце у виробничому рабі, якби мені це сподобалось?
Table 'X' doesn't exist in engine
. Чи потрібно робити описаний вище метод для кожної таблиці чи є кращі способи виправити це?