본문 바로가기
개발/MySql

우분투 서버에 mysql server 5.1 설치하기

by 감토끼 2010. 9. 14.

* 실행환경 *
OS: Ubuntu 10.04 


apt-get!..


apt-get은 리눅스에 사용하는 소프트웨어를 설치, 제거, 업그레이드를 할 때 쓰는 소프트웨어 관리 프로그램이다.
 우분투에서는 이 소프트웨어들을 '패키지' 라고 부른다. 우분투에서도 패키지를 관리할때 apt-get을 사용한다. 
패키지 설치에는 root 계정 암호가 필요하다.




설치확인

우선, 내가 설치하고자 했던 mysql-server 5.1 이 설치되어있는지 살펴보려면
 dpkg -l  명령을 사용한다.

설치 목록 중에서 내가 원하는 내용을 뽑아내기 위해 grep 명령을 사용하였다. grep 명령은 인자로 정규식을 받을 수 있다. 자세한 것은 'grep 사용법'으로 검색해보면 된다.

dpkg -l | grep mysql




설치

설치법은 아주 간단하다. apt-get install 명령 하나면 끝난다. 인자로 설치하고 싶은 패키지의 이름을 넣는다.
중간 중간에 y/n? 을 물어볼때 적절히 선택해주고, root 암호를 물어볼 때 암호를 넣어주면 설치가 아주 잘 된다. 

난 이미 설치했지만 한번 더 apt-get install mysql-server-5.1 명령을 쳐보니 이미 최신 설치되어있다고 나온다.
root@playground2010:~# apt-get install mysql-server-5.1
Reading package lists... Done
Building dependency tree
Reading state information... Done
mysql-server-5.1 is already the newest version.
The following packages were automatically installed and are no longer required:
  linux-source-2.6.32
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 63 not upgraded.






Mysql 초기 설정하기!...


패스워드

Mysql을 처음 설치했을 때는 root에 패스워드가 걸려있지 않은 상태이다. 패스워드를 걸어주자.
mysqladmin -u root password your-new-password
위 명령에 빨간 부분에 새로운 패스워드를 넣으면 된다. 패스워드를 한번 더 물어보는데 초기에 패스워드가 없는 상태이므로 그냥 엔터를 치면 된다.




외부에서 접속 할수 있도록 하기 - 1.외부접속 계정

여기부터 아주 중요하다. 로컬에 mysql을 설치할때와는 달리, 서버에 mysql을 설치하고, 외부에서 여기에 언제든 접속할 수 있게 하기 위해선 설정이 조금 더 필요하다. 설정은 http://powerhan.tistory.com/31 이 곳을 특히 참조하였다. 너무 도움이 되었다.^^

우선 외부에서 접속할수 있는 계정을 만들어야 한다. 잘은 모르지만, mysql 이라는 데이터베이스 안의 user와 host라는 테이블에서 계정을 관리하는것 같다. 그냥 한번 구경 해보았다.

root@playground2010:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> desc user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

mysql> desc host;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
| Delete_priv           | enum('N','Y') | NO   |     | N       |       |
| Create_priv           | enum('N','Y') | NO   |     | N       |       |
| Drop_priv             | enum('N','Y') | NO   |     | N       |       |
| Grant_priv            | enum('N','Y') | NO   |     | N       |       |
| References_priv       | enum('N','Y') | NO   |     | N       |       |
| Index_priv            | enum('N','Y') | NO   |     | N       |       |
| Alter_priv            | enum('N','Y') | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
20 rows in set (0.00 sec)

mysql>


...

여기부터가 본론.
계정을 만드는 명령은 다음과 같다.
grant all privileges on *.* to 'USERNAME'@'%' identified by 'PASSWORD';
빨간 부분을 적절히 고치면 된다. 나는 외부에서 root로 접속할 것이기 때문에 root라고 넣었다.

가장 중요한 것은 초록색으로 표시한 % 이다. %는 모든 호스트에서 접속 가능함을 의미한다.
뭐 바뀐거 있나 하고 user 테이블을 조회해 보았다.
mysql> select user, host from user;
+------------------+---------------------------+
| user             | host                      |
+------------------+---------------------------+
| root             | %                         |
| root             | 127.0.0.1                 |
| debian-sys-maint | localhost                 |
| root             | localhost                 |
| root             | playground2010.cafe24.com |
+------------------+---------------------------+
5 rows in set (0.00 sec)





외부에서 접속 할수 있도록 하기 - 2.외부접속 차단 해지하기

/etc/mysql/my.cnf 에는 bind-address = 127.0.0.1 이라는 부분이 있다. mysql에 접속하는 호스트 주소를 127.0.0.1 으로 설정해 놓고 그 외의 접근은 차단해버리기 위해 설정된것이다. 이 부분을 # 으로 주석 처리해버리면 외부에서도 접속이 가능하다.

vi 로 열어서 편집하면 된다. 
vi /etc/mysql/my.cnf 명령으로 연 후,
편집은 해당 줄을 찾아가서 명령모드에서 i 를 눌러 끼워넣기 모드로 들어간 후, # 로 주석처리후, esc 로 다시 명령모드로 빠져나온 후 , :w 으로 저장하고, :q 로 vi를 닫으면 끝!. 자세한건 'vi 사용법' 을 검색하면 된다.


그리고 변경된 설정을 적용하기 위해 반드시 다음 명령어로 restart 해준다.
 /etc/init.d/mysql restart



여기까지 하면 외부에서도 마음껏 접속이 가능하다. 끝!

* 참고한 사이트들 *
- mysql 사용법 : http://gpgstudy.com/gpgiki/BackLinks?    page=MySQL%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EC%99%80%20%EB%8D%B0%
 EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0
- mysql 외부 접속 설정 : http://powerhan.tistory.com/31