Итак, у меня есть тестовый сервер БД, который был настроен в потоке репликации. Над именем произошла оптимизация, которая быстро заполнила пространство в dadadir рабов. Mysql покорно ждал еще места.
Этот datadir - файловая система, используемая ТОЛЬКО как datadir mysql, поэтому больше ничего не нужно было освобождать.
У меня была тестовая таблица innodb на 4 гигабайта, которая не была частью потока репликации, поэтому я решил попробовать кое-что, чтобы проверить, сработает ли она, и, будучи тестовой средой, я не слишком волновался, если что-то пошло не так.
Вот шаги, которые я предпринял
- Покраснел стол, который я собирался переместить
- Установил на него блокировку чтения (хотя в него ничего не записывалось и его не было в потоке репликации)
- Скопировал .frm и .ibd в файловую систему с некоторой запасной комнатой
- Разблокировал стол
- Урезал эту таблицу - это освободило достаточно места для завершения оптимизации, чтобы репликация снова начала пыхтеть.
- Остановить подчинение / отключение MySQL
- Скопируйте файл из tmp обратно в каталог данных
- Перезапустите MySQL
В журнале .err ничего не отображается, все выглядит хорошо. Я подключаюсь и использую mydb; и увидеть таблицу, с которой я возился в выставочных таблицах. Но если я попробую
select * from testtable limit 10;
Я получаю ошибку
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Из того, что я могу сказать до сих пор, я могу читать из всех других таблиц просто отлично, и репликация началась без каких-либо жалоб.
Могу ли я что-нибудь сделать, чтобы восстановиться после этого? Я могу восстановить его с нуля, если это будет необходимо, но мне было любопытно, что другие думают об этом предприятии в целом. Было ли в серии шагов, которые я предпринял, что-нибудь, что привело бы к безупречным результатам?
Что если бы это был не тестовый сервер, я не мог бы просто «сделать это вживую» и посмотреть, что произойдет? Как лучше всего временно освободить место на рабочем рабе, если мне это понравится?
Table 'X' doesn't exist in engine. Нужно ли выполнять описанный выше метод для каждой таблицы или есть более эффективные способы исправить это?