Перейти к содержанию

Восстановление структуры таблицы в базе данных

Восстановление структуры базы данных может понадобится в двух ситуациях.

  1. При запуске выдает ошибку и не выполняется восстановление моделей. Веб интерфейс недоступен. Контейнер lxc после сбоя работает и доступен для входа. restore_db_from_backup_1

  2. На работающем воркспейсе в веб интерфейсе вылазит ошибка при попытке восстановить модель из резервной копии. restore_db_from_backup_2

В обоих случаях мы знаем id нужной модели для дальнейшей работы. id это последние цифры в имени таблицы из сообщения об ошибке.

restore_db_from_backup_3

Или мы получили от пользователей имя проблемной модели. Тогда id мы узнаем далее

Warning

Хотя все равно если админка доступна лучше сходить и запустить восстановление что бы убедится в наличии проблемы. Если подтвердится в сообщении об ошибке мы увидим id.

Порядок действий

Идем в каталог воркспейса в папку container и выполняем вход в него через команду:

vagrant ssh

Повышаем уровень привилегий до рута

sudo su

И входим в базу данных

mysql

Делаем запрос к базе данных

SELECT id,uid,name FROM corplan_main.models;

Нам нужен uid соответствующий id. Или если мы знаем только имя модели мы получим id и uid

restore_db_from_backup_4

Выходим из mysql

quit;

Переходим в каталог \tmp и создаем временную директорию. Дальнейшие действия будем выполнять там.

cd /tmp
mkdir db_tmp
cd db_tmp

Резервные копии базы данных хранятся в каталоге /home/optimacros_middlework/.optimacros_middlework/modelBackups/

Далее идет имя каталога которое соответствует uid модели полученном на предыдущем шаге. Внутри этого каталога лежат архивы резервных копий. Имя архива содержит дату время создания резервных копий.

Выведем список файлов архива отсортированных по времени в обратном порядке

 ls -latr /home/optimacros_middlework/.optimacros_middlework/modelBackups/0bd5069efd48cbb612eb139d36eff2e3/
где 0bd5069efd48cbb612eb139d36eff2e3 это uid модели

restore_db_from_backup_5

Выполняем распаковку найденного архива

/home/optimacros_middlework/.optimacros_middlework/modelBackups/0bd5069efd48cbb612eb139d36eff2e3/2023-05-25_10-26-52_5414.zip

И восстановление базы

mysql corplan_model_193 < /root/tmp_backup_1889_193/dump.sql

Warning

⚠ здесь 193 это id таблицы. В новых версиях к нему добавляется численно буквенный индекс, например corplan_model_848_66fe5f0845c4e

Если при восстановлении получаем ошибку вида:

`ERROR 1049 (42000): Unknown database 'corplan_model_265_6581f8614b502'`

То заходим в mysql и выполняем там команду:

CREATE DATABASE IF NOT EXISTS corplan_model_848_66fe5f0845c4e DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

После этого повторяем пункт с восстановлением базы.

Если при восстановлении получаем ошибку:

ERROR 1005 (HY000) at line 623: Can't create table `corplan_model_17778_653a42099a735`.`_HIERARCHY` (errno: 121 "Duplicate key on write or update")

То необходимо зайти в mysql выполнить там 2 команды:

DROP DATABASE corplan_model_17778_653a42099a735;
CREATE DATABASE IF NOT EXISTS corplan_model_17778_653a42099a735 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

После этого повторить восстановление базы

Выходим из контейнера по Ctrl+D два раза.

После этого есть два варианта действий.

  1. Если админка воркспейса не доступна и ошибка была в консоли делаем остановку воркспейса с ключом --force и последующий запуск.

    cd /om/workspace-install
    ./current/install workspace --path /om/workspace1/manifest.json shutdown --force
    ./current/install workspace --path /om/workspace1/manifest.json up
    
  2. Если веб интерфейс администратора доступен идем в админку. Заходим в модели. Находим нужную по ее имени. И нажимаем open

    В верхнем меню Backups находим последний по времени и кликнем по его номеру

    restore_db_from_backup_6

    Далее нажимаем на Restore Model и ждем восстановления модели.

    restore_db_from_backup_7