본문 바로가기
Development(Web, Server, Cloud)/22) LINUX - Cloud

클라우드 48일차

by tonyhan18 2022. 3. 14.
728x90

openstack

- 네트워크, 리눅스, 스토리지 (블럭, 오브젝트)

- 이미지 서비스, ...

 

 

https://dev.mysql.com/downloads/windows/installer/

 

MySQL :: Download MySQL Installer

Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.28 2.3M (mysql-installer-web-community-8.0.28.0.msi) MD5: 514567a7503999d271a20b86057f15d0 | Signatu

dev.mysql.com

먼저 위의 링크로가서 MySQL Community를 다운받아보자

 

mysql-server(oracle)

- enterprise (기업)

- community (개인)

 

openstack -> mariadb(정보관리)

 

1. 윈도우(local에 직접설치)

2. DB(211.183.3.200)

-> MySQL 8.X 설치 : root 패스워드 지정되어 있음 -> 변경 후 사용하기

-> workbench -> DB 관리

 

웹 서비스를 위한 3tier 구조

 

전통적인 DB는 table로 관리되는 형태이다. 그리고 table을 하나만 놓고 쓰면 쓰기가 쉽지 않다. 그래서 쇼핑몰 가입자와 구매 정보에 대해서 한 테이블만 쓰지말고 나누어서 정보의 연결만 해주자는 것이다.

 

그러면 공간낭비를 없애고 중복을 최소화 할 수 있다.

그래서 전통적인 DB는 테이블간 관계에 있어서 유의미한 Data를 찾을 수 있다. 이런 DB를 RDB라고 부른다.

 

그런데 만약 우리가 검색과 등록에 대한 작업이 계속해서 들어온다면 여러개가 연결된 DB에 대해서 부담이 생길 수 밖에 없다. 그래서 최근 추세는 DATA 입출력이 자주 일어날 수 있도록 NoSQL을 사용하고 있다. NoSQL을 사용하면 기존에 정형화되지 않은 데이터(동영상, 사진)를 넣는것도 가능해진다.

이것보다 더 빠른처리를 위해서 데이터를 Disk가 아닌 RAM에서 처리하자는 것도 있다.

 

---

 

대부분의 경우 server-client 사이의 입출력으로 일어나는 결과이다. 두대 이상의 DB를 DB Cluster로 묶어서 Active DB가 죽었을때 Standby로 옮겨갈 수 있도록 할 수도 있고, DB에 접근을 위한 중간 ip를 두어서 두개의 DB를 왔다갔다 할 수도 있다.

이때 두 DB는 꼭 동기화되어 2중화 구성으로 만들어지게 된다. 단 이러한 구성은 안전성, 보안문제가 발생할 수 있다.

그래서 이를 보완하기 위해서 block-chain 방법을 사용하기도 한다. block-chain은 단위시간안에 일어난 거래기록들을 key값과 함께 hashing하게 된다. 그러면 단위시간에 일어난 거래기록들이 단순화된 코드로 저장된다. 변화가 일어나면 또 key값을 추가한 새로운 코드를 만들어낸다.

이렇게 만들어진 코드들을 하나의 block이라고 하면 각각의 block들이 연결되어 block chain을 만들어낸다.

 

그래서 기존에는 server-client 환경으로 연결된 상태였으나 현재는 각자가 거래내역을 가지고 있다. 어떤 한명이 데이터를 변경하더라도 다른 client의 거래기록을 보고 변경된 거래기록을 무시할 수 있게된다. 그래서 거래의 투명성과 안전한 보관을 인정받을 수 있다.

결과 public block-chain의 단점은

1. 거래기록을 볼 수 있으나 변경할 수는 없다.

2. 처음블록(genesis block)부터 해서 지금까지의 모든 블록을 모두가 가지고 있어야 한다. 데이터의 양이 너무 많다. 그래서 이 데이터를 거래소가 소유함으로 문제를 해결할 수 있다.

3. 모두가 참여가능

 

그렇다보니 사설 block chain을 두어서 거래 참여에 제한을 두자는 것이다.

 

test1234

 

 

 

 

대충 cmd 창처럼 생긴 MySQL 8.0 Command Line Client를 클릭하고 접속하자

 

.

대충 이런느낌이다.

 

---

 

원격지 리눅스에서 MySQL 최신버전을 설치해보자

 

192.168.2.200에

```

systemctl stop mariadb

yum remove mariadb-server

yum remove mariadb

systemctl disalbe mariadb

yum clean all

```

```

rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

yum --enablerepo=mysql80-community install mysql-community-server

mysql --version

 

 

# 에러가 났을떄 이런식으로 처리해보자

chmod -R 777 /var/lib/mysql

rm -rf /var/lib/mysql/*

systemctl restart mysqld

cat /var/log/mysqld.log | grep password

```

하면 패스워드가 나온다. 만약 이러고도 접근에러

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

```

요딴게 뜬다면 다른 패스워드로 들어가야 한다.

```

sudo grep 'temporary password' /var/log/mysqld.log

```

기존에 쓰던거 말고 딴거 써서 들어가자

 

들어가서

```

alter user 'root'@'localhost' identified by 'TEst!234';

```

으로 나만의 패스워드를 설정해주자

 

원격지에서 접속할 수 있는 사용자를 추가해주었다.

 

```

create user 'root'@'%' identified by 'TEst!234'

flush privileges;

select user,host from mysql.user;

GRANT ALL PRIVILEGES ON *.* TO root@'%';  # 원격 접속 root의 모든 권한 부여

```

 

리눅스 쉘에서 데이터베이스를 삭제해보자

 

```

DROP DATABASE test1;

DROP DATABASE IF EXISTS test1;

CREATE DATABASE test;

```

```

use testdb

show tables;

CREATE TABLE usertbl( name CHAR(10), birthyear INT, addr CHAR(3), mobile1 CHAR(3),  mobile2 CHAR(8),  mdate DATE);

```

 

 

```

INSERT INTO usertbl VALUE( '철수', 1996, '마포동', '010', '12344123', '2022-03-14', 'user2');

```

위의 방식으로 데이터를 넣어주자

잘들어가 있다.

 

컬럼을 추가해보자

 

했는데 NULL이 그냥 들어간다. 이렇게 되는 원인은 NULL을 지정해주지 않아서이다.

 

```

ALTER TABLE usertbl ADD homepage2 VARCHAR(40) DEFAULT 'http://www.test.com' NULL;

```

 

CREATE table membertbl( 
userid CHAR(8) PRIMARY KEY, 
name VARCHAR(10), 
year INT NOT NULL DEFAULT -1, 
addr CHAR(10) NOT NULL DEFAULT 'SEOUL', 
phone CHAR(13), 
homepage CHAR(40) NOT NULL DEFAULT 'http://www.test.com');

새로 테이블을 만들어보자

 

year, addr, homepage를 아무것도 입력안하니 위와같이 DEFAULT값이 들어간다.

INSERT INTO `testdb`.`membertbl` (`userid`, `name`, `phone`) 
VALUES ('user2', '영희', '01032165498');

코드로 따지면 위와같은 것이 들어가게 된다.

 

 

```

alter table membertbl drop COLUMN addr;

```

```

alter table membertbl change COLUMN homepage homepy VARCHAR(45);

```

보면 칼럼명이 바뀐것뿐 아니라 Default 데이터도 함께 빠지었다.

 

---

 

DBMS

live md5 hash generator

 

[ 데이터 무결성 ]

1. 무결성검사(hashing)

- 데이터의 위변조 여부를 확인하기 위한 목적으로 활용

- 무결성을 위해서 데이터베이스는 제약 조건이라는 특성을 가짐(PK, FK, unique 등)

 

2. 자료 관리

- 각각의 데이터를 hash를 이용하여 고정 길이의 키로 저장하고 나중에 데이터를 찾을 떄 이 고정 길이 키를 이용하여 찾는다.

- 만약 고정길이의 키가 짧고 저장할 데이터가 많다면? 겹치는 코드가 나올 수 있다.

- 서로다른 데이터가 동일한 해시 값을 갖게되면 데이터의 무결성을 보장받을 수 없다.

 

[ 데이터 독립성 ]

- DB 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램은 전형 영향 받지 않는다. 즉, 서로 의존적 관계가 아닌 독립 관계여야 한다.

 

[ 보안 ]

????

 

DB의 안정성 향상

 

???

 

SQL

MySQL

 

 

 

MySQL을 이용한 DB 구축

.

대충 위와같이 만들자

 

테이블 외의 데이터베이스 객체의 활용

 

Quix

CREATE TABLE usertbl(membername CHAR(10), memberaddress CHAR(10));

 

---

 

Stored Procedure

-> 일종의 프로그래밍 기능

-> 여러 SQL문을 묶어서 실행할 수 있도록 해주는 기능. 마치 함수와 비슷

 

DELIMITER // -- 시작문자 지정(바뀌어도 됨 `//`, `$$` 등)
CREATE PROCEDURE myproc()
BEGIN
	SELECT membername, memberaddress FROM shopdb.member WHERE memberid='kim';
    SELECT * FROM shopdb.product WHERE prodctname='냉장고';
END
//
DELIMITER ;

CALL myproc();

 

????

728x90