들어가기 전에
macOS와 윈도우의 경우
- 앞서 설치 과정에서 설정 파일의 경로에 대해 살펴봤다.
- GUI로 MySQL 서버를 시작하거나 종료하는 것을 쉽게 제어할 수 있다.
리눅스 운영체제의 경우
- 리눅스 운영체제는 거의 대부분의 서비스 환경에서 사용된다.
- 이 글에서는 리눅스 운영체제에서 설정 파일과 MySQL 서버를 시작 및 종료하는 방법을 설명한다.
설정 파일 및 데이터 파일 준비
MySQL 서버 설치 후 파일들
- 리눅스 서버에서 Yum 인스톨러나 RPM을 이용해 MySQL 서버를 설치하면, 트랜잭션 로그 파일과 시스템 테이블이 준비되지 않았기 때문에 아직 MySQL 서버를 시작할 수 없다.
- MySQL 서버에 필요한 프로그램들과 디렉터리들은 일부 준비된다.
- MySQL 서버가 설치되면
/etc/my.cnf
설정 파일이 준비된다.
- 이 설정 파일에는 MySQL 서버를 실행하는데 꼭 필요한 3~4개의 아주 기본적인 설정만 기록되어 있다.
- 간단한 테스트 용이라면 기본적인 설정으로도 충분히 MySQL 서버를 실행할 수 있다.
- 만약 서비스 용이라면 MySQL 설정 파일을 좀 더 준비해주어야 한다. (다음 글에서 정리)
파일 준비
- 우선 MySQL 서버를 실행하는데 필요한 초기 데이터 파일과 트랜잭션 로그 파일을 생성한다.
--initialize-insecure
옵션을 사용하면 다음 작업을 한다.
- 필요한 초기 데이터 파일과 로그 파일들을 생성
- 비밀번호가 없는 관리자 계정인 root 유저를 생성
--initialize
옵션을 사용하면
- 비밀번호를 가진 관리자 계정을 생성
- 생성된 관리자 계정의 비밀번호를 에러 로그 파일로 기록한다.
- 에러 로그 파일의 기본 경로:
/var/log/mysqld.log
파일
시작과 종료
- 유닉스 계열 운영체제에서 RPM 패키지로 MySQL을 설치했다면
- 자동으로
/usr/lib/systemd/system/mysqld.service
파일이 생성되고
systemctl
유틸리티를 이용해 MySQL을 기동하거나 종료하는 것이 가능하다.
- 윈도우 인스톨러 버전의 MySQL을 설치했다면
- 설치 중 선택사항으로 윈도우의 서비스로 MySQL을 등록할 수 있다.
MySQL 서버 시작
systemd로 시작
- mysql_safe 스크립트를 사용하지 않으므로, MySQL 설정 파일(my.cnf)의 “[mysqld_safe]” 섹션을 무시한다.
- 메모리 할당자(Memory alloctor)를 변경하고자 한다면 “LD_PRELOAD” 환경변수를 이용해서 MySQL 서버를 시작할 수 있다.
systemctl start mysql
mysql_safe 스크립트를 이용해서 시작
- mysql_safe 스크립트는 MySQL 배포판과 함께 제공된다.
- MySQL 설정 파일(my.cnf)의 “[mysqld_safe]” 섹션의 설정들을 참조해서 MySQL 서버를 시작한다.
- “[mysqld_safe]” 섹션에만 설정 가능한 “malloc-lib” 같은 시스템 설정을 적용하고자 한다면 mysql_safe 스크립트를 이용해 MySQL 서버를 시작해야 한다.
시작된 MySQL 서버의 상태
systemctl status mysql
MySQL 서버 종료
systemd로 종료
- 시작과 동일하게
systemctl
을 이용한다.
systemctl stop mysqld
원격으로 MySQL 서버 셧다운
- 원격으로 MySQL 서버를 셧다운하려면
SHUTDOWN
권한(privileges)을 가지고 있어야 한다.
- MySQL 서버에 로그인한 상태에서
SHUTDOWN
명령어를 실행한다.
mysql> SHUTDOWN;
Clean shutdown
- MySQL 서버에서는 실제 트랜잭션이 정상적으로 커밋돼도 데이터 파일에 변경된 내용이 기록되지 않고 로그 파일(리두 로그)에만 기록돼 있을 수 있다.
- 심지어 MySQL 서버가 종료되고 다시 시작된 이후에도 계속 이 상태로 남아있을 수도 있다.
- 사용량이 많은 MySQL 서버에서는 이런 현상이 더 일반적이다. (비정상적인 상황은 아니다)
- MySQL 서버가 종료될 때 모든 커밋된 내용을 데이터 파일이 기록하고 종료하는 것을 클린 셧다운이라고 표현한다.
- 모든 커밋된 데이터를 데이터 파일에 적용하고 종료하는 것
- 클린 셧다운으로 종료되면 다시 MySQL 서버가 기동할 때 별도의 트랜잭션 복구 과정을 진행하지 않기 때문에 빠르게 시작할 수 있다.
- 클린 셧다운을 하려면 다음과 같이 옵션을 변경 후 종료한다.
mysql> SET GLOBAL innodb_fast_shutdown=0;
linux> systemctl stop mysqld.service
mysql> SET GLOBAL innodb_fast_shutdown=0;
mysql> SHUTDOWN;
서버 연결 테스트
서버 접속 방법
- MySQL 서버 프로그램(mysqld)과 함께 설치된 MySQL 기본 클라이언트 프로그램인 mysql을 실행하면 된다.
- 유닉스나 리눅스에서 mysql 클라이언트 프로그램을 실행하는 경우에는 mysql 프로그램의 경로를 PATH 환경변수에 등록해 둔다.
- 여러 가지 형태의 명령행 인자를 넣어 접속을 시도할 수 있다.
MySQL 소켓 파일을 이용해 접속
--host=localhost
옵션을 사용하면
- MySQL 클라이언트 프로그램은 항상 소켓 파일을 통해 MySQL 서버에 접속한다.
- 이는 ‘Unix domain socket’을 이용하는 방식으로, 유닉스의 프로세스 간 통신(IPC; Inter Process Communication)의 일종이다.
- TCP/IP를 통한 통신이 아니다.
mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
TCP/IP를 통해 127.0.0.1(localhost)로 접속
- 포트를 명시하는 것이 일반적이다.
- 원격 호스트에 있는 MySQL 서버에 접속할 때는 반드시 이 방법을 사용해야 한다.
--host=127.0.0.1
옵션을 사용하면
- 자기 서버를 가리키는 루프백(loopback) IP이기는 하지만 TCP/IP 통신 방식을 사용하는 것이다.
mysql -uroot -p --host=127.0.0.1 --port=3306
별도로 호스트 주소와 포트를 명시하지 않고 접속
- 기본값으로 호스트는 localhost가 되며 소켓 파일을 사용하게 된다.
- 소켓 파일의 위치는 MySQL 서버의 설정 파일에서 읽어서 사용한다.
- MySQL 서버가 기동될 때 만들어지는 유닉스 소켓 파일은 MySQL 서버를 재시작하지 않으면 다시 만들어 낼 수 없기 때문에 삭제하지 않도록 주의해야 한다.
mysql -uroot -p
관리자 계정 로그인
- 처음 설치된 MySQL 서버에는
root
라는 관리자 계정이 준비되어 있다.
--initialize-insecure
옵션으로 MySQL 서버가 초기화되었다면 비밀번호 없이 로그인할 수 있다.
--initialize
옵션으로 MySQL 서버가 초기화되었다면 MySQL 서버의 로그 파일에 기록돼 있는 비밀번호를 이용해서 로그인한다.
MySQL 프롬프트
- MySQL 서버에 접속되면 MySQL 프롬프트가 표시된다.
- MySQL 서버에 로그인되면
SHOW DATABASES
명령을 실행해 기본 생성된 데이터베이스의 목록을 확인할 수 있다.
mysql> SHOW DATABASES;
원격 서버에서 접속 가능 여부 확인
- MySQL 서버를 직접 로그인하지 않고, 원격 서버에서 MySQL 서버 접속 가능 여부만 확인해야 하는 경우이다.
- MySQL 클라이언트를 설치하는 작업이 번거로울 수 있고
- 때로 보안상 이유로 MySQL 클라이언트 프로그램을 설치하지 못할 수도 있다.
- 네트워크 연결이 정상적인지 확인하는 경우에도 이러한 연결 테스트가 필요할 수 있다.
- 이 경우에는 간단히 Telnet 명령이나 nc(Netcat) 명령을 이용해 원격지 MySQL 서버가 응답 가능한 상태인지 확인해볼 수 있다.
Telnet 프로그램으로 확인
- MySQL 서버로 접속해서 MySQL 서버가 보내준 메시지를 화면에 출력한다.
- 서버가 보내준 메시지를 출력한다면 네트워크 수준의 연결은 정상적이다.
telnet 10.2.40.61 3306
Netcat 프로그램으로 확인
- Telnet과 동일하게 네트워크 수준의 연결이 정상적이면 MySQL 서버가 보내준 메시지를 화면에 출력한다.
nc 10.2.40.61 3306
MySQL 서버에 접속 불가능 시
- 만약 서버의 버전 정보를 정상적으로 출력하는 상태에서도 응용 프로그램이 MySQL 서버에 접속하지 못한다면 다음 문제일 가능성이 높다.
- MySQL 서버의 계정 비밀번호가 일치하지 않거나
- MySQL 서버 계정의 host 부분이 허용되지 않은 경우
Reference
참고 서적
📔 Real MySQL 8.0