Ошибка базы PostgreSQL при старте Gitlab¶
Текст самой ошибки
2023-07-21_10:25:55.85115 LOG: starting PostgreSQL 13.11 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0, 64-bit
2023-07-21_10:25:55.85618 LOG: listening on Unix socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"
2023-07-21_10:25:55.87273 LOG: database system was interrupted; last known up at 2023-07-21 09:59:34 GMT
2023-07-21_10:25:56.39779 LOG: invalid resource manager ID in primary checkpoint record
2023-07-21_10:25:56.39781 PANIC: could not locate a valid checkpoint record
2023-07-21_10:25:56.55970 LOG: startup process (PID 519) was terminated by signal 6: Aborted
2023-07-21_10:25:56.55972 LOG: aborting startup due to startup process failure
2023-07-21_10:25:56.56278 LOG: database system is shut down
Решение
Заходим внутрь контейнера:
$ docker exec -it gitlab bash
Заходим под пользователем gitlab-psql
root@859f859bd7a3:/# su gitlab-psql
$
Выполняем:
$ /opt/gitlab/embedded/bin/pg_resetwal /var/opt/gitlab/postgresql/data -f
Перезапускаем контейнер.
Если не стартует отдельный контейнер PostgreSQL в Docker Swarm
docker exec -it $(docker ps -f name=postgres -q) gosu postgres pg_resetwal /var/lib/postgresql/data/swarm
⚠️ Предупреждение!
Утилитой pg_resetwal можно отключить механизм восстановления — база запустится, но останется в неконсистентном состоянии, то есть гарантированно повреждённой.
● Утилита pg_resetwal позволит экземпляру постгреса запуститься, даже если половины базы уже нет, а вторая половина является бессмысленным набором байтов.
● Никогда не используйте pg_resetwal, если не понимаете совершенно точно, что он делает, и какие будут последствия.
После применения pg_resetwal база непригодна для использования, из неё можно только выгрузить данные для последующей загрузки в новый кластер: только полный pg_dump/restore!
Можно попробовать сделать бэкап Gitlab:
Внутри контейнера архив будет располагаться по пути /var/opt/gitlab/backups/
.