웹사이트 검색

Ubuntu 18.04에 MySQL을 설치하는 방법


이 튜토리얼의 이전 버전은 Hazel Virdó가 작성했습니다

소개

LAMP(Linux, Apache, MySQL, PHP/Python/Perl) 스택. 관계형 데이터베이스와 SQL(Structured Query Language)을 사용하여 데이터를 관리합니다.

짧은 버전의 설치는 간단합니다. 패키지 인덱스를 업데이트하고 mysql-server 패키지를 설치한 다음 포함된 보안 스크립트를 실행합니다.

  1. sudo apt update
  2. sudo apt install mysql-server
  3. sudo mysql_secure_installation

이 튜토리얼에서는 Ubuntu 18.04 서버에 MySQL 버전 5.7을 설치하는 방법을 설명합니다. 그러나 기존 MySQL 설치를 버전 5.7로 업데이트하려는 경우 대신 이 MySQL 5.7 업데이트 가이드를 읽을 수 있습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • sudo 권한과 방화벽이 있는 루트가 아닌 사용자를 포함하여 이 초기 서버 설정 가이드에 따라 설정된 Ubuntu 18.04 서버 1대.

1단계 - MySQL 설치

Ubuntu 18.04에서는 기본적으로 최신 버전의 MySQL만 APT 패키지 리포지토리에 포함됩니다. 작성 당시에는 MySQL 5.7이었습니다.

설치하려면 서버의 패키지 색인을 apt로 업데이트하세요.

  1. sudo apt update

그런 다음 기본 패키지를 설치합니다.

  1. sudo apt install mysql-server

systemctl start 명령을 사용하여 서버가 실행 중인지 확인합니다.

  1. sudo systemctl start mysql.service

이 명령은 MySQL을 설치하고 시작하지만 암호를 설정하거나 다른 구성을 변경하라는 메시지를 표시하지 않습니다. 이렇게 하면 MySQL 설치가 안전하지 않게 되기 때문에 다음에 이 문제를 다룰 것입니다.

2단계 - MySQL 구성

새로 설치하려면 포함된 보안 스크립트를 실행해야 합니다. 이렇게 하면 원격 루트 로그인 및 샘플 사용자와 같은 보안 수준이 낮은 일부 기본 옵션이 변경됩니다. 이전 버전의 MySQL에서는 데이터 디렉터리도 수동으로 초기화해야 했지만 이제는 자동으로 수행됩니다.

보안 스크립트를 실행합니다.

  1. sudo mysql_secure_installation

이렇게 하면 MySQL 설치의 보안 옵션을 변경할 수 있는 일련의 프롬프트가 표시됩니다. 첫 번째 프롬프트는 MySQL 암호의 강도를 테스트하는 데 사용할 수 있는 암호 유효성 검사 플러그인을 설정할 것인지 묻습니다. 선택에 관계없이 다음 프롬프트는 MySQL 루트 사용자의 비밀번호를 설정하는 것입니다. 원하는 보안 암호를 입력하고 확인하십시오.

여기에서 Y를 누른 다음 ENTER를 눌러 모든 후속 질문에 대한 기본값을 수락할 수 있습니다. 이렇게 하면 일부 익명 사용자와 테스트 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 MySQL이 변경 사항을 즉시 적용합니다.

MySQL 데이터 디렉터리를 초기화하려면 5.7.6 이전 버전의 경우 mysql_install_db를 사용하고 5.7.6 이상 버전의 경우 mysqld --initialize를 사용합니다. 그러나 1단계에서 설명한 대로 Debian 배포판에서 MySQL을 설치한 경우 데이터 디렉터리가 자동으로 초기화되었습니다. 당신은 아무것도 할 필요가 없습니다. 그래도 명령을 실행하려고 하면 다음 오류가 표시됩니다.

mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

루트 MySQL 사용자의 암호를 설정했더라도 이 사용자는 MySQL 셸에 연결할 때 암호로 인증하도록 구성되지 않았습니다. 원하는 경우 3단계에 따라 이 설정을 조정할 수 있습니다.

3단계 - (선택 사항) 사용자 인증 및 권한 조정

MySQL 5.7(및 이후 버전)을 실행하는 Ubuntu 시스템에서 루트 MySQL 사용자는 기본적으로 비밀번호가 아닌 auth_socket 플러그인을 사용하여 인증하도록 설정됩니다. 이것은 많은 경우에 더 큰 보안과 유용성을 허용하지만 외부 프로그램(예: phpMyAdmin)이 사용자에 액세스하도록 허용해야 하는 경우 상황을 복잡하게 만들 수도 있습니다.

암호를 사용하여 MySQL에 루트로 연결하려면 인증 방법을 auth_socket에서 mysql_native_password로 전환해야 합니다. 이렇게 하려면 터미널에서 MySQL 프롬프트를 엽니다.

  1. sudo mysql

다음으로 다음 명령을 사용하여 각 MySQL 사용자 계정이 사용하는 인증 방법을 확인합니다.

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

이 예에서 루트 사용자가 실제로 auth_socket 플러그인을 사용하여 인증하는 것을 볼 수 있습니다. 암호로 인증하도록 루트 계정을 구성하려면 다음 ALTER USER 명령을 실행합니다. password를 선택한 강력한 암호로 변경해야 하며 이 명령은 2단계에서 설정한 루트 암호를 변경합니다.

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

그런 다음 FLUSH PRIVILEGES를 실행하여 권한 부여 테이블을 다시 로드하고 새 변경 사항을 적용하도록 서버에 지시합니다.

  1. FLUSH PRIVILEGES;

루트가 더 이상 auth_socket 플러그인을 사용하여 인증하지 않는지 확인하려면 각 사용자가 사용하는 인증 방법을 다시 확인하십시오.

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

이 예제 출력에서 이제 루트 MySQL 사용자가 암호를 사용하여 인증하는 것을 볼 수 있습니다. 자신의 서버에서 이를 확인하면 MySQL 셸을 종료할 수 있습니다.

  1. exit

또는 일부는 전용 사용자와 함께 MySQL에 연결하는 작업 흐름이 더 적합하다는 것을 알 수 있습니다. 이러한 사용자를 생성하려면 MySQL 셸을 다시 한 번 엽니다.

  1. sudo mysql

참고: 이전 단락에서 설명한 대로 루트에 대해 암호 인증을 활성화한 경우 MySQL 셸에 액세스하려면 다른 명령을 사용해야 합니다. 다음은 일반 사용자 권한으로 MySQL 클라이언트를 실행하며 인증을 통해서만 데이터베이스 내에서 관리자 권한을 얻습니다.

  1. mysql -u root -p

거기에서 새 사용자를 만들고 강력한 암호를 지정하십시오.

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

그런 다음 새 사용자에게 적절한 권한을 부여합니다. 예를 들어 다음 명령을 사용하여 데이터베이스 내의 모든 테이블에 대한 사용자 권한과 사용자 권한을 추가, 변경 및 제거할 수 있는 권한을 부여할 수 있습니다.

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

이 시점에서 FLUSH PRIVILEGES 명령을 다시 실행할 필요가 없습니다. 이 명령은 INSERT, UPDATE 또는 DELETE와 같은 문을 사용하여 권한 부여 테이블을 수정할 때만 필요합니다. 새 사용자를 만들었기 때문에 기존 사용자를 수정하는 대신 FLUSH PRIVILEGES는 여기서 필요하지 않습니다.

그런 다음 MySQL 셸을 종료합니다.

  1. exit

마지막으로 MySQL 설치를 테스트해 보겠습니다.

4단계 - MySQL 테스트

설치 방법에 관계없이 MySQL은 자동으로 실행되기 시작해야 합니다. 이를 테스트하려면 상태를 확인하십시오.

  1. systemctl status mysql.service

다음과 유사한 출력이 표시됩니다.

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 Main PID: 3754 (mysqld)
    Tasks: 28
   Memory: 142.3M
      CPU: 1.994s
   CGroup: /system.slice/mysql.service
           └─3754 /usr/sbin/mysqld

MySQL이 실행되고 있지 않으면 sudo systemctl start mysql로 시작할 수 있습니다.

추가 확인을 위해 관리 명령을 실행할 수 있는 클라이언트인 mysqladmin 도구를 사용하여 데이터베이스에 연결을 시도할 수 있습니다. 예를 들어 이 명령은 MySQL에 루트(-u root)로 연결하고 암호를 묻는 메시지를 표시하고(-p) 버전을 반환하도록 지시합니다.

  1. sudo mysqladmin -p -u root version

다음과 유사한 출력이 표시되어야 합니다.

mysqladmin  Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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.21-1ubuntu1
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			30 min 54 sec

Threads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

이는 MySQL이 실행 중임을 의미합니다.

결론

이제 서버에 기본 MySQL 설정이 설치되었습니다. 다음은 수행할 수 있는 다음 단계의 몇 가지 예입니다.

  • 일부 추가 보안 조치 구현
  • 데이터 디렉토리 재배치
  • SaltStack으로 MySQL 서버 관리