MySQL/Startup Guide/ko

이 문서는 MySQL 설치 및 사용을 돕는 문서입니다.

배경
MySQL은 다양한 프로그램에 사용하는 유명한 데이터베이스 서버입니다. SQL은 (S)tructured (Q)uery (L)anguage(구조 질의 언어)를 의미하며, MySQL이 다른 프로그램과 의사소통할 때 사용하는 언어입니다. 무엇보다도 MySQL은 자체 확장 SQL 함수가 있어 사용자에게 추가 기능을 제공합니다. 이 문서에서는 초기 MySQL 설치, 데이터베이스 및 테이블 설정, 새 사용자 추가 방법을 살펴보겠습니다. 설치 단계부터 시작해보겠습니다.

MySQL 설치
우선 MySQL을 시스템에 설치했는지부터 확인하십시오. MySQL의 개별 기능이 필요한 경우 설치 과정에서 세부 설정을 가능하도록 돕는데 필요한 USE 플래그를 활성화했는지 확인하십시오.

설치가 끄나면 다음 안내 메시지가 뜹니다:

이 문서에서 새로 설치했으니 명령을 실행하겠습니다. MySQL 데이터베이스를 설정하는 동안 프롬프트가 뜨면 키를 누르시면 됩니다. 설정 단계에서는 관리하는데 필요한 데이터베이스, 테이블, 사용자 등의 정보가 들어있는 MySQL 주 데이터베이스를 설정합니다. 설정 단계에서는 가능한한 빨리 루트 암호를 바꾸는 것이 좋습니다. 이 부분을 분명하게 짚고 넘어가겠으며, 과정을 거치지 않으면 누군가가 기회를 잡고 들어와서 MySQL 서버의 기본 설정을 건드립니다.

MySQL의 비 이빌드 관련 정보를 지워 이 문서의 내용과 최대한 일관성을 유지하십시오.

실행하여 암호를 설정할 스크립트 명령이 나타났으니 이 명령을 실행해보겠습니다.

OpenRC를 사용한다면 이 명령을 실행하십시오:

systemd를 사용한다면 다음 명령을 대신 실행하십시오:

With >=-10.1.18, use:

다음 루트 암호를 설정하십시오:

입력한 루트 암호를 제대로 설정했는지 MySQL 서버에 로그인하여 확인할 수 있습니다:

스위치는 로그인할 사용자를 설정합니다. 스위치는 호스트를 설정합니다. 보통 원격 서버를 설정하기 전까지는 가 됩니다. 마지막으로 는 mysql 클라이언트에게 데이터베이스를 접근할 암호를 입력하겠다고 알립니다. 명령을 실행하면 프롬프트를 봅니다. 여기가 바로 명령을 입력할 부분이빈다. 이제 루트 사용자 권한으로 mysql 프롬프트로 들어왔으니 데이터베이스 설정을 시작할 수 있습니다.

데이터베이스 만들기
로그인하여 mysql 프롬프트를 띄웠습니다. 우선 우리가 설정한 데이터베이스를 살펴보겠습니다. 데이터베이스를 살펴보기 위해  명령을 사용하겠습니다.

이미 시험용 데이터베이스를 만들었으에도 불구, 그래도 자체 데이터베이스를 만들겠습니다. 명령을 사용하여 데이터베이스를 만듭니다. gentoo라는 데이터베이스를 만들겠습니다.

응답을 통해 어떤 오류 없이 명령을 실행했음을 알 수 있습니다. 이 경우 1열을 수정했습니다. 이 결과는 전체 데이터베이스 목록을 보유하고 있는 mysql 주 데이터베이스의 참고 사항입니다. 뒤에서 무슨 일이 일어나고 있는지는 그다지 신경쓰지 않아도 됩니다. 마지막 숫자는 요청을 얼마나 빨리 처리했는지 보여줍니다. 명령을 다시 사용하면 우리가 만든 데이터베이스를 확인해볼 수 있습니다.

데이터베이스를 분명하게 만들었습니다. 이 데이터베이스에 테이블을 만들려면 방금 만든 데이터베이스를 현재 데이터베이스로 선택해야합니다. 따라서  명령을 사용하겠습니다. 명령은 해당 이름을 지닌 데이터베이스를 현재 데이터베이스로 사용하겠다는 의미입니다. 다른 선택지가 있다면 실제 명령줄에 스위치를 쓰는것입니다. 이제 gentoo 데이터베이스로 전환해보겠습니다.

그리고 현재 데이터베이스는 앞서 만들었던 gentoo 데이터베이스가 되었습니다. 이제 이 데이터베이스를 활용하여 테이블을 만들고 정보를 넣어보겠습니다.

테이블 만들기
MySQL 구조상, 데이터베이스, 테이블, 레코드, 필드가 있습니다. 데이터베이스는 테이블을 관리하고, 테이블은 레코드를, 레코드는 필드를 관리하며, 필드에는 정보가 들어있습니다. 이 구조는 사용자로 하여금 정보에 접근하는 방식을 선택할 수 있게 해줍니다. 지금까지는 데이터베이스를 다루었으며, 이제는 테이블을 다루겠습니다. 우선, 테이블은 데이터베이스와 유사하게  명령으로 확인할 수 있습니다. 지금은 명령을 실행하여 나타난 결과와 같이 gentoo 데이터베이스에 테이블이 없습니다:

이는 테이블을 만들어야 함을 의미합니다. 테이블을 만들기 위해  명령을 사용하겠습니다. 허나 이 명령은 단순한  명령과는 조금 다릅니다. 이 명령은 인자 목록을 취합니다. 형식은 다음과 같습니다:

table_name은 우리가 만들고자 하는 테이블 이름입니다. 이 경우  테이블을 만들겠습니다. 이 테이블에는 개발자 이름, 전자메일 주소, 직급이 들어갑니다.

field_name은 필드 이름이 들어갑니다. 여기서 우리는 name, email, job을 넣겠습니다.

field_data_type은 어떤 형식의 정보를 넣을지를 말합니다. 각각의 다른 형식은 MySQL 컬럼 형식 페이지en 에서 찾아보실 수 있습니다. 모든 필드에 대해  데이터 형식을 사용하겠습니다. 는 문자열을 다룰 때 사용하는 간단한 데이터 형식 중 하나입니다.

size는 데이터 단일 필드 갯수를 얼마나할 지 정합니다. 이 경우 128 값을 사용하겠습니다. 하나의 데이터 필드에서 사용하는  데이터 형식의 크기가 128 바이트라는 의미입니다. 위 사이트에 여러분께 기술적으로 증명할 건덕지가 있지만, 시간이 아무리 흐르고 흘러도 128개의 문자 정도면 안전하다 생각하셔도 됩니다. 이제 테이블을 어떻게 만드는지 알아볼 시간입니다. 계속 진행해보습니다.

테이블을 잘 만든 것 같습니다. 명령으로 확인해보겠습니다:

테이블이 있군요. 그런데 설정한 필드 형식에 맞춘 어떤 정보도 없는 것 같습니다. 명령 (또는 줄여서 ) 명령을 사용하여 어떤 테이블 이름과 인자를 가지고 있는지 살펴보겠습니다. developers 테이블이 어떻게 생겼는지 살펴보도록 하겠습니다.

화면에서는 각자 다른 필드와 형식을 보여줍니다. 또한 일부 추가 속성을 보여주는데, 이 내용은 설명서의 설명 범위를 벗어납니다. 그 밖의 내용은 알아서 MySQL 참조 설명서en 를 보세요. :P 이제 건드려볼 테이블이 만들어졌습니다. 여기에 데이터를 넣어보겠습니다.

MySQL 데이터베이스 데이터 배치
명령으로 테이블의 내용을 늘리(거나 데이터 추가)도록 해보겠습니다. 명령과 같이, 개별적인 형식이 있습니다:

이 명령은 테이블에 레코드를 넣을때 사용합니다. 테이블에는 우리가 정보를 넣고자 하는 레코드가 들어갑니다. 테이블 이름 다음에는 컬럼 이름 목록이 들어가며   에는 테이블에 넣고자 하는 값이 들어갑니다. 각 필드에 정의한 컬럼 순서를 맞춰 값을 넣는다면 컬럼 목록 이름을 생략해도 됩니다. 이 경우 developers 테이블에 데이터를 넣어 보겠습니다. 예제 레코드를 삽입하도록 하죠:

반환 결과에 따르면 레코드를 올바르게 넣었음을 나타냈습니다. 단지 하나의 레코드가 아니라 더 많은 정보를 넣고 싶다면요? 명령이 이런 경우 역할을 대신합니다. 이 명령은 탭으로 구분한 텍스트 파일을 줄 하나당 레코드 단위로 불러옵니다. 홈 디렉터리에 파일 하나를 편집하여 몇가지 레코드를 넣어보겠습니다. 이 파일 이름은 라고 하겠습니다. 예제는 다음과 같습니다:

명령에 긴~ 정의가 있습니다만 여기서는 간단한 방식을 활용하겠습니다.

은 디렉터리이며 filename은 불러오고자 하는 파일의 이름입니다. 테이블은 테이블의 이름입니다. 이 경우, 우리가 사용하고자 하는 파일은 이며 테이블 이름은 developers 입니다.

잘 동작합니다. 그러나 단순히 레코드를 넣을 뿐이고 MySQL에 어떤 관리도 진행하지 않았습니다. 대부분의 웹 프로그램에서는 MySQL을 빠르고 간편하게 설정하기 위해 SQL 스크립트를 활용합니다. SQL 스크립트를 활용한다면 mysql을 배치모드로 활용하거나 파일을 원본으로 지정해야합니다. mysql을 배치모드에서 실행하는 예시를 보여드리겠습니다:

와 같이 파일에 대해 할 일을 지시할 수 있습니다. Failure to do so may cause your database to be compromised! 메시지가 나타났다면  명령을 사용하여 처리할 수 있습니다. 이 명령은 mysql 대화식 모드에서 sql 파일의 mysql 명령을 실행합니다. sql 파일을 실행 원본으로 지정하는 방법은 다음과 같습니다:

웹 프로그램에서 sql 파일 실행을 기다리는 장면을 본다면 위의 두가지 명령으로 작업을 처리할 수 있습니다. 이제 테이블 설정이 끝났는데 필드는 어떻게 확인해볼까요? 요청문을 통해 테이블을 검색하여 필드를 확인해보겠습니다.

쿼리로 MySQL 테이블 탐색하기
요청 처리는 SQL 데이터베이스의 주 기능 중 하나입니다. 요청문을 통해 테이블 안에 있는 데이터를 어떤 용도로 되돌려줍니다. 대부분 사용하는 요청문은  명령입니다. 명령은 조금 복잡하며, 이 문서에서는 명령의 기본 형식만 보여줍니다.

첫번째 양식을 살펴보겠습니다. 상당히 쉬우면서도 테이블 전체를 쓱 살펴볼 수 있습니다. 바로 실행해서 테이블에 어떤 데이터가 있는지 살펴보겠습니다.

명령 및  명령을 통헤 넣은 데이터를 살펴보았습니다. 이제 Chris White의 레코드만 보도록 해보겠습니다. 아래와 같이 select 두번째 양식으로 살펴볼 수 있습니다.

기대한 바와 같이 우리가 찾으려는 각각의 항목을 선택했습니다. 이제 구성원의 이름을 제외한 직급과 전자메일 주소만 원한다고 해보겠습니다. 명령 세번째 양식으로 아래와 같이 나타내보겠습니다.

이 선택 방식은 앞으로 마주하게 될 일과 마찬가지로 상당히 많은 양의 정보를 쉽게 관리할 수 있게 해줍니다. 이제 루트 mysql 사용자로서 MySQL 데이터베이스에서 우리가 하고 싶은대로 제한 없는 권한을 누려보겠습니다. 서버 환경에서 각 권한을 쥐고 있는 사용자는 각자 문제를 안고 있을 수 있습니다. 이들 사용자가 데이터베이스에서 할 일을 관리하기 위해 권한을 설정하겠습니다.

MySQL 권한
권한이란 사용자가 데이터베이스, 테이블, 등에 접근하는 방식을 말합니다. 이제 gentoo 데이터베이스에서 MySQL 루트 계정은 단지 접근하고 권한을 부여할 수 있는 계정일 뿐입니다. 이제 gentoo 데이터베이스에 접근하고 정보를 다룰 일반 사용자인 guest, admin 계정을 만들겠습니다. guest 계정은 상당 부분을 제한하겠습니다. 할 수 있는 유일한 동작은 데이터베이스로부터 정보를 가져오는 일이 전부입니다. admin은 root 계정과 동일한 제어권을 받지만, (mysql 주 데이터베이스가 아닌) gentoo 데이터베이스에 한합니다. 계정을 만들기 전에  명령을 단순화한 형식을 면밀히 살펴보겠습니다.

Creating users
The CREATE USER SQL statement will define users and set the authentication method, commonly by password but other plugins may be available.

An example CREATE USER command is:

user is the name of the user and host is the hostname the user will be accessing from. In most cases, this will be localhost. To create our users for this example:

(admin)

(guest)

GRANT 구문으로 권한 부여하기
Let's have a closer look at this somewhat simplified format of the GRANT command.

우선 우리가 할당하려는 권한을 취하겠습니다. 지금까지 우리가 알아본대로 여러분이 설정할 수 있는 몇가지 권한이 있습니다:


 * - 데이터베이스에 대한 모든 제어권을 줌
 * - 사용자가 테이블을 만들 수 있음
 * - 사용자가 테이블에 요청할 수 있음
 * - 사용자가 테이블에 데이터를 넣을 수 있음
 * - 사용자가 데이터베이스 목록을 볼 수 있음
 * - 사용자에게 권한을 주지 않음
 * - 사용자가 권한을 부여할 수 있음

admin 사용자에게는 모든 권한을 부여했습니다. guest 사용자에게는 읽기 전용 동작에  정도면 충분하다고 봅니다 database는 사용자에게 접근 권한을 부여할 데이터베이스입니다. 여기서는 gentoo가 되겠습니다. .*은 모든 테이블을 의미합니다. 원하는 경우 테이블 단위로 접근 권한을 줄 수 있습니다. user는 사용자 이름이며, host는 사용자가 접근하고자 이용하는 호스트의 이름입니다. 대부분 localhost 입니다. 마지막으로 password는 사용자 암호입니다. 주어진 정보를 가지고 사용자를 만들어보겠습니다.

이제 사용자 설정을 끝냈으니 시험해보겠습니다. 우선  명령을 명령 프롬프트에 입력하여 mysql을 빠져나가겠습니다:

이제 콘솔로 돌아왔습니다. 사용자 설정을 처리했으니 사용자가 무얼 할 수 있는지 보도록 하겠습니다.

사용자 권한 시험
이제 guest 사용자로 로그인해보겠습니다. 현재 guest 사용자는  명령에 대해서만 권한을 쥐고 있습니다. 기본적으로는 검색 이외의 것은 할 수 없습니다. guest 계정으로 로그인하러 가보겠습니다.

이제 사용자에게 제한을 제대로 가했는지 시험하겠습니다. gentoo 데이터베이스로 전환하겠습니다:

이제, 어떠한 조건도 가정하지 않고 진행하겠습니다. 테이블을 만들어보겠습니다.

보시는 바와 같이, 사용자가 적절한 접근 권한을 보유하고 있지 않으므로 동작이 실패했습니다. 그러나, 앞에서 허용한 접근 권한은   문법입니다. 이 문법을 실행해보겠습니다.

이 명령 실행에 성공했으며, 사용자에게 부여한 권한이 어떤 동작을 가능하게 하는지 잠깐 살펴보았습니다. 어쨌거나 마찬가지로 admin 계정도 만들었습니다. 이 계정에는 제한이 있긴 하지만 모든 권한을 다 줬다는걸 보여주려고 만들었습니다. MySQL을 빠져나간다음에 admin 으로 로그인해보겠습니다.

admin 사용자로 새 데이터베이스를 만드는 시도로 시작해보겠습니다. 이 admin 사용자는 MySQL 루트 계정과 유사하며 gentoo 데이터베이스를 선택했을 때 gentoo 데이터베이스에 대한 어떤 수정 동작도 할 수 있습니다. MySQL 주 데이터베이스의 사용자 접근을 시험해보겠습니다. 개별 데이터베이스에 대한 권한만 부여했음을 기억하십시오.

분명히 admin 사용자는 MySQL 주 데이터베이스에 데이터베이스를 만들 수 없습니다. 반면에 gentoo 데이터베이스에 대해서는 모든 권한을 가지고 있습니다. 허나, 우리는 여전히 다음과 같이 데이터 삽입 예제를 보여드리기 위해 gentoo 데이터베이스를 건드리는 admin 계정을 활용할 수 있습니다.

admin 사용자는 원하는대로 데이터베이스에 접근할 수 있습니다. 이제 간혹 사용자 권한을 없애야 하기도 합니다. 문제가 있는 사용자를 은퇴 고용자로 만들 수 있습니다. 명령을 사용하여 사용자 권한을 비활성화하는 장면을 살펴보겠습니다.

REVOKE 명령으로 사용자 접근 권한 제거
명령은 사용자의 접근을 철회합니다. 심지어 전체 접근 권한을 없애거나, 특정 권한을 없앨 수 있습니다. 사실 명령 형식은 와 유사합니다.

여기 있는 옵션은  명령 형식에 설명했습니다. 그러나 여기서는 사용자에 대한 모든 권한을 철회하겠습니다. guest 계정이 보안 문제를 야기하고 있다고 치겠습니다. 모든 권한을 없애기로 작정했습니다. 루트로 로그인해서 필요한 조치를 취하겠습니다.

이제 빠져나가서 guest 사용자로 로그인하겠습니다.

로그인할 수 있지만 gentoo 로의 접속권한이 날라갔습니다.

문제덩어리 사용자는 이제 더이상 gentoo 데이터베이스에 접근할 수 없습니다. 사용자는 여전히 로그인할 수 있습니다. 왜냐면 MySQL 주 데이터베이스에 남아있기 때문입니다. MySQL 사용자 테이블에서  명령으로 어떻게 완전히 계정을 제거하는지 살펴보겠습니다.

DELETE 명령으로 계정 제거하기
MySQL 사용자 테이블은 모든 사용자 및 정보가 들어있습니다. 루트로 로그인했는지 확인하십시오 MySQL 주 데이터베이스를 활용하겠습니다.

DROP USER will delete the record in the user table and all privilege tables. Let's go ahead and do that:

잘 동작한 것 같습니다. 로그아웃 한 후 guest 사용자로 로그인을 시도해보겠습니다.

사용자를 제대로 삭제했습니다

마무리
이 안내서는 MySQL을 명령행에서 설정하는 방법에 주안점을 두었으며, 이 외에도 GUI 양식으로 과정을 처리하는 수단이 있습니다:


 * phpMyAdmin - 인기있는 php 기반 MySQL 관리 도구.
 * mysqlnavigator - MySQL QT 프론트엔드.
 * gmyclient - 그놈 기반 MySQL 클라이언트.
 * knoda - KDE MySQL 클라이언트.

이 문서는 MySQL을 간단히 소개하는 따라하기 내용으로 마무리합니다. MySQL에 대해 전반적인 기본사항을 좀 더 잘 이해하고 데이터베이스를 설정하는데 도움이 되길 바랍니다.