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를 사용한다면 다음 명령을 대신 실행하십시오:

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

입력한 루트 암호를 제대로 설정했는지 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 데이터베이스 데이터 배치
명령으로 테이블의 내용을 늘리(거나 데이터 추가)도록 해보겠습니다. 명령과 같이, 개별적인 형식이 있습니다:

This command is used to insert a record into table. table contains the MySQL table we wish to enter the information into. The table name may be followed by the list of columns to insert data into and  contains the values you wish to insert into the table. You may omit the list of columns if you insert a value into each one and if you write the values in the same order the columns have been defined. In this case, we want to insert data into the developers table. Let's insert sample records:

According to our return result, it appears that the record was inserted correctly. What if we want to input more information than just one record? That's where the  command comes into play. This loads records from a tab separated file. Let's try that by editing a file in our home directory with the records. We'll call this file. Here's a sample:

Now the  command has a somewhat elongated definition, but we'll use the simplest form here.

is the directory and filename that will be used. table is the name of our table. In this case, our file is and the table is developers.

That worked well. However, this simply inserts records, and does not give you any sort of control over MySQL. Many web applications use sql scripts in order to setup MySQL quickly and easily. If you want to use an sql script, you'll need to run mysql in batch mode, or source the file. Here's an example of running mysql in batch mode:

Like , be sure you can tell what  does. Failure to do so may cause your database to be compromised! Another way you can accomplish this is to use the  command. This command will run mysql commands from an sql file while in the mysql interactive mode. Here is how to source an sql file:

If you see a web application wanting you to run an sql file, the two above commands can be used to accomplish that task. We have our table setup, so how do we check our fields? We do this by searching our table with queries.

쿼리로 MySQL 테이블 탐색하기
Queries are one of the main features of any SQL database. They help us turn data in our tables into something useful. Most queries are done with the  command. The  command is fairly complex, and we're only going to look at three main forms of the command in this document.

Let's take a quick look at the first form. It's relatively simple and gives you an overall look of your table. We'll go ahead and run it to see what data we have so far.

We see both the data we inserted through  and those inserted by   present. Now, let's say that we just want to see the record for Chris White. We can do so with the second form of select as shown below.

As expected, the specific entry that we were looking for has been selected. Now, let's say we only wanted to know the person's job and email address, not their name. We can do so with the third form of  as shown here.

This method of selection is a lot easier to manage, expecially with larger amounts of information, as we'll see later on. Right now, being the root mysql user, we have unlimited permissions to do what we wish with the MySQL database. In a server environment, a user with such privileges can be quite problematic. In order to control who does what with the databases, we setup privileges.

GRANT 구문으로 권한 부여하기
Privileges are what kind of access users have to databases, tables, pretty much anything. Right now in the gentoo database, the MySQL root account is the only account that can access it, given its permissions. Now, let's create two somewhat generic users, guest and admin, who will access the gentoo database and work with the information in it. The guest account will be a restricted one. All it will be able to do is get information from the database, and that's it. admin will have the same control as root, but only for the gentoo database (not the main mysql databases). Before we start on that, let's have a closer look at this somewhat simplified format of the  command.

First we have the privileges we wish to assign. With what we've learned so far, here are some of the privileges you can set:


 * - Gives the all privilege control for the database
 * - Allows users to create tables
 * - Allows users to query tables
 * - Allows users to insert data into a table
 * - Allows users to see a list of databases
 * - User has no privileges
 * - Allows users to grant privileges

For our admin user, ALL will do. For the guest user,  will be sufficient for read only access. database is the database we wish the user to have these permissions on. In this example, gentoo is the database. The .* means all tables. If you wanted to, you could apply per table access. 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. Finally, password is the user's password. Given the information, let's go ahead and create our users.

Now that we have the users setup, let's test them out. First we quit mysql by typing  at the command prompt:

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

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

Now we should test the user restriction(s). Let's switch to the gentoo database:

Now let's try to do something we are not supposed to. We'll attempt to create a table.

As you can see, this function fails, as our user does not have the appropriate access. However, one access we did grant is the  statement. Let's go ahead and try that:

The command succeeds, and we're given a glimpse of what user permissions can do. We did, however, create an admin account as well. This was created to show that even all permissions granted users can still have limitations. Go ahead and quit MySQL and login as the admin.

To begin, we'll try creating a new database with our admin user. This admin user will have access similiar to the root MySQL account, and will be able to do any kind of modification to the gentoo database it chooses. This will test the user's access to the main MySQL database. Remember ealier that we only set permissions to a specific database.

Indeed, the admin user cannot create databases on the main MySQL database, despite all his permissions on the gentoo database. However, we're still able to use the admin account to modify the gentoo database, as shown here by this example data insertion.

The admin user can access the database as they please. Now sometimes, we need to get rid of user permissions. This could be anything from a problematic user to a retired employee. Let's take a look at how to disable user permissions with the  command.

Removing User Access With The REVOKE Command
The  command lets us deny access to a user. We can either deny full access, or specific access. In fact, the format is very similiar to.

Options here are explained in the  command section. In this section however, we're going to deny full access to a user. Let's say we find out the guest account is causing some problems security wise. We decide to revoke all privileges. We login as root and do the needful.

Now let's quit and attempt to login as a guest user.

Although we're able to login, our access to gentoo is now gone.

And our problematic user is no longer able to access the gentoo database. Please note that the user was still able to login. That is because they remain in the main MySQL database. Let's take a look at how to completely remove an account with  and the MySQL user table.

Removing Accounts Using DELETE
The MySQL user table is a listing of all users and information about them. Make sure you're logged in as root. Then go ahead and use the main MySQL database.

Now let's see what tables the mysql database has:

The user table is the table we're after. However, the user table contains 30 different fields, making it very hard to read. In order to make things easier to read, we'll go ahead and use the third version of the  statement. The fields we're after are Host and User.

Now that we have our information, we can get rid of the guest user. This is done with the  command and the syntax is shown below.

You may notice that  is somewhat similiar to the   statement in its format. In this case, the field will be User, and the value guest. This will delete the record in the user table where the user is guest, successfully deleting our guest user account. Let's go ahead and do that:

It seems to have worked ok. Let's test by logging out and attempting to login as our guest user.

Our user is now successfully deleted!

Conclusion
While this guide focuses mainly on setting up MySQL on the command line, a few alternatives are available in GUI form:


 * phpMyAdmin - Popular php based MySQL administration tool.
 * mysqlnavigator - QT frontend to MySQL.
 * gmyclient - A GNOME based MySQL client.
 * knoda - A KDE MySQL client.

This ends the MySQL introductory tutorial. I hope this gives you a better understanding of the basics behind MySQL and getting a database set up.