백엔드 · 구성요소 · 검증됨

MySQL

클라이언트의 연결 요청을 받아 SQL로 데이터를 저장·조회·수정하는 관계형 데이터베이스 서버로, 로컬은 Unix 소켓, 원격은 TCP/IP 포트를 입력 경로로 사용합니다.

핵심 답변

MySQL은 서버가 클라이언트의 연결 요청을 받아 데이터를 저장·조회·수정하는 관계형 데이터베이스입니다. 클라이언트는 Unix 소켓 파일 또는 TCP/IP 포트로 서버에 접속하며, 연결이 실패하거나 슬롯이 모두 사용되면 접속 오류가 발생합니다.

상세 설명

MySQL은 클라이언트의 연결 요청을 받아 SQL로 데이터를 저장·조회·수정하는 관계형 데이터베이스 서버입니다. 웹 애플리케이션이 데이터를 읽고 쓰려면 먼저 데이터베이스 서버 프로세스(mysqld)에 연결해야 하며, 이 연결 구간에서 문제가 생기면 애플리케이션 화면에는 흔히 서버 오류로 나타납니다.

MySQL은 데이터 저장소이자 별도의 연결 지점입니다. 애플리케이션 오류가 MySQL 연결 구간에서 비롯됐는지 나눠서 확인해야 합니다.

클라이언트가 서버에 연결하는 경로

MySQL 클라이언트는 두 가지 경로로 서버에 접속합니다.

연결 경로사용 조건기본값
Unix 소켓 파일호스트를 지정하지 않거나 localhost로 접속하는 로컬 연결/tmp/mysql.sock
TCP/IP 포트로컬·원격 모두 가능포트 3306

연결이 실패할 때 나타나는 Can't connect to ... MySQL server 오류는 원인 자체가 아니라 관찰된 결과입니다. 공식 문서는 다음과 같은 조건을 확인 대상으로 제시합니다. [Observation]

  • mysqld 프로세스가 실행 중인지 (ps xa | grep mysqld)
  • 클라이언트가 사용하는 소켓 경로 또는 포트가 서버 설정과 일치하는지
  • 방화벽이 해당 포트를 차단하는지
  • 서버가 --skip_networking으로 TCP/IP를 막았거나 bind_address가 특정 주소만 허용하는지

동시 연결 수 한계

MySQL 서버는 동시에 받을 수 있는 연결 수를 max_connections 시스템 변수로 제한합니다. 모든 연결 슬롯이 사용 중일 때 새 클라이언트가 접속을 시도하면 Too many connections 오류가 발생합니다.

실제 허용 한계는 max_connections + 1이며, 추가 한 자리는 CONNECTION_ADMIN(또는 폐기 예정인 SUPER) 권한을 가진 계정에만 예약됩니다. 이 자리는 슬롯이 가득 찬 상황에서도 관리자가 접속해 SHOW PROCESSLIST로 원인을 진단할 수 있게 하기 위한 것입니다. [Observation]

연결 슬롯을 늘리려면 max_connections 값을 상향해야 합니다.

-- 실행 중인 서버의 동시 연결 한계를 상향 (재시작 시 초기화됨)
SET GLOBAL max_connections = 1000;

설정 파일(my.cnf / my.ini)의 [mysqld] 섹션에 지정하면 재시작 이후에도 유지됩니다.

[Hypothesis] 슬롯 부족이 반복된다면 값 상향만으로는 근본 원인을 해결하지 못할 수 있습니다. 연결이 반환되지 않고 누적되는지(커넥션 누수), 연결 풀 설정이 적정한지를 함께 확인하는 것이 안전한 접근입니다. 이 판단은 개별 애플리케이션 관찰이 필요하므로 공식 문서만으로 단정하지 않습니다.

변경 시 주의할 점

  • SET GLOBAL max_connections는 실행 중인 서버에만 적용되며 재시작하면 초기화됩니다. 영구 적용은 설정 파일에 함께 반영해야 되돌아가지 않습니다.
  • max_connections를 무제한에 가깝게 올리면 각 연결이 소비하는 메모리 때문에 서버 자원이 고갈될 수 있으므로, 한 번에 크게 올리기 전에 자원 여유를 확인합니다.
  • CONNECTION_ADMIN 권한은 진단용 예약 슬롯을 쓰기 위한 것이므로 일반 사용자 계정에 부여하지 않습니다.