본문 바로가기

DataBase/My-Sql

MySQL 사용하기

내용은 초기 인스톨후 root 사용자 암호 설정방법과 DB사용자 등록및 권한설정, 데이타베이스 생성 방법, 기본 사용법 입니다.

 

       #######################################
        #                                                                 #
        #         MySQL 설치후 기본적인 사용법과          #
        #                   root의 암호설정                         #
        #                                                                 #
        #######################################

 

1. MySQL 사용하기

1.1 MySQL 서버 시작하기


MySQL이 정상적으로 설치 되었다면 그리고 디폴트 옵션으로 설치 하였다면 /usr/local/bin/ 디렉토리에 관련 실행 파일이 설치 되었을 것이다.
먼저 MySQL 서버를 실행하는 명령은 다음과 같다. 물론 root 아이디로 실행해야 한다.

mysql.server start

위와 같이 입력하면 서버가 실행된다. 두개의 프로세서가 데몬상태로 실행되는데, safe_mysqld, mysqld 이렇게 두개이다.
이 두개의 프로세서가 실행되고 있다면 이제 MySQL을 사용할수 있다. MySQL 두번째 강좌에서 보면 위의 두 프로그램에 대한 설명이 나와 있다.
이 상태에서 아래와 같이 MySQL을 사용할수 있는 가상 터미날을 실행시킨다.

mysql -u root mysql

MySQL이 처음 설치되면 DB admin user 는 root 이다. 몰론 이것은 변경 할수도 있다.
디폴트로 설치한 경우 암호가 처음에는 생성되어 있지 않으므로 위와 같이 하면 실행이 된다. 위의 명령에 대한 설명은 다음과 같다.

mysql -u root mysql
실행파일 유저선택 root db 유저 사용할데이타베이스

그외 몇가지 간단한 옵션이 있으나 필요하면 mysql -h 하여 내용을 참고 하기 바란다.
그리고, root 유저에 암호를 설정한 후 부터는 -p 옵션을 하나더 추가하여 실행하기 바란다. -p 옵션은 패스워드를 입력받는 옵션이다.
아래에 root 패스워드 변경하는 방법 설명해 놓았습니다.

1.2 mysql 프로그램의 사용

mysql을 실행하여 간단한 동작을 하여보자.
mysql은 일반 유저로 실행하여도 되는 프로그램이다.

$ mysql -u root mysql ---> DB 사용을 위한 실행
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 3.21.27-gamma-log

Type 'help' for help.

mysql>

위와 같이 연결된다. 여기서 몇가지 간단한 테스트용 명령을 적는다.

mysql> show databases; --> 데이타베이스 종류보기

+----------+

| Database |

+----------+

| mysql      | 

| test         |

+----------+  

 

2 rows in set (0.00 sec)

mysql> show tables from mysql --> mysql상의 테이블 정보 보기
    -> \g
+-----------------+
| Tables in mysql |
+-----------------+
| db              |
| func            |
| host            |
| user            |
+-----------------+
4 rows in set (0.00 sec)

mysql> use mysql;
mysql> show columns from db            --> db table 칼럼정보 보기
    -> \g
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| Host        | char(60)      |      | PRI |         |       |
| Db          | char(32)      |      | PRI |         |       |
| User        | char(16)      |      | PRI |         |       |
| Select_priv | enum('N','Y') |      |     | N       |       |
| Insert_priv | enum('N','Y') |      |     | N       |       |
| Update_priv | enum('N','Y') |      |     | N       |       |
| Delete_priv | enum('N','Y') |      |     | N       |       |
| Create_priv | enum('N','Y') |      |     | N       |       |
| Drop_priv   | enum('N','Y') |      |     | N       |       |
+-------------+---------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

mysql> show index from db              --> db table의 인덱스정보기
    -> \g
+-------+------------+----------+--------------+-------------+
-----------+-------------+----------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name |
Collation | Cardinality | Sub_part |
+-------+------------+----------+--------------+-------------+
-----------+-------------+----------+
| db    |          0 | Host     |            1 | Host        |
A         |     4 |     NULL |
| db    |          0 | Host     |            2 | Db          |
A         |     4 |     NULL |
| db    |          0 | Host     |            3 | User        |
A         |     4 |     NULL |
| db    |          1 | User     |            1 | User        |
A         |  NULL |     NULL |
+-------+------------+----------+--------------+-------------+
-----------+-------------+----------+
4 rows in set (0.00 sec)

mysql> show status                     --> MySQL의 상태정보 보기
    -> \g
+--------+-----------------+-----------+---------------+---------
+-------------+
| Uptime | Running_threads | Questions | Opened_tables | Reloads
| Open_tables |
+--------+-----------------+-----------+---------------+---------
+-------------+
|   1493 |               1 |        26 |             4 |       1
|           4 |
+--------+-----------------+-----------+---------------+---------
+-------------+
1 row in set (0.00 sec)

mysql> show variables                  --> MySQL 환경변수보기
    -> \g
+--------------------+---------------------------------+
| Variable_name      | Value                           |
+--------------------+---------------------------------+
| back_log           | 5                               |
| basedir            | /usr/local/                     |
| datadir            | .                               |
| join_buffer        | 131072                          |
| key_buffer         | 1048568                         |
| language           | /usr/local/share/mysql/english/ |
| max_allowed_packet | 65536                           |
| max_connections    | 90                              |
| max_join_size      | 4294967295                      |
| max_sort_length    | 1024                            |
| net_buffer_length  | 8192                            |
| port               | 3306                            |
| record_buffer      | 131072                          |
| skip_locking       | 1                               |
| socket             | /tmp/mysql.sock                 |
| sort_buffer        | 2097144                         |
| table_cache        | 64                              |
| thread_stack       | 65536                           |
| tmp_table_size     | 1048576                         |
+--------------------+---------------------------------+
19 rows in set (0.00 sec)

mysql> select * from db                  --> db 테이블의 데이타 가져오기
    -> \g
+-----------+----------+------------+-------------+-------------+
-------------+-------------+-------------+-----------+
| Host      | Db       | User       | Select_priv | Insert_priv |
Update_priv |Delete_priv | Create_priv | Drop_priv |
+-----------+----------+------------+-------------+-------------+
-------------+-------------+-------------+-----------+
| %         | test     |            | Y           | Y           |
Y           |Y           | Y           | Y         |
| %         | test\_%  |            | Y           | Y           |
Y           |Y           | Y           | Y         |
| localhost | binggo   | binggo     | Y           | Y           |
Y           |Y           | Y           | Y         |
+-----------+----------+------------+-------------+-------------+
-----------------------+------------+-------------+-------------+3 rows in set (0.00 sec)

mysql>
위의 명령은 기본적인 명령으로서 실제 mysql 을 사용할때 자주 사용될 명령이라고 생각된다. 기타 sql문은 강좌 3에서 정리하였으므로 생략하기로 한다.

2. MySQL DB admin user 암호걸기

MySQL 을 설치후 가장 먼저 해야 할 일은 MySQL의 admin 인 root (DB user 임)의 암호를 설정하는 일이다.
이것은 서버가 인터넷상에 접속되어 있을경우 보안을 위하여 가장 먼저해야 하는 일이라고 생각된다. 암호를 설정하는 방법은 다음과 같다.
먼저 admin 유저인 root 아이디의 암호를 설정하기로 한다.

> use mysql
mysql> update user
-> set password = password('testpass')
-> where user = 'root'
-> \g
Query OK, 2 row affected (0.00 sec)

mysql>

위를 실행하면 일반적으로 user 테이블상에 root 아이디가 두개가 root 아이디가 등록 되어 있으므로 2 row 의 비밀번호가 변경이 된다.
비밀번호가 msyql에서 인식못하는것도 있으니 꼭 pass 여기시 확인을 위하여 아래의 명령을 실행해 본다.

mysql> select * from user
-> \g
. . . .
. . . .

테이블상에 저장된 내용이 출력될 것이다.
그 이후에 바뀐 내용을 적용시켜야 한다. 아파치 재시작 해주듯 mysql 도 재시작 해줘야 하는데
mysql 에 접속한 상태에서는 mysql> flush privileges; 하면 되고 바깥에서는 # mysqladmin -u root -p reload 이렇게 하면 된다.
# mysqladmin -u root -p reload 이렇게 해도 에러나는 분들은 패스가 안걸려서 그렇다. 패스가 안걸리면 # ./mysqladmin -u root -p reload 이렇게 해주면 된다.
패스 걸면 이제 ./ 하지 않아도 실행이 되는데 패스거는 방법은 [root@ssalkong bin]# vi /etc/profile 파일에
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /usr/local/mysql/bin <--- 추가
pathmunge /usr/local/apache/bin <--- 추가
fi
....
끝부분에 걸어주면 된다. 이제 어디서든 ./ 없이 명령을 치면 실행된다.
[root@ssalkong bin]# vi /etc/profile 이렇게 적용시켜 준후 로그아웃하고 다시 로그인하면 설정이 먹힌다.
[root@ssalkong bin]# vi /etc/profile 만하고 ls 해보면 [root@ssalkong /]# ls -bash: ls: command not found 이런 에러가 난다.

자 이제부터는 admin 유저인 root로 mysql에 접속할 경우 꼭 password를 입력해야 한다. 즉 아래와 같이 실행하여야 한다.

$ mysql -u root -p mysql
Enter password:

암호를 물을때 암호를 입력하면 mysql을 사용할수 있다.
※ mysql 처음 루트 패스워드 생성
use mysql \g
update user set password=password('비번') where user='root';
mysql에서 패스워드 변경

패스워드 변경
패스워드를 변경하려는 사용자의 ID가 "userid"이고 새로 사용하실 패스워드가 "notapassword"라면, 다음과 같이 명령을 입력해주시면 됩니다.


3. 새로운 데이타 베이스 생성과 사용자 연결

3.1 데이타 베이스의 생성

데이타베이스 생성의 방법은 두가지가 있다. mysqladmin 프로그램을 이용하여 root 아이디로 shell 상에서 생성하는 방법과 또하나 mysql 프로그램 상에서 생성하는 방법이다.
먼저 mysqladmin 프로그램을 이용하는 방법이다.

mysqladmin create soonhg --> 이경우 soonhg 라는 데이타베이스 생성
admin 인 root 에 암호를 설정한 경우 다음과 같이 실행한다.
mysqladmin -u root -p create soonhg

이 경우 디폴트로 설치한 경우 /usr/local/var/soonhg 라는 디렉토리가 생성된다. 이 디렉토리가 데이타 베이스 공간으로 이용될 곳이다.
즉 soonhg 라는 데이타 베이스 공간에 테이블을 생성할 경우 soonhg 라는 디렉토리로 관련된 파일이 생성되며 데이타가 저장된다.

*******************************************************************
중요한 tip......
*******************************************************************
MySQL과 주고 밍는 각종 내용은 /usr/local/var 상의 full도메인명.log 파일상에 모두 저장된다.
만일 동작 상태를 알고 싶다면 터미날을 하나 더 열어서 tail -f full도메인명.log 하여 MySQL과의 주고받는 내용을 모니터링 할 수 있다.
*******************************************************************

두번째 방법으로 mysql을 이용하는 법이다. mysql 실행상태에서 아래와 같이한다. (admin 인 root 아이디로 mysql 에 접속)

mysql> create database soonhg
-> \g
Query OK, 1 row affected (0.00 sec)

mysql>

위의 두가지 방법중 어느 방법을 사용하여도 무관하다. 개인적으로는 mysql상에서 데이타베이스를 생성하는것을 권장한다.
왜냐하면 계속하여 작업을 해야할것들이 있기 때문이다.

3.2 데이타베이스와 mysql 관리 테이블과의 연결 및 사용자등록 및 특권정의

자 이제 생성된 데이타베이스와 데이타베이스 관리및 엑세스 권한등을 정의하고 있는 mysql 상의 db, user 테이블에 방금 생성된 soonhg 테이블의 내 용을 정의 하자.
먼저 이 soonhg 데이타베이스는 모든 호스트 상에서 접근이 가능하도록 만들기로 한다. 그리고 사용자는 id 로 park 라는 DB user 를 생성한다고 하자. sql 문은 다음과 같다.

mysql> insert into db
-> (host,db,user,select_priv,insert_priv,update_priv,delete_priv,
-> create_priv,drop_priv)
-> values ('%','soonhg','park','Y','Y','Y','Y','Y','Y')
-> \g
Query OK, 1 row affected (0.00 sec)

mysql>

위의 sql문에서 보면 park 이라는 사용자는 soonhg 데이타베이스에 대하여 select,insert,update,delete,create,drop 권한이 모두 주어졌다. 이것은 하나의 soonhg 데이타 베이스에 대하여 각 sql 명령에 대한 권한을 개별적 으로 줄수 있다는 것을 의미한다.
select * from db 라는 sql 문을 이용하여 정상적으로 insert 되었는지 확인해 보기 바란다.

자 이제 park 라는 db 사용자에 대한 등록을 할 차례이다.
다음과 같은 sql 문을 만들어 실행한다.

mysql> insert into user
-> (host,user,password,select_priv,insert_priv,
-> update_priv,delete_priv,create_priv,drop_priv,
-> reload_priv,shutdown_priv,process_priv,file_priv)
-> values ('localhost','park',password('park'),'N',
-> 'N','N','N','N','N','N','N','N','N')
-> \g
Query OK, 1 row affected (0.00 sec)

mysql>

위와 같이 하여도 되고 간단히 아래와 같이 하여도 무방하다.

mysql> insert into user
-> (host,user,password)
-> values ('localhost','park',password('park'))
-> \g
Query OK, 1 row affected (0.00 sec)
mysql>

host,user,password 이외의 칼럼들은 모두 디폴트로 'N' 으로 설정 되어 있으므로 위와 같이 하면된다.
여기서 db 테이블과 user 테이블은 특권상에서 약간의 차이점이 있다. db 테이블 상에서 설정되지 않고 user 테이블 상에만 설정되어진 DB 사용자는 user 테이블 상에서 설정된 권한을 존재하는 모든 데이타베이스에 대하여 인정받는다.
이러한 이유로 일반 사용자인 경우는 user 테이블 상에는 모든 권한을 'N' 로 설정하여야 하고 각 DB user 가 사용할 데이타베이스에 대한 권한을 DB 테이블에 다시 정해주는 것이다. 즉, 데이타베이스가 여러개 존재한다고 가정하자. aaa, bbb, ccc 라는 세개의 데이타베이스가 존재할때, park 이라는 DB 사용자는 aaa 라는 데이타베이스만 이용하게 하려고 설정하려고 한다고 하자.
이경우는 user 테이블에는 모든 권한을 'N' 상태로 설정하고 db 테이블에는 aaa 라는 테이블에 대하여 모든 권한을 'Y' 라고 설정하면 이 park라는 db 사용자는 aaa 라는 데이타베이스에 대하여 사용권한이 주어질 것이다.
잘 이해가 가지 않는다면 몇번 더 자세히 읽어보고 test 해본다면 쉽게 이해할 수 있을것이다.

*******************************************************************
중요한 tip......
*******************************************************************
user 테이블에 사용자를 insert, update 한 경우 MySQL을 꼭 재기동 시켜 주어야만 한다. 명령은 다음과 같다.
myaqladmin -u root -p reload
이 명령은 user 테이블에서 사용자 정보를 다시 읽어서 MySQL 을 다시 실행시켜준다.
*******************************************************************

4. 테이블의 생성

테이블의 생성은 일반적인 sql 문장이므로 간단히 테이블 하나 생성하는 예제를 적는것으로 대신하겠다.
위에서 생성한 사용자와 사용자를 위한 테이블을 이용하여 작업을 하여보자

먼저 mysql을 실행한다. 실행은 그냥 일반 계정 사용자로 한다.

$ mysql -u park -p soonhg
Enter password: **** <-- 여기서 password 인 park을 입력한다.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17 to server version: 3.21.27-gamma-log

Type 'help' for help.

mysql>

자 MySQL에 접속되었다. 이제 table을 생성하여 보자. 아래는 individual 테이블 생성을 위한 SQL 문장이다.

create table individual(
empno char(16) primary key,
name char(20) not null,
sex char(2),
addr char(80),
tel char(15)
)

위의 테이블은 개인정보 테이블로 간단히 만든것이다. empno 가 키가 되어 저장된다. 물론 index 테이블이 하나 생성되며 empno 가 인덱싱 되어진 테이블이 생성될것이다. not null 은 말그대로 name 칼럼은 null 값은 받지 않겠다는 것이고.....
자 그럼 insert 문장을 하나 작성해 보자

insert into individual
values ('1','박순행','1','서울시 중랑구 상봉동 LG apt.','02-777-7777')

위의 sql문을 실행하면 한 row의 데이타가 insert 된다. 그럼 이제 select 문을 이용하여 읽어보자.

mysql> select *
-> from individual
-> \g

+-------+--------+------+------------------------------+-------------+

| empno |  name  |  sex  |                      addr                 |        tel        |

+-------+--------+------+------------------------------+-------------+

|     1     | 박순행 |     1   |  서울시 중랑구 상봉동 LG apt.   | 02-777-7777 |

+-------+--------+------+------------------------------+-------------+

1 row in set (0.00 sec)

위와 같이 출력 될 것이다. 여러가지 sql문장을 테스트 해보면 될것이다.

<< 결론 >>
많이 알지도 못하면서 괜히 시작한 것은 아닌가 합니다. 하지만 msql보다 매우뛰어난 기능을 가지고 있고 또 mysql을 사용하고자 하는 분이 저처럼 사용에 관련된 자료가 없어서 고생하지 않도록 하기 위하여 짧은 지식으로나마 이렇게 글을 올려 봅니다.
다음 강좌에서는 MySQL 과 C 언어와의 연결법에 대하여 강의해 보도록 하겠습니다. 저의 작은 강좌가 많은 사람들에게 도움이 되었으면 합니다.
-----------------------------------------------------------------------------------------------------------------

# mysqladmin -u userid -p password notapassword

명령을 입력하면 기존의 패스워드를 물어보는데 제대로 입력해주고 나면 바로 패스워드가 변경됩니다.

*NIX 기준입니다만 윈도우에도 MySqlAdmin.exe 파일이 있으니 동일하게 사용 가능할 것 같구요-

Mysql DB내의 계정 패스워드 변경하기
DB내의 패스워드를 변경시에는 mysql의 root로 작업을 하여야 합니다.
패스워드 변경 방법은 3가지 입니다.
예의 내용은 user는 root이며 패스워드를 db&king으로 변경하겠다는 의미입니다.

1.mysql> update user set password=password('db_king')
where user='root';
flush privileges;

2. mysql> SET PASSWORD for root=password('db&king');

3. $ mysqladmin -u root password db&king

*******************************************************************
중요한 tip......
*******************************************************************
두 가지 방법이 있다. etc/rc.d/rc.local 화일에 /usr/local/mysql/bin/safe_mysqld & 를 추가시키는 방법과
ntsysv를 실행해서 mysql에 체크를 하신후 저장하는 방법. 또있다고요? -_-;
*******************************************************************