강좌
클라우드/리눅스에 관한 강좌입니다.

 

데이터베이스 분류

리눅스 쉘상태에서 특정파일에 저장된 SQL문 실행하기 : 호스팅사용자를 위한 DB,사용자등 생성하기 (mysql 응용편 #2)

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

리눅스 쉘상태에서 특정파일에 저장된 SQL문 실행하기 : 호스팅사용자를 위한 DB,사용자등 생성하기 (mysql 응용편 #2)




이번에는 쉘명령어 상태에서 SQL문을 실행하는 방법을 좀 더 실무적인 관점에 맞추어 설명해 보도록 하겠습니다. 

 

 

 

, 호스팅서버로 사용되는 리눅스에서는 새로운 호스팅사용자의  서비스신청에 의해 MYSQL 데이터베이스를 사용하도록 제공하기위하여 다음과 같은 설정을 해야합니다. 

 

 

 

- 사용자의 데이터베이스생성
-
사용자의 DB권한설정
-
사용자의 MYSQL계정생성 및 MYSQL계정 패스워드 생성 및 권한설정

, 새로운 사용자의 요구로 인하여 MYSQL에 위와 같은 작업을 해야합니다. 

 

 

 이 작업을 하기 위하여 매번 MYSQL에 접속하여 SQL문을 직접 입력하여 작업하기란 보통이상의 인내를 요하는 작업일 것입니다. 

 

 

 따라서 우리는 위의 3가지 작업을 한번에 완료할 수 있는 SQL문을 특정 파일에 저장해 둔 다음 이를 쉘에서 바로 실행하는 방법으로 작업해 보겠습니다. 

 

 

 

먼저, 다음과 같이 위의 3가지 작업을 하기위한 SQL문을 생성해야 합니다. 

 

 

 

[root@file bin]# cat temp2.sql

create database temp_db2;

insert into db values('localhost','temp_db2','tempuser','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

insert into user values('localhost','tempuser',password('111111'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',1,'','','','','','');

[root@file bin]#


위의 3가지 SQL문을 차례대로 간단히 설명하면 다음과 같습니다. 

 

 

 

 

create database temp_db2;

temp_db2라는 새로운 데이터베이스를 생성하는 SQL문입니다. 

 

 

 

 

insert into db values('localhost','temp_db2','tempuser','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

MYSQL mysql이라는 관리데이터베이스의 db테이블에 temp_db2라는 새로운 데이터베이스의 생성과 소유자 및 권한을 설정하는 SQL문입니다. 

 

 

 

 

insert into user values('localhost','tempuser',password('111111'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',1,'','','','','','');

MYSQL mysql이라는 관리데이터베이스의 user테이블에 tempuser라는 새로운 사용자와 패스워드, 그리고 이 사용자가 사용할 각 권한들을 설정하는 SQL문입니다. 

 

 

 

그리고 다음과 같이 “./mysql -u root -p mysql < ./temp2.sql”을 실행하여 temp2.sql에 저장된 SQL문을 실행한 것입니다. 

 

 

 

[root@file bin]# ls -l temp2.sql

-rw-r--r--    1 root     root          304  2 13 15:47 temp2.sql

[root@file bin]#
[root@file bin]# pwd

/usr/local/mysql/bin

[root@file bin]#

[root@file bin]# ./mysql -u root -p mysql < ./temp2.sql

Enter password: ********

[root@file bin]#

위의 예처럼 “./mysql -u root -p mysql < ./temp2.sql”을 실행 한 후에 MYSQL root 패스워드를 입력하고 아무런 메시지 없이 종료되었다면 temp2.sql파일에 저장되어 있는  SQL문들이 정상적으로 실행이 되었다는 것을 의미합니다. 

 

 

 만약 temp2.sql문에 저장된 단 하나의 SQL문이라도 비정상적으로 실행이 되었다면 에러메시지가 발생하면서 실행이 멈추게 됩니다. 

 

 

 

[주의사항]

만약 이렇게 실행한 후에 에러가 발생하였다면 에러가 발생한 SQL문의 이전까지는 모두 정상적으로 실행이 되었으며 에러가 발생한 SQL문을 포함하여 이후의 SQL문들은 모두 실행이 되지 않는다는 점에 유념하시기 바랍니다. 

 

 

 

 

이후의 설명은 방금 실행한 temp2.sql문이 정상적으로 실행이 되었는가를 확인하기 위한 방법으로써 어렵다고 생각되신다면 굳이 확인하실 필요없이 건너뛰셔도 무방합니다. 

 

 

 위의 실행이 정상적인가에 대한 의문점이 있으신 분들만 참고하시기 바랍니다. 

 

 

 

, 그럼 위의 temp2.sql문이 정상적으로 실행이 되었는가를 확인하기 위하여 다음과 같이 MYSQL로 접속하여 확인해 보도록 하겠습니다. 

 

 

 

[root@file bin]# ./mysql -u root -p mysql

Enter password: ********

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 17 to server version: 4.0.14

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql>

mysql> show databases;

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

| Database   |

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

| mysql      |

| picasso_db |

| temp_db2   |

| tempdb     |

| test       |

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

5 rows in set (0.00 sec)

 

mysql>

위와 같이 “show databases”의 결과를 보듯이 temp_db2라는 새로운 데이터베이스가 생성되어 있음을 알 수 있습니다. 

 

 

 

그리고 다음은 MYSQL의 관리데이터베이스인 mysql데이터베이스의 db테이블에 temp_db2라는 데이터베이스에 설정이 정상적으로 입력되었는가를 확인한 것입니다. 

 

 

 

mysql> select * from db where user='tempuser';

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

| Host      | Db       | User     | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Create_tmp_table_priv | Lock_tables_priv |

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

| localhost | temp_db2 | tempuser | Y           | Y           | Y           | Y           | Y           | Y         | Y          | Y               | Y          | Y          | Y                     | Y                |

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

1 row in set (0.01 sec)

 

mysql>

위의 결과를 보시는 바와 같이 정상적으로 입력되었음을 알 수 있습니다. 

 

 

 

그리고 다음은 MYSQL의 관리데이터베이스인 mysql데이터베이스의 user테이블에 tempuser라는 새로운 사용자가 정상적으로 입력되었는가를 확인한 것입니다. 

 

 

 

mysql> select * from user where user='tempuser';

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

| Host      | User     | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections |

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

| localhost | tempuser | 5fcc735428e45938 | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                |          |            |             |              |             0 |           0 |               0 |

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

1 row in set (0.00 sec)

 

mysql>

mysql>

mysql> exit

Bye

[root@file bin]#

위의 결과를 보시는 바와 같이 정상적으로 입력되었음을 알 수가 있습니다. 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

 

공지사항


뉴스광장


  • 전체 회원수 59,513 명
  • 전체 게시물 31,493 개
  • 전체 댓글수 11,904 개