MySQL, CMD, Git Bash로 각각 데이터베이스에 접근하는 실습을 했다. 그 중 Git Bash를 이용하면서 저지른 삽질과 해결과정을 공유하고자 한다. ChatGPT는 무적이고 신이다.

$ mysql -u root -p
mysql( mysql을 실행시켜라 ) -u root ( 관리자 권한으로 ) -p ( 비밀번호를 입력하게 )
우선 CMD 환경에서 MySQL에 접속 하듯이 입력했다. 아래는 그 결과창

MySQL은 정상적으로 실행되지 않고 프롬프트만 계속 깜빡이고 있다.
처절한 탈출시도의 흔적을 뒤로 하고 Ctrl+C 로 현재 상태를 탈출하고 원인을 생각해 본다.

$ winpty mysql -u root -p
해결책은 간단했다. Git Bash 환경에서 MySQL을 실행 시키려면 winpty 키워드를 이용해야 한다고 한다.
Git Bash는 Windows에서 Unix 기반 셸 환경을 제공하여 Git 명령어와 Unix/Linux 명령어를 실행할 수 있게 한다.
하지만 MySQL이 Git Bash와 같은 Unix 기반 환경이어도 클라이언트를 실행하면 문제가 발생할 수 있다. 이는 Git Bash가 Windows 콘솔과는 다른 PTY(Pseudo Terminal, 슈도터미널 · 피-티-와이 혹은 페-티-와이 등등) 를 사용하기 때문이다.
때문에 운영체제의 환경에 따라 사용하는 PTY가 달라지며 windows 환경의 PTY와 Unix-like 환경의 PTY는 호환성 문제가 있어 명령어가 제대로 작동하지 않는 것이다.

(사진 : TVN, 신서유기 중)
Git for Windows 패키지에 있는 winpty 프로그램은 Windows와 Unix-like 환경의 중개자 역할을 하여 두 환경간의 통신을 연결시켜준다. 이를 통해 Git Bash에서 MySQL 클라이언트를 실행하면 정상적으로 입력과 출력을 처리할 수 있으며, Ctrl+C로 MySQL 클라이언트를 종료해도 Git Bash 터미널이 비정상적으로 종료되지 않게된다.
자 이제 설명을 맞췄으니 엔터키를 누르면

winpty: error: cannot start 'mysql': Not found in PATH
흠, 이번엔 컴퓨터가 mysql을 실행시키지 못했다. 설치된 경로를 못찾은 모양인데 MySQL이 설치된 경로로 이동해서 입력만하면 되는거 아니었나?
절대 경로(Absolute Path)는 파일이나 디렉토리가 시스템의 루트 디렉토리(root directory, 경로의 초기점. 일반적으로 C 드라이브) 부터 시작하여 목적지까지의 경로를 의미한다. Windows 폴더 주소창에 씌여있는 부분, 그것이 절대 경로다.

(그, 그곳은..!)
프로그램을 절대 경로로 실행하면 해당 프로그램의 실행 파일이 어디에 있든지 상관없이 항상 동일한 경로로 실행할 수 있다. 파일이 있는 디렉토리의 경로를 명확히 지정할 수 있으므로 프로그램을 절대 경로로 실행하는 것이 더 안정적이고, 예기치 않은 문제를 방지할 수 있게 된다.
이전의 작성한 코드를 다시 살펴보자.
"winpty mysql -u root -p"
winpty 키워드를 통해 mysql을 조건에 맞게 호출을 하려 했지만 mysql의 정확한 위치를 파악할 수 없어 호출이 되지 않았음을 알 수 있다. Git Bash에 내장된 키워드가 아닌 외부 프로그램을 실행해야 하기 때문에, MySQL의 실행위치를 절대 경로로 지정해줌으로써 문제를 해결할 수 있다

람쥐썬더
또 에러가 뜬다. 망할거.
ERROR 2003 (HY000) : Can't connect to MySQL server on 'localhost:3306' (10061)
MySQL 서버에 연결을 할 수 없었고 원인이 된 부분을 찾기 위해 다시 검색을 했다. 기똥차게도 MySQL 공식 홈페이지에서 해당 에러코드에 대한 문서를 제공하고 있었다.
(https://dev.mysql.com/doc/refman/8.0/en/can-not-connect-to-server.html)
해당 글에 의하면 위의 에러코드는
ERROR 2003 : MySQL 서버에 연결할 수 없습니다.
(HY000) : 이것은 일반적인 SQL 오류이며
(10061) : 클라이언트에서 MySQL 서버로 연결을 시도할 때, 로컬호스트의 MySQL 서버 포트에 연결이 되지 않습니다
~는 내용이라고 한다.
나의 사례면서 가장 일반적인 원인은 강제종료나 코끼리가 노트북을 밟음으로 인해 MySQL 서버가 실행 중이지 않거나 잘못 구성되어 있을 때다. 이 경우, 작업관리자를 열어 서비스 탭의 MySQL80 을 '실행 중' 상태로 바꾸면 간단하게 문제를 해결할 수 있다.

이외에 방화벽, 포트 및 사용자 계정, 혹은 단순한 암호입력 실수와 같은 요소들 또한 연결 실패의 원인이 될 수 있다.

경로 중간에 공백이 있을 때 문제가 생길 수 있으므로 큰 따옴표로 가두고 비밀번호를 입력하면

(보이는가, Git Bash의 저력!)
드디어 Git Bash 환경에서 MySQL 환경에 접속을 성공적으로 해냈다!

명령어를 사용해 미리 입력한 실습용 테이블을 호출하면서 잘 실행이 되는 것을 확인해 본다.
헷깔리는 단어 정리
터미널 : 사용자가 컴퓨터와 상호작용하기 위한 인터페이스. 일반적으로 키보드를 사용하여 명령어를 입력하고, 컴퓨터의 출력을 텍스트로 표시한다.
PTY : 실제 터미널처럼 동작하는 가상 터미널이다. 일반적으로 터미널 프로그램과 같은 애플리케이션에서 사용되며, 입력한 명령을 실행하고 출력 결과를 화면에 표시하는 등의 역할을 한다.