ubuntu 20.04에 mysql5.7 비대화형 설치하기

1. 개요

ubuntu20.04의 기본 APT레파지토리는 mysql8을 내장하고 있다.

따라서 mysql5.7을 사용하고자 할 때는 별도로 패키지를 추가해주어야 한다.

이 때 사용하는 mysql-apt-config명령은 기본적으로 대화형으로 동작하는데, 비대화형으로 동작해야만 하는 케이스(ex. dockerfile)를 위해 mysql5.7 설치방법과 함께 해당 내용을 정리한다.


2. mysql5.7 설치

2.1. debian frontend

먼저 데비안의 부팅 파라미터 중 하나인 DEBIAN FRONTEND를 이용해 커널에게 비대화형으로 설정할 것을 알린다.

export DEBIAN_FRONTEND=noninteractive

Ubuntu는 데비안 리눅스를 기반으로 개발되었다.


2.2. 데비안 패키지 다운로드

그리고 mysql에서 제공하는 데비안 패키지 파일을 다운로드받아 설치하는데, 이 때 비대화형으로 동작해야하므로 반드시 debconf-set-selections를 통해 설정값을 셋팅해준다.

해당 설정을 통해 패키지 설치 시 별도의 interactive 동작 없이 바로 mysql-5.7을 사용하도록 할 수 있다.

패키지 설치 시 필요한 lsb-release와 gnupg도 함께 설치한다.

apt-get install -y wget lsb-release gnupg

debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/unsupported-platform select ubuntu-bionic'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/select-server select mysql-5.7'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/repo-codename select wheezy'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/repo-distro select debian'

wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb


2.3. mysql5.7 설치

다운로드받은 mysql-apt-config패키지를 설치한 후, 레파지토리를 업데이트하면 비로소 mysql5.7이 설치 가능해진다.

사용 시 필요한 client 및 mysql server를 함께 설치한다.

dpkg -i mysql-apt-config_0.8.12-1_all.deb
apt-get update
apt-get install -y -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7*


2.4. 전체 스크립트

2.1~2.3의 전체 스크립트는 다음과 같다.

난 ubuntu20.04 도커파일에 설정하는 것이 목표였으므로, 하기 스크립트를 그대로 dockerfile에 작성했다.

export DEBIAN_FRONTEND=noninteractive

apt-get update
apt-get upgrade -y
apt-get install -y wget lsb-release gnupg

debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/unsupported-platform select ubuntu-bionic'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/select-server select mysql-5.7'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/repo-codename select wheezy'
debconf-set-selections <<< 'mysql-apt-config mysql-apt-config/repo-distro select debian'

wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
dpkg -i mysql-apt-config_0.8.12-1_all.deb
apt-get update
apt-get install -y -f mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7*


3. mysql5.7 실행

설치한 mysql은 즉시 실행 가능하다. 기본적으로 3306포트를 통해 기동된다.

service mysql start


3.1. 데이터베이스 및 유저 추가(non-interactive)

기동 후 root계정으로 접속해 kello데이터베이스 및 kello유저를 생성해주었다. 일반 ddl을 -e옵션으로 실행한다.

mysql -uroot -e 'CREATE DATABASE kello CHARACTER SET utf8 COLLATE utf8_bin; \
CREATE USER "kello"@"localhost" IDENTIFIED BY "kello123" PASSWORD EXPIRE NEVER; \
GRANT ALL PRIVILEGES ON kello.* TO "kello"@"localhost"; \
flush privileges;'


3.2. 초기sql 실행(non-interactive)

sql파일을 실행하고자 하는 경우 하기처럼 요청할 수 있다.

mysql -ukello -pkello123 kello < /sql/ddl-mysql.sql;


4. 결론

위에서는 mysql명령에 계정 및 패스워드를 직접 명시했지만, mysql은 해당 방법을 권장하지 않는다.

실제로 패스워드를 직접 명시해 요청하게 되면 insecure할 수 있다는 경고 메시지가 뜬다.

Warning: Using a password on the command line interface can be insecure.

관련해 패스워드를 별도의 파일에 저장해 사용할 수가 있는데, 다음에는 그에 관련된 내용을 포스팅할 예정이다.