Database

[MySql] 윈도우에서 MySql4 설치-관리 기본요령

페이지 정보

본문

작성자    : freefax@good.to
홈페이지 : http://freefax.inter-i.com
저작권    : 자유롭게 수정 및 배포 가능
제목      : MySQL4 설치에서 실행까지
====================================

설치 : http://www.mysql.org에서 윈도우 binary zip파일을 다운로드하여 압축해제-설치.

D:\\mysql\\bin>winmysqladmin ==> 설치 후 최초로 실행해야 한다.
이를 실행하면 windows 또는 winnt 폴더에 my.ini라는 파일이 생기는데, 다음을 참조하라.

//////// my.ini /////////////
[mysqld]
basedir=D:/mysql
#bind-address=211.230.116.7 <<==고정 아이피라면 설정한다.
datadir=D:/mysql/data
language=D:/mysql/share/korean
default-character-set=euc_kr <<== euc-kr 이 아니다. 즉, euc 다음에 underscore임

port=3306
[WinMySQLadmin]
Server=D:/mysql/bin/mysqld-nt.exe
user=root
password=freesex1717 <<== 암호와 되지 않은 문자열로 저장되어 있다.
QueryInterval=10
/////////////////////////////

D:\\mysql\\bin>mysqld --install ==> 윈도우에서 자동으로 시동되게 하는 것으로 service 라고 정의했다.

D:\\mysql\\bin>mysql mysql (기본설정은 mysql의 mysql디비에서 설정하며 최초에는 비번없이 열린다)
위와 같이 명령을 주었을 때, Can't connect to MySQL server on 'localhost' (10061)
에러 메시지가 뜨면 다음을 점검하라 :
1. php.ini 의 include_path에 basedir 추가 --> include_path = D:/mysql(my.ini 파일 참조요)
2. host, port, socket 등은 디폴트로 설정되어 있으므로 변경하지 않았다면 확인불요.
연결이 되면 계속 아래 명령을 수행한다.

D:\\mysql\\bin>mysql mysql 명령이 수행되면 다음과 같은 메시지를 받게 된다.
mysql>
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 8 to server version: 4.0.17-max-debug

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

***
윈도우 MySQL에서는 모든 local user는 비밀번호 없이 full privileges를 갖고 있으므로
mysql.user table에서 Host='localhost' and User='' 를 제거하여야 하며 모든 user에게
비밀번호를 부여한다.
mysql>DELETE FROM `user` WHERE `Host` = 'localhost' AND `User` = '';

동시에 root user에게 비밀번호를 할당한다.
mysql>update user set password=('sck1717') where user='root';
mysql> FLUSH PRIVILEGES; (권한이나 사용자 설정 후 필수명령임)
*** 사용자의 기본설정이 완료되었으며 다음부터 루트권한자는 반드시 비밀번호를 입력해야만 접근이 가능하다.
mysql>QUIT

비밀번호 부여는 다음과 같이 설치 후 바로 부여할 수도 있다.
D:\\mysql\\bin>mysqladmin -u root password 비밀번호
D:\\mysql\\bin>mysql -uroot -p비밀번호 mysql

////////////////////////////////////////////////////////
* 오류 1045:
다음의 순서로 실행
D:\\mysql\\bin>mysqld stop
D:\\mysql\\bin>mysql -uroot mysql
mysql>update user set password=('비번') where user='root';
mysql>FLUSH PRIVILEGES;

mysql>exit
D:\\mysql\\bin>mysqld stop

* 오류 1044:
다음의 순서로 실행

D:\\freefax\\mysql\\bin>mysql -uroot -h 127.0.0.1
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 3 to server version: 4.0.17-max-debug

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

mysql> FLUSH PRIVILEGES ;
Query OK, 0 rows affected (1.29 sec)
/////////////////////////////////////////////////////////

localhost와 다른 호스트에서 비밀번호로 접근이 가능한 루트(SuperUser), 그리고 다른 곳에서도 접근이
가능하기 위해 반드시 다음과 같은 GRANT명령 2줄을 넣는다. 
mysql> GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
Query OK, 0 rows affected (0.43 sec) ==> 사용자:root를 반드시 따옴표로 묶는다.
* 이 명령은 아래의 insert into db values('localhost','home','root','y'.....와 같다)

mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec) ==> %는 도스나 윈도우의 와일드 카드 * 와 같으며 와일드 카드란
도람뿌나 고스톱에서 뭐든지 잡을 수 있는 패 라는 뜻이다.

mysql> FLUSH PRIVILEGES ; // 권한 설정 후에 필수명령임
Query OK, 0 rows affected (0.09 sec)
추가로 필요한 사용자 마다 권한을 설정한다.
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'; //localhost에서 접근이 가능한 암호없는 admin 사용자

mysql> SHOW GRANTS FOR root; //권한을 확인한다.
+------------------------------------------------------------------------------+
| Grants for root@%                        |
+------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '1ae9439718df769f' WITH GRANT OPTION |
+------------------------------------------------------------------------------+
1 row in set (0.00 sec) //ROW란 column에 대응하는 데이터 열이라는 뜻이다. 디비는 오와 열을 맞추게 되어 있다.

************************
database삭제
mysqladmin -uroot -p****** drop 디비명

user가 필요로 하는 database의 생성
mysqladmin -uroot -p****** create 디비명

use mysql; //각 데이터베이스를 총괄관리하는 디비테이블이 mysql이다. 즉, 상품명 mysql 안에 mysql이라는 디비
테이블이 있다.

다음은 디비 query 명령문으로 권한설정을 할 수 있는데 위에 설명한 GRANT 설정과 동일한 효과이다.
insert into db values('localhost','home','root','y','y','y','y','y','y','y','y','y','y','y','y');
(권한 Y가 모두 12열이며 괄호 안의 'localhost','home','root' 등 3열만 설정해 주면 된다)

use mysql;
INSERT INTO user VALUES('localhost','root',PASSWORD('sck1717'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0');
(권한 Y 21개, 공백 4개, 0 3개 등 모두 연달아서 28 열이다)

FLUSH PRIVILEGES;
*************************

끝.
추신 : 이 문서에 오류가 있다면 바로잡아 주시기 바랍니다.

관련자료

nuno님의 댓글

일반적으로 root외의 일반 사용자 추가시
mysql > db 테이블내의 해당 사용자의 권한은 Grant를 제외하고 모두 "Y"로
mysql > user 테이블내의 해당 사용자의 권한은 모두 "N"으로 하는것이 보안상 좋음.
Today's proverb
인간을 사랑할 것. 아무리 나약한 인간이나 초라하고 불쌍한 인간도 사랑할 것. 그리고 그들을 심판하지 말 것. (생텍쥐페리)