우분투 18.04에 MySQL 설치하기

우분투 18.04에 MySQL 설치하기

서문

MySQL은 주로 LAMP(Linux, Apache, MySQL, PHP) 스택의 한 부분으로 설치되는 오픈 소스 데이터베이스 관리 시스템이다. 관계형 데이터베이스로 분류되며 데이터를 관리하기 위해 SQL (Structured Query Language)를 사용한다.

설치는 굉장히 간단하다. apt 패키지 매니저의 인덱스를 업데이트하고, mysql-server 패키지를 설치하고, 같이 설치되는 보안 스크립트를 실행하면 된다.

$ sudo apt update
$ sudo apt install mysql-server
$ sudo mysql_secure_installation

이 튜토리얼은 우분투 18.04에 MySQL 5.7 버전을 설치하는 법을 설명할 것이다.

꼭 필요한 것

아파치 웹 서버와 기본적인 설정이 완료된 우분투 18.04 서버와 sudo 권한을 가진 일반 유저 계정

스텝 1 – MySQL 설치하기

apt 패키지 저장소에는 항상 MySQL의 최신 버전이 포함되어 있다. 글 쓰는 현재 기준으로는, MySQL 5.7 버전이다.

최신 버전을 설치하기 위해 우선 apt 패키지 매니저의 인덱스를 업데이트 하자.

$ sudo apt update

그 다음 기본 페키지를 설치하자.

$ sudo apt install mysql-server

apt 패키지 매니저는 MySQL을 단순히 설치만 할 것이다. 비밀번호 설정이라던지 다른 설정의 변경을 하지 않기 때문에 MySQL의 보안 설정 등을 따로 해야만 한다. 이건 다음 스텝에서 다루도록 하겠다.

스텝 2 – MySQL 설정하기

설치가 완료된 후, 보안 스크립트를 실행해야만 한다. 이건 원격 루트 접속이라던지 샘플 유저들과 같은 옵션들을 변경해서 보안을 좀 더 강화시킨다. 예전 버전의 MySQL에서는, 데이터 디렉토리도 직접 초기화해야만 했었지만, 최근에는 그런 것들을 자동으로 된다.

아래 보안 스크립트를 실행하자.

$ sudo mysql_secure_installation

위 스크립트는 MySQL 보안 옵션에 대한 몇개의 선택 사항을 제시할 것이다. 첫번째 선택 사항은 패스워드 유효성 플러그인을 설치할 것인가에 대한 것이다. 이건 MySQL 패스워드의 안정성을 테스트하는데 사용된다. 위의 선택을 어떻게 하든 간에, 다음 선택 사항은 MySQL 루트 유저의 패스워드를 설정하는 것이 뜰 것이다. 안전한 비밀번호를 선택해서 입력하도록 하자.

그 다음에 계속해서 뜨는 창에서 디폴트 값을 Y와 ENTER 키를 이용해서 선택하기 바란다. 익명 유저와 테스트 데이터베이스를 삭제하고 원격 루트 로그인을 비활성시킬 수 있다. 그리고 이 설정값을 MySQL에 바로 적용할지에 대한 것도 선택할 수 있다.

MySQL 데이터 디렉토리를 초기화하기 위해서, 5.7.6 이전 버전에서는 mysql_install_db를, 그리고 5.7.6 이후 버전에서는 mysqld –initialize를 명령어를 사용할 수 있다. 하지만, 우분투 같이 데비안 계열의 리눅스에서 MySQL을 설치하면, 스텝 1에서 언급한대로 데이터 디렉토리는 자동으로 초기화된다. 따로 무언가를 할 필요가 없다.

혹시 초기화 명령어를 실행한다면, 아래와 같은 에러를 보게 될 것이다.

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2020-05-24T12:12:49.592091Z 0 [ERROR] Aborting

한가지 주의할 것은, root 계정의 비밀번호를 설정했다고 하더라고 root 계정을 MySQL Shell에 접속하는데 설정되어 있지 않다는 것이다. 이 설정을 변경하는 것은 스텝 3에서 설명하겠다.

스텝 3 – 유저 인증과 권한 설정

MySQL 5.7 이상의 버전을 운영하는 우분투 시스템에서는, root 유저는 패스워드가 아니라 auth_socket을 이용해서 인증되도록 기본으로 설정되어 있다. 이건 많은 부분에서 보안성이나 이용성 측면에서 장점이 많다. 하지만 phpMyAdmin같은 외부 프로그램이 루트 유저로 접근하는 것을 허용해야만 할때는 문제가 될 수도 있다.

MySQL에서 root 유저를 비밀번호로 사용하기 위해선, 인증 메쏘드를 auth_socket에서 mysql_native_password로 변경해야만 한다. 우선 아래 명령어로 MySQL Shell을 열도록 하자.

$ sudo mysql

다음으로, 아래 명령어로 MySQL 유저 계정들이 어떤 인증 메소드를 사용하고 있는지 확인해 보자.

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

root 유저를 보면 auth_socket을 이용해서 인증한다는 것을 볼 수 있다. root 계정이 비밀번호로 인증하도록 하기 위해서, ALTER USER 커맨드를 사용하자. password 부분은 강력한 패스워드를 선택하는 것을 명심하고, 이 명령어는 스텝 2에서 설정한 비밀번호를 변경할 것이란 것이다.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

그 다음, 권한 테이블을 다시 로드하고 변경 사항을 바로 적용하는 FLUSH PRIVILEGES 명령어를 실행하자.

mysql> FLUSH PRIVILEGES;

위에서 설명한 유저 계정들의 인증 메소드를 표시하는 명령어를 다시 실행해보면, root 유저가 mysql_native_password로 변경된 것을 확인할 수 있을 것이다.

스텝 4 – 유저 계정 생성 및 권한 부여

스텝 3에서는 root 계정의 인증 메소드를 변경했다. 하지만 기타 보안적인 문제 때문에 root 계정보다는 일반 계정을 생성해서 phpMyAdmin 같은 외부 프로그램에 사용하는 것이 더 바람직할 수 있다. 이 스텝에선 일반 계정을 생성하고 권한을 부여하는 것을 알아보겠다.

아래 명령어로, 새로운 유저를 만들고 강력한 비밀번호를 부여해보자.

mysql> CREATE USER 'account_name'@'localhost' IDENTIFIED BY 'password';

계정을 생성한 다음, 적절한 권한을 부여하도록 하자. 아래 명령어로 데이터베이스의 모든 테이블에 대한 권한을 부여할 수 있고, 유저의 권한을 에디트할 수 있는 권한을 부여할 수도 있다.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'account_name'@'localhost' WITH GRANT OPTION;

한가지 팁을 주자면, 지금은 FLUSH PRIVILEGES 명령어를 실행할 필요가 없다. 이 명령어는 권한 테이블을 INSERT, UPDATE, DELETE 구문으로 변경할 경우에만 필요하다. 여기서는 변경한 것이 아니라 한 유저를 새로 만들었기 때문에 FLUSH PRIVILEGES는 불필요하다.

스텝 5 – MySQL 설치 점검하기

어떤 방법으로 MySQL을 설치했던지 간에, MySQL은 자동으로 실행되었어야만 한다. 테스트하기 위해 아래 명령어를 실행해보자.

$ systemctl status mysql.service

그럼, 아래와 같은 결과를 보게 될 것이다.

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-06-21 01:50:49 UTC; 1 months 1 days ago
 Main PID: 1378 (mysqld)
    Tasks: 175 (limit: 1024)
   CGroup: /system.slice/mysql.service
           └─1378 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

만약 MySQL이 실행중이지 않다면, sudo systemctl start mysql 명령어로 실행시킬 수 있다.

추가적으로 점검하기 위해, 관리 명령어를 실행할 수 있게 해주는 mysqladmin 툴을 이용해서 데이터베이스에 접근하는 것을 시도할 수 있다. 예를 들면, 아래 명령어는 MySQL에 root로 로그인하고 (-u root), 패스워드를 입력하고 (-p), 그리고 버전을 표시하게 한다.

$ sudo mysqladmin -p -u root version

그럼 아래 결과를 보게 될 것이다.

mysqladmin  Ver 8.42 Distrib 5.7.30, for Linux on x86_64
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          5.7.30-0ubuntu0.18.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 32 days 5 hours 7 min 42 sec

Threads: 151  Questions: 83300816  Slow queries: 0  Opens: 2791  Flush tables: 1  Open tables: 1570  Queries per second avg: 29.929

결론

이제 기본적인 MySQL의 설치가 끝났다. 다음에는 추가적인 보안 조치를 취하고 데이터 디렉토리를 변경하는 등의 내용도 다루도록 하겠다.

답글 남기기