Collection
mongoDB는
mongoDB는 Collection 이 데이터베이스 테이블과 같은 개념이다. 아래 테이블은 관계형 데이터베이스 MySQL과 MongoDB의 개념을 비교해 주고 있다. [^1]
| MySQL | MongoDB |
|---|---|
| Table | Collection |
| Row | Document |
| Column | Field |
| Joins | Embedded documents, linking |
mongoDB는
mongoDB는 Collection 이 데이터베이스 테이블과 같은 개념이다. 아래 테이블은 관계형 데이터베이스 MySQL과 MongoDB의 개념을 비교해 주고 있다. [^1]
| MySQL | MongoDB |
|---|---|
| Table | Collection |
| Row | Document |
| Column | Field |
| Joins | Embedded documents, linking |
MongoDB - Database와 User Authentication
2018-06-21 설치 링크로 대체
{:.right-history}
MongoDB 설치후 데이터베이스 위치, 로그, 인증 등에 관련한 서버 구성과 설정을 정리한다.
MongoDB 2.6 과 MongoDB Community Edition 3.x 버전을 사용했다.
mongoDB 는 설치과정 중에 인증과 관련해 설정하는 부분이 없어서 설치 후 누구나 DB에 접속 할 수 있다. 인증을 추가해 데이터베이스 관리자와 데이터베이스 사용자로 구분해서 이용하고, 각 데이터베이스의 사용자는 허가된 역할(Role)을 가지고 데이터베이스에 접근 가능하도록 구성한다.
2018-06-22 내용 정리, User auth 링크
{:.right-history}
이 문서는 MongoDB Community Edition 3.4 버전을 64bit OS인 Amd64, Arm64 지원 OS에 설치해 사용하기 위해서 Install MongoDB Community Edition, on-ubuntu를 따라서 진행했다.
여기서는 Arm을 사용하는 SBC[^2] 컴퓨터에 mongodb 3.4 버전을, Hardkernel Odroid C2를 사용해서 설치를 진행했다.
Ubuntu/Debian ARM Cross compile 환경
이 글은 우분투, 리눅스 박스에서 GNU ARM Cross compiler 를 설치하고 관리하는 방법을 다루고 있다.
2018-05-17: sidebar.nav/linux 사용
{: .right-history}
우분투/데비안 리눅스에서 제공하는 ARM Toolchain 환경은 Linaro 툴체인을 바탕으로 만들어져 있어서 두가지 버전으로 제공된다. Hard Float을 지원하는 버전과 그렇지 않은 버전이다.[^1]
Nginx - HTTPS and Certificate SSL
Nginx를 HTTPS를 사용할 수 있도록 사설 인증서와 그리고 공인 인증서를 이용해 SSL을 활성화 하는 과정을 정리했다.
Nginx 설치와 서버, 프락시 등의 사용 방법에 대해서는 Nginx on Ubuntu/Debian 문서를 참조한다.
Ubuntu/Debian Basic Security settings
리눅스 시스템을 설치후 기본적인 보안 설정과 도구를 사용하는 과정을 정리했다.
사용자 로그인에 제약을 두고, 원격 접속에 대해서 방화벽과 sshd 보안을 강화한다.
Nginx - Install, WebDAV, Proxy on Ubuntu/Debian
nginx를 사용해서 일반 웹 서비스, SSL, WebDav 서비스와 다른 외부 웹 서비스와 연동하는 설정을 해보자.
node.js 애플리케이션을 연동한다.우분투/데비안 계열에서 apt-get install 명령으로 설치한다.
2018-07-10: UART 정보 추가
2017-07-24: exFAT 추가
{:.right-history}
{: width=”600”}
mysql-server 를 설치하며 만든 root 사용자 패스워드를 사용해서 데이터베이스에 접속한다.
1 | $ mysql -u root -p |
사용자가 사용할 데이터베이스를 만든다.
1 | mysql>create database mydb; |
그리고 CREATE USER, INSERT 로 새 사용자를 추가할 수 있다.
create user userid@HOST identified by ‘PASSWORD’;
사용자 foo 를 localhost 와 모든 것을 의미하는 패턴 %로 추가하면:
1 | mysql > create user foo@localhost identified by 'password'; |
혹은
1 insert into user (host, user, password) values ('localhost', 'hiru', 'password('hirururu'));
사용자 제거
mysql > drop user ‘hiru’;
mysql > delete from user where user =’hiru’
사용자 생성시 다음같이 1396 에러는 CREATE USER/GRANT 명령으로 사용자와 권한을 추가/관리해야 하는데 mysql.db, mysql.user 테이블을 직접 조작하다가 일관성이 깨졌기 때문
1 | mysql> create user 'shopuser'@'localhost' identified by ')12345'; |
제대로 사용자를 삭제하고
drop user shopuser@localhost
flush privileges; 로 갱신해 준다.
권한을 추가하고 삭제하기 위해서, GRANT와 REVOKE의 명령을 사용한다. GRANT 명령 등으로 데이터베이스 사용자가 데이터베이스 자원에 접근하는 권한을 만들 수 있다.
GRANT ALL privileges ON DB_NAME.TABLE TO USER_ID@[HOST] IDENTIFIED BY ‘PASSWORD’
GRANT [SELECT,DELETE,INSERT,UPDATE,] ON DB_NAME.TABLE TO USER_ID@[HOST] IDENTIFIED BY ‘PASSWORD’
* 패턴을 사용할 수 있다.http://www.w3big.com/ko/mysql/mysql-administration.html
현재 머신에서만 접속할 수 있는 사용자 계정, 외부, 원격에서 접속할 수 있는 사용자 계정을 추가해 준다.
1 | mysql> use mysql; # mysql system db |
혹은
1 | grant select, insert, update, delete on mydb.* to foo@host identified by 'password'; |
권한을 확인하는 방법
1 | mysql > show grants for foo@localhost |
변경된 권한을 적용하기
1 | mysql > flush privileges; |
권한을 삭제하는 방법
1 | mysql > revoke all on dbname.table from username@host |
추가한 사용자는 SELECT로 확인할 수 있다.
1 | mysql> select host,authentication_string from user where user='foo'; |
새로 생성한 사용자 ID로 로그인을 해서 데이터베이스 정보를 확인해 보자.
1 | $ mysql -u foo -p |
그리고 데이터베이스를 사용하려면 use [DATABASE] 로 변경한다.
1 | mysql> use mydb; |
mysql에서 한글이 ?로 표시되는 경우.
1 | mysql> SELECT * FROM department; |
my.cnf의 문자셋과 터미널 문자셋이 일치하지 않아서 그렇다. MySQL은 설치시 지정하지 않았다면 기본적으로 문자셋이 ‘latin1’으로 설정되어 있다.
1 | mysql> show variables like 'c%'; |
MySQL 설정 파일에서 문자셋을 변경할 수 있다. 다믕 같이 자신의 my.cnf 파일을 작성한다. client, mysqld, mysql 에 대해서 utf8 사용을 선언해 준다.
1 | [client] |
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO ‘zara‘@’localhost’
-> IDENTIFIED BY ‘zara123’;
Structural Query Language로 튜플 간의 관계를 계산해서 결과를 도촐한다.
데이터 유형
http://www.w3big.com/ko/mysql/mysql-data-types.html
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 scode varchar(4) 학번, 기본키 sname varchar(20) 이름 sdept varchar(20) 학과 sphone varchar(15) 전화번호
1 | CREATE TABLE professor ( |
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 scode varchar(4) 학번, 기본키 sname varchar(20) 이름 sdept varchar(20) 학과 sphone varchar(15) 전화번호
create student table
1 | CREATE TABLE student ( |
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 ccode varchar(4) 과목코드, 기본키 cname varchar(20) 과목명 ctime int 강의 시수 croom varchar(15) 강의실
create course table
1 | CREATE TABLE course ( |
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 lpcode varchar(4) 교수코드, 기본키 lccode varchar(4) 과목코드, 기본키
create lecture table
1 | CREATE TABLE lecture ( |
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 apcode varchar(4) 교수코드, 기본키 asccode varchar(4) 학번, 기본키
create advice table
1 | CREATE TABLE advise ( |
파일 Python-Database-class-student.sql
컬럼명 테이터 타입 비고 rscode varchar(4) 학번, 기본키 rcccode varchar(4) 과목코드, 기본키
create register table
1 | CREATE TABLE register ( |
1 | INSERT INTO professor (pcode, pname, pdept, pphone)\ |
파일에 필드 간의 ‘,’로 구분한 데이터 파일이 있다. 물론 필드 구별 문자는 데이터의 내용에 따라 사용자가 임의로 정 할 수 있다.
파일: studens.txt
1 | S001, 박소명, 컴퓨터공학과, 123-4567 |
studnets.txt 파일을 읽어들이는 것은 스크립트 파일을 작성하거나 mysql에서 직접 실행할 수 있다.
먼저 스크립트 파일 students.sql은 다음과 같다.
1 | use mydb; |
이제 mysql 클라이언트에서 데이터를 읽어 들인다.
1 | mysql>source students.sql; |
SELECT [DISTINCT] select _expr essi on
FROM table_list
WHERE where_definition
ORDER BY col_name [ASC|DESC]
GROUP BY col _name_list
LIMIT [offset ], rows
예제-1) 전체 교수 리스트를 출력하는 SQL 검색 문을 작성하라.
mysql > sel ect * fromprof;
예제-2) 전체 교수 리스트를 이름순서로 출력하는 검색 문을 작성하라.
mysql > sel ect * fromprof order by pname;
예제-5) 전체 교수 리스트를 이름 역순으로 출력하는 검색 문을 작성하라.
mysql > sel ect * fromprof order by pname desc;
전체 교수 리스트를 학과별로 출력하는 검색 문을 작성하라.
mysql > sel ect * fromprof order by pdept, pname;
예제-4) 국문학과 교수 리스트를 이름순서로 출력하는 검색 문을 작성하라.
mysql> select * from professor where pdept =’국문학과’;
“FROM 테이블명 AS 별명” 구문은 SQL 문장에서 별명으로 테이블을 참조하 는 역할은 한다.
예제-6) MySQL 과목을 강의하는 교수님의 이름, 전화번호와 강의실을 검색 하는 문장을 작성하라.
mysql> select p.pname, p.pphone, c.croom from professor p, course c, lecture l
where c.cname=’MySQL’ and c.ccode=l.lccode
and l.lpcode=p.pcode;
예제-7) ‘김구’ 교수님이 강의하는 과목명, 강의 시수와 강의실을 검색하는 문장을 작성하라.
1 | select c.cname, c.ctime, c.croom |
예제-8) 각 학생이 수강 신청한 과목에 대해서 학생이름, 전화번호, 과목명, 강의실, 강의 시수를 검색하는 문장을 작성하라.
1 | select s.sname, s.sphone, c.cname, c.ctime, c.croom |
예제-9) 각 학생이 신청한 총 학점을 구하는 검색식을 작성하라.
1 | select s.sname, s.sdept, s.sphone, sum(c.ctime) |
예제-10) 각 학과별 교수님은 몇 분인지 구하는 검색식을 작성하라.
1 | select pdept, count(*) |
예제-11) 페이지 크기가 2 일 때, (예제-8)의 결과에서 두 번째 페이지를 검색하는 SQL문장은 작성하라.
select s.sname, s.sphone, c.cname, c.ctime, c.croom fromstudent as s , course as c, regi ster as r
where s.scode = r.rscode and r.rccode = c.ccode order by s.sname, c.cname
limit 2, 2;
UPDATE tbl_name
SET col_name1 = expr1, col_name2 = expr2, …
[WHERE where_definition] [LIMIT rows];
예제-12) 교수테이블에서 ‘김 구’ 선생님의 이름을 ‘하은용’ 교수님으로 변 경하는 문장을 작성하라.
update prof set pname =’하은용’ where pname =’김구’;
예제-13) 지도 테이블의 교수코드가 ‘P007’ 인 레코드들을 모두 ‘P005’ 로 변경하라.
update advise set apcode =’P005’ where apcode =’P007’;
예제-14) 강의 시수가 2인 과목들의 강의 시수를 하나 증가 시키고, 강의실 을 Lab1로 변경하라.
update course set ctime=ctime + 1, croom=’Lab1’ where ctime=2;
DELETE FROM tbl_name
[WHERE where_definition] [LIMIT rows]
예제-15 ) 국문학과 학생 레코드를 삭제하는 문장을 작성하라.
delete fromstudent where sdept =’국문학과’;
PyMySQL 설치
1 | $ pip install PyMySQL |
만약 pip 로 설치가 안되면 다음 같이 setup.py를 이용해 직접 설치 할 수 있다.
$ # X.X is the desired PyMySQL version (e.g. 0.5 or 0.6).
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python setup.py install
$ # The folder PyMySQL* can be safely removed now.
1 | CREATE TABLE users ( |
데이터베이스 삭제
1 | mysql> drop database mydb; |
1 | mysql> set password for ''myid''@''localhost'' = password(''password''); |
show 명령으로 데이터베이스 자원 현환을 볼 수 있다.
mysql> help show
다음은 데이터베이스 목록을 보고, ‘mydb’를 사용합니다.
1 | mysql> show databases; |
테이블 현황
1 | mysql> show tables; |
테이블 만들기
1 | mysql>CREATE TABLE users (\ |
이럴게 만들어진 테이블은 show 명령으로 작성 스크립트를 확인할 수 있다.
1 | mysql> show create table users; |
테이블의 구성 요소는 desc 명령을 확인할 수 있다.
1 | mysql> desc users; |
1 | mysql> insert into users values (0, 'aaa@example.com', 'sldfjslfj'); |
1 | mysql> #컬럼 추가 |
mysql 계정 생성
mysql 소스 파일 다운로드 및 압축 해제
mysql 설치에 필요한 필수 패키지 사전 설치
1 | yum install -y cmake bison gcc gcc-c++ ncurses-devel |
mysql 데이터베이스 서버를 구축하기 위하여 mysql 최신 버전의 소스를 다운로드 받아 압축을 해제.
1 | $ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.28.tar.gz |
mysql db 설치에 필요한 사전 작업이 완료되면 설치를 진행할 수 있다. Mysql 은 5.5 버전 이후의 버전은 configure 명령어가 아닌 아래와 같이 cmake 명령어를 이용하여 configure 를 진행.
1 | $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql - DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 - DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 - DDEFAULT_COLLATION=utf8_general_ci -Dwith_ZLIB=system - DENABLE_DTRACE=0 |
mysql 설치작업이 끝나면 데몬을 구동하기 위한 초기화 작업이 필요하다. 다음과 같이 작업이 완료되면 최초 설치 작업은 마무리 된다.
1 | $ cp ./support-files/my-default.cnf /etc/my.cnf |
mysql 초기화
1 | $ cd /usr/local/mysql |
Mysql 설정이 완료되면 부가적으로 서비스의 스크립트와, 부팅 시 자동으로 서비스가 올라오도록 아래와 같은 기본 설정을 추가한다.
1 | $ cd /usr/local/mysql |
mysql-server 를 설치하며 만든 root 사용자 패스워드를 사용해서 데이터베이스에 접속한다.
1 | $ mysql -u root -p |
사용자가 사용할 데이터베이스를 만든다.
1 | mysql>create database mydb; |
계속해서 새로운 사용자를 만든다.
1 | # 현재 머신에서만 접속할 수 있는 사용자 계정 |
localhost 머신의 MySQL 데이터베이스에 myid라는 이름의 아이디를 만들고, 패스워드는 password로 설정
새로 생성한 사용자 ID로 로그인을 해서 데이터베이스를 만든다.
1 | root@a5d2a69fa410:/# mysql -u qkboo -p |
MySQL에서 설정파일을 읽는 순서는 다음과 같다.
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
utf-u 문자셋을 기본으로 설정하기 위해서 my.cnf 파일을 다음 같이 사용한다.
MySQL 설정 파일에서 문자셋을 변경할 수 있다. 다믕 같이 자신의 my.cnf 파일을 작성한다. client, mysqld, mysql 에 대해서 utf8 사용을 선언해 준다.
1 | [client] |