@ Cuijun - в следующий раз отформатируйте свой вопрос для лучшей читаемости.
Я создаю резервную копию базы данных с помощью следующей команды:
docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json
^^^ this Это хорошо.
затем обновите запущенные контейнеры Kiwi TCMS и восстановите базу данных, выполнив следующие команды:
- cd Kiwi /
- git pull
- docker -компоновка
- docker pull kiwitcms / kiwi
- docker pull centos / mariadb
- docker объем rm kiwi_db_data
- docker exe c -it kiwi_web /Kiwi/manage.py migrate
- 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), вы застряли. Единственный оставшийся вариант для восстановления промежуточной версии - это собрать ее из исходного кода для каждой отдельной версии, выпущенной между тем, что у вас было, и сейчас.