Как восстановить содержимое базы данных - PullRequest
0 голосов
/ 08 мая 2020

Я создаю резервную копию базы данных с помощью следующей команды: docker exe c -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2> database. json затем обновите запущенные контейнеры Kiwi TCMS и восстановите базу данных, выполнив следующие команды: [1.cd Kiwi / 2. git pull 3. docker -compose down 4. docker pull kiwitcms / kiwi 5. docker pull centos / mariadb 6. docker volume rm kiwi_db_data 7. docker exe c -it kiwi_web /Kiwi/manage.py migrate 8. docker -compose up -d] до сих пор все нормально. при удалении данных из всех таблиц [docker exe c -it kiwi_web / bin / bash - c '/Kiwi/manage.py sqlflu sh | /Kiwi/manage.py dbshell '] он показывает «CommandError: у вас, похоже, нет программы' mysql ', установленной или на вашем пути». Не знаю, как это исправить. Если я восстанавливаю команду базы данных напрямую, она показывает «django .db.utils.IntegrityError: Проблема с установкой приспособления» - »: Не удалось загрузить contenttypes.ContentType (pk = 1): (1062,« Повторяющаяся запись 'admin-logentry' для ключа 'django_content_type_app_label_model_76bd3d3b_uniq' ")". Итак, что мне делать, чтобы восстановить содержимое базы данных?

1 Ответ

0 голосов
/ 08 мая 2020

@ Cuijun - в следующий раз отформатируйте свой вопрос для лучшей читаемости.

Я создаю резервную копию базы данных с помощью следующей команды:

docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json 

^^^ this Это хорошо.

затем обновите запущенные контейнеры Kiwi TCMS и восстановите базу данных, выполнив следующие команды:

  1. cd Kiwi /
  2. git pull
  3. docker -компоновка
  4. docker pull kiwitcms / kiwi
  5. docker pull centos / mariadb
  6. docker объем rm kiwi_db_data
  7. docker exe c -it kiwi_web /Kiwi/manage.py migrate
  8. docker -compose up -d

до сих пор все нормально.

Нет, это не нормально. Каждый раз, когда вы обновляете контейнер, вы должны применять любые новые миграции. Это задокументировано как в документации, так и во всех примечаниях к выпуску:

https://kiwitcms.readthedocs.io/en/latest/installing_docker.html#upgrading

https://kiwitcms.org/blog/kiwi-tcms-team/2020/04/27/kiwi-tcms-83/

Весь процесс обновления неверен и приведет к ошибке и потере данных !!!

Вы никогда не должны удалять свой том данных, он отделен от остальной части приложения именно по этой причине чтобы иметь возможность пережить перезагрузки и обновления версии. Однако это еще не все, см. Ниже.

Объяснение: некоторые изменения в Kiwi TCMS требуют изменений в структуре базы данных. Иногда это добавление или удаление столбцов, но в других случаях это переименование существующих столбцов, изменение их типа данных или обновление фактических значений. Внутренне это контролируется так называемыми миграциями - это файлы, которые инструктируют движок БД, как применять необходимые изменения, чтобы схема БД стала тем, что ожидает приложение. Это то, что в первую очередь создавало таблицы БД. Вот почему у вас есть эта команда manage.py migrate.

Лучшее, что вы можете сделать в текущей ситуации, - это запустить контейнеры со старой версией Kiwi TCMS - это та же самая версия, которую вы использовали, когда вы сделал резервную копию.

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

Поскольку вы сказали, что используете образ centos/mariadb, что означает вы используете MariaDB 5.5. Kiwi TCMS 8.0 переходит на MariaDB 10.x, потому что более старая версия не может обрабатывать некоторые из доступных миграций. Прочтите примечания к выпуску для получения дополнительной информации.

Теперь, поскольку вы использовали старую версию (и, возможно, вы удалили старые версии своих изображений docker), вы застряли. Единственный оставшийся вариант для восстановления промежуточной версии - это собрать ее из исходного кода для каждой отдельной версии, выпущенной между тем, что у вас было, и сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...