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