programing

MariaDB가 소켓을 통해 연결할 수 없음

cafebook 2023. 8. 1. 20:47
반응형

MariaDB가 소켓을 통해 연결할 수 없음

TL;DR

마리아드브를 문제없이 수년간 사용한 후, 갑자기 프로그램이 작동하지 않았습니다."cannot connect via socket"(소켓을 통해 연결할 수 없음) 메시지가 표시되었지만, 실제로 mysqld가 실행되고 있지 않다는 것을 의미했습니다.

저는 최근에 mariadb를 포함하여 Mac에서 로컬 스택을 사용하여 개발하고 있습니다.Mariadb-10.2는 MacPorts를 사용하여 설치되었습니다.이 구성은 매우 편리하며 약 1년 동안 매일 사용됩니다.며칠 전에 갑자기 작동이 멈췄습니다.

mysql 클라이언트에서 연결을 시도할 때 다음과 같은 오류 메시지가 나타납니다.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mariadb-10.3/mysqld.sock' (2)

소켓 파일이 존재하지 않으며 해당 위치에 일반 파일을 만드는 것은 도움이 되지 않습니다.이 파일은 클라이언트 또는 서버가 필요에 따라 생성한 파일이라고 생각하기 때문에 오랫동안 고려할 필요가 없었습니다.하지만 소켓 파일이 없을 때 적절한 위치에 일반 파일로 만들 수 있다는 것을 오래 전에 기억합니다.

대부분의 문제 해결 단계는 "소켓 만들기" 또는 "mysqld가 실행 중인지 확인"입니다.안타깝게도 소켓을 만드는 쉬운 방법은 없는 것 같습니다.그리고 같은 오류 때문에 mysqld가 실행되지 않습니다.또한 디렉토리 구조에 대한 권한을 완화하여 도움이 되는지 알아보려 했지만 도움이 되지 않습니다.

나는 또한 my.cnf의 소켓에 대한 특정 위치를 제공하려고 시도했지만, 그것도 도움이 되지 않습니다.

mysql 서버를 중지하고 시작하는 방법은 다음 두 가지 명령을 사용합니다.

sudo port unload mariadb-10.2-server
sudo port load mariadb-10.2-server

이러한 명령은 오류 없이 제대로 실행되는 것으로 보이지만 서버는 실행되고 있지 않습니다.말씀드렸듯이, 1년 동안 mariadb에 문제가 없었고, 서버를 다시 시작하기 위해 이 두 명령을 사용하는 것에도 문제가 없었습니다.

저는 mariadb의 다양한 버전인 10.2, 10.3, 10.4, 10.6, 그리고 심지어 현재의 10.7을 다시 설치하려고 했습니다.어떤 이유에서인지 10.4 및 10.6이 제대로 설치되지 않습니다.그러나 10.2와 10.3은 모두 설치되지만 소켓에 대해 위에 표시된 오류 메시지가 항상 표시됩니다.

계속:

다음 며칠 동안 저는 이 문제에 대해 계속 고민했고 대부분 해결된 것으로 보입니다.필요한 작업은 다음과 같습니다.

  1. mariadb의 다양한 버전을 설치하려고 했습니다. 모두 다양한 오류가 발생할 수 있습니다.10.2, 10.3, 10.4, 10.5, 10.6 및 10.7을 각각 시도해 본 결과 여러 버전이 반복되었습니다.
    1. 설치가 실패합니다.
    2. 설치가 성공하면 DB를 만들 수 없습니다.
    3. db 생성이 작동하면 db 기능을 보호하는 데 실패했습니다.
    4. Mysql 클라이언트가 실행되지 않습니다. 항상 소켓 오류가 발생합니다.
  2. 해결 방법 필요
    1. mariadb-10.5를 사용했습니다. 이는 오류가 가장 적게 발생한 것으로 보입니다.그리고 놀랍게도, 이번에는 소켓 파일이 예상 위치에 나타나도록 했습니다. 다른 어떤 것도 나타나지 않았습니다.그리고 심지어 10.5도 이전에는 없었습니다.이것은 아마도 mariadb가 시작되지 않는 문제의 핵심일 것이고, 누락된 소켓은 단지 그것의 증상일 뿐입니다.
    2. 루트 사용자는 암호 없이 생성되었으므로 sudo를 사용하여 클라이언트를 실행해야 합니다.이것은 위에서 언급한 또 다른 측면을 해결했습니다.
    3. mysql_secure_installation은 여러 파일에 대한 사용 권한으로 인해 실패하므로 다양한 위치에 문서화된 단계(주로 루트 사용자에 암호 추가, 암호 없는 계정 제거 및 테스트 데이터베이스 제거)를 수동으로 수행하십시오.
    4. mysql 클라이언트를 실행하려면 호스트를 127.0.0.1에서 localhost로 다시 변경해야 합니다.IP 주소는 더 이상 작동하지 않지만 localhost는 작동합니다.이것은 제가 이전에 설치했던 것과 반대입니다.
    5. 필요한 설정으로 특정 버전의 my.cnf를 조정하도록 주의해야 합니다.
    6. 소켓 위치에 대해 php.ini의 설정을 추가해야 합니다.또는 ini_set('mysqli.default_socket'), /opt/local/var/run/mariadb-10.5/mysqld를 사용하거나 사용합니다.양말';

이 상황이 어떻게 발생했는지, 그리고 왜 이전에는 전혀 필요하지 않았던 이 모든 해결책이 필요했는지는 여전히 미스터리입니다.

문제의 근본 원인에 대한 통찰력이 있는 사람이 있기를 바라며 제가 직접 질문에 답했다는 점을 고려하는 대신 질문으로 남겨둡니다.

이전 버전을 제거하고 최신 버전을 설치하는 경우 10.6이 도움이 되었습니다.모든 데이터가 문제 없이 복구되었습니다.

sudo apt remove mariadb-common
sudo apt install mariadb-server-10.6

언급URL : https://stackoverflow.com/questions/71418217/mariadb-cannot-connect-through-socket

반응형