Error establishing a database connection
WordPress가 사이트를 표시하는 데 필요한 데이터베이스에 연결하지 못했을 때 화면 전체에 표시되는 오류입니다.
클라이언트의 연결 요청을 받아 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 권한은 진단용 예약 슬롯을 쓰기 위한 것이므로 일반 사용자 계정에 부여하지 않습니다.