그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.
본문
그누보드5 MySQL이 설치되지 않아 mysql_connect 함수를 사용할 수 없습니다.
첫 설치에 이렇게 나오는데 어떻게 하면 좋을까요?
php8 이고 mysql 설치 완료까지 다 되었고, 계정이랑 비밀번호 db이름 모두 정상입니다.
php-mysql 모듈도 설치했습니다
답변 3
언급된 에러 메세지는 다음 링크에서 나오는것 같습니다.
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);
그누보드 최신 버전인가요?
※ 사용하시려는 MySQL 서버가 TCP/IP 연결을 수용하지 않고 있어서 그렀습니다.
- 그누보드의 경우 소스가 TCP/IP 연결을 사용하게 설계된 듯합니다.
- MySQL 서버가 '소켓 파일 연결'만 수용하고 있다면,
'TCP/IP 연결'을 받아들이게 추가 설정을 하시면 될 것입니다.
※ 이전 설치의 경우라면 ,
PHP 7.0부터 mysql_connect
함수가 제거되었기 때문에 이런 error가 발생합니다.
님의 project가 "PHP 8에서 mysql_connect
를 사용하면 지원되지 않는 함수"를
머금고 있어서, 이로 인해 오류가 발생하므로, mysqli
또는 PDO
같은 대체 함수로
님의 project 소스 코드를 수정하셔야 합니다.
※ 이전 설치가 아니신 경우 ,
그누보드5가 MySQL server와 TCP/IP 연결을 하고자 하는데,
MySQL server가 '소켓 파일 연결'을 요구하는 경우라면,
이런 연결 오류가 발생할 수 있습니다.
♣ 해결 방안 ;
- MySQL Server가 TCP/IP로 연결되도록 설정되어 있는지 확인.
> 가능하시다면, '소켓 파일 경로'를 명시합니다.
- 소켓 파일 연결을 사용할 경우
- PHP(그누 소스)에서 mysqli
또는 PDO
로 소켓 파일을 통한 연결이 되도록 설정.
> 그누보드 소스(/data/dbconfig.php)를 '소켓 파일 연결'로 수정하여
MySQL Server와 '소켓 파일 연결'로 소통하는 것입니다.
= 아래와 같이 설정 파일에서 bind-address
를 통해 TCP/IP 연결을 허용하고,
필요 시 소켓 파일 경로를 설정하면 TCP/IP와 소켓 연결을 모두 사용할 수 있습니다.
♣ DB 연결방식 확인 ;
- MySQL 설정 파일인 my.cnf
에서 소켓 파일 경로를 기본으로 지정하는 지 확인.
. . .
[mysqld]
[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가 TCP/IP 연결을 수용하게 추가하는 것이더군요 !
!-->!-->!-->