← 전체 글로 돌아가기

DB

운영 DB에서 파일을 못 열 때

데이터베이스 파일 권한, 마운트 포인트, 디스크 할당량을 확인하는 방법입니다.

운영 데이터베이스가 갑자기 "permission denied" 에러를 던진다. 로컬에서는 잘 되는데, 왜 서버에서만 문제가 나는가.

먼저 데이터베이스 프로세스 확인

데이터베이스가 정말 실행 중인지, 어떤 사용자로 실행되고 있는지 확인한다.

ps aux | grep postgres
# 또는
ps aux | grep mysql

출력 예:

postgres  5432  0.5  2.0 12345 67890 ?  Ss  10:00   0:05 /usr/lib/postgresql/13/bin/postgres ...

여기서 보이는 postgres 사용자가 데이터베이스 파일에 접근할 수 있어야 한다.

데이터 디렉토리의 권한 확인

PostgreSQL 데이터 디렉토리는 보통 /var/lib/postgresql/이다.

ls -ld /var/lib/postgresql/
# 또는 MySQL
ls -ld /var/lib/mysql/

출력:

drwx------  19 postgres postgres  4096 Jun 30 10:00 /var/lib/postgresql/

중요한 것은:

  • 소유자: postgres 또는 mysql
  • 권한: 700 (소유자만 읽기/쓰기/실행)

만약 권한이 다르다면:

sudo chown -R postgres:postgres /var/lib/postgresql/
sudo chmod 700 /var/lib/postgresql/

마운트 포인트 확인

데이터베이스 파일이 별도의 마운트 포인트에 있을 수 있다. 마운트 옵션이 문제일 수 있다.

df -h
mount | grep postgresql

만약 마운트 포인트가 noexec 또는 nosuid 옵션으로 마운트되어 있으면, 데이터베이스가 제대로 동작 안 할 수 있다.

# 다시 마운트 (읽기 전용이 아닌지 확인)
sudo mount -o remount,exec /var/lib/postgresql

디스크 할당량 (Quota) 확인

일부 서버는 사용자별 디스크 할당량을 제한한다. postgres 사용자의 할당량을 확인한다.

quota -u postgres

Output:

Disk quotas for user postgres (uid 109):
Filesystem  blocks  quota  limit   grace
/dev/sda1    5000  10000  10000   none

만약 할당량이 다 찼다면 (limit 도달), 데이터베이스는 새 데이터를 쓸 수 없다.

디스크 여유 공간 확인

전체 파티션의 여유 공간도 확인한다.

df -h /var/lib/postgresql/

90% 이상 사용 중이면 위험하다. 즉시 불필요한 파일을 정리하거나 디스크를 확장해야 한다.

SELinux 또는 AppArmor 확인

일부 리눅스 시스템은 보안 프레임워크가 파일 접근을 제한한다.

getenforce  # SELinux 상태
aa-status   # AppArmor 상태

SELinux가 enforcing 상태면, postgresql에 접근 권한이 없을 수 있다.

데이터베이스 로그 확인

데이터베이스 자체의 로그에서 더 자세한 에러를 볼 수 있다.

# PostgreSQL
sudo tail -50 /var/log/postgresql/postgresql-*.log

# MySQL
sudo tail -50 /var/log/mysql/error.log

어떤 파일에 접근할 수 없는지, 어떤 권한이 필요한지 명확하게 나타난다.

확인 순서

  1. 데이터베이스 프로세스가 실행 중인가: ps aux
  2. 데이터 디렉토리의 소유자와 권한: ls -ld
  3. 마운트 포인트의 옵션: mount
  4. 디스크 여유 공간: df -h
  5. 사용자 할당량: quota -u postgres
  6. 보안 프레임워크 활성화: getenforce, aa-status
  7. 데이터베이스 로그: error.log 또는 syslog

대부분의 "permission denied" 에러는 권한, 디스크 할당량, 마운트 옵션 중 하나이다. 순서대로 확인하면 원인을 찾을 수 있다.