저는 새로운 서버 하드웨어로 마이그레이션할 예정입니다. 이는 새로운 Linux 배포판(Debian Buster)의 기능을 배우는 것을 의미하기도 합니다.
콘솔에서 실행할 때 실행되지만 MySQL에 연결하지 못하는 Perl CGI 스크립트가 있습니다.
AH01215: DBI 연결('my_db','my_db_user',...) 실패: '/tmp/mysql.sock' 소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다.
동일한 하드웨어에서 실행되고 있다는 점을 고려하면 동일한 Perl 설치 등이 될 것입니다. 왜 작동하지 않는지 모르겠습니다. Centos에서는 SELinux가 방해가 될 수 있다는 것을 알고 있지만 데비안에 기본적으로 이 기능이 있다고는 생각하지 않습니다. 하지만 하위 프로세스가 연결을 설정하도록 허용하려면 비슷한 작업을 수행해야 합니까?
mysqladmin은 이것이 올바른 장소라고 제안했습니다(예: 클릭하지 않았습니다).이 문제):
# mysqladmin 버전 -p 암호를 입력: i686 기반 Linux용 mysqladmin Ver 8.0.17(소스 코드 배포) Copyright (c) 2000, 2019, Oracle 및/또는 그 계열사. 판권 소유. Oracle은 Oracle Corporation 및/또는 그 회사의 등록 상표입니다. 자회사. 다른 이름은 해당 회사의 상표일 수 있습니다. 소유자. 서버 버전 8.0.17 프로토콜 버전 10 UNIX 소켓을 통해 localhost에 연결 UNIX 소켓 /tmp/mysql.sock 가동 시간: 3일 26분 34초 스레드: 2 문제: 74254 느린 쿼리: 0 열기: 1042 테이블 새로 고침: 3 열린 테이블: 962 초당 쿼리 평균: 0.284
그리고 소켓은 분명히 존재합니다(콘솔에서 실행하면 작동하기 때문입니다).
$ ls -lF /tmp/mysql.sock srwxrwxrwx 1 mysql mysql 0 9월 6일, 22:33 /tmp/mysql.sock=
답변1
Debian 9 및 10의 Apache2는 systemd에서 시작됩니다. 그것은 가지고있다
PrivateTmp=true
그 정의에서. 따라서 서버에서 시작된 프로세스는 일반 /tmp 및 /var/tmp 디렉토리에 액세스할 수 없습니다. 대신, 그들은 자신의 디렉토리를 가지고 있습니다.
소켓을 /tmp 밖으로 이동하거나 apache2를 시작할 수 있습니다.
PrivateTmp=false