Loading...
MySQL 9.5 Reference Manual 9.5의 B.1 Error Message Sources and Elements의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 섹션에서는 error message가 MySQL 내에서 어떻게 생성되는지와 그에 포함된 요소들에 대해 설명합니다.
Error message는 서버 사이드 또는 클라이언트 사이드에서 생성될 수 있습니다:
서버 사이드에서는, error message가 시작 및 종료 과정 중에, SQL 문 실행 중에 발생하는 문제의 결과로, 기타 등등의 상황에서 발생할 수 있습니다.
MySQL 서버는 일부 error message를 에러 로그에 기록합니다. 이는 데이터베이스 관리자에게 중요하거나 DBA가 조치를 취해야 하는 문제를 나타냅니다.
서버는 다른 error message를 클라이언트 프로그램으로 전송합니다. 이는 특정 클라이언트에만 관련된 문제를 나타냅니다. MySQL 클라이언트 라이브러리는 서버로부터 받은 error를 호스트 클라이언트 프로그램에서 사용할 수 있도록 제공합니다.
클라이언트 사이드 error message는 보통 서버와의 통신 문제에 관련하여 MySQL 클라이언트 라이브러리 내부에서 생성됩니다.
에러 로그에 기록되는 서버 사이드 error message의 예:
12018-10-28T13:01:32.735983Z 0 [Note] [MY-010303] [Server] Skipping 2generation of SSL certificates as options related to SSL are specified.
12018-10-02T03:20:39.410387Z 768 [ERROR] [MY-010045] [Server] Event Scheduler: 2[evtuser@localhost][myschema.e_daily] Unknown database 'mydb'
클라이언트 프로그램으로 전송되는 서버 사이드 error message의 예로, mysql 클라이언트가 표시하는 형태는 다음과 같습니다:
1mysql> SELECT * FROM no_such_table; 2ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist
클라이언트 라이브러리 내부에서 발생하는 클라이언트 사이드 error message의 예로, mysql
클라이언트가 표시하는 형태는 다음과 같습니다:
1$> mysql -h no-such-host 2ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (-2)
Error가 클라이언트 라이브러리 내부에서 발생했는지, 아니면 서버로부터 수신되었는지에 상관없이, MySQL 클라이언트 프로그램은 다양한 방식으로 반응할 수 있습니다. 앞에서 본 것처럼, 클라이언트는 사용자가 교정 조치를 취할 수 있도록 error message를 표시할 수 있습니다. 또는 클라이언트는 내부적으로 실패한 작업을 해결하거나 재시도하려 하거나, 다른 동작을 수행할 수 있습니다.
Error가 발생하면, error 정보에는 여러 요소가 포함됩니다: error code, SQLSTATE 값, 메시지 문자열. 이 요소들은 다음과 같은 특성을 가집니다:
각 error number에는 해당하는 심볼릭 값이 있습니다.
예:
서버 error number
1146의 심볼은
ER_NO_SUCH_TABLE입니다.
클라이언트 error number
2005의 심볼은
CR_UNKNOWN_HOST입니다.
Error message에 사용되는 error code 집합은 구분된 여러 범위로 나뉩니다. 자세한 내용은 Error Code Ranges를 참고하십시오.
Error code는 주어진 MySQL 시리즈의 General Availability (GA) 릴리스 간에 안정적입니다. 시리즈가 GA 상태에 도달하기 전에는 새 code가 여전히 개발 중일 수 있으며 변경될 수 있습니다.
SQLSTATE value: 이 값은 다섯 글자의 문자열입니다 (예: '42S02'). SQLSTATE 값은 ANSI SQL과 ODBC에서 가져왔으며, 숫자 error code보다 더 표준화되어 있습니다. SQLSTATE 값의 처음 두 글자는 error 클래스(등급)를 나타냅니다:
Class = '00'은 성공을 나타냅니다.
Class = '01'은 경고를 나타냅니다.
Class = '02'는 “not
found”를 나타냅니다. 이는 커서의 문맥에서 관련이 있으며, 커서가 데이터 세트의 끝에 도달했을 때 어떤 일이 발생하는지를 제어하는 데 사용됩니다. 이 조건은 또한 행을 한 건도 가져오지 못하는
SELECT ... INTO var_list 문에서도 발생합니다.
Class > '02'는 예외를
나타냅니다.
서버 사이드 error의 경우, 모든 MySQL error number가 해당하는 SQLSTATE 값을 갖는 것은 아닙니다. 이러한 경우에는
'HY000' (general error)가 사용됩니다.
클라이언트 사이드 error의 경우, SQLSTATE 값은 항상
'HY000' (general error)이므로, 하나의 클라이언트 error를 다른 것과 구분하는 데 의미가 없습니다.
Error message에 사용되는 error code 집합은 각기 목적이 다른 구분된 범위로 나뉩니다:
이 범위의 error가 서버 사이드에서 발생하면,
서버는 error code를 여섯 자리로 맞추기 위해 앞에 0을 채우고 MY- prefix를 추가하여 에러 로그에 기록합니다.
이 범위의 error가 클라이언트 사이드에서 발생하면, 클라이언트 라이브러리는 zero-padding이나 prefix 없이 해당 error를 클라이언트 프로그램에서 사용할 수 있도록 제공합니다.
1,000에서 1,999: 클라이언트로 전송되는 메시지에 예약된 서버 error code입니다.
2,000에서 2,999: 클라이언트 라이브러리에서 사용하기 위해 예약된 클라이언트 error code입니다.
3,000에서 4,999: 클라이언트로 전송되는 메시지에 예약된 서버 error code입니다.
5,000에서 5,999: 클라이언트로 전송되는 메시지에 대해 X Plugin이 사용하도록 예약된 error code입니다.
10,000에서 49,999: 에러 로그에 기록될 메시지(클라이언트로 전송되지 않음)에 대해 서버가 사용하도록 예약된 서버 error code입니다.
이 범위의 error가 발생하면, 서버는 error code를 여섯 자리로 맞추기 위해 앞에 0을 채우고 MY- prefix를 추가하여 에러 로그에 기록합니다.
서버는 에러 로그에 기록되는 error message를 클라이언트로 전송되는 error message와는 다르게 처리합니다:
B Error Messages and Common Problems
B.2 Error Information Interfaces