그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.
본문
그누보드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();
?>
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 사용하지않는 함수입니다. 하여 재확인해보시기 바랍니다.