Ubuntu 18.04에 MySQL 설치 방법

Ubuntu 18.04에 MySQL 설치 방법

2022-05-31 last update

12 minutes reading Ubuntu 18.04 Ubuntu Interactive MySQL Databases
이 강좌의 초기 버전은 Hazel Virdó으로 작성되었다

소개


MySQL은 오픈소스 데이터베이스 관리 시스템으로 일반적으로 유행하는 LAMP(Linux, Apache, MySQL, PHP/Python/Perl) 창고의 일부로 설치된다.관계식 데이터베이스와 SQL(구조화된 쿼리 언어)을 사용하여 데이터를 관리합니다.
간단한 버전 설치: 패키지 인덱스를 업데이트하고 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 버전으로 업데이트하려면 this MySQL 5.7 update guide으로 변경할 수 있습니다.

선결 조건


본 강좌를 배우려면 다음이 필요합니다.
  • Ubuntu 18.04 서버는 this initial server setup guide에 따라 설치되며, sudo 권한을 가진 비루트 사용자와 방화벽을 포함한다.
  • 이 강좌에서는 이 페이지가 포함된 대화식 터미널을 사용하여 MySQL을 설치하고 구성할 수도 있습니다.다음 Launch an Interactive Terminal! 버튼을 클릭하여 시작합니다.

    1단계 - MySQL 설치


    Ubuntu 18.04에서는 기본적으로 APT 패키지 저장소에 최신 버전의 MySQL만 포함됩니다.이 문서는 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이 변경 사항을 즉시 존중할 수 있도록 새 규칙을 불러옵니다.
    ySQL 데이터 디렉토리를 초기화하려면 5.7.6 이전 버전은 mysql_install_db, 5.7.6 이상 버전은 mysqld --initialize을 사용합니다.그러나 Debian 릴리스에서 MySQL을 설치하면 1단계에서 설명한 대로 데이터 디렉토리가 자동으로 초기화됩니다.너는 아무것도 할 필요가 없다.명령을 실행하려고 하면 다음 오류가 표시됩니다.
    출력
    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 사용자는 암호가 아닌 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 등 문장을 사용하여grant표를 수정할 때만 이 명령이 필요합니다.기존 사용자를 수정하는 대신 새 사용자를 만들었기 때문에 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
    
    ySQL이 실행되지 않으면 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 설정이 설치되었습니다.다음은 다음 단계를 수행할 수 있는 몇 가지 예입니다.
  • Implement some additional security measures
  • Relocate the data directory
  • Manage your MySQL servers with SaltStack