우리는 로컬 환경의 MySQL 을 사용할 때, 아래의 명령어들을 사용합니다.
# localhost
mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
# 127.0.0.1
mysql -uroot -p --host=127.0.0.1 --port=3306
# 내부적으로 localhost 방식과 똑같이 작동합니다.
mysql -uroot -p
127.0.0.1 을 사용할 때와 localhost 를 사용할 때, 큰 차이가 없을 것이다 라고 생각하며 사용해왔었습니다. 이번에 책 Real MySQL 8.0 으로 공부를 하면서 이 둘에 차이가 있다는 것을 알게되어 이와 관련해서 글을 작성합니다.
localhost
mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
이 방법은 소켓 파일을 통해 MySQL 서버에 접속하는 방식입니다. 이는 Unix Domain Socket 을 이용하는 방식으로, TCP/IP 를 통한 통신이 아니라 유닉스의 프로세스 간 통신(IPC) 의 일종입니다.
mysql -uroot -p
별도로 호스트 주소와 포트를 명시하지 않은 방식입니다. 이렇게 명시하지 않은 경우 기본값으로 호스트는 localhost 가 되며, 소켓 파일은 MySQL 서버의 설정 파일에 명시되어 있는 소켓 파일의 위치를 가져와 사용합니다. 결국 위에서 호스트와 소켓 파일의 위치를 명시하여 사용하는 것과 같은 방식으로 작동합니다.
127.0.0.1
mysql -uroot -p --host=127.0.0.1 --port=3306
호스트 주소로 127.0.0.1 을 사용하는 방식입니다. 127.0.0.1 은 자기 서버를 가리키는 루프백(Loopback) IP 이기에, TCP/IP 통신 방식을 사용합니다. TCP/IP 통신 방식을 사용한다고 해서 외부 인터넷을 사용하여 나갔다가 다시 돌아오는 것을 의미하는 것은 아닙니다. 루프백 주소를 사용할 경우, 외부 인터넷으로 나가지 않고 로컬 머신 내에서 처리됩니다.