목차
MySQL 서버 시작과 종료
리눅스 운영체제를 기반으로 MySQL 설정 파일준비 및 서버 시작, 종료 방법에 대해 알아본다.
설정 파일 및 데이터 파일 준비
•
MySQL 서버를 설치한 직후에는 트랜잭션 로그 파일과 시스템 테이블이 준비되지 않아서 아직 서버를 시작할 수 없다.
•
/etc/my.cnf 설정 파일이 서버 설치시 준비되는데 서버 실행에 꼭 필요한 기본 설정만 작성되어 있다.
◦
개발용도가 아닌 서비스용일 경우 서버 설정 내용을 숙지해 설정파일(my.cnf)를 준비하도록 해야 한다.
•
RPM 패키지가 준비해 둔 MySQL 설정 파일을 이용해 초기 데이터 파일과 트랜잭션 로그파일을 생성한다.
linux> mysqld --defaults-file=/etc/my.cnf --initialize-insecure
Bash
복사
→ --initialize-insecure 옵션은 다음과 같이 필요한 초기 작업을 수행한다.
1.
초기 데이터 파일 생성
2.
로그 파일 생성
3.
비밀번호가 없는 관리자 계정(root) 유저 생성
만약 비밀번호가 있는 관리자 계정을 생성하려 하면—-initialize 옵션을 사용하면 된다.
이 경우 관리자 비밀번호는 에러 로그 파일(/var/log/mysqld.log)의 마지막에 저장된다.
시작과 종료
유닉스 계열 운영체제에서 RPM 패키지로 MySQL을 설치했다면 /usr/lib/systemd/system/mysqld.service 파일이 생성되고, systemctl 유틸리티를 이용해 MySQL을 시작 및 종료할 수 있다.
linux> systemctl start mysqld
linux> systemctl stop mysqld
Bash
복사
원격으로 MySQL 서버를 종료시키고 싶다면 서버에 로그인 한 뒤 다음 명령어(SHUTDOWN)을 실행하면 된다.
(해당 접속 계정에 해당 권한(Privileges)가 있어야 한다.
mysql> SHUTDOWN;
Bash
복사
트랜잭션이 정상적으로 커밋되도 저장되지 않는 상황
MySQL 서버에서는 트랜잭션이 정상적으로 커밋돼도 이런 내용이 데이터 파일에 기록되지 않고, 로그 파일(리두로그)에만 기록되어 있을 수 있다. MySQL 재시작된 이후에도 그대로일 수 있다.
사용량이 많은 서버일 경우 이런 상황이 일반적이고 비정상적인 경우가 아닌데, 만약 서버가 종료될 때 커밋된 내용을 모두 파일에 기록하고 종료하게할 수 있는데, 이는 서버의 옵션을 변경후 서버를 종료하면 된다.
mysql> SET GLOBAL innodb_fast_shutdown=0;
linux> systemctl stop mysqld.service
Bash
복사
Clean shutdown
이와 같이 커밋된 데이터를 모두 데이터 파일에 적용 후 종료하는 것을 클린 셧다운(Clean shutdown)이라 표현한다. 이렇게 클린 셧다운으로 종료되면 서버를 기동할 때 별도의 트랜잭션 복구 과정을 진행하지 않기에 빠르게 시작할 수 있다.
MySQL 서버의 시작 시간이 오래걸린다면?
서버가 새로 시작될 때는 디스크에서 데이터파일을 모두 읽어 적재해야 하기에 시간이 오래 걸릴 수 있다.
아니면, 서버의 시작 시간이 오래 걸린다면 서버가 버퍼 풀의 내용을 복구하고 있는지 확인해보는 것이 좋다.
자세한 내용은 4장의 버퍼 풀 상태 백업 및 복구를 참고하자.
서버 연결 테스트
MySQL 서버에 접속하는 명령어는 다음과 같다.
1 - linux> mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
2 - linux> mysql -uroot -p --host=127.0.0.1 --port=3306
3 - linux> mysql -uroot -p
Bash
복사
1.
MySQL 소켓 파일을 이용하는 방식
2.
TCP/IP를 통해 호스트로 접속하는 방식으로 포트를 명시하는게 일반적이다.
3.
별도로 호스트 주소/포트를 명시하지 않는다. 기본 관례에 따라 호스트는 localhost을 바라보며 MySQL 서버의 설정파일에서 소켓파일의 위치를 가져와 해당 소켓 파일을 읽는다.
127.0.0.1 과 localhost는 동일한거 아닌가?
•
—host=localhost
: MySQL 클라이언트에선 항상 소켓 파일을 통해 서버에 접속하는데, 이는 Unix domian socket을 이용하는 방식으로 프로세스간 통신(IPC: Inter Process Communication)을 사용한다.
•
—host=127.0.0.1
: 자기 서버를 가리키는 루프백(loopback) IP 이기는 하지만 TCP/IP 통신 방식을 사용한다.
즉, 원격 호스트에 있는 서버에 접속할 때는 반드시 두 번째 방식인 —host=127.0.0.1 를 사용해야 한다.
서버 접속 가능 여부 테스트
사용하기 위해 바로 접속하는 것이 아닌 접속이 가능한지 그 여부만 확인해야 하는 경우가 있다.
이 경우 간단하게 telnet 이나 nc(Netcat) 명령을 이용할 수 있다.
linux> telnet 10.2.40.61 3306
Trying 10.2.40.61
Connected to prod1-db-mysqltest.bhero.io.
Escape character is '%]'
...
xxx-log
Bash
복사
telnet으로 접속 연결 확인해보기
linux> nc 10.2.40.61 3306
...
xxx-log?...
Bash
복사
nc로 접속 연결 확인해보기
MySQL 서버 업그레이드
업그레이드 방법은 두 가지 정도를 생각할 수 있다.
1. In-Place Upgrade
: 서버의 데이터 파일을 그대로 두고 업그레이드
제약 사항이 많지만 속도가 빠르다.
2. Logical Upgrade
: 유틸리티 도구(ex: mysqldump) 등을 이용해 서버 데이터를 SQL문이나 텍스트, 엑셀(csv)등으로 덤프한 뒤 새로 업그레이드된 버전의 서버에 적재하는 방식.
제약사항이 별로 없지만, 시간이 매우 오래 걸릴 수 있다.
인플레이스(In-Place) 업그레이드 제약 사항
•
메이저 버전 간의 업그레이드는 데이터 파일의 변경이 필요하기에 직전 버전에서만 업그레이드가 허용된다.
메이저 버전 업그레이드는 데이터 파일의 패치가 필요한데, 이전 메이저 버전의 데이터 파일과 로그 포맷만 인식하도록 구현되기 때문이다.
◦
MySQL5.5 → MySQL5.6은 허용
◦
MySQL5.5 → MySQL5.7 비허용(한 단계 건너뜀)
◦
MySQL5.5→ MySQL8.0 비허용(두 단계 건너뜀)
•
메이저 버전 업그레이드가 특정 마이너 버전에서만 가능한 경우도 있다.
◦
MySQL 5.7.8버전처럼 GA 버전이 아닌 마이너 버전에서는 GA 버전으로 업그레이드 할 수 없다.
(GA(General Availability): 서버의 안정성이 확인된 버전)
◦
그 밖에도 이전 메이저 버전에서도 가증 최근의 마이너 버전에서만 업그레이드가 지원될 수 있으니 매뉴얼을 잘 읽어본 뒤 진행할 것을 권장한다.
서버 설정
단 하나의 설정 파일
: MySQL 서버는 일반적으로 단 하나의 설정 파일을 사용한다.
유닉스 계열(ex: Linux)에서는 my.cnf라는 이름으로, 윈도우 계열에서는 my.ini라는 이름을 사용한다. MySQL 서버 시작될 때만 이 설정 파일을 참조하는데, 이 설정파일의 위치(경로)는 고정되있지 않고 지정된 여러 디렉토리를 순차적으로 탐색하며 최초로 발견된 설정 파일을 사용한다.
주의사항
MySQL 서버를 실행하는 mysqld라는 프로그램을 사용할 때 이미 서버가 사용중인데 또 다시 mysqld 프로그램을 시작하지 않도록 해야 한다.
참고: 설정 파일(my.cnf 또는 my.ini)을 찾는 디렉토리
다음과 같은 우선순위로 설정 파일을 읽는다.
1.
/etc/my.cnf
2.
/etc/mysql/my.cnf
3.
/usr/etc/my.cnf
4.
~/.my.cnf
이렇게 설정 파일의 위치가 여러곳일 수 있는데 MySQL 서버용 설정 파일은 주로 1~2번을 사용한다.
그럼 만약 하나의 장비에 MySQL 서버가 둘 이사이라면 어떻게 될까? 이 경우 별도 디렉토리에 설정 파일을 준비한 뒤 MySQL 시작 스크립트의 내용을 변경하는 방식을 이용해 충돌을 해결해줘야 한다.
(물론, 이렇게 하나의 장비에 하나 이상의 서버를 실행하는 형태는 흔치 않다.)
설정 파일 구성하기
my.cnf(or my.ini) 설정 파일에는 여러 설정 그룹을 저장할 수 있고, 실행 프로그램 이름을 그룹명으로 사용한다.
아래는 세 개의 설정 그룹이 있고 각각의 프로그램(mysqld_safe, mysqld, mysql)은 각각 맞는 섹션을 참조한다.
[mysqld_safe]
bla bla...
[mysqld]
bla bla...
[mysql]
bla bla...
[mysqldump]
bla bla bla...
Plain Text
복사
my.cnf(or my.ini)
이 설정 파일이 이렇게 여러 그룹이 있는 이유는 MySQL 서버뿐 아니라 클라이언트, 백업(mysqldump)등이 실행 될 때도 이 설정 파일을 공용으로 사용하기 때문이다.
MySQL 시스템 변수의 특징
서버에서 설정파일을 읽어 이 값을 저장해두는데 이렇게 저장된 값을 시스템 변수(System Variables)라 한다.