PostgreSQL Docker 컨테이너를 영구화하고 백업하는 방법


카탈로그

  • 소개
  • 마운트된 볼륨
  • 을 통해 데이터베이스 정보 영구화
  • 데이터베이스 정보 덤프 및 복구
  • 소개하다.


    PostgreSQL docker 컨테이너를 사용하여 데이터베이스 정보를 손실한 적이 있습니까?우리는 데이터베이스 데이터를 docker 용기로 저장해서는 안 된다는 것을 알고 있다. 삭제되면 데이터가 사라지기 때문이다. 그렇지?정확한???
    세상에, 네가 해냈구나.
    저도요. 한 번은 Docker 용기를 어떻게 사용하는지 배우기 시작했어요.Docker 컨테이너는 운영 체제에 관계없이 매우 편리합니다.세상 곳곳에 햇빛과 무지개가 있다.데이터베이스 용기와 관련이 있을 때, 나쁜 일이 발생할 것이다.
    당시 나는 용기에 정보를 저장하는 위치를 고려하는 것을 잊어버렸다.나는 일찍이 Postgresql 용기를 응용 프로그램의 데이터베이스 실례로 사용한 적이 있다.생산에 사용하기 전에, 나는 그것을 갱신하기 위해 다시 시작해야 한다고 생각한다.(Idk why but yea...) 나는 docker-compose downdocker-compose up를 입력했다.
    1분 동안의 좋은 생각이었다. 모든 것이 준비됐고, 엠마는 넷플릭스를 보러 떠났다.그러자 한바탕 공황이 몰려왔다.나는 프로그램을 열었는데, 나의 모든 시계와 설정이 잊혀진 것을 발견했다.결국 나는 모든 것을 재배치해야만 했다.나는 그것을 일을 회복하는 데 아주 오랜 시간이 걸렸다.좋은 소식은 적어도 제작 과정에서 일어나지 않았다는 것이다.
    본고에서postgresql docker 용기의 데이터를 어떻게 오래 유지하고 복구하는지 보여 드리겠습니다.

    로드된 볼륨을 사용하여 PostgreSQL 데이터베이스 정보 영구화


    먼저 docker compose를 사용하여 데이터베이스를 만들 것입니다.다음 스크립트를 docker compose 파일로 복사한 다음 실행하십시오 docker-compose up.
    version: '3.1'
    services:
      db:
        image: postgres
        restart: always
        environment:
          POSTGRES_USER: myuser
          POSTGRES_PASSWORD: mypassword
          POSTGRES_DB: mydb
        volumes:
           - ./data:/var/lib/postgresql/data
    
    볼륨에 주의하십시오.호스트에서 볼륨 data/ 을postgresql 용기 /var/lib/postgresql/data 디렉터리에 불러오는 것을 볼 수 있습니다.이것은 호스트에 데이터를 오래 저장하는 필수적인 절차이다.용기가 삭제되었을 때, 이 디렉터리는 계속 존재할 것입니다.
    컨테이너를 시작하면 호스트에 data/ 디렉토리가 표시됩니다.이 디렉터리는 모든postgresql 정보를 저장하는 위치입니다.
    $ ll
    total 16
    drwxr-xr-x  3 siraphob-wsl-ubuntu siraphob-wsl-ubuntu 4096 Nov 21 16:29 ./
    drwxr-xr-x  4 siraphob-wsl-ubuntu siraphob-wsl-ubuntu 4096 Nov 21 16:26 ../
    drwx------ 19                 999 root                4096 Nov 21 16:29 data/                <-- HERE
    -rw-r--r--  1 siraphob-wsl-ubuntu siraphob-wsl-ubuntu  232 Nov 21 16:28 docker-compose.yml
    
    우리들은 우리의 이론이 정확한지 검증합시다.다음 명령을 실행하여 셸을 데이터베이스 컨테이너에 배치합니다.
    $ docker exec -it <your-postgres-container-id> bash
    
    용기에 들어간 후 다음 명령을 실행하여postgresql 컨트롤러에 연결합니다.
    $ psql -d mydb -U myuser
    
    테이블을 만들고 데이터를 삽입합시다.
    CREATE TABLE IF NOT EXISTS accounts (
        id serial PRIMARY KEY,
        username VARCHAR (255) UNIQUE NOT NULL
    );
    INSERT INTO accounts(username) VALUES ('rick'), ('morty') RETURNING *;
    
    테이블 계정에서 줄을 선택하면 다음과 같은 결과를 볼 수 있습니다.
    mydb=# select * from accounts;
      1 | rick
      2 | morty
    
    그런 다음 컨테이너에서 종료합니다.그런 다음 docker compose를 실행하여 컨테이너를 중지하고 제거합니다.기술적으로 모든 것은 사라져야 한다.보시다시피 데이터/디렉터리는 여전히 존재합니다.
    # stop and remove container
    $ docker-compose down
    Stopping pg-persist-ex_db_1 ... done
    Removing pg-persist-ex_db_1 ... done
    Removing network pg-persist-ex_default
    # container is gone
    $ docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    # data directory still persists
    $ ls
    data  docker-compose.yml
    
    다음에 docker compose를 다시 실행하여 데이터베이스 용기를 시작합니다.셸을 용기에 넣고postgresql 컨트롤러에 로그인하십시오.당신은 테이블 데이터가 분실되지 않은 것을 볼 수 있습니다.
    mydb=# \dt
             List of relations
     Schema |   Name   | Type  | Owner
    --------+----------+-------+--------
     public | accounts | table | myuser
    (1 row)
    mydb=# select * from accounts;
     id | username
    ----+----------
      1 | rick
      2 | morty
    (2 rows)
    
    이것이 바로 docker 용기의 데이터베이스 정보를 어떻게 영구화하는가이다.
    PostgreSQL 데이터베이스 정보 덤프 및 복원
    데이터베이스 정보를 백업하는 또 다른 방법은 그것을 저장하는 것이다.데이터베이스 덤프는 데이터베이스 메타데이터와 데이터 줄을 파일로 내보내는 데 도움을 주는 내보내기 유틸리티입니다.덤프 파일은 나중에 새 데이터베이스로 가져올 수 있습니다.
    덤프는 메타데이터(모드, 테이블, 관계)만 내보내거나 메타데이터와 줄을 동시에 내보낼 수 있습니다.이 예에서 데이터베이스에서 모든 정보를 내보내는 방법을 보여 드리겠습니다.
    docker 용기에서postgres 데이터베이스를 백업하려면 다음 명령을 실행하십시오.
    $ docker exec -t <your-postgres-container-id> pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
    
    덤프 파일을 열고 아래로 스크롤하면 우리의 데이터베이스 정보를 볼 수 있습니다.
    # file opened in vim
    179 CREATE TABLE public.accounts (
    180     id integer NOT NULL,
    181     username character varying(255) NOT NULL
    182 );
    183
    184
    185 ALTER TABLE public.accounts OWNER TO myuser;
    ...
    216 --
    217 -- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: myuser
    218 --
    219
    220 COPY public.accounts (id, username) FROM stdin;
    221 1   rick
    222 2   morty
    223 \.
    
    덤프 파일에서 데이터베이스 정보를 복원하려면 다음 명령을 실행하십시오.
    $ cat your_dump.sql | docker exec -i <your-postgres-container-id> psql -U myuser
    
    너는 스스로 신선한postgres 용기에서 효과를 시험해 볼 수 있다.
    오늘은 여기까지.이제 너는 다시는 데이터베이스 정보를 잃어버리지 않을 것이다.즐거운 코딩!

    좋은 웹페이지 즐겨찾기