Programming/기본 (Baisc)

PHP에서 다른 포트의 데이터베이스 연결 및 Access Denied 로그 확인 방법

YH.Dream 2025. 2. 18. 05:50

1. 개요

웹 애플리케이션을 개발하다 보면, 기본 MySQL 포트(3306)가 아닌 다른 포트에서 데이터베이스를 운영해야 하는 경우가 발생할 수 있습니다. PHP의 mysqli_connect()를 활용하여 특정 포트에 연결하는 방법과, 연결 실패 시 발생하는 Access Denied 오류를 해결하는 로그 확인 방법을 알아보겠습니다.

2. PHP에서 특정 포트로 MySQL 연결하기

PHP에서 MySQL 데이터베이스에 연결할 때, 기본 포트(3306)가 아닌 다른 포트를 사용하려면 mysqli_connect() 함수의 다섯 번째 매개변수로 포트 번호를 지정해야 합니다.

예제 코드

if ($this->connection == false) {
    try {
        // 예외 모드 활성화
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

        // 데이터베이스 연결 (포트: 13306)
        $this->connection = mysqli_connect($host, $user, $passwd, $database, 13306);

        if (!$this->connection) {
            throw new Exception("Connection failed: " . mysqli_connect_error());
        }
    } catch (mysqli_sql_exception $e) {
        $this->halt("Database connection error: " . $e->getMessage());
    } catch (Exception $e) {
        $this->halt("General error: " . $e->getMessage());
    }
}

설명

  • mysqli_connect()의 다섯 번째 인자로 포트 번호(13306)를 전달합니다.
  • 예외 모드를 활성화하여 mysqli_sql_exception을 잡을 수 있도록 설정합니다.
  • 연결 실패 시 Exception을 발생시키고, 적절한 메시지를 출력합니다.

3. Access Denied 오류 발생 시 로그 확인 방법

MySQL에 연결할 때 Access Denied for user 'user'@'host' 오류가 발생하는 경우, 원인을 찾기 위해 로그를 확인해야 합니다.

1) MySQL 서버의 인증 정보 확인

먼저 MySQL에 접속하여 mysql.user 테이블을 확인합니다.

SELECT user, host FROM mysql.user WHERE user = 'user';

해당 계정이 존재하는지, 허용된 호스트(host 값)가 맞는지 확인합니다.

2) MySQL 에러 로그 확인

MySQL의 로그 파일을 확인하여 보다 정확한 오류 원인을 찾을 수 있습니다.

sudo cat /var/log/mysql/error.log | grep "Access denied"

또는 MySQL 콘솔에서 다음 명령어로 최근 에러 로그를 확인할 수 있습니다.

SHOW WARNINGS;
SHOW ERRORS;

3) 비밀번호 변경 및 권한 재설정

비밀번호가 올바른지 확인하고, 필요한 경우 새로 설정합니다.

ALTER USER 'user'@'%' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

또한 해당 계정에 필요한 권한이 부여되어 있는지 확인해야 합니다.

GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'%';
FLUSH PRIVILEGES;

4. 결론

  • PHP에서 mysqli_connect()를 사용할 때 포트 번호를 명시적으로 지정하여 다른 포트에 연결할 수 있습니다.
  • Access Denied 오류가 발생할 경우, MySQL의 mysql.user 테이블, 에러 로그, 사용자 권한 등을 점검해야 합니다.
  • 적절한 예외 처리를 통해 오류 발생 시 유용한 정보를 출력하도록 구현하는 것이 중요합니다.