@Zmtrk62

Восстановить таблицы в базе mysql?

Добрый день.
Ubuntu 18.04, MySQL 5.7.36

Пропала половина таблиц из базы mysql. Например таких как:
mysql.gtid_executed
mysql.help_category
mysql.time_zone
И другие. Всего около 20.

В директории /var/lib/mysql/mysql/ есть .frm .ibd файлы с соответствующими названиями таблиц. Но если сделать mysqlcheck, то он ругается, что их нет. Если сделать show databases, то соответственно таблиц тоже нет. Всякие --auto-repair пробовал, не помогает.

Что еще заметил: если подключиться к серверу с помощью Navicat и обновить список таблиц, то они на секунду появляются и сразу пропадают. Не знаю с чем связано, просто для информации.

Что делать, как починить?
Благодарю.
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 3
BorLaze
@BorLaze
Java developer
ну, как вариант...

  • сделать бекап всего
  • удалить файлы
  • создать пустые таблицы с теми же именами
  • вернуть файлы


не факт, что получится (вмешиваться в работу БД на уровне файлов - так себе идея), но а вдруг?
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
1. Переместить файлы таблицы.
2. Создать пустую таблицу, скопировав CREATE TABLE с другого сервера максимально близкой версии.
3. DISCARD TABLESPACE.
4. Заменить файлы на сохранённые.
5. IMPORT TABLESPACE.

Если какая-либо таблица не удаляется либо не создаётся - попробовать провести те же операции, перегрузив сервер в режиме отключенной безопасности.

Если всё равно не получается - бэкапить всё, что бэкапится, после чего удалить сервер и поставить заново, затем вернуть бэкап. Бэкап базы MySQL предварительно внимательно просмотреть и вычистить оттуда всё, связанное с проблемными таблицами, в отдельные файлы. При необходимости - аккуратно восстанавливать и то, что убрано, но по одному запросу за раз, и хорошо подумав, какие это может повлечь последствия.
Ответ написан
Комментировать
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
1. "В директории /var/lib/mysql/mysql/ есть .frm .ibd файлы с соответствующими названиями таблиц"
Если это файлы не с нулевым размером - значит это формат таблиц InnoDB и должна быть включена опция innodb_file_per_table.
Системная база mysql по умолчанию не использует InnoDB, а использует MyISAM и вероятно, кто-то отконвертировал их в InnoDB и возможно еще полазил по настройкам в my.cnf

Правильный подход - сделать бекап всего, а затем или переустановить mysql полностью и он создаст БД mysql заново, либо перенести базу или таблицы с другого хоста или даже из виртуальной машины с такой же Ubuntu
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы