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
“힘내라구.” 밤에 헤어질 때, 아주 좋은 이야기를 나누었을 때든지 아무 관련 없이 로댕은 곧잘 내게 이렇게 말하는 것이었습니다. 그는 알고 있었던 겁니다. 젊었을 때, 이 말이 날마다 얼마나 필요한 것인가를. (릴케)