Ad Widget

Collapse

docker postgresql

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Popov.K.V
    Member
    • Mar 2019
    • 84

    #1

    docker postgresql

    Доброго дня!
    развернул zabbix на docker с БД postgres, пробую загрузить дамп с локальной базы на докер
    sudo docker exec -i zabbix-postgres /bin/bash -c "PGPASSWORD=zabbix psql --username zabbix zabbix" < /tmp/zabbix109.04.24.dump.sql
    но выходят ошибки

    DETAIL: Key (groupid)=(53) is not present in table "hstgrp".
    ERROR: duplicate key value violates unique constraint "group_prototype_pkey"
    DETAIL: Key (group_prototypeid)=(35) already exists.
    CONTEXT: COPY group_prototype, line 6
    ERROR: duplicate key value violates unique constraint "history_pkey"
    DETAIL: Key (itemid, clock, ns)=(206027, 1711259560, 209200253) already exists.
    CONTEXT: COPY history, line 1
    COPY 0
    ERROR: duplicate key value violates unique constraint "history_str_pkey"
    DETAIL: Key (itemid, clock, ns)=(122401, 1710783354, 59171874) already exists.
    CONTEXT: COPY history_str, line 1
    ERROR: duplicate key value violates unique constraint "history_text_pkey"
    DETAIL: Key (itemid, clock, ns)=(188718, 1712563606, 799853246) already exists.
    CONTEXT: COPY history_text, line 1
    WARNING: terminating connection because of crash of another server process
    DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
    HINT: In a moment you should be able to reconnect to the database and repeat your command.
    server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
    invalid socket
    connection to server was lost

    подскажите как перенести данные в новую БД?
  • Griboed0ff
    Senior Member
    • Sep 2022
    • 153

    #2
    Нужно больше подробностей, какой у вас дамп, какой командой снимали его, загружалась ли предварительно схема в новую базу, возможно вы уже включали сервер на новой базе, используется ли timescaledb, ну и версия сервера заббикс и postgresql не помешали бы.

    Comment

    • Popov.K.V
      Member
      • Mar 2019
      • 84

      #3
      сделал дпмп pg_dump zabbix > /dump/zabbix.09.04.24.dump.sql
      создал контейнер sudo docker run -d -p 5432:5432 --name zabbix-postgres --network zabbix-net -v /var/lib/zabbix/timezone:/etc/timezone -v /var/lib/zabbix/localtime:/etc/localtime -e POSTGRES_PASSWORD=zabbix -e POSTGRES_USER=zabbix postgres:alpine
      да, сервер запускал на новой базе
      делал дамп с zabbix 4.2 pgsql 9.5

      Comment

      • Griboed0ff
        Senior Member
        • Sep 2022
        • 153

        #4
        Тут проблема не с контейнером скорее всего, а какие-то проблемы с нарушениями инструкций миграции базы. Попробуйте схему:
        • создаете бэкап базы с учетом владельца(zabbix) тут можно пробовать разные варианты утилит для бэкапа и их параметры(надо смотреть инструкции по миграции базы заббикса на другую машину)
        • поднимаете новый контейнер postgresql
        • загружаете бэкап так же с учетом владельца, чтобы zabbix мог читать\писать в свою базу. Тут тоже можно поиграться с разными утилитами восстановления, смотря какими создавали.
        • только после этого впервые поднимаете контейнер zabbix.
        Ну и лучше использовать docker-compose, так как у postgresql намного больше параметров, если конечно ваша цель не только запустить для теста. У меня были подобные проблемы когда контейнер с zabbix обновлял схему в базе, а я после пытался загрузить бэкап, а там уже есть значения. Вообще я базу переносил в несколько этапов, сначала все таблицы кроме таблиц истории, а потом уже таблицы истории, но у меня все усложнялось timescaledb и терабайтной базой.

        Comment

        • Popov.K.V
          Member
          • Mar 2019
          • 84

          #5
          Добрый день

          в первые docer-compos создал вот что получилось ,

          выходит ошибка ERROR: yaml.parser.ParserError: while parsing a block mapping
          in "./docker-compose.yml", line 1, column 1
          expected <block end>, but found '<block mapping start>'
          in "./docker-compose.yml", line 19, column 2

          version: "3"

          services:
          postgres:
          image: postgres:16.2
          environment:
          POSTGRES_DB: "zabbix-postgres"
          POSTGRES_USER: "zabbix"
          POSTGRES_PASSWORD: "zabbix"
          PGDATA: "/var/lib/postgresql/data/pgdata"
          volumes:
          - ./Initer:/docker-entrypoint-initdb.d
          - usr-data:/var/lib/postgresql/data
          ports:
          - "5432:5432"

          volumes:
          usr-data:
          networks:
          - zabbix-net​

          Comment

          • Griboed0ff
            Senior Member
            • Sep 2022
            • 153

            #6

            Давно не поднимал, но примерно так должен выглядеть:
            Code:
            version: '3'
            services:
              zabbix-db:
                image: postgres:14.2-alpine
                environment:
                  - POSTGRES_DB=zabbix-postgres
                  - POSTGRES_USER=zabbix
                  - POSTGRES_PASSWORD=zabbix
                volumes:
                  - /path/to/your/host/directory:/var/lib/postgresql/data
                  - ./zabbix-database.sql:/docker-entrypoint-initdb.d/zabbix-database.sql
                networks:
                  - zabbix-network
            
            volumes:
              zabbix-db-data:
            
            networks:
              zabbix-network:
                driver: bridge
            И dockerfile, тут мы указываем, что нужно сделать при первом запуске контейнера, в нашем случае указываем, что нужно скопировать файл в контейнер, который запустится при инициализации базы:
            Code:
            FROM postgres:14.2-alpine
            ENV POSTGRES_DB=zabbix-postgres
            ENV POSTGRES_USER=zabbix
            ENV POSTGRES_PASSWORD=zabbix
            COPY zabbix-database.sql /docker-entrypoint-initdb.d/​
            Соответственно нужно снять дамп существующей базы и положить рядом с file.yml и dockerfile: pg_dump -U zabbix -Fc zabbix-postgres > zabbix-database.sql или возможно pg_dump -U zabbix -d zabbix-postgres > zabbix-database.sql
            Ну а далее: docker-compose up -d
            В этих же файлах можно указать и другие сервисы типа самого заббикса и фронта от него, получится весь набор заббикса описанный в одном месте.
            Но вопросы, которые у вас возникают не имеют отношения к заббиксу, а по большей части к postgresql, дампы от нее же и к docker.




            Last edited by Griboed0ff; 17-04-2024, 09:41.

            Comment

            Working...