[linux] 우분투에 MySQL 설치 및 기본 환경 설정하기

  1. 셸 커맨드로 MySQL을 설치합니다.
sudo apt update
sudo apt install mysql-server

  1. 원격 연결을 위해 방화벽에서 MySQL을 개방합니다. 보안상 원격 연결을 하지 않으려면 방화벽 규칙을 추가하지 않는 것이 좋습니다.
sudo ufw allow mysql

MySQL 연결 포트인 3306을 규칙에 추가해도 됩니다. "ufw status" 커맨드로 3306포트가 허용 규칙으로 추가되었는지 확인합니다.

apost@apost:~$ sudo ufw allow mysql
Rule added
Rule added (v6)
apost@apost:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
3306/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)
3306/tcp (v6)              ALLOW       Anywhere (v6)

  1. 부팅할 때 MySQL이 자동 시작되도록 설정합니다. "enable" 옵션은 우분투가 부팅될 때 자동으로 시작되도록 심볼링 링크를 생성합니다.
sudo systemctl start mysql
sudo systemctl enable mysql

  1. MySQL root 계정의 비밀번호를 설정합니다. 필수 사항입니다.
sudo mysql -u root
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '비밀번호';
mysql> FLUSH PRIVILEGES;
mysql> exit

MySQL 커맨드 프롬프트에서 빠져나가는 커맨드는 "exit" 입니다. 또는 "\q"를 사용해도 됩니다.

  1. 아무 호스트에서나 root 계정 접속이 가능하도록 root 계정의 접속 제한을 변경합니다.
sudo mysql -u root
mysql> UPDATE mysql.user SET host='%' WHERE user='root' and host='localhost';
mysql> exit

  1. 새 데이터베이스를 하나 생성합니다. 이름은 "newdb"로 합니다.
sudo mysql -u root
mysql> CREATE DATABASE newdb;

  1. 방화벽 설정과 별개로 우분투에 설치하는 MySQL은 기본 환경 설정 값이 로컬호스트에서만 MySQL 연결을 할 수 있습니다. 다른 IP에서 MySQL에 접근이 가능하도록 MySQL 환경 설정 파일을 변경합니다.
    MySQL 환경설정 파일은 "mysqld.cnf" 이며 "/etc/mysql/mysql.conf.d/" 경로에 있습니다.
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

환경 설정 텍스트 파일에서 "bind-address" 항목을 찾습니다. 기본 값은 다음과 같습니다. "#"은 설치 환경에 따라서 없을 수 있습니다.

bind-address = 127.0.0.1

맨 앞의 "#"은 주석 처리입니다. "#"을 삭제한 후 "127.0.0.1"을 "0.0.0.0"으로 변경합니다. "127.0.0.1"은 로컬호스트에서만 연결이 가능한 것입니다. "0.0.0.0"은 모든 IP에서 접근이 가능하도록 합니다.

bind-address = 0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

  1. 새로운 DB 계정을 생성합니다. 루트계정을 서비스의 연결 계정으로 사용하는 것은 보안상 좋지 않습니다. "dbuser"라는 계정을 하나 생성해보겠습니다.
mysql -u root -p
mysql> CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbuser_password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' WITH GRANT OPTION;
mysql> exit