Download presentation
Presentation is loading. Please wait.
1
MySQL RENO
2
목차 03-05 준비 설치 43 데몬의 실행과 종료 사용자 계정 추가 사용자 계정 삭제 사용자 계정 비밀번호 변경 root 계정 비밀번호 변경 원격서버의 MySQL접속 Shell에서 SQL문 실행 (DB, Table 생성) root password 복구방법 사용자 권한설정
3
MySQL에 앞서.. SQL(Structured Query Language) 데이터베이스
데이터베이스를 조작하기 위한 언어 데이터베이스 어떤 규칙이나 목적을 기초로 하여 관리되는 데이터의 모음 DBMS(DataBase Management System) 여러 데이터베이스를 통합적으로 관리하는 시스템 DBMS로는 MySQL, SQLite, Oracle, Micorsoft Access 등이 있다.
4
MySQL RDBMS 600만의 사용자 C/C++/C# Java Python php등 언어 지원
Relational DataBase Management System 600만의 사용자 C/C++/C# Java Python php등 언어 지원 LAMP 플렛폼의 데이터베이스 구성체로 작동 MySQL은 연결형 데이터베이스 관리 시스템이다. -> RDBMS(Relational DataBase Management System)이다. RDBMS는 데이터를 행과 열로 이루어진 테이블 형식으로 관리한다. 각각의 데이터는 독립되어 있기 때문에 관리하기 쉽고 테이블끼리 자유롭게 조합하여 연결할 수 있는게 장점이다. 이 외에는 계층형 네트워크형 등이 있다.
5
MySQL의 특성 빠르다 튼튼하고 안정적이다 쉽고 빨리 배울 수 있다 무료다 아무리 큰 데이터도 처리가능하다
고사양을 요구하지 않는다 보안이 뛰어나다 필자는 리눅스에서 MySQL은 물론 오라클과 인포믹스도 사용해 보았는데 큰 속도 차이를 느낄 수 있을 만큼 MySQL은 빠릅니다.(MySQL / 허정수, 한규섭 / 20) 참고하자. 많은 사용자로부터 안정성이 증명되고 있다. 설치와 사용이 쉽고 사용자가 많아 쉽게 문제점의 해답을 얻을 수 있다. 초기에는 유료였지만 이후 무료가 되었다. 한 테이블당 OS가 지원하는 하나의 파일의 최대 파일 크기까지 데이터를 저장할 수 있다. 최대 파일 크기 이상의 데이터는 MySQL에서 지원하는 RAID 기법을 활용하여 여러 파일에 나누어 데이터를 저장할 수 있으므로, 저장 장치가 지원하는 한 거의 무한대의 자룔를 저장할 수 있다. 가볍고 빠른 속도로 작동하는데 목표를 두고 있다. 보안 정책이 명확하다. 이제 실제로 MySQL을 설치해서 기본적인 작업들을 배워보자.
6
MySQL 설치에 앞서… APM(APACHE + PHP + MySQL) 설치순서
MySQL -> APACHE -> PHP wget gcc libncurses5-dev diff g++등이 필요하므로 $apt-get install 대상 APM(APACHE + PHP + MySQL)기반의 웹서버솔루션은 리눅스기반의 웹서비스를 위한 솔루션으로 가장 궁합이 잘 맞는다는 평을 듣고 있다. APM 솔루션엔 이 외에도 핵심 서비스에 필요한 각종 라이브러리들과 어플리케이션을 설치해야 한다. 예를들어 압축 라이브러리 zlib, png이미지 사용을 위한 libpng, 웹에서 동적이미지 생성을 위한 gd, 웹에서 텍스트이미지 출력을 위한 폰트엔진 freetype 등이 있다. (jpeg 압축 해제를 위한 라이브러리 소프트웨어 jpeg, XML C 파서 libxml2, PHP 소스코드 Optimizer PHP ZenOptimizer) MySQL(DB solution), APACHE(webserver solution), PHP(web programming language) 등이 일반적으로 사용되는, 가장 기본적인 웹 서비스를 위한 솔루션들(프로그램들)이다.
7
MySQL 설치 – by source 새로 설치한 pure linux 서버
일단 sudu 권한을 sudu –s로 얻고 시작한다.
8
MySQL 설치 wget ftp://ftp.linux.co.kr/mysql/mysql-5.1.32.tar.gz #을 확인하고,
9
MySQL 설치 tar xvfz mysql-5.1.32.tar.gz 압축을 푼다. xvfz는 man을 참고한다.
xvfz: x=extract files from archive, v=verbosely list files processed, f=use archive file, z=filter the archive through gzip
10
MySQL 설치
11
MySQL 설치 이어서 configure를 실행
make로 컴파일을 수행하기 위해서는 필요한 Makefile 파일을 생성하는 작업이다.
12
MySQL 설치
13
MySQL 설치 ./configure --prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data --enable-shared --enable-assembler --with-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-mysqld-user="mysql" --with-readline --without-debug --without-docs --without-bench --with-charset=euckr configure: error: No curses/termcap library found “reno”라는 DB의 Data ↓ /usr/local/mysql/data/reno ./configure의 복잡한 옵션들을 모두 설명하기 보다 필수적인 bold 처리된 옵션들을 위주로 설명하도록 하겠다. --prefix=/usr/local/mysql : 설치될 MySQL의 위치; 이 디렉토리에 mysql에 관한 파일들과 디렉토리들이 생성된다. --localstatedir=/usr/local/mysql/data : MySQL의 DB 데이터들이 저장될 위치이다. [★클릭]예컨데 reno라는 DB가 있으면 /usr/local/mysql/data/reno에 DB의 파일들이 저장된다. 참고로 /usr/local/mysql/data는 MySQL의 여러 로그파일이 저장되는 위치이기도 하다. 만약 다른 곳에 데이터를 저장하고 싶으면 여기서 절대경로로 지정하면 된다. --enable-shared : determine whether libtool should build shared and/or static libraries in this package ( --with-mysqld-user="mysql“ : MySQL 데몬을 실행할 계정명을 지정할 수 있다. 여기선 mysql이 계정명이다. --with-charset=euckr : MySQL에서 한글지원을 하기 위한 옵션이다. 주의할 점은, [★클릭]이전 버전에선 euc_kr을 사용했는데 4.1.X이후부터는 euckr로 지정한다. [★클릭]그런데 이런 설정을 가지고 실행을 했지만 다음 에러를 뿜으며 잘 되지 않는다. euc_kr → euckr; since v4.1.X
14
MySQL 설치 ./configure --prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data --enable-shared --enable-assembler --with-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-mysqld-user="mysql" --with-readline --without-debug --without-docs --without-bench --with-charset=euckr → apt-get install libncurses5-dev 그러니 ncurses library를 설치해준다. --with-named-curses-libs옵션으로 static library를 추가해 줘도, 이후 make과정에서 attempted static link of dynamic object라며 error가 난다. 이하 삽질은 무시 --with-named-curses-libs=/your/path/to/lib/libncurses.so.5.7을 추가하니 잘 된다. lib의 libncurses.so.5.7를 지정해준 것이다. 반드시 /lib에 있는 /libncurses.so.x.x를 추가해준다. -전체 명령어 ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --enable-shared --enable-assembler --with-thread-safe-client --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-mysqld-user="mysql" --with-readline --without-debug --without-docs --without-bench --with-charset=euckr --with-named-curses-libs=/your/path/to/lib/libncurses.so.5.7
15
MySQL 설치
16
MySQL 설치 만들어진 Makefile을 실행시킨다.
17
MySQL 설치 잘 된다. 곧바로 이어서 make install을 해준다.
Make install은 /usr/local/mysql 디렉토리내에 MySQL 데이터베이스 파일들을 모두 생성한다.
18
MySQL 설치 잘 된다.
19
MySQL 설치 mysql_install_db를 실행하면 MySQL 전체를 관리하기 위한 “MySQL 시스템테이블”들이 생성된다. 이 MySQL 시스템테이블들은 /usr/local/mysql/data 디렉토리내에 mysql이라는 데이터베이스와 test라는 데이터베이스로 각각 생성된다. 여기서 test라는 것은 거의 이름만 있을 뿐이고 실제로 MySQL 시스템테이블들은 mysql이라는 데이터베이스내에 생성된다.
20
MySQL 설치 /usr/local/mysql/libexec/mysqld: Can't read dir of '/etc/mysql/conf.d/' [★클릭] /usr/local/mysql/libexec/mysqld: Can't read dir of '/etc/mysql/conf.d/‘ 라는 error
21
MySQL 설치 이걸 새로 만들어 줘도 error가 뜨면서 안된다.
전에 apt-get으로 설치했다 지운 MySQL 때문에 남은 /etc/mysql/ 때문에 생기는 error같으므로 이 mysql 디렉토리를 지워주자.
22
MySQL 설치 지우고 다시 처음부터 설치를 하니 잘 된다.
단, 모든걸 처음부터 했다. (make install부터만 다시 해도 될 수도 있다.)
23
MySQL 설치
24
MySQL 설치 /usr/local/mysql/data/mysql/ /usr/local/mysql/data/test/ 비교
25
MySQL 설치 /usr/local/mysql/bin/mysqld_safe &
아까 설명 했듯이 err파일이 data에 생겼다. 확인해보도록 한다.
26
MySQL 설치 Error파일을 보면 mysqld_safe 실행 시 권한 문제로 실행되지 않음을 알 수 있다.
mysqld라는 데몬은 root가 아닌 mysql이라는 사용자 소유로 실행된다. 그러므로 mysql 사용자는 /usr/local/mysql/data/디렉토리 소유자가 되어야 데이터들을 읽고 쓸 수 있는데, 권한 설정이 그렇게 되어있지 않기 때문에 문제가 발생한 것이다. 문제를 해결하기 위해 /usr/local/mysql/data/디렉토리를 mysql 소유로 변경해주도록 하자.
27
MySQL 설치 # chown -R mysql:mysql /usr/local/mysql/data/ 를 이용해 소유자를 변경했다. 그리고 mysqld_safe을 실행해 mysqld 데몬을 가동했다. 소유 문제가 해결되어 잘 가동 된다.
28
MySQL 설치 실행된 데몬을 ps로 확인해본다. 정상적으로 실행하고 있는 것을 확인할 수 있다.
# ps --help ********* simple selection ********* -e all processes *********** output format ********** -f full
29
MySQL 설치 그러나, 마지막으로 root의 사용자 패스워드를 설정해야 한다.
/usr/local/mysql/bin# ./mysqladmin -u root password 486 /usr/local/mysql/bin/디렉토리로 가서 mysqladmin라는 실행문을 이용하여 root 사용자의 패스워드를 설정한다. # ./mysqladmin -help Usage: ./mysqladmin [OPTIONS] command command.... -u, --user=name User for login if not current user.
30
MySQL 설치 /usr/local/mysql/bin# ./mysql -u root -p mysql으로 MySQL 데이터베이스에 접속하였다. /usr/local/mysql/bin# ./mysql -u root –p를 사용해도 된다. aa와 같이 뜬금없는 name을 넣으면 다음과 같은 error가 난다. ERROR 1049 (42000): Unknown database 'aa' DB접속 후에, > show databases;를 이용하여 현재 시스템에 존재하는 데이터베이스리스트를 확인하였다. > exit 를 이용하여 MySQL 데이터베이스에서 빠져 나왔다. 이제 정말 설치와 확인이 모두 끝났다. 그러므로 종료하는 법을 알아보자. # ./mysql –help Usage: ./mysql [OPTIONS] [database] -p, --password[=name] Password to use when connecting to server. If password is not given it's asked from the tty. -u, --user=name User for login if not current user.
31
MySQL 설치 ps를 이용해 mysql이 실행되는 것을 확인했다.
/usr/local/mysql/bin/mysqladmin -u root -p shutdown 명령을 이용해 종료시킨다. 다시 ps를 이용해 mysql이 더 이상 실행되지 않음을 확인했다. 마지막으로 어디에 mysql이 설치되었는지 알아보자.
32
MySQL 설치 어디에 설치되었는지 whereis로 확인해보자. /usr/local/mysql에 모든 것이 있다.
다음으로는.. 위대한 apt-get으로 MySQL을 설치해보자.
33
MySQL 설치 by apt-get apt-get으로 설치 (for ubuntu)
34
MySQL 설치
35
MySQL 설치
36
MySQL 설치
37
MySQL 설치
38
MySQL 설치
39
MySQL 설치
40
MySQL 설치
41
MySQL 설치
42
MySQL 설치 이제 더 이상 mysql이 있지 않다.
하지만 etc/mysql/은 남아있는 것 같은데 이 디렉토리는 재설치 시 필요하다. 아마 우분투가 기본적으로 가지고 있는 디렉토리가 아닐까 생각한다. (이 예제에서는 source를 이용한 재설치를 원활하게 하기 위해 backup해두고 지웠다.) apt-get으로 설치한 경우에는 데몬이 자동으로 실행되어 데몬을 제어하는 명령어를 다루지 않았다. 다음 슬라이드에서 각 경우별로 데몬을 켜고 끄는 방법을 알아보자.
43
MySQL 데몬의 실행과 종료 소스파일로 설치한 경우 apt-get으로 설치한 경우
실행: /usr/local/mysql/bin/mysqld_safe & 종료: /usr/local/mysql/bin/mysqladmin -u root -p shutdown apt-get으로 설치한 경우 실행: /etc/init.d/mysql start 종료: /etc/init.d/mysql stop 소스파일 /usr/local/mysql/bin/mysqld_safe & /usr/local/mysql/bin/mysqladmin -u root -p shutdown apt-get /etc/init.d/mysql start /etc/init.d/mysql stop 자유롭게 MySQL의 데몬을 켜고 끌 수 있게 되었다. 이제 사용자들이 사용할 계정을 추가하는 방법을 알아보자.
44
MySQL 사용자 계정 추가 mysql> Use mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY 'password' WITH GRANT OPTION; mysql> flush privileges; 사용자 계정을 추가하기 위해 우선 # mysql -u root –p 로 접속한다. 이후 다음 명령들을 실행하면 계정을 생성할 수 있다. mysql> Use mysql mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY 'password' WITH GRANT OPTION; mysql> flush privileges; Grant: 인정, 승인하다. 각 명령의 의미는 다음과 같다. mysql db를 사용한다. Id, host, password 의 정보를 가진 계정을 모든 권한을 부여하여 생성한다. 권한의 변동사항을 반영한다. 이때 host는 이후 이 계정으로 접속할 host를 의미하며 이후 원격접속 부분에서 잠시 다루게 된다.
45
MySQL 사용자 계정 추가 reno 계정이 존재하지 않아 접속이 되지 않는다. Root로 접속해 다음 명령들을 실행한다.
mysql> Use mysql mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY 'reno' WITH GRANT OPTION; mysql> flush privileges; 각 명령의 의미는 역시 다음과 같다. mysql db를 사용한다. Id=reno, host=%, password=reno인 계정을 모든 권한을 부여하여 생성한다. 권한의 변동사항을 반영한다.
46
MySQL 사용자 계정 추가 접속을 종료하고 reno로 접속하니 이제는 잘 된다.
47
MySQL 사용자 계정 삭제 mysql> Use mysql
mysql> delete from user where user = 'id' and host = 'host'; mysql> flush privileges; mysql> delete from user where user = 'id' and host = 'host'; 나머진 똑같고 위 명령에 id와 host정보를 주면 된다. 권한이 있는 계정으로 실행해야 된다.
48
MySQL 사용자 계정 삭제 root로 접속하여 reno라는 계정을 삭제하고자 한다.
mysql> delete from user where user = 'reno' and host = '%'; 라는 명령을 실행하고 접속해보니 계정이 삭제되었음을 확인할 수 있다. 마지막에 flush를 해주지 않으면 여전히 접속이 가능하므로 꼭 해주자.
49
MySQL 계정 비밀번호 변경 mysql> Use mysql
mysql> UPDATE user SET password = password('password') WHERE user = 'id'; mysql> flush privileges; mysql> UPDATE user SET password = password('password') WHERE user = 'id'; -> id계정의 비밀번호를 password로 설정한다.
50
MySQL 계정 비밀번호 변경 UPDATE user SET password = password('reno1') WHERE user = 'reno'; 아래쪽 계정 비밀번호는 reno1을 이용했고 접속이 잘 이루어짐을 확인할 수 있다.
51
root 계정 비밀번호 변경 소스, apt-get 모두 처음에 다음과 같이 root의 비밀번호를 설정 (설치부분) 소스
52
root 계정 비밀번호 변경 # mysqladmin -u root -p password 486486
사실 소스로 설치한 경우 처음 비밀번호 설정과 비슷하다. 다만 비밀번호를 입력해야 하는데, 이 비밀번호는 변경 이전의 비밀번호다.
53
원격서버의 MySQL 접속 원격 서버 접속을 위해 필요한 2가지 1) my.cnf에서 bind-address를 주석처리
2) db, user 테이블의 host 필드 값을 % 또는 허용할 IP 주소 설정
54
원격서버의 MySQL 접속 my.cnf bind-address를 주석처리 다음은 적절한 계정 생성 In my.cnf
bind-address= > It will listen for TCP/IP connections only locally on the loopback interface and will not accept remote connections.
55
원격서버의 MySQL 접속 host=xxx.xxx.xxx.xxx host=% xxx.xxx.xxx.xxx서버에서 접속 가능
모든 서버에서 접속가능 여기서는 %로 입력했기 때문에 어디서나 접속이 가능하다.
56
원격서버의 MySQL 접속 $ mysql -u reno -p mysql -h 143.248.234.120 -P 3306
SPARCS 서버에서 원격으로 접속해보았다. 역시 잘 된다.
57
Shell에서 SQL문 실행하기 미리 생성된 X.sql # mysql -u root -p DBname < ./X.sql
Shell에서 SQL문을 실행하여 DB와 Table을 생성해보자 DB생성시 DBname=mysql Table생성시 DBname=해당DB
58
SQL문으로 DB 생성 다음 내용의 temp.sql을 미리 생성
create database temp_db; # mysql -u root -p mysql < ./temp.sql 미리 create database temp_db; 이란 내용의 temp.sql을 만들어 두고 다음 명령을 실행한다. # mysql -u root -p mysql < ./temp.sql
59
미리 create database temp_db; 이란 내용의 temp.sql을 만들어 두고 다음 명령을 실행한다.
# mysql -u root -p mysql < ./temp.sql 그러면 없던 temp_db가 생성되어있다. create database temp_db; 을 접속 후 직접 mysql에 들어가서 적어도 똑같이 된다. 너무 길다거나 적기 힘든 경우에 미리 저장된 sql 파일을 이용하여 Shell에서 실행하면 된다.
60
SQL문으로 Table 생성 다음 내용의 temp2.sql을 미리 생성
create table temptable ( uid mediumint(3) NOT NULL, name varchar(12) NOT NULL, PRIMARY KEY(uid) ); # mysql -u root -p temp_db < ./temp2.sql 미리 다음 내용의 temp2.sql 파일을 만들어둔다. create table temptable ( uid mediumint(3) NOT NULL, name varchar(12) NOT NULL, PRIMARY KEY(uid) ); 다음 명령을 실행한다. # mysql -u root -p temp_db < ./temp2.sql
61
미리 다음 내용의 temp2.sql 파일을 만들어둔다.
create table temptable ( uid mediumint(3) NOT NULL, name varchar(12) NOT NULL, PRIMARY KEY(uid) ); 다음 명령을 실행한다. # mysql -u root -p temp_db < ./temp2.sql temp_db에서 show tables;를 이용해 temptable이 생성되었음을 확인할 수 있다. Desc temptable;을 이용해 temptable의 구조를 확인할 수 있다. 만든 그대로 잘 되어있음을 알 수 있다.
62
root password 복구방법 다음 과정을 따른다. 실행중인 MySQL 종료
MySQL실행; mysqld_safe –skip-grant-table & password없이 root 계정으로 MySQL 접속 update문으로 password 변경 권한설정 적용; flush privileges; MySQL 종료 후 정상적으로 실행 새로운 password로 접속 mysqld_safe –skip-grant-table &
63
root password 복구방법 다음 과정을 따른다. 실행중인 MySQL 종료
MySQL실행; mysqld_safe –skip-grant-table & password없이 root 계정으로 MySQL 접속 update문으로 password 변경 권한설정 적용; flush privileges; MySQL 종료 후 정상적으로 실행 새로운 password로 접속 # /etc/init.d/mysql stop 를 이용해 평상시의 데몬을 죽인다. (소스로 설치된 경우 mysqladmin은 비밀번호 없이는 사용할 수 없으므로 # killall mysqld 를 이용하자.) # /usr/bin/mysqld_safe –skip-grant-table & 을 이용해 사용자 인증과정이 생략된 모드의 데몬을 실행시킨다. 이 모드에서는 다음과 같은 작업들이 가능하다. 패스워드를 지정하는 –p 없이 접속할 수 있다. 어떤 패스워드를 입력하더라도 조건없이 바로 접속된다. -p 옵션을 지정해도 되고 지정하지 않아도 된다. # mysql –u root mysql 을 이용해 –p 없이 바로 접속한다.
64
root password 복구방법 다음 과정을 따른다. 실행중인 MySQL 종료
MySQL실행; mysqld_safe –skip-grant-table & password없이 root 계정으로 MySQL 접속 update문으로 password 변경 권한설정 적용; flush privileges; MySQL 종료 후 정상적으로 실행 새로운 password로 접속 mysql> update user set password=password('1111') where user='root'; root의 비밀번호를 1111로 설정한다. mysql> flush privileges; MySQL 데이터들을 동기화한다. mysql> exit mysql을 종료한다. # mysqladmin -u root -p shutdown Enter password: 새로운 비밀번호 1111을 이용하여 데몬을 종료한다. # /etc/init.d/mysql start init.d/mysql로 정상적인 방법으로 데몬을 작동시킨다. # mysql -u root –p 정상적인 방법으로(-p를 사용하여) 접속한다.
65
권한설정 사용자 권한 설정하여 추가하기 mysql> INSERT INTO user VALUES('host', 'id', PASSWORD('password'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'); 다 N 이면 접속만 가능하다. 각 비트가 무슨 의미인지는…
66
권한설정 'GRANT' 명령을 이용하여 쉽게 사용자 추가 및 권한 설정하기
mysql> grant all privileges on id.* to identified by 'password' with grant option; mysql> grant all privileges on 'id_% '.* to identified by 'password' with grant option; 일반 사용자 추가 특정 이름의 데이터베이스에 대한 모든 권한을 가지는 사용자 추가 (여기선 id_으로 시작하는 db들 에대한 권한을 가지는 사용자를 추가한 것이다.)
67
권한설정 사용자에게 DB 권한주기 mysql> INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) VALUES('%', 'DBname', 'id', 'Y', 'Y', 'Y', 'Y','Y','Y'); mysql> FLUSH PRIVILEGES; FLUSH PRIVILEGES; 잊지 말 것
68
권한설정 모든 권한을 다 준다면 이런 방법으로 mysql> GRANT ALL on DB명.* TO mysql> GRANT ALL on DB명.* TO id; mysql> GRANT ALL on DB명.* TO 첫번째 localhost DB가 자기컴퓨터에 깔려 있는경우에만 접속을 허용하겠다는 뜻이다. 두번째 로컬 호스트를 제외하고는 모든 ip에서 접근을 시키겠다는 내용입니다. 세번째 c클래스만 허용하겠다는 의미 입니다. xxx.xxx.%.% 면 B클래스 xxx.%.%.%면 A클래스로 제한을 할수 있습니다. 그리고 변경된 내용을 메모리에 반영하기 위해 다음 명령을 실행합니다.
69
Question
70
THANK YOU
Similar presentations