[AWS] RMySQL 및 DBI 설치하기

RMySQL과 DBI는 R과 MySQL을 같이 사용하도록 도와주는 패키지이다.

헌데 이 패키지는 install.packages()로는 설치가 되지 않는다.

그러므로 다음과 같은 작업이 필요하다.

그래서 구글에 ‘rmysql install centOS’라고 검색해보았다.

그랬더니 다음과 같은 동영상을 발견할 수 있었다.

위 동영상과 같이 작업하면 문제 없이 설치 될 것이다. 그래도 문서로 작성해 보면,

일단, putty를 이용하여 AWS EC2 instance에 연결한다.

sudo yum install mysql-devel

sudo yum install r-devel

위 두 명령으로 r-devel과 mysql-devel을 설치한다.

다음 R을 실행시키고

R

install.packages(‘DBI’, repos=”http://cran.stat.nus.edu.sg/ “)

위처럼 입력하면 ‘DBI’ 패키지를 설치하게 된다.

다음으로,

install.packages(‘RMySQL’, repos=”http://cran.stat.nus.edu.sg/ “)

위처럼 입력하여 ‘RMySQL’ 패키지를 설치한다.

이로써, 영상은 ‘Done!’ 이라며 끝나게 된다.

하지만, 우리는 여기서 한가지 더 해야한다.

install.pacakges(‘DBI’,  type=’source’)

install.pacakges(‘RMySQL’,  type=’source’)

이렇게만 하여야 library() 함수를 이용해서 불러올 수 있게 된다.

 

우리가 ‘RCurl’ 같은 경우는 install.pacakges(“RCurl”)만 해도 설치가 가능하다.

그런데 왜 ‘RMySQL’, ‘DBI’, ‘dplyr’ 등과 같은 packages는 바로 설치가 안될까?

이유는 cpp로 작성되어 있기 때문이다.

그렇기 때문에 type=’source’로 하여금 install 할 필요가 생긴다.

 

다음에는 위 패키지들로 R에서 MySQL로 연결하는 것을 알아보도록 하자.

Advertisements

[AWS] MySQL 설치 및 HeidiSQL 연결

오늘은 Amazon EC2에서 Instance에 MySQL을 설치하고 HeidiSQL로 연결하는 것을 해보겠다.

참고로, HeidiSQL은 MySQL과 같은 SQL의 관리를 도와주는 프로그램이다.

1. Instance에 MySQL 설치

먼저, putty로 instance에 연결하여 아래 명령어를 실행해준다.

sudo yum install mysql-server

aws mysql install

aws mysql install success

그럼 위와 같이 설치를 완료하게 된다.

그리고 mysql server를 실행해주자.

sudo service mysqld start

aws mysql start

완료시 위와 같은 결과가 뜨게 된다.

설치가 끝나면 보안 설정을 하자.

sudo mysql_secure_installation

위와 같이 명령하면 root 계정에 비밀번호를 설정할 수 있다.

처음부터 enter, Y, (안전한 암호 2번), Y, Y, Y, Y 순서대로 함으로써 안전하게 root비번 설정!

참고 : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/install-LAMP.html

그리고 매번 서버를 실행할 때 자동 실행 되도록 아래와 같이 명령어를 치자.

sudo chkconfig mysqld on

참고로, /etc/my.cnf를 편집하여 포트를 3306의 기본 포트에서 변경가능하다.

aws mysql my.conf.png

위처럼 포트가 적혀있으면 그 포트로 되고, 적혀있지 않으면 기본으로 3306  포트가 된다.

그리고 아래의 명령어로 mysql을 재시작 해준다.

sudo service mysqld restart

 

2. HeidiSQL 연결

이제 HeidiSQL로 연결을 해보자.

HeidiSQL을 실행하면 아래와 같이 입력해준다.

네트워크 유형은 MySQL(SSH tunnel) 로 설정하고, 호스트명/IP는 자신의 아이피로 한다.

(자신의 아이피는 127.0.0.1 or localhost)

포트는 MySQL 설치시 따로 바꾸지 않았다면 3306포트로 유지

HeidiSQL aws connect

이제 SSH 터널 탭에서 plink.exe의 위치를 잡아주고,

SSH 호스트 + 포트에 자신의 instance의 Public DNS를 넣어준다. 포트는 22로 한다.

plink.exe는 아래 링크를 타고 설치할 수도 있지만, putty 설치를 구글에 검색하면 그 중간에 plink.exe도 다운 받을 수 있다. 아래 링크를 들어가면 다운 받을 수 있다.

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

이제 사용자 명과 암호를 입력하는데 이전에 따로 암호를 설정하지 않았다면 빈칸으로 둔다.

다음 개인 키 파일을 불러온다. 확장자가 .ppk 였던 것으로 불러오면 된다.

pem을 불러오면 에러가 남으로 주의 할 것!

포트는 MySQL포트와 다른 포트를 적어주어야 한다. 3306을 썻다면 3307이나 3308처럼 쓰이지 않는 포트를 넣어주는 것이 중요하다.

HeidiSQL aws connect2

연기를 눌러 연결하면 아래와 같은 창으로 시작하게 될 것이다.

aws heidiSQL Complete

이로써 완료이다.

 

다음 번에는 이렇게 만들어진 SQL과 R로 무엇을 할 수 있는지 알아보도록 하겠다.

[CODEcademy]SQL시리즈 3단계 총 정리

Codecademy  SQL 시리즈
——————————————————–
Learn SQL
——————————————————–
chapter 1. Manipulation
—SELECT * FROM table_name;
-> 전체검색
—CREATE TABLE table_name (first INTEGER, second TEXT,…, parameter TYPE);
-> Table 생성
—INSERT INTO table_name (first,second,…,parameter) VALUES (1,’2′,…);
-> Table에 데이터 추가
—SELECT parameter FROM table_name;
-> Table에서 특정 parameter만 출력
—UPDATE table_name
—SET first = 1(수정내용)
—WHERE second = ‘2’(조건문);
-> Table에서 특정 조건을 만족하는 데이터만 수정
—ARTER TABLE table_name ADD COLUMN parameter TYPE;
-> Table에서 하나의 column을 추가
—DELETE FROM table_name WHERE second IS NULL(조건문);
-> Table에서 second가 NULL값이면 삭제

chapter 2. Quries
—SELECT para1, para2 FROM table_name;
-> ,를 이용 여러 parameter를 선택하여 검색
—SELECT DISTINCT para FROM table name;
-> DISTINCT는 unique valus를 return해준다.
—SELECT * FROM table_name WHERE para>0;
-> WHERE은 위에서 해왔던 것처럼 조건에 맞는 것만을 return한다.
—SELECT * FROM table_name WHERE para LIKE ‘a_z’;
—SELECT * FROM table name WHERE para LIKE ‘a%’;
-> LIKE는 주어진 para에 뒤에 나오는 조건에 맞는 것을 검색가능하게 한다.
*_는 어떤것이 와도 괜찮은 하나의 칸이고 %는 길이에 상관없이 검색한다.그리고 %는 대소문자 구분이 없다.
—SELECT * FROM table_name WHERE first BETWEEN 1 AND 10;
—SELECT * FROM table_name WHERE second BETWEEN ‘A’ AND ‘J’;
-> BETWEEN은 AND의 양쪽의 값 사이에 있는 것들만 검색가능하게 해준다.
—SELECT * FROM table_name
—WHERE first BETWEEN 1990 AND 2000
—AND second = ‘comedy’;
-> BETWEEN 바로 뒤에 오는 AND가 아닌 AND는 평소에 AND로 돌아온다.
* AND와 OR는 조건문에서 우리가 본래 아는 의미로 사용하면 된다.
—SELECT * FROM table_name ORDER BY para DESC;
-> ORDER BY를 이용하면 정렬이 가능하다.
*DESC는 내림차순을 의미하고 ASC는 오른차순을 의미한다.
—SELECT * FROM table_name ORDER BY para ASC
—LIMIT 3;
-> LIMIT은 최상위 몇개를 뽑아내는 것으로 지금은 3이라 하였기에 3개의 데이터만 나온다.

chapter 3. Aggregate Functions
—SELECT COUNT(*) FROM table_name;
-> COUNT()를 이용하면 결과에 맞는 데이터의 개수를 출력해준다.
—SELECT para,COUNT(*) FROM table_name GROUP BY price;
-> GROUP BY를 이용하여 그룹별 데이터 개수를 확인할 수 있다.
* 중간에 WHERE를 넣어 조건에 맞는 데이터만의 개수를 확인도 가능
—SELECT SUM(para) FROM table_name;
-> SUM()을 이용하면 주어진 para의 데이터를 전체 합한 값을 구해준다.
—SELECT para1, SUM(para2) FROM table_name GROUP BY para1;
-> para1에 따른 para2의 데이터 합계를 볼 수 있다. GROUP BY와 SUM()의 응용
—SELECT MAX(para) FROM table_name;
-> MAX()는 최댓값을 구해준다.
*MIN()은 최솟값을 구해준다.
*AVG()는 평균값을 구해준다.
—SELECT para1, ROUND(AVG(para),2) FROM table_name GROUP BY para1;
-> ROUND(para, INTEGER)는 반올림을 해준다. 여기서는 2로 되어서 3번째자리에서 반올림한다.
*그냥 ROUND(para)로 하면 정수자리까지 반올림하고 .0을 붙여서 return한다.

chapter 4. Multiple Tables
—CREATE TABLE artist(id INTEGER PRIMARY KEY, name TEXT)
-> PRIMARY KEY를 붙여주면 그 para를 기본키로한다.
*기본키는 NULL일 수 없고 uniqe한 값들을 가진다.
—SELECT table1.para1, table1.para2, table2.para3 FROM table1, table2;
-> .으로 다른 두 table의 para를 구분하여 불러올 수 있다.
—SELECT * FROM table1
—JOIN table1 ON
—table1.para1 = table2.para3;
-> JOIN table ON 을 이용하여 다른 두 테이블의 parameter를 연결시켜준다.
*table1의 para1은 FOREIGN KEY(외래키)가 된다.
—SELECT * FROM table1
—LEFT JOIN table1 ON
—table1.para1 = table2.para3;
-> LEFT JOIN은 table1의 NULL값도 포함한 모든 값을 출력하게 한다.
*RIGHT로 하면 반대로 table2의 모든 값을 의미.
—SELECT table1.para1 AS ‘Name’,
—table1.para2,
—table2.para3 AS ‘Nickname’
—FROM table1
—JOIN table2 ON table1.para4 = table2.para5;
—WHERE table1.para2>0;
-> AS를 이용하면 parameter의 header를 바꾸어 출력할 수 있다.

——————————————————–
SQL: Table Transformation
——————————————————–
chapter 1. Subquries
—SELECT * FROM table1 WHERE para1 in
—(SELECT para2 FROM table2 WHERE para3<2000)
-> in 뒤에 있는 곳에 소속되어야 출력된다.
—SELECT id FROM flights AS f WHERE distance<
—(SELECT AVG(distance) FROM flights WHERE carrier = f.carrier);
-> distance가 같은 carrier을 갖는 것끼리의 distance 평균보다 낮은 경우를 출력
*외부 쿼리와 내부 쿼리에서 같은 table이지만 비교대상은 다름을 구분할 줄 알아야한다.
—SELECT origin, id,
—(SELECT COUNT(*) FROM flights f
—WHERE f.id< flights.id AND f.origin=flights.origin) +1
—AS flight_sequence_number FROM flights;
-> 내부 쿼리에서 FROM flights f라고 하면 flight를 AS한 f를 하나더 불러들인다.
-> 위는 같은 origin인 것끼리 비교하면서 자신보다 낮은 id의 개수에 하나 더한 값을 flight_sequence_number에 나타낸다.

chapter 2. Set Opertations
*Merge the rows, called a join.
*Merge the columns, called a union.
—SELECT para FROM table1
—UNION
—SELECT para FROM table2;
-> table1의 para와 table2의 para를 병합
—SELECT para FROM table1
—UNION ALL
—SELECT para FROM table2;
-> UNION ALL을 하게 되면 표를 결합하게 된다.
—SELECT para FROM table1
—INTERSECT
—SELECT para FROM table2;
-> 두개의 table을 합친다. 그대신 이때 두개 이상의 같은 값은 하나로 표시된다.
—SELECT para FROM table1
—EXCEPT
—SELECT para FROM table2;
-> 첫번째 테이블에서 두번째 테이블의 값을 제외하고 DISTINCT로 표시한다.

chapter 3. Conditional Aggregates
*Aggregate functions은 여러개의 입력 데이터에서 하나의 결과를 출력한다.
ex) COUNT(), SUM(), AVG(), MAX(), MIN() 등등
—SELECT
—CASE
—WHEN elevation <250 THEN ‘Low’
—WHEN elevation BETWEEN 250 and 1749 THEN ‘Medium’
—WHEN elevation >=1750 THEN ‘High’
—ELSE ‘Unknown’
—END AS elevation_tier, COUNT(*)
—FROM airports GROUP BY 1;
-> CASE END 안에 WHEN (조건문) THEN (결과물), ELSE (결과물)를 넣어 조건에 따른 결과물을 나타낸다.
* CASE를 Aggregate functions안에 넣어 사용도 가능하다.
chapter 4. Date, Number, and String Functions
*DATE : YYYY-MM-DD
*DATETIME or TIMESTAMP : YYYY-MM-DD hh:mm:ss
*TIME : hh:mm:ss
*DATETIME(time1, ‘+3 hours’, ’40 minutes’, ‘2 days’);
-> 시간을 3시간, 40분, 2일 간격으로 나누어서 가장 가까운 시간에 출력된다.
*SELECT (number1 + number2);: Returns the sum of two numbers. Similar, SQL can be used for subtraction, multiplication, and division.
*SELECT CAST(number1 AS REAL) / number3;: Returns the result as a real number by casting one of the values as a real number, rather than an integer.
*SELECT ROUND(number, precision);: Returns the numeric value rounded off to the next value specified.
—SELECT string1 || ‘ ‘ || string2;
-> ||는 문장을 이어준다.
—SELECT REPLACE(string,’_’,’ ‘) FROM table;
-> REPLACE는 첫번째 문자를 두번째문자로 바꿔주는 치환함수다.

——————————————————–
SQL: Analyzing Business Metrics
——————————————————–
chapter 1. Advanced Aggregates
*/**/는 comment를 넣을 수 있다.
—CASE {condition}
—WHEN {value1} THEN {result1}
—WHEN {value2} THEN {result2}
—ELSE {result3}
—END
-> {condition}의 값에 따라 다른 결과를 내는 switch문처럼 사용
—SELECT para1, count(DISTINCT para2) FROM table_name GROUP BY 1;
-> para2의 값을 중복없이 개수 확인하고 para1에 따라 grouping
chapter 2. Common Metrics
—WITH {subquery_name} AS (
—{subquery_body}
—)
—SELECT …
—FROM {subquery_name}
—WHERE …
-> WITH AS (),(),…는 서브쿼리를 먼저 만들고 할 수 있도록 해준다.