그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.

QA

그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.

답변 4

본문

그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.

 

첫 설치에 이렇게 나오는데 어떻게 하면 좋을까요?

php8 이고 mysql 설치 완료까지 다 되었고, 계정이랑 비밀번호 db이름 모두 정상입니다.

php-mysql 모듈도 설치했습니다

 

이 질문에 댓글 쓰기 :

답변 4

언급된 에러 메세지는 다음 링크에서 나오는것 같습니다.

https://github.com/gnuboard/gnuboard5/blob/master/lib/common.lib.php#L1687

 

https://github.com/gnuboard/gnuboard5/blob/master/config.php#L221

에서 아래 부분 확인이 필요할것 같습니다.


define('G5_MYSQLI_USE', true);

※ 님의 project 기준 '사용하시려는 MySQL Server가

    localhost의 내에/밖에 있나?'를 먼저 구분하시고 해법을 찾아가세요.

 

  - '소켓 파일' 연결은 일반적으로 localhost(님의 서버)에서만 가능합니다.

    ★ 그누보드는 MySQL Server가 localhost 내에 같이 있어도 

        MySQL Server가 TCP/IP 연결을 수용해야 합니다.

       - 그누보드 설치시 DB 설정 부분에 포트(port)를 명시하는 부분은 없지만

         기본으로 3306으로 setting이 됩니다.

         - 이는 MySQL Server와 TCP/IP를 통한 연결을 시도한다는 의미입니다.

 

  - MySQL Server 외부 서버나 다른 네트워크상의 host라면,

    반드시 TCP/IP를 통한 연결이 필요합니다.

 

  = 위의 내용을 염두하시고 아래의 내용에서 해법을 찾을 수 있으시길 바랍니다.

 

※ 사용하시려는 MySQL 서버가 TCP/IP 연결을 수용하지 않은 에러일 수 있습니다.

  - 그누보드의 경우 소스가 TCP/IP 연결을 사용하게 설계된 듯합니다.

  - MySQL 서버가 '소켓 파일 연결'만 수용하고 있다면,

    'TCP/IP 연결'을 받아들이게 추가 설정을 하시면 될 것입니다.

 

※ 이전 설치의 경우라면 ,

PHP 7.0부터 mysql_connect 함수가 제거되었기 때문에 이런 error가 발생합니다.

님의 project가 "PHP 8에서  mysql_connect를 사용하면 지원되지 않는 함수"를

머금고 있어서, 이로 인해 오류가 발생하므로, mysqli 또는 PDO 같은 대체 함수로

님의 project 소스 코드를 수정하셔야 합니다.

  > 가장 간단한 방법은 PHP 버전을 PHP 7.4 이하로 낮추는 것이지만,

     최신 버전을 사용하고자 한다면 소스 수정이 불가피합니다.

 

※ 이전 설치가 아니신 경우 ,

그누보드5가 MySQL server TCP/IP 연결을 하고자 하는데,

MySQL server가 '소켓 파일 연결'을 요구하는 경우라면,

이런 연결 오류가 발생할 수 있습니다.

 

♣ 해결 방안 ;

  - MySQL Server가 TCP/IP로 연결되도록 설정되어 있는지 확인.

    > 가능하시다면, '소켓 파일 경로'도 명시합니다.

       - 소켓 파일 연결 설정이 되어 있는 경우

  - PHP(그누 소스)에서 mysqli 또는 PDO로 소켓 파일을 통한 연결이 되도록 설정.

    > 그누보드 소스(/data/dbconfig.php)를 '소켓 파일 연결'로 수정하여

       MySQL Server '소켓 파일 연결'로 소통하는 것입니다.

 

  MySQL Server 설정에서 'TCP/IP 연결'을 수용하게 추가하시어 사용하시길 추천합니다.

 

  = 아래와 같이 설정 파일에서 bind-address를 통해 TCP/IP 연결을 허용하고,

필요 시 소켓 파일 경로를 설정하면 TCP/IP와 소켓 연결을 모두 사용할 수 있습니다.

 

♣ DB 연결방식 확인 ;

  - MySQL 설정 파일인 my.cnf에서 소켓 파일 경로를 기본으로 지정하는 지 확인.


. . .
[mysqld]
socket = /var/lib/mysql/mysql.sock  # 소켓 파일 경로 -이 경로는 글쓴이의 예시 임-
bind-address = 127.0.0.1  # TCP/IP 연결 활성화 -DB가 localhost에 있는 경우만 -
. . .
-소켓 파일만 수용한 경우이라면 

"""bind-address = 127.0.0.1""" 이 와 유사한 코드가 없을 것입니다.

 

※ 현재 님의 경우;

  - MySQL 서버가 소켓 파일만을 사용하도록 설정되어 있을 것으로 추정 됩니다.

  - 그누보드의 데이터베이스 연결 코드에 소켓 파일 경로를 명시하여 해결을 시도하세요.

 ★ 그누_최초_설치시, MySQL Server가 TCP/IP 연결을 수용하게 추가하실 것을 추천합니다.

 

/data/dbconfig.php, 그누보드 소스, 소켓 파일 사용

// 스포츠 뉴스가 mysqli_connect에 소켓 파일 경로를 추가하여 연결 함
$host = 'localhost';
$username = 'username';
$password = 'password';
$dbname = 'database_name';
$socket = '/var/lib/mysql/mysql.sock';  // """실제 소켓 파일 경로""" 입력
$connection = mysqli_connect($host, $username, $password, $dbname, null, $socket);
if (!$connection) {
    die("Database connection failed: " . mysqli_connect_error());
}

  - MySQL의 소켓 경로를 확인하려면, phpinfo()를 다음과 같이 사용합니다.


// 이 코드를 브라우저에서 load하여 경로를 확인하시여 적용 하세요.
<?php
phpinfo();
?>
  - mysqli 세션의 """mysqli.default_socket:""", 이 Directive의

  Local Value 값이 소켓 경로입니다.

  - 이 값을 """실제 소켓 파일 경로"""로 입력 ~

 

♠ 결론 ;

  > 님의 Project가 DB server와  "소켓 파일" 연결이냐,  TCP/IP 연결이냐 -의 문제입니다.

 

  ★ TCP/IP 연결은 외부 접근이 필요하거나 여러 서버에서 MySQL을 사용할 경우 

    - DB server에 외부 서버나 다른 네트워크상의 host가 접근해야 할 경우, 필수입니다.

  ★ 소켓 파일 연결은 동일 서버 내에서 데이터베이스에 접근하는 경우

     - 소켓 파일 연결은 localhost(로컬 서버)내의 host에서만 연결이 가능합니다.

 

  > 대부분의 소형 Station 들은 '동일 서버(localhost)'에 DB server가 있기에

      "소켓 파일" 연결을 기본으로 사용하는 것이 속도나 보안에 유리합니다.

 

  > 저의 경험으로 그누보드 샤용에 있어 편한 방법은

     DB Server가 TCP/IP 연결을 수용하게 추가하는 것이더군요 !

 

  > 구버전 이전 설치의 경우라면, project 소스 코드를 수정하셔야 합니다.

php-mysqli 모듈 설치 되어잇는지 확인해보시기 바랍니다. 7.x이상에서는 더이상 mysqli_connect 사용하지않는 함수입니다. 하여 재확인해보시기 바랍니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로