Итак, у меня есть тестовый сервер БД, который был настроен в потоке репликации. Над именем произошла оптимизация, которая быстро заполнила пространство в 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
. Нужно ли выполнять описанный выше метод для каждой таблицы или есть более эффективные способы исправить это?