7.4. Using PostgreSQL
PostgreSQL 서버는 SQL 언어를 기반으로 하는 오픈 소스 강력하고 고도로 확장 가능한 데이터베이스 서버입니다. PostgreSQL 서버는 광범위한 데이터 세트 및 다수의 동시 사용자를 관리할 수 있는 개체 관계형 데이터베이스 시스템을 제공합니다. 이러한 이유로 클러스터에서 PostgreSQL 서버를 사용하여 대량의 데이터를 관리할 수 있습니다.
PostgreSQL 서버에는 데이터 무결성을 보장하기 위한 기능이 포함되어 있어 내결함성 환경 및 애플리케이션을 구축할 수 있습니다. PostgreSQL 서버를 사용하면 데이터베이스를 다시 컴파일하지 않고도 자체 데이터 유형, 사용자 지정 함수 또는 다른 프로그래밍 언어의 코드를 사용하여 데이터베이스를 확장할 수 있습니다.
RHEL 시스템에 PostgreSQL 을 설치하고 구성하는 방법, PostgreSQL 데이터를 백업하는 방법 및 이전 PostgreSQL 버전에서 마이그레이션하는 방법을 알아봅니다.
7.4.1. PostgreSQL 설치 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서는 여러 버전에서 사용할 수 있으며 각각 별도의 스트림에서 제공합니다.
- PostgreSQL 10 - 기본 스트림
- PostgreSQL 9.6
- PostgreSQL 12 - RHEL 8.1.1 이후 사용 가능
- PostgreSQL 13 - RHEL 8.4 이후 사용 가능
- PostgreSQL 15 - RHEL 8.8 이후 사용 가능
- PostgreSQL 16 - RHEL 8.10 이후 사용 가능
설계상 동일한 모듈의 두 개 이상 버전(스트림)을 병렬로 설치할 수 없습니다. 따라서 postgresql 모듈에서 사용 가능한 스트림 중 하나만 선택해야 합니다. 컨테이너에서 다른 버전의 PostgreSQL 데이터베이스 서버를 사용할 수 있습니다. 컨테이너에서 여러 PostgreSQL 버전 실행을 참조하십시오.
PostgreSQL 을 설치하려면 다음 절차를 사용하십시오.
프로세스
postgresql모듈에서 스트림(버전)을 선택하고 서버 프로필을 지정하여 PostgreSQL 서버 패키지를 설치합니다. 예를 들면 다음과 같습니다.yum module install postgresql:16/server
# yum module install postgresql:16/serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres슈퍼유저가 자동으로 생성됩니다.데이터베이스 클러스터를 초기화합니다.
postgresql-setup --initdb
# postgresql-setup --initdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat은 기본
/var/lib/pgsql/data디렉터리에 데이터를 저장하는 것이 좋습니다.postgresql서비스를 시작합니다.systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 부팅 시
postgresql서비스가 시작되도록 활성화합니다.systemctl enable postgresql.service
# systemctl enable postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
모듈 스트림을 사용하는 방법에 대한 자세한 내용은 사용자 공간 구성 요소 설치, 관리 및 제거를 참조하십시오.
RHEL 8 내의 이전 postgresql 스트림에서 업그레이드하려면 이후 스트림으로 전환하고 RHEL 8 버전의 PostgreSQL으로 마이그레이션에 설명된 두 가지 절차를 모두 따르십시오.
7.4.2. 컨테이너에서 여러 PostgreSQL 버전 실행 링크 복사링크가 클립보드에 복사되었습니다!
동일한 호스트에서 다른 버전의 PostgreSQL 을 실행하려면 동일한 모듈의 여러 버전(스트림)을 병렬로 설치할 수 없기 때문에 컨테이너에서 실행합니다.
이 절차에는 PostgreSQL 13 및 PostgreSQL 15 가 포함되어 있지만 Red Hat Ecosystem Catalog에서 사용할 수 있는 PostgreSQL 컨테이너 버전을 사용할 수 있습니다.
사전 요구 사항
-
container-tools모듈이 설치되어 있습니다.
프로세스
Red Hat 고객 포털 계정을 사용하여
registry.redhat.io레지스트리에 인증합니다.podman login registry.redhat.io
# podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너 레지스트리에 이미 로그인한 경우 이 단계를 건너뜁니다.
컨테이너에서 PostgreSQL 13 을 실행합니다.
podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_1>:5432 rhel8/postgresql-13
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_1>:5432 rhel8/postgresql-13Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
컨테이너에서 PostgreSQL 15 를 실행합니다.
podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_2>:5432 rhel8/postgresql-15
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_2>:5432 rhel8/postgresql-15Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
컨테이너에서 PostgreSQL 16 을 실행합니다.
podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_3>:5432 rhel8/postgresql-16
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_3>:5432 rhel8/postgresql-16Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 컨테이너 이미지 사용에 대한 자세한 내용은 Red Hat Ecosystem Catalog 를 참조하십시오.
참고두 데이터베이스 서버의 컨테이너 이름과 호스트 포트는 달라야 합니다.
클라이언트가 네트워크의 데이터베이스 서버에 액세스할 수 있도록 하려면 방화벽에서 호스트 포트를 엽니다.
firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...} firewall-cmd --reload# firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,...} # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
실행 중인 컨테이너에 대한 정보를 표시합니다.
podman ps
$ podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 서버에 연결하고 root로 로그인합니다.
psql -u postgres -p -h localhost -P <host_port> --protocol tcp
# psql -u postgres -p -h localhost -P <host_port> --protocol tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3. PostgreSQL 사용자 생성 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 사용자는 다음 유형입니다.
-
postgresUNIX 시스템 사용자는pg_dump와 같은 PostgreSQL 서버 및 클라이언트 애플리케이션을 실행하는 데만 사용해야 합니다. 데이터베이스 생성 및 사용자 관리와 같은 PostgreSQL 관리에 대한 대화형 작업에는postgres시스템 사용자를 사용하지 마십시오. -
데이터베이스 슈퍼유저 - 기본
postgresPostgreSQL 슈퍼유저는postgres시스템 사용자와 관련이 없습니다.pg_hba.conf파일에서postgres슈퍼유저의 액세스를 제한할 수 있으며, 그렇지 않으면 다른 권한 제한은 없습니다. 다른 데이터베이스 슈퍼유저도 생성할 수 있습니다. 특정 데이터베이스 액세스 권한이 있는 역할:
- 데이터베이스 사용자 - 기본적으로 로그인할 수 있는 권한이 있습니다.
- 사용자 그룹 - 그룹 전체에 대한 권한 관리를 활성화합니다.
역할은 데이터베이스 개체(예: 테이블 및 함수)를 소유할 수 있으며 SQL 명령을 사용하여 다른 역할에 오브젝트 권한을 할당할 수 있습니다.
표준 데이터베이스 관리 권한에는 SELECT, Cryostat,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE, USAGE 가 포함됩니다.
역할 속성은 LOGIN,SUPERUSER,CREATEDB 및 CREATEROLE 과 같은 특수 권한입니다.
대부분의 작업을 슈퍼유저가 아닌 역할로 수행하는 것이 좋습니다. 일반적인 방법은 CREATEDB 및 CREATEROLE 권한이 있는 역할을 생성하고 데이터베이스 및 역할의 일상적인 관리에 이 역할을 사용하는 것입니다.
사전 요구 사항
- PostgreSQL 서버가 설치되어 있어야 합니다.
- 데이터베이스 클러스터가 초기화됩니다.
프로세스
사용자를 생성하려면 사용자의 암호를 설정하고 사용자에게
CREATEROLE및CREATEDB권한을 할당합니다.postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser 를 사용자 이름으로 바꾸고 mypasswd 를 사용자의 암호로 바꿉니다.
예 7.1. PostgreSQL 데이터베이스 초기화, 생성 및 연결
이 예제에서는 PostgreSQL 데이터베이스를 초기화하고, 일상적인 데이터베이스 관리 권한이 있는 데이터베이스 사용자를 생성하고, 관리 권한이 있는 데이터베이스 사용자를 통해 모든 시스템 계정에서 액세스할 수 있는 데이터베이스를 생성하는 방법을 보여줍니다.
PosgreSQL 서버를 설치합니다.
yum module install postgresql:13/server
# yum module install postgresql:13/serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 클러스터를 초기화합니다.
postgresql-setup --initdb
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 암호 해시 알고리즘을
scram-sha-256로 설정합니다./var/lib/pgsql/data/postgresql.conf파일에서 다음 행을 변경합니다.#password_encryption = md5 # md5 or scram-sha-256
#password_encryption = md5 # md5 or scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
password_encryption = scram-sha-256
password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/pg_hba.conf파일에서 IPv4 로컬 연결에 대해 다음 행을 변경합니다.host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 identCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
host all all 127.0.0.1/32 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow
postgresql 서비스를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres: 시스템 사용자로 로그인합니다.su - postgres
# su - postgresCopy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 대화형 터미널을 시작합니다.
psql
$ psql psql (13.7) Type "help" for help. postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 현재 데이터베이스 연결에 대한 정보를 가져옵니다.
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow 라는 사용자를 생성하고, mydbuser의 암호를 설정하고,mydbusermydbuser에CREATEROLE및CREATEDB권한을 할당합니다.postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLE
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLECopy to Clipboard Copied! Toggle word wrap Toggle overflow 이제
mydbuser사용자는 일상적인 데이터베이스 관리 작업을 수행할 수 있습니다: 데이터베이스를 생성하고 사용자 인덱스를 관리합니다.\qmeta 명령을 사용하여 대화형 터미널에서 로그아웃합니다.postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres사용자 세션에서 로그아웃합니다.logout
$ logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 터미널에
mydbuser로 로그인하고 호스트 이름을 지정하고 초기화 중에 생성된 기본postgres데이터베이스에 연결합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydatabase라는 데이터베이스를 생성합니다.postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>
postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 세션에서 로그아웃합니다.
postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser로 mydatabase에 연결합니다.psql -U mydbuser -h 127.0.0.1 -d mydatabase
# psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser: psql (13.7) Type "help" for help. mydatabase=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 현재 데이터베이스 연결에 대한 정보를 가져옵니다.
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.4. Configuring PostgreSQL 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 데이터베이스에서 모든 데이터 및 구성 파일은 데이터베이스 클러스터라는 단일 디렉터리에 저장됩니다. Red Hat은 구성 파일을 포함한 모든 데이터를 기본 /var/lib/pgsql/data/ 디렉터리에 저장하는 것이 좋습니다.
PostgreSQL 구성은 다음 파일로 구성됩니다.
-
PostgreSQL.conf- 데이터베이스 클러스터 매개 변수를 설정하는 데 사용됩니다. -
postgresql.auto.conf-postgresql.conf와 유사한 기본 PostgreSQL 설정을 보유합니다. 그러나 이 파일은 서버 제어 아래에 있습니다.SYSTEM쿼리는 편집되며 수동으로 편집할 수 없습니다. -
pg_ident.conf- 외부 인증 메커니즘에서 PostgreSQL 사용자 ID로 사용자 ID를 매핑하는 데 사용됩니다. -
pg_hba.conf- PostgreSQL 데이터베이스에 대한 클라이언트 인증을 구성하는 데 사용됩니다.
PostgreSQL 구성을 변경하려면 다음 절차를 사용하십시오.
절차
/var/lib/pgsql/data/postgresql.conf파일을 편집하고 데이터베이스 클러스터 매개변수의 기본 설정을 구성합니다. 예를 들면 다음과 같습니다.log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB password_encryption = scram-sha-256
log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/pg_hba.conf파일을 편집하고 클라이언트 인증을 구성합니다. 예를 들면 다음과 같습니다.TYPE DATABASE USER ADDRESS METHOD
# TYPE DATABASE USER ADDRESS METHOD local all all trust host postgres all 192.168.93.0/24 ident host all all .example.com scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 변경 사항이 적용되도록
postgresql서비스를 다시 시작합니다.systemctl restart postgresql.service
# systemctl restart postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.5. PostgreSQL 서버에서 TLS 암호화 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 PostgreSQL 에서는 암호화되지 않은 연결을 사용합니다. 보다 안전한 연결을 위해 PostgreSQL 서버에서 TLS(Transport Layer Security) 지원을 활성화하고 암호화된 연결을 설정하도록 클라이언트를 구성할 수 있습니다.
사전 요구 사항
- PostgreSQL 서버가 설치되어 있어야 합니다.
- 데이터베이스 클러스터가 초기화됩니다.
절차
OpenSSL 라이브러리를 설치합니다.
yum install openssl
# yum install opensslCopy to Clipboard Copied! Toggle word wrap Toggle overflow TLS 인증서 및 키를 생성합니다.
openssl req -new -x509 -days 365 -nodes -text -out server.crt \ -keyout server.key -subj "/CN=dbhost.yourdomain.com"
# openssl req -new -x509 -days 365 -nodes -text -out server.crt \ -keyout server.key -subj "/CN=dbhost.yourdomain.com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow dbhost.yourdomain.com을 데이터베이스 호스트 및 도메인 이름으로 바꿉니다.
서명된 인증서와 개인 키를 데이터베이스 서버의 필수 위치에 복사합니다.
cp server.{key,crt} /var/lib/pgsql/data/.# cp server.{key,crt} /var/lib/pgsql/data/.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 인증서의 소유자 및 그룹 소유권을
postgres사용자로 변경합니다.chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소유자만 읽을 수 있도록 개인 키에 대한 권한을 제한합니다.
chmod 0400 /var/lib/pgsql/data/server.key
# chmod 0400 /var/lib/pgsql/data/server.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/postgresql.conf파일에서 다음 행을 변경하여 암호 해시 알고리즘을scram-sha-256으로 설정합니다.#password_encryption = md5 # md5 or scram-sha-256
#password_encryption = md5 # md5 or scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
password_encryption = scram-sha-256
password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/postgresql.conf파일에서 다음 행을 변경하여 SSL/TLS를 사용하도록 PostgreSQL을 구성합니다.#ssl = off
#ssl = offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
ssl=on
ssl=onCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/pg_hba.conf파일에서 IPv4 로컬 연결에 대해 다음 행을 변경하여 TLS를 사용하는 클라이언트의 연결만 허용하도록 모든 데이터베이스에 대한 액세스를 제한합니다.host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 identCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
hostssl all all 127.0.0.1/32 scram-sha-256
hostssl all all 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 다음 새 행을 추가하여 단일 데이터베이스 및 사용자에 대한 액세스를 제한할 수 있습니다.
hostssl mydatabase mydbuser 127.0.0.1/32 scram-sha-256
hostssl mydatabase mydbuser 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydatabase 를 데이터베이스 이름으로 바꾸고 mydbuser 를 사용자 이름으로 바꿉니다.
postgresql서비스를 다시 시작하여 변경 사항을 적용합니다.systemctl restart postgresql.service
# systemctl restart postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
연결이 암호화되었는지 수동으로 확인하려면 다음을 수행하십시오.
PostgreSQL 데이터베이스에 mydbuser 사용자로 연결하고 호스트 이름과 데이터베이스 이름을 지정합니다.
psql -U mydbuser -h 127.0.0.1 -d mydatabase
$ psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser:Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydatabase 를 데이터베이스 이름으로 바꾸고 mydbuser 를 사용자 이름으로 바꿉니다.
현재 데이터베이스 연결에 대한 정보를 얻습니다.
mydbuser=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
mydbuser=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PostgreSQL 에 대한 연결이 암호화되었는지 확인하는 간단한 애플리케이션을 작성할 수 있습니다. 이 예제에서는
libpq-devel패키지에서 제공하는libpq클라이언트 라이브러리를 사용하는 C로 작성된 애플리케이션을 보여줍니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow mypassword 를 암호, mydatabase 를 데이터베이스 이름으로, mydbuser 를 사용자 이름으로 교체합니다.
참고-l옵션을 사용하여 컴파일하기 위해 pq 라이브러리를 로드해야 합니다. 예를 들어 GCC 컴파일러를 사용하여 애플리케이션을 컴파일하려면 다음을 수행합니다.pqgcc source_file.c -lpq -o myapplication
$ gcc source_file.c -lpq -o myapplicationCopy to Clipboard Copied! Toggle word wrap Toggle overflow source_file.c 에 위의 예제 코드가 포함되어 있고 myapplication 은 보안된 PostgreSQL 연결을 확인하기 위한 애플리케이션의 이름입니다.
예 7.2. TLS 암호화를 사용하여 PostgreSQL 데이터베이스 초기화, 생성 및 연결
이 예제에서는 PostgreSQL 데이터베이스를 초기화하고 데이터베이스 사용자 및 데이터베이스를 생성하고 보안 연결을 사용하여 데이터베이스에 연결하는 방법을 보여줍니다.
PosgreSQL 서버를 설치합니다.
yum module install postgresql:13/server
# yum module install postgresql:13/serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스 클러스터를 초기화합니다.
postgresql-setup --initdb
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenSSL 라이브러리를 설치합니다.
yum install openssl
# yum install opensslCopy to Clipboard Copied! Toggle word wrap Toggle overflow TLS 인증서 및 키를 생성합니다.
openssl req -new -x509 -days 365 -nodes -text -out server.crt \ -keyout server.key -subj "/CN=dbhost.yourdomain.com"
# openssl req -new -x509 -days 365 -nodes -text -out server.crt \ -keyout server.key -subj "/CN=dbhost.yourdomain.com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow dbhost.yourdomain.com을 데이터베이스 호스트 및 도메인 이름으로 바꿉니다.
서명된 인증서와 개인 키를 데이터베이스 서버의 필수 위치에 복사합니다.
cp server.{key,crt} /var/lib/pgsql/data/.# cp server.{key,crt} /var/lib/pgsql/data/.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서명된 인증서의 소유자 및 그룹 소유권을
postgres사용자로 변경합니다.chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}# chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 소유자만 읽을 수 있도록 개인 키에 대한 권한을 제한합니다.
chmod 0400 /var/lib/pgsql/data/server.key
# chmod 0400 /var/lib/pgsql/data/server.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 암호 해시 알고리즘을
scram-sha-256으로 설정합니다./var/lib/pgsql/data/postgresql.conf파일에서 다음 행을 변경합니다.#password_encryption = md5 # md5 or scram-sha-256
#password_encryption = md5 # md5 or scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
password_encryption = scram-sha-256
password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSL/TLS를 사용하도록 PostgreSQL을 구성합니다.
/var/lib/pgsql/data/postgresql.conf파일에서 다음 행을 변경합니다.#ssl = off
#ssl = offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
ssl=on
ssl=onCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql서비스를 시작합니다.systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres라는 시스템 사용자로 로그인합니다.su - postgres
# su - postgresCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres사용자로 PostgreSQL 대화형 터미널을 시작합니다.psql -U postgres
$ psql -U postgres psql (13.7) Type "help" for help. postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser라는 사용자를 생성하고mydbuser의 암호를 설정합니다.postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd'; CREATE ROLE postgres=#
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd'; CREATE ROLE postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydatabase데이터베이스를 생성합니다.postgres=# CREATE DATABASE mydatabase; CREATE DATABASE postgres=#
postgres=# CREATE DATABASE mydatabase; CREATE DATABASE postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser사용자에게 모든 권한을 부여합니다.postgres=# GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydbuser; GRANT postgres=#
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydbuser; GRANT postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow 대화형 터미널에서 로그아웃합니다.
postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgres사용자 세션에서 로그아웃합니다.logout
$ logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/pgsql/data/pg_hba.conf파일에서 IPv4 로컬 연결에 대해 다음 행을 변경하여 TLS를 사용하는 클라이언트의 연결만 허용하도록 모든 데이터베이스에 대한 액세스를 제한합니다.host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 identCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음으로 변경합니다.
hostssl all all 127.0.0.1/32 scram-sha-256
hostssl all all 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql서비스를 다시 시작하여 변경 사항을 적용합니다.systemctl restart postgresql.service
# systemctl restart postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 데이터베이스에
mydbuser사용자로 연결하고 호스트 이름과 데이터베이스 이름을 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.6. PostgreSQL 데이터 백업 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 데이터를 백업하려면 다음 방법 중 하나를 사용합니다.
- SQL 덤프
- 파일 시스템 수준 백업
- 연속 아카이브
7.4.6.1. SQL 덤프를 사용하여 PostgreSQL 데이터 백업 링크 복사링크가 클립보드에 복사되었습니다!
SQL 덤프 방법은 SQL 명령으로 덤프 파일을 생성하는 방법을 기반으로 합니다. 덤프가 데이터베이스 서버에 다시 업로드되면 덤프 시와 동일한 상태로 데이터베이스를 다시 생성합니다.
SQL 덤프는 다음 PostgreSQL 클라이언트 애플리케이션에서 확인합니다.
- pg_dump 는 역할 또는 테이블 공간에 대한 클러스터 전체 정보가 없는 단일 데이터베이스를 덤프합니다.
- pg_dumpall 은 지정된 클러스터의 각 데이터베이스를 덤프하고 역할 및 테이블 공간 정의와 같은 클러스터 전체 데이터를 유지합니다.
기본적으로 pg_dump 및 pg_dumpall 명령은 결과를 표준 출력에 작성합니다. 덤프를 파일에 저장하려면 출력을 SQL 파일로 리디렉션합니다. 결과 SQL 파일은 병렬 처리를 허용하는 텍스트 형식 또는 다른 형식으로 되어 있고 개체 복원을 보다 자세히 제어할 수 있습니다.
데이터베이스에 액세스할 수 있는 모든 원격 호스트에서 SQL 덤프를 수행할 수 있습니다.
7.4.6.1.1. SQL 덤프의 장점 및 단점 링크 복사링크가 클립보드에 복사되었습니다!
SQL 덤프에는 다른 PostgreSQL 백업 방법과 비교하여 다음과 같은 이점이 있습니다.
- SQL 덤프는 서버 버전별이 아닌 유일한 PostgreSQL 백업 방법입니다. pg_dump 유틸리티의 출력은 이후 버전의 PostgreSQL 으로 다시 로드할 수 있으며 이는 파일 시스템 수준 백업 또는 연속 보관에서는 불가능합니다.
- SQL 덤프는 32비트에서 64비트 서버로 이동하는 것과 같이 데이터베이스를 다른 시스템 아키텍처로 전송할 때 작동하는 유일한 방법입니다.
- SQL 덤프는 내부적으로 일관성 있는 덤프를 제공합니다. 덤프는 pg_dump 가 실행될 때 데이터베이스의 스냅샷을 나타냅니다.
- pg_dump 유틸리티는 실행 중일 때 데이터베이스에서 다른 작업을 차단하지 않습니다.
SQL 덤프의 단점은 파일 시스템 수준 백업에 비해 시간이 더 필요하다는 것입니다.
7.4.6.1.2. pg_dump를 사용하여 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 전체 정보 없이 단일 데이터베이스를 덤프하려면 pg_dump 유틸리티를 사용합니다.
사전 요구 사항
-
덤프하려는 모든 테이블에 대한 읽기 권한이 있어야 합니다. 전체 데이터베이스를 덤프하려면
postgressuperuser 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
절차
클러스터 전체 정보가 없는 데이터베이스를 덤프합니다.
pg_dump dbname > dumpfile
$ pg_dump dbname > dumpfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 연결할 데이터베이스 서버 pg_dump 를 지정하려면 다음 명령줄 옵션을 사용합니다.
호스트를 정의하는
-h옵션입니다.기본 호스트는 로컬 호스트이거나
PGHOST환경 변수에 의해 지정된 항목입니다.포트를 정의하는
-p옵션입니다.기본 포트는
PGPORT환경 변수 또는 컴파일된 상태로 표시됩니다.
7.4.6.1.3. pg_dumpall을 사용하여 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
지정된 데이터베이스 클러스터에서 각 데이터베이스를 덤프하고 클러스터 전체 데이터를 유지하려면 pg_dumpall 유틸리티를 사용합니다.
사전 요구 사항
-
postgres슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
데이터베이스 클러스터에서 모든 데이터베이스를 덤프하고 클러스터 전체 데이터를 유지합니다.
pg_dumpall > dumpfile
$ pg_dumpall > dumpfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
연결할 데이터베이스 서버 pg_dumpall 을 지정하려면 다음 명령줄 옵션을 사용합니다.
호스트를 정의하는
-h옵션입니다.기본 호스트는 로컬 호스트이거나
PGHOST환경 변수에 의해 지정된 항목입니다.포트를 정의하는
-p옵션입니다.기본 포트는
PGPORT환경 변수 또는 컴파일된 상태로 표시됩니다.기본 데이터베이스를 정의하는
-l옵션입니다.이 옵션을 사용하면 초기화 중에 자동으로 생성된
postgres데이터베이스와 다른 기본 데이터베이스를 선택할 수 있습니다.
7.4.6.1.4. pg_dump를 사용하여 덤프된 데이터베이스 복원 링크 복사링크가 클립보드에 복사되었습니다!
pg_dump 유틸리티를 사용하여 덤프한 SQL 덤프에서 데이터베이스를 복원하려면 다음 단계를 따르십시오.
사전 요구 사항
-
postgres슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
새 데이터베이스를 생성합니다.
createdb dbname
$ createdb dbnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 개체를 소유하거나 덤프된 데이터베이스의 오브젝트에 대한 권한이 부여된 모든 사용자가 이미 있는지 확인합니다. 이러한 사용자가 존재하지 않는 경우 복원에서 원래 소유권 및 권한으로 오브젝트를 다시 생성하지 못합니다.
psql유틸리티를 실행하여 pg_dump 유틸리티로 생성된 텍스트 파일 덤프를 복원합니다.psql dbname < dumpfile
$ psql dbname < dumpfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
dumpfile은pg_dump명령의 출력입니다. 비 텍스트 파일 덤프를 복원하려면 대신pg_restore유틸리티를 사용합니다.pg_restore non-plain-text-file
$ pg_restore non-plain-text-fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.6.1.5. pg_dumpall을 사용하여 덤프된 데이터베이스 복원 링크 복사링크가 클립보드에 복사되었습니다!
pg_dumpall 유틸리티를 사용하여 덤프한 데이터베이스 클러스터에서 데이터를 복원하려면 다음 단계를 따르십시오.
사전 요구 사항
-
postgres슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
- 개체를 소유하거나 덤프된 데이터베이스의 개체에 대한 권한이 부여된 모든 사용자가 있는지 확인합니다. 이러한 사용자가 존재하지 않는 경우 복원에서 원래 소유권 및 권한으로 오브젝트를 다시 생성하지 못합니다.
psql 유틸리티를 실행하여 pg_dumpall 유틸리티에서 생성한 텍스트 파일 덤프를 복원합니다.
psql < dumpfile
$ psql < dumpfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
dumpfile은pg_dumpall명령의 출력입니다.
7.4.6.1.6. 다른 서버에서 데이터베이스의 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
pg_dump 및 psql 이 파이프로 직접 작성하고 읽을 수 있기 때문에 데이터베이스를 직접 덤프할 수 있습니다.
프로세스
한 서버에서 다른 서버로 데이터베이스를 덤프하려면 다음을 실행합니다.
pg_dump -h host1 dbname | psql -h host2 dbname
$ pg_dump -h host1 dbname | psql -h host2 dbnameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.6.1.7. 복원 중 SQL 오류 처리 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 psql 은 SQL 오류가 발생하면 계속 실행되므로 데이터베이스가 부분적으로만 복원됩니다.
기본 동작을 변경하려면 덤프를 복원할 때 다음 방법 중 하나를 사용합니다.
사전 요구 사항
-
postgres슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
ON_ERROR_STOP변수를 설정하여 SQL 오류가 발생하면 종료 상태 3을 사용하여 psql 을 종료합니다.psql --set ON_ERROR_STOP=on dbname < dumpfile
$ psql --set ON_ERROR_STOP=on dbname < dumpfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 복원이 완전히 완료되거나 취소되도록 전체 덤프가 단일 트랜잭션으로 복원되도록 지정합니다.
psql유틸리티를 사용하여 텍스트 파일 덤프를 복원하는 경우:psql -1
$ psql -1Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_restore유틸리티를 사용하여 텍스트가 아닌 파일 덤프를 복원하는 경우:pg_restore -e
$ pg_restore -eCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 방법을 사용할 때 약간의 오류라도 이미 여러 시간 동안 실행된 복원 작업을 취소할 수 있습니다.
7.4.6.2. 파일 시스템 수준 백업을 사용하여 PostgreSQL 데이터 백업 링크 복사링크가 클립보드에 복사되었습니다!
파일 시스템 수준 백업을 생성하려면 PostgreSQL 데이터베이스 파일을 다른 위치로 복사합니다. 예를 들어 다음 접근 방식 중 하나를 사용할 수 있습니다.
- tar 유틸리티를 사용하여 아카이브 파일을 생성합니다.
- rsync 유틸리티를 사용하여 파일을 다른 위치에 복사합니다.
- 데이터 디렉터리의 일관된 스냅샷을 생성합니다.
7.4.6.2.1. 파일 시스템 백업의 이점 및 제한 사항 링크 복사링크가 클립보드에 복사되었습니다!
파일 시스템 수준 백업은 다른 PostgreSQL 백업 방법과 비교하여 다음과 같은 이점이 있습니다.
- 파일 시스템 수준 백업은 일반적으로 SQL 덤프보다 빠릅니다.
파일 시스템 수준 백업에는 다른 PostgreSQL 백업 방법에 비해 다음과 같은 제한 사항이 있습니다.
- 이 백업 방법은 RHEL 7에서 RHEL 8로 업그레이드하고 데이터를 업그레이드된 시스템으로 마이그레이션하려는 경우 적합하지 않습니다. 파일 시스템 수준 백업은 아키텍처 및 RHEL 주요 버전에 따라 다릅니다. 업그레이드가 성공하지 못했지만 RHEL 8 시스템에서 데이터를 복원할 수 없는 경우 RHEL 7 시스템에서 데이터를 복원할 수 있습니다.
- 데이터를 백업하고 복원하기 전에 데이터베이스 서버를 종료해야 합니다.
- 특정 개별 파일 또는 테이블을 백업하고 복원하는 것은 불가능합니다. 파일 시스템을 백업하는 것은 전체 데이터베이스 클러스터의 전체 백업 및 복원을 위해서만 작동합니다.
7.4.6.2.2. 파일 시스템 수준 백업 수행 링크 복사링크가 클립보드에 복사되었습니다!
파일 시스템 수준 백업을 수행하려면 다음 절차를 사용하십시오.
프로세스
데이터베이스 클러스터의 위치를 선택하고 이 클러스터를 초기화합니다.
postgresql-setup --initdb
# postgresql-setup --initdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql 서비스를 중지합니다.
systemctl stop postgresql.service
# systemctl stop postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 방법을 사용하여 파일 시스템 백업을 생성합니다(예:
tar아카이브).tar -cf backup.tar /var/lib/pgsql/data/
$ tar -cf backup.tar /var/lib/pgsql/data/Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql 서비스를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.6.3. 연속 보관을 통해 PostgreSQL 데이터 백업 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 은 데이터베이스의 데이터 파일의 모든 변경 사항을 클러스터의 데이터 디렉터리의 pg_wal/ 하위 디렉터리에서 사용할 수 있는 쓰기 로그(WAL) 파일로 기록합니다. 이 로그는 주로 충돌 복구를 위한 것입니다. 충돌 후 마지막 체크포인트 이후 만든 로그 항목을 사용하여 데이터베이스를 일관성으로 복원할 수 있습니다.
온라인 백업이라고도 하는 연속 보관 방법은 WAL 파일을 실행 중인 서버 또는 파일 시스템 수준 백업에서 수행되는 기본 백업의 형태로 데이터베이스 클러스터 복사본과 결합합니다.
데이터베이스 복구가 필요한 경우 데이터베이스 클러스터 복사본에서 데이터베이스를 복원한 다음 백업된 WAL 파일에서 로그를 재생하여 시스템을 현재 상태로 전환할 수 있습니다.
연속 보관 방법을 사용하면 최소 마지막 기본 백업의 시작 시간으로 확장되는 모든 보관된 WAL 파일의 연속 시퀀스를 유지해야 합니다. 따라서 기본 백업의 이상적인 빈도는 다음에 따라 다릅니다.
- 보관된 WAL 파일에 사용할 수 있는 스토리지 볼륨입니다.
- 복구가 필요한 경우 가능한 최대 데이터 복구 기간입니다. 마지막 백업 이후 오랜 기간이 있는 경우 시스템은 더 많은 WAL 세그먼트를 재생하므로 복구에 더 많은 시간이 걸립니다.
pg_dump 및 pg_dumpall SQL 덤프를 연속 보관 백업 솔루션의 일부로 사용할 수 없습니다. SQL 덤프는 논리 백업을 생성하고 WAL 재생에서 사용할 수 있는 충분한 정보를 포함하지 않습니다.
7.4.6.3.1. 연속 보관의 이점 및 단점 링크 복사링크가 클립보드에 복사되었습니다!
연속 보관은 다른 PostgreSQL 백업 방법과 비교하여 다음과 같은 이점이 있습니다.
- 연속 백업 방법을 사용하면 로그 재생을 통해 백업의 내부 불일치가 수정되므로 완전히 일관성이 없는 기본 백업을 사용할 수 있습니다. 따라서 실행 중인 PostgreSQL 서버에서 기본 백업을 수행할 수 있습니다.
-
파일 시스템 스냅샷이 필요하지 않습니다.
tar또는 유사한 아카이브 유틸리티로 충분합니다. - 로그 재생에 대한 WAL 파일의 순서가 무기한 길 수 있기 때문에 WAL 파일을 계속 보관하여 연속 백업을 수행할 수 있습니다. 이는 대규모 데이터베이스에 특히 중요합니다.
- 연속 백업은 지정 시간 복구를 지원합니다. WAL 항목을 끝에 재생할 필요는 없습니다. 재생은 언제든지 중지할 수 있으며 기본 백업이 수행된 이후 언제든지 데이터베이스를 해당 상태로 복원할 수 있습니다.
- 동일한 기본 백업 파일로 로드된 다른 머신에서 일련의 WAL 파일을 지속적으로 사용할 수 있는 경우 언제든지 데이터베이스 복사본이 거의 최신인 다른 시스템을 복원할 수 있습니다.
연속 보관에는 다른 PostgreSQL 백업 방법과 비교하여 다음과 같은 단점이 있습니다.
- 연속 백업 방법은 하위 집합이 아닌 전체 데이터베이스 클러스터의 복원만 지원합니다.
- 연속 백업에는 광범위한 아카이브 스토리지가 필요합니다.
7.4.6.3.2. WAL 아카이브 설정 링크 복사링크가 클립보드에 복사되었습니다!
실행 중인 PostgreSQL 서버는 쓰기 전 로그(WAL) 레코드를 생성합니다. 서버는 이 시퀀스를 WAL 세그먼트 파일로 물리적으로 나눕니다. 이 파일은 WAL 시퀀스에서 해당 위치를 반영하는 숫자 이름이 지정됩니다. WAL 보관이 없으면 세그먼트 파일이 재사용되고 더 높은 세그먼트 번호로 이름이 변경됩니다.
WAL 데이터를 저장할 때 각 세그먼트 파일의 내용이 캡처되고 세그먼트 파일을 재사용하기 전에 새 위치에 저장됩니다. NFS 마운트 디렉토리(예: 다른 머신, 보관 드라이브 또는 CD)와 같은 콘텐츠를 저장할 수 있는 여러 옵션이 있습니다.
WAL 레코드에는 구성 파일에 대한 변경 사항이 포함되어 있지 않습니다.
WAL 보관을 활성화하려면 다음 절차를 사용하십시오.
프로세스
/var/lib/pgsql/data/postgresql.conf파일에서 다음을 수행합니다.-
wal_level구성 매개 변수를replica이상으로 설정합니다. -
archive_mode매개변수를 의로설정합니다. archive_command구성 매개변수에서 shell 명령을 지정합니다.cp명령, 다른 명령 또는 쉘 스크립트를 사용할 수 있습니다.예를 들면 다음과 같습니다.
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
%p매개변수는 아카이브할 파일의 상대 경로로 교체되고%f매개변수는 파일 이름으로 교체됩니다.이 명령은 아카이브 가능한 WAL 세그먼트를
/mnt/server/archivedir/디렉터리에 복사합니다.%p및%f매개변수를 교체한 후 실행된 명령은 다음과 같습니다.test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065
test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보관된 각 새 파일에 대해 유사한 명령이 생성됩니다.
참고archive 명령은 완료된 WAL 세그먼트에서만 실행됩니다. WAL 트래픽을 거의 생성하는 서버는 트랜잭션 완료와 아카이브 스토리지에 안전한 기록 사이에 상당한 지연이 발생할 수 있습니다. 보관되지 않은 오래된 데이터를 저장할 수 있는 방법을 제한하려면 다음을 수행할 수 있습니다.
-
archive_timeout매개변수를 설정하여 지정된 빈도로 서버가 새 WAL 세그먼트 파일로 전환하도록 합니다. -
pg_switch_wal매개 변수를 사용하여 세그먼트 스위치가 완료된 직후 트랜잭션이 보관되도록 강제 적용합니다.
-
-
postgresql서비스를 다시 시작하여 변경 사항을 활성화합니다.systemctl restart postgresql.service
# systemctl restart postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - archive 명령을 테스트하고 기존 파일을 덮어쓰지 않고 실패하는 경우 0이 아닌 종료 상태를 반환하는지 확인합니다.
- 데이터를 보호하려면 세그먼트 파일이 그룹 또는 세계 읽기 액세스 권한이 없는 디렉터리에 보관되어야 합니다.
7.4.6.3.3. 기본 백업 만들기 링크 복사링크가 클립보드에 복사되었습니다!
여러 가지 방법으로 기본 백업을 생성할 수 있습니다. 기본 백업을 수행하는 가장 간단한 방법은 실행 중인 PostgreSQL 서버에서 pg_basebackup 유틸리티를 사용하는 것입니다.
기본 백업 프로세스는 WAL 아카이브 영역에 저장되는 백업 기록 파일을 생성하고 기본 백업에 필요한 첫 번째 WAL 세그먼트 파일 뒤에 이름이 지정됩니다.
백업 기록 파일은 시작 및 종료 시간이 포함된 작은 텍스트 파일이며 백업의 WAL 세그먼트입니다. 레이블 문자열을 사용하여 연결된 덤프 파일을 식별하는 경우 백업 기록 파일을 사용하여 복원할 덤프 파일을 결정할 수 있습니다.
데이터를 복구할 수 있도록 여러 백업 세트를 유지하는 것이 좋습니다.
사전 요구 사항
-
postgres슈퍼유저, 데이터베이스 관리자 권한이 있는 사용자 또는REPLICATION권한이 있는 다른 사용자로 명령을 실행해야 합니다. - 기본 백업 중 및 이후에 생성된 모든 WAL 세그먼트 파일을 보관해야 합니다.
프로세스
pg_basebackup유틸리티를 사용하여 기본 백업을 수행합니다.개별 파일로 기본 백업을 생성하려면 다음을 수행합니다.
pg_basebackup -D backup_directory -Fp
$ pg_basebackup -D backup_directory -FpCopy to Clipboard Copied! Toggle word wrap Toggle overflow backup_directory 를 선택한 백업 위치로 바꿉니다.
tablespaces를 사용하고 서버와 동일한 호스트에서 기본 백업을 수행하는 경우
--tablespace-mapping옵션도 사용해야 합니다. 그렇지 않으면 백업을 동일한 위치에 작성하려고 할 때 백업이 실패합니다.기본 백업을
tar아카이브(tar및 압축 형식)로 만들려면 다음을 수행합니다.pg_basebackup -D backup_directory -Ft -z
$ pg_basebackup -D backup_directory -Ft -zCopy to Clipboard Copied! Toggle word wrap Toggle overflow backup_directory 를 선택한 백업 위치로 바꿉니다.
이러한 데이터를 복원하려면 올바른 위치에 파일을 수동으로 추출해야 합니다.
연결할 데이터베이스 서버 pg_basebackup 을 지정하려면 다음 명령줄 옵션을 사용합니다.
호스트를 정의하는
-h옵션입니다.기본 호스트는 로컬 호스트 또는
PGHOST환경 변수에 의해 지정된 호스트입니다.포트를 정의하는
-p옵션입니다.기본 포트는
PGPORT환경 변수 또는 컴파일된 상태로 표시됩니다.
- 기본 백업 프로세스가 완료되면 백업 기록 파일에 지정된 백업 중에 사용되는 데이터베이스 클러스터 및 WAL 세그먼트 파일의 복사본을 안전하게 보관합니다.
- 기본 백업보다 오래되고 복원에 더 이상 필요하지 않기 때문에 기본 백업에 사용되는 WAL 세그먼트 파일보다 숫자적으로 낮은 WAL 세그먼트를 삭제합니다.
7.4.6.3.4. 연속 아카이브 백업을 사용하여 데이터베이스 복원 링크 복사링크가 클립보드에 복사되었습니다!
연속 백업을 사용하여 데이터베이스를 복원하려면 다음 절차를 사용하십시오.
프로세스
서버를 중지합니다.
systemctl stop postgresql.service
# systemctl stop postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 필요한 데이터를 임시 위치에 복사합니다.
전체 클러스터 데이터 디렉터리 및 모든 테이블 공간을 복사하는 것이 좋습니다. 이를 위해서는 시스템에 기존 데이터베이스의 두 복사본을 저장할 수 있는 충분한 여유 공간이 필요합니다.
공간이 충분하지 않은 경우 시스템이 중단되기 전에 보관되지 않은 로그를 포함할 수 있는 클러스터의
pg_wal디렉터리의 내용을 저장합니다.- 클러스터 데이터 디렉터리 및 사용 중인 테이블 공간의 루트 디렉터리 아래에 있는 기존 파일 및 하위 디렉터리를 모두 제거합니다.
기본 백업에서 데이터베이스 파일을 복원합니다.
다음을 확인하십시오.
-
파일이 올바른 소유권(
root가 아닌 데이터베이스 시스템 사용자)으로 복원됩니다. - 파일이 올바른 권한으로 복원됩니다.
-
pg_tblspc/하위 디렉터리의 심볼릭 링크가 올바르게 복원됩니다.
-
파일이 올바른 소유권(
pg_wal/하위 디렉터리에 있는 모든 파일을 제거합니다.이러한 파일은 기본 백업에서 생성되었으므로 사용되지 않습니다.
pg_wal/을 보관하지 않은 경우 적절한 권한으로 다시 생성합니다.-
2단계에서 저장한 모든 보관되지 않은 WAL 세그먼트 파일을
pg_wal/로 복사합니다. 클러스터 데이터 디렉터리에
recovery.conf복구 명령 파일을 생성하고restore_command구성 매개 변수에 shell 명령을 지정합니다.cp명령, 다른 명령 또는 쉘 스크립트를 사용할 수 있습니다. 예를 들면 다음과 같습니다.restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'cp /mnt/server/archivedir/%f "%p"'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서버는 복구 모드로 전환되고 필요한 아카이브된 WAL 파일을 읽습니다.
외부 오류로 인해 복구가 종료되면 서버를 다시 시작할 수 있으며 복구를 계속합니다. 복구 프로세스가 완료되면 서버는
recovery.conf의 이름을recovery.done로 바꿉니다. 이렇게 하면 일반적인 데이터베이스 작업을 시작한 후 서버가 실수로 복구 모드로 다시 입력되지 않습니다.데이터베이스 내용을 확인하여 데이터베이스가 필요한 상태로 복구되었는지 확인합니다.
데이터베이스가 required 상태로 복구되지 않은 경우 1 단계로 돌아갑니다. 데이터베이스가 필수 상태로 복구된 경우
pg_hba.conf파일에서 클라이언트 인증 구성을 복원하여 사용자가 연결할 수 있도록 합니다.
7.4.7. RHEL 8 버전의 PostgreSQL으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 7에는 PostgreSQL 서버의 기본 버전으로 PostgreSQL 9.2 가 포함되어 있습니다. 또한 여러 버전의 PostgreSQL 이 RHEL 7용 Software Collections로 제공됩니다.
Red Hat Enterprise Linux 8은 PostgreSQL 10 을 기본 postgresql 스트림, PostgreSQL 9.6,PostgreSQL 12,PostgreSQL 13,PostgreSQL 15 및 PostgreSQL 16 으로 제공합니다.
Red Hat Enterprise Linux에서 PostgreSQL 사용자는 데이터베이스 파일에 두 가지 마이그레이션 경로를 사용할 수 있습니다.
빠른 업그레이드 방법은 덤프 및 복원 프로세스보다 빠릅니다. 그러나 특정 경우에는 빠른 업그레이드가 작동하지 않으며 덤프 및 복원 프로세스만 사용할 수 있습니다. 이러한 경우는 다음과 같습니다.
- 아키텍처 간 업그레이드
-
plpython또는plpython2확장을 사용하는 시스템 RHEL 8 AppStream 리포지토리에는postgresql-plpython2패키지가 아닌postgresql-plpython3패키지만 포함됩니다. - Red Hat Software Collections 버전의 PostgreSQL 에서 마이그레이션하는 경우 빠른 업그레이드가 지원되지 않습니다.
이후 버전의 PostgreSQL 으로 마이그레이션하기 위한 사전 요구 사항으로 모든 PostgreSQL 데이터베이스를 백업하십시오.
데이터베이스를 덤프하고 SQL 파일의 백업을 수행하는 것은 덤프 및 복원 프로세스에 필요하며 빠른 업그레이드 방법에 권장됩니다.
최신 버전의 PostgreSQL 으로 마이그레이션하기 전에 마이그레이션하려는 PostgreSQL 버전과 대상 버전 및 대상 버전 간의 모든 건너뛰는 PostgreSQL 버전에 대한 업스트림 호환성 노트 를 참조하십시오.
7.4.7.1. PostgreSQL 15와 PostgreSQL 16의 주요 차이점 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 16 에서는 다음과 같은 주요 변경 사항이 추가되었습니다.
postmasters 바이너리는 더 이상 사용할 수 없습니다.
PostgreSQL 은 더 이상 postmaster 바이너리와 함께 배포되지 않습니다. 제공된 systemd 장치 파일( systemctl start postgres.service 명령)을 사용하여 postgresql 서버를 시작하는 사용자는 이 변경의 영향을 받지 않습니다. 이전에 postmaster 바이너리를 통해 postgresql 서버를 직접 시작한 경우 대신 postgres 바이너리를 사용해야 합니다.
문서가 더 이상 패키지되지 않음
PostgreSQL 은 더 이상 패키지 내에서 PDF 형식으로 문서를 제공하지 않습니다. 대신 온라인 문서를 사용하십시오.
7.4.7.2. PostgreSQL 13과 PostgreSQL 15의 주요 차이점 링크 복사링크가 클립보드에 복사되었습니다!
PostgreSQL 15 에서는 다음과 같은 호환되지 않는 변경 사항이 도입되었습니다.
공용 스키마의 기본 권한
공용 스키마의 기본 권한은 PostgreSQL 15 에서 수정되었습니다. 새로 생성된 사용자는 GRANT ALL ON SCHEMA 공용 TO myuser; 명령을 사용하여 명시적으로 권한을 부여해야 합니다.
다음 예제는 PostgreSQL 13 및 이전 버전에서 작동합니다.
postgres=# CREATE USER mydbuser; postgres=# \c postgres mydbuser postgres=$ CREATE TABLE mytable (id int);
postgres=# CREATE USER mydbuser;
postgres=# \c postgres mydbuser
postgres=$ CREATE TABLE mytable (id int);
다음 예제는 PostgreSQL 15 이상에서 작동합니다.
postgres=# CREATE USER mydbuser; postgres=# GRANT ALL ON SCHEMA public TO mydbuser; postgres=# \c postgres mydbuser postgres=$ CREATE TABLE mytable (id int);
postgres=# CREATE USER mydbuser;
postgres=# GRANT ALL ON SCHEMA public TO mydbuser;
postgres=# \c postgres mydbuser
postgres=$ CREATE TABLE mytable (id int);
mydbuser 액세스가 pg_hba.conf 파일에 적절하게 구성되었는지 확인합니다. 자세한 내용은 PostgreSQL 사용자 생성 을 참조하십시오.
파이프라인 모드에서 PQsendQuery() 가 더 이상 지원되지 않음
PostgreSQL 15 이므로 libpq 라이브러리 PQsendQuery() 함수는 더 이상 파이프라인 모드에서 지원되지 않습니다. PQsendQueryParams() 함수를 대신 사용하도록 영향을 받는 애플리케이션을 수정합니다.
7.4.7.3. pg_upgrade 유틸리티를 사용하여 빠른 업그레이드 링크 복사링크가 클립보드에 복사되었습니다!
빠른 업그레이드 중에 바이너리 데이터 파일을 /var/lib/pgsql/data/ 디렉터리에 복사하고 pg_upgrade 유틸리티를 사용해야 합니다.
이 방법을 사용하여 데이터를 마이그레이션할 수 있습니다.
- PostgreSQL 9.2 의 RHEL 7 시스템 버전에서 PostgreSQL 10의 RHEL 8 버전
- PostgreSQL 10 의 RHEL 8 버전에서 RHEL 버전 PostgreSQL 12로
- RHEL 8 버전의 PostgreSQL 12 에서 RHEL 버전의 PostgreSQL 13으로
- RHEL 버전의 PostgreSQL 13 에서 RHEL 버전의 PostgreSQL 15로
- RHEL 버전의 PostgreSQL 15 에서 RHEL 버전의 PostgreSQL 16으로
RHEL 8 내의 이전 postgresql 스트림에서 업그레이드하려면 이후 스트림으로 전환에 설명된 절차를 수행한 다음 PostgreSQL 데이터를 마이그레이션합니다.
RHEL 내의 다른 PostgreSQL 버전 조합과 Red Hat Software Collections 버전에서 RHEL로 마이그레이션하는 경우 Dump 및 restore upgrade 를 사용합니다.
다음 절차에서는 빠른 업그레이드 방법을 사용하여 RHEL 7 시스템 버전에서 PostgreSQL 9.2 의 RHEL 8 버전으로의 마이그레이션을 설명합니다.
사전 요구 사항
-
업그레이드를 수행하기 전에 PostgreSQL 데이터베이스에 저장된 모든 데이터를 백업하십시오. 기본적으로 모든 데이터는 RHEL 7 및 RHEL 8 시스템의
/var/lib/pgsql/data/디렉터리에 저장됩니다.
프로세스
RHEL 8 시스템에서 마이그레이션할 스트림(버전)을 활성화합니다.
yum module enable postgresql:stream
# yum module enable postgresql:streamCopy to Clipboard Copied! Toggle word wrap Toggle overflow stream 을 선택한 PostgreSQL 서버의 버전으로 교체합니다.
PostgreSQL 10 을 제공하는 기본 스트림을 사용하려면 이 단계를 생략할 수 있습니다.
RHEL 8 시스템에서
postgresql-server및postgresql-upgrade패키지를 설치합니다.yum install postgresql-server postgresql-upgrade
# yum install postgresql-server postgresql-upgradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택적으로 RHEL 7에서 PostgreSQL 서버 모듈을 사용한 경우 PostgreSQL 9.2 (
postgresql-upgrade패키지로 설치됨) 및 대상 버전(postgresql-server패키지로 설치됨)에 대해 컴파일된 두 버전의 RHEL 8 시스템에도 설치합니다. 타사 PostgreSQL 서버 모듈을 컴파일해야 하는 경우postgresql-devel및postgresql-upgrade-devel패키지에 대해 둘 다 빌드합니다.다음 항목을 확인합니다.
-
기본 구성: RHEL 8 시스템에서 서버가 기본
/var/lib/pgsql/data디렉토리를 사용하고 데이터베이스가 올바르게 초기화되고 활성화되어 있는지 확인합니다. 또한 데이터 파일은/usr/lib/systemd/system/postgresql.service파일에 언급된 것과 동일한 경로에 저장해야 합니다. - PostgreSQL servers: 시스템은 여러 PostgreSQL 서버를 실행할 수 있습니다. 이러한 모든 서버의 데이터 디렉토리가 독립적으로 처리되었는지 확인합니다.
-
PostgreSQL 서버 모듈: RHEL 7에서 사용한 PostgreSQL 서버 모듈도 RHEL 8 시스템에 설치되어 있는지 확인합니다. 플러그인은
/usr/lib64/pgsql/디렉터리에 설치됩니다(또는 32비트 시스템의/usr/lib/pgsql/디렉토리에).
-
기본 구성: RHEL 8 시스템에서 서버가 기본
데이터를 복사할 때
postgresql서비스가 소스 및 대상 시스템에서 실행되지 않는지 확인합니다.systemctl stop postgresql.service
# systemctl stop postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
소스 위치의 데이터베이스 파일을 RHEL 8 시스템의
/var/lib/pgsql/data/디렉터리에 복사합니다. PostgreSQL 사용자로 다음 명령을 실행하여 업그레이드 프로세스를 수행합니다.
postgresql-setup --upgrade
# postgresql-setup --upgradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 백그라운드에서
pg_upgrade프로세스가 시작됩니다.실패하는 경우
postgresql-setup은 정보 오류 메시지를 제공합니다./var/lib/pgsql/data-old의 이전 구성을 새 클러스터로 복사합니다.빠른 업그레이드는 최신 데이터 스택의 이전 구성을 재사용하지 않으며 구성이 처음부터 생성됩니다. 이전 구성과 새 구성을 수동으로 결합하려면 데이터 디렉터리의 *.conf 파일을 사용합니다.
새 PostgreSQL 서버를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 데이터베이스 클러스터를 분석합니다.
PostgreSQL 13 또는 이전 버전의 경우:
su postgres -c '~/analyze_new_cluster.sh'
su postgres -c '~/analyze_new_cluster.sh'Copy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL 15 이상의 경우:
su postgres -c 'vacuumdb --all --analyze-in-stages'
su postgres -c 'vacuumdb --all --analyze-in-stages'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고REFRESH VERSION을 사용해야 할수도 있습니다. 자세한 내용은 업스트림 문서를 참조하십시오.
부팅 시 새 PostgreSQL 서버를 자동으로 시작하려면 다음을 실행합니다.
systemctl enable postgresql.service
# systemctl enable postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.7.4. 업그레이드 덤프 및 복원 링크 복사링크가 클립보드에 복사되었습니다!
덤프 및 복원 업그레이드를 사용하는 경우 모든 데이터베이스 내용을 SQL 파일 덤프 파일로 덤프해야 합니다.
덤프 및 복원 업그레이드는 빠른 업그레이드 방법보다 느리고 생성된 SQL 파일에 수동 수정이 필요할 수 있습니다.
이 방법을 사용하여 데이터를 마이그레이션할 수 있습니다.
- Red Hat Enterprise Linux 7 시스템 버전의 PostgreSQL 9.2
- 이전 Red Hat Enterprise Linux 8 버전의 PostgreSQL
Red Hat Software Collections의 이전 버전 또는 동일한 버전의 PostgreSQL:
- PostgreSQL 9.2 (더 이상 지원되지 않음)
- PostgreSQL 9.4 (더 이상 지원되지 않음)
- PostgreSQL 9.6 (더 이상 지원되지 않음)
- PostgreSQL 10
- PostgreSQL 12
- PostgreSQL 13
RHEL 7 및 RHEL 8 시스템에서 PostgreSQL 데이터는 기본적으로 /var/lib/pgsql/data/ 디렉터리에 저장됩니다. PostgreSQL 의 Red Hat Software Collections 버전의 경우 기본 데이터 디렉터리는 /var/opt/rh/collection_name/lib/pgsql/data/ data/입니다(/ opt/rh/ 디렉터리를 사용하는 postgresql92 제외).
postgresql92 /postgresql92/var/lib/pgsql/data/
RHEL 8 내의 이전 postgresql 스트림에서 업그레이드하려면 이후 스트림으로 전환에 설명된 절차를 수행한 다음 PostgreSQL 데이터를 마이그레이션합니다.
덤프 및 복원 업그레이드를 수행하려면 사용자를 root 로 변경합니다.
다음 절차에서는 RHEL 7 시스템 버전의 PostgreSQL 9.2 에서 RHEL 8 버전의 PostgreSQL 으로 마이그레이션하는 방법을 설명합니다.
프로세스
RHEL 7 시스템에서 PostgreSQL 9.2 서버를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 7 시스템에서 모든 데이터베이스 콘텐츠를
pgdump_file.sql파일에 덤프합니다.su - postgres -c "pg_dumpall > ~/pgdump_file.sql"
su - postgres -c "pg_dumpall > ~/pgdump_file.sql"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 데이터베이스가 올바르게 덤프되었는지 확인합니다.
su - postgres -c 'less "$HOME/pgdump_file.sql"'
su - postgres -c 'less "$HOME/pgdump_file.sql"'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그 결과 덤프된 sql 파일의 경로가 표시됩니다.
/var/lib/pgsql/pgdump_file.sql.RHEL 8 시스템에서 마이그레이션할 스트림(버전)을 활성화합니다.
yum module enable postgresql:stream
# yum module enable postgresql:streamCopy to Clipboard Copied! Toggle word wrap Toggle overflow stream 을 선택한 PostgreSQL 서버의 버전으로 교체합니다.
PostgreSQL 10 을 제공하는 기본 스트림을 사용하려면 이 단계를 생략할 수 있습니다.
RHEL 8 시스템에서
postgresql-server패키지를 설치합니다.yum install postgresql-server
# yum install postgresql-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 7에서 PostgreSQL 서버 모듈을 사용한 경우 RHEL 8 시스템에도 설치합니다. 타사 PostgreSQL 서버 모듈을 컴파일해야 하는 경우
postgresql-devel패키지에 대해 빌드합니다.RHEL 8 시스템에서 새 PostgreSQL 서버의 데이터 디렉터리를 초기화합니다.
postgresql-setup --initdb
# postgresql-setup --initdbCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 8 시스템에서
pgdump_file.sql을 PostgreSQL 홈 디렉터리에 복사하고 파일이 올바르게 복사되었는지 확인합니다.su - postgres -c 'test -e "$HOME/pgdump_file.sql" && echo exists'
su - postgres -c 'test -e "$HOME/pgdump_file.sql" && echo exists'Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 7 시스템에서 구성 파일을 복사합니다.
su - postgres -c 'ls -1 $PGDATA/*.conf'
su - postgres -c 'ls -1 $PGDATA/*.conf'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 복사할 구성 파일은 다음과 같습니다.
-
/var/lib/pgsql/data/pg_hba.conf -
/var/lib/pgsql/data/pg_ident.conf -
/var/lib/pgsql/data/postgresql.conf
-
RHEL 8 시스템에서 새 PostgreSQL 서버를 시작합니다.
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 8 시스템에서 덤프된 sql 파일에서 데이터를 가져옵니다.
su - postgres -c 'psql -f ~/pgdump_file.sql postgres'
su - postgres -c 'psql -f ~/pgdump_file.sql postgres'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Red Hat Software Collections 버전의 PostgreSQL 에서 업그레이드할 때 scl enable collection_name을 포함하도록 명령을 조정합니다. 예를 들어 rh-postgresql96 소프트웨어 컬렉션에서 데이터를 덤프하려면 다음 명령을 사용합니다.
su - postgres -c 'scl enable rh-postgresql96 "pg_dumpall > ~/pgdump_file.sql"'
su - postgres -c 'scl enable rh-postgresql96 "pg_dumpall > ~/pgdump_file.sql"'
7.4.8. RHEL 시스템 역할을 사용하여 PostgreSQL 데이터베이스 서버 설치 및 구성 링크 복사링크가 클립보드에 복사되었습니다!
postgresql RHEL 시스템 역할을 사용하여 PostgreSQL 데이터베이스 서버의 설치 및 관리를 자동화할 수 있습니다. 기본적으로 이 역할은 PostgreSQL 서비스 구성 파일에서 성능 관련 설정을 자동으로 구성하여 PostgreSQL을 최적화합니다.
7.4.8.1. postgresql RHEL 시스템 역할을 사용하여 기존 TLS 인증서로 PostgreSQL 구성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션에 PostgreSQL 데이터베이스 서버가 필요한 경우 이 서비스를 TLS 암호화로 구성하여 애플리케이션과 데이터베이스 간에 보안 통신을 활성화할 수 있습니다. postgresql RHEL 시스템 역할을 사용하면 이 프로세스를 자동화하고 TLS 암호화를 사용하여 PostgreSQL을 원격으로 설치하고 구성할 수 있습니다. 플레이북에서 기존 개인 키와 CA(인증 기관)에서 발급한 TLS 인증서를 사용할 수 있습니다.
postgresql 역할은 firewalld 서비스에서 포트를 열 수 없습니다. PostgreSQL 서버에 대한 원격 액세스를 허용하려면 방화벽 RHEL 시스템 역할을 사용하는 작업을 플레이북에 추가합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다. 관리 노드의 개인 키와 인증서 모두 다음 파일의 제어 노드에 저장됩니다.
-
개인 키:
~/ <FQDN_of_the_managed_node>.key -
인증서:
~/ <FQDN_of_the_managed_node>.crt
-
개인 키:
프로세스
중요한 변수를 암호화된 파일에 저장합니다.
자격 증명 모음을 생성합니다.
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create명령이 편집기를 열고 <key > : < value> 형식으로 중요한 데이터를 입력합니다.pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
postgresql_version: <version>설치할 PostgreSQL 버전을 설정합니다. 설정할 수 있는 버전은 관리 노드에서 실행되는 Red Hat Enterprise Linux에서 사용할 수 있는 PostgreSQL 버전에 따라 다릅니다.
postgresql_version변수를 변경하고 플레이북을 다시 실행하여 PostgreSQL을 업그레이드하거나 다운그레이드할 수 없습니다.postgresql_password: <password>postgres데이터베이스 슈퍼유저의 암호를 설정합니다.postgresql_password변수를 변경하고 플레이북을 다시 실행하여 암호를 변경할 수 없습니다.postgresql_cert_name: <private_key_and_certificate_file>.crt및 키 접미사 없이 관리 노드의 인증서 및 개인 키의 경로와 기본 이름을 정의합니다.PostgreSQL 구성 중에 역할은 이러한 파일을 참조하는/var/lib/pgsql/data/디렉터리에 심볼릭 링크를 생성합니다.인증서 및 개인 키는 관리 노드에 로컬로 존재해야 합니다.
ansible.builtin.copy모듈과 함께 작업을 사용하여 플레이북에 표시된 대로 제어 노드에서 관리 노드로 파일을 전송할 수 있습니다.postgresql_server_conf: <list_of_settings>역할이 설정해야 하는
postgresql.conf설정을 정의합니다. 역할은 이러한 설정을/etc/postgresql/system-roles.conf파일에 추가하고/var/lib/pgsql/data/postgresql.conf끝에 이 파일을 포함합니다. 결과적으로postgresql_server_conf변수의 설정은/var/lib/pgsql/data/postgresql.conf의 설정을 재정의합니다.postgresql_server_conf의 다른 설정으로 플레이북을 다시 실행하면/etc/postgresql/system-roles.conf파일을 새 설정으로 덮어씁니다.postgresql_pg_hba_conf: <list_of_authentication_entries>/var/lib/pgsql/data/pg_hba.conf파일에서 클라이언트 인증 항목을 구성합니다. 자세한 내용은 PostgreSQL 설명서를 참조하십시오.이 예제에서는 PostgreSQL에 다음과 같은 연결을 허용합니다.
- 로컬 UNIX 도메인 소켓을 사용하여 암호화되지 않은 연결입니다.
- IPv4 및 IPv6 localhost 주소에 대한 TLS 암호화 연결
-
192.0.2.0/24 서브넷의 TLS 암호화 연결 원격 주소의 액세스는
postgresql_server_conf변수에서listen_addresses설정도 적절하게 구성하는 경우에만 가능합니다.
postgresql_pg_hba_conf의 다른 설정으로 플레이북을 다시 실행하면 새 설정으로/var/lib/pgsql/data/pg_hba.conf파일을 덮어씁니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
postgres슈퍼 사용자를 사용하여 PostgreSQL 서버에 연결하고\conninfometa 명령을 실행합니다.psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo'
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에 TLS 프로토콜 버전 및 암호 세부 정보가 표시되면 연결이 작동하고 TLS 암호화가 활성화됩니다.
7.4.8.2. postgresql RHEL 시스템 역할을 사용하여 IdM에서 발행된 TLS 인증서로 PostgreSQL 구성 링크 복사링크가 클립보드에 복사되었습니다!
애플리케이션에 PostgreSQL 데이터베이스 서버가 필요한 경우 애플리케이션과 데이터베이스 간에 보안 통신을 사용하도록 PostgreSQL 서비스를 TLS 암호화로 구성할 수 있습니다. PostgreSQL 호스트가 Red Hat Enterprise Linux IdM(Identity Management) 도메인의 멤버인 경우 certmonger 서비스에서 인증서 요청 및 향후 갱신을 관리할 수 있습니다.
postgresql RHEL 시스템 역할을 사용하면 이 프로세스를 자동화할 수 있습니다. TLS 암호화를 사용하여 PostgreSQL을 원격으로 설치하고 구성할 수 있으며 postgresql 역할은 인증서 RHEL 시스템 역할을 사용하여 certmonger 를 구성하고 IdM에서 인증서를 요청합니다.
postgresql 역할은 firewalld 서비스에서 포트를 열 수 없습니다. PostgreSQL 서버에 대한 원격 액세스를 허용하려면 방화벽 RHEL 시스템 역할을 사용하는 플레이북에 작업을 추가합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo권한이 있습니다. - IdM 도메인에 관리형 노드를 등록하셨습니다.
프로세스
중요한 변수를 암호화된 파일에 저장합니다.
자격 증명 모음을 생성합니다.
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create명령이 편집기를 열고 <key > : < value> 형식으로 중요한 데이터를 입력합니다.pwd: <password>
pwd: <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 변경 사항을 저장하고 편집기를 종료합니다. Ansible은 자격 증명 모음의 데이터를 암호화합니다.
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml)을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 플레이북에 지정된 설정은 다음과 같습니다.
postgresql_version: <version>설치할 PostgreSQL 버전을 설정합니다. 설정할 수 있는 버전은 관리 노드에서 실행되는 Red Hat Enterprise Linux에서 사용할 수 있는 PostgreSQL 버전에 따라 다릅니다.
postgresql_version변수를 변경하고 플레이북을 다시 실행하여 PostgreSQL을 업그레이드하거나 다운그레이드할 수 없습니다.postgresql_password: <password>postgres데이터베이스 슈퍼유저의 암호를 설정합니다.postgresql_password변수를 변경하고 플레이북을 다시 실행하여 암호를 변경할 수 없습니다.postgresql_certificates: <certificate_role_settings>-
인증서역할의 설정이 포함된 YAML 사전 목록입니다. postgresql_server_conf: <list_of_settings>역할을 설정할
postgresql.conf설정을 정의합니다. 역할은 이러한 설정을/etc/postgresql/system-roles.conf파일에 추가하고/var/lib/pgsql/data/postgresql.conf끝에 이 파일을 포함합니다. 결과적으로postgresql_server_conf변수의 설정은/var/lib/pgsql/data/postgresql.conf의 설정을 재정의합니다.postgresql_server_conf의 다른 설정으로 플레이북을 다시 실행하면/etc/postgresql/system-roles.conf파일을 새 설정으로 덮어씁니다.postgresql_pg_hba_conf: <list_of_authentication_entries>/var/lib/pgsql/data/pg_hba.conf파일에서 클라이언트 인증 항목을 구성합니다. 자세한 내용은 PostgreSQL 설명서를 참조하십시오.이 예제에서는 PostgreSQL에 다음과 같은 연결을 허용합니다.
- 로컬 UNIX 도메인 소켓을 사용하여 암호화되지 않은 연결입니다.
- IPv4 및 IPv6 localhost 주소에 대한 TLS 암호화 연결
-
192.0.2.0/24 서브넷의 TLS 암호화 연결 원격 주소의 액세스는
postgresql_server_conf변수에서listen_addresses설정도 적절하게 구성하는 경우에만 가능합니다.
postgresql_pg_hba_conf의 다른 설정으로 플레이북을 다시 실행하면 새 설정으로/var/lib/pgsql/data/pg_hba.conf파일을 덮어씁니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md파일을 참조하십시오.플레이북 구문을 확인합니다.
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
postgres슈퍼 사용자를 사용하여 PostgreSQL 서버에 연결하고\conninfometa 명령을 실행합니다.psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo'
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에 TLS 프로토콜 버전 및 암호 세부 정보가 표시되면 연결이 작동하고 TLS 암호화가 활성화됩니다.