본문 바로가기
Development(Web, Server, Cloud)/Cloud : 정리

7. MySQL

by tonyhan18 2022. 3. 23.
728x90

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

 

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

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

 

두대 이상의 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. 모두가 참여가능

 

---

 

MySQL :: Download MySQL 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 Workbench를 먼저 설치하자

 

Customer > MySQL 8.0 Workbench만 설치

 

root password 'test123'

 

하고 이제 사용하자

 

---

 

CENTOS에서 실행

# 설치하기
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

# 임시 패스워드로 로그인시
mysql -u root -p'l!DOR03mbH)c'

# 임시 패스워드로 로그인이 안되는 경우
sudo grep 'temporary password' /var/log/mysqld.log
# 하면 추가적으로 임시 패으숴드가 나온다. 이걸로 접속하자.

 

DB에서 유저 설정하기

-- 들어가서 유저 설정 변경
Alter user 'root'@'localhost' identified by 'TEst!234';
CREATE user 'root'@'%' identified by 'TEst!234';
GRANT ALL PRIVILEES ON *.* TO root@'%';  -- 원격 접속 root의 모든 권한 부여

-- 이거 해야지 적용됨
flush privileges;

SQL

위와같이 SQL이 구성된다.

 

[ DDL ]

/* BASIC */
-- 어디에 속하지는 않지만 굉장히 자주 사용됨
USE testdb; -- 특정 DB 사용하겠다를 명시
SHOW tables;
SHOW databases;
DESC <table 명>;

/* CREATE */
-- SCHEMA 생성
CREATE SCHEMA 'testdb';

-- DATABASE 생성
CREATE DATABASE '<db명>';

-- TABLE 생성
CREATE TABE 'test'.'usertable' (
 username CHAR(10) NOT NULL PRIMARY KEY,
 birthyear INT,
 addr CHAR(10) NOT NULL DEFAULT 'SEOUL', 
 userid VARCHAR(45) NOT NULL,
 mdate DATE
);

/* ALTER */
-- COLUMN명 변경, COLUMN NULL 속성 변경, DEFAULT 변경
ALTER TABLE 'test'.'usrtable'
RENAME TO 'test1'.'usertable',
CHANGE COLUMN 'username' 'name' CHAR(10) NOT NULL,
CHANGE COLUMN 'userid' 'userid' CHAR(20) NULL DEFAULT NULL,


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

-- COLUMN 지우기
ALTER TABLE membertbl DROP COLUMN addr;

/* DROP */
DROP DATABASE test1;
DROP DATABASE IF EXISTS test1; -- 이걸 이용한게 정말 많이 나온다.

[ DML ]

 

/* INSERT */
-- 전체 성분에 데이터 삽입
use testdb
INSERT INTO usertbl VALUE( '철수', 1996, '마포동', '010', '12344123', '2022-03-14', 'user2');

-- 일부 column에만 값을 넣기
INSERT INTO `testdb`.`membertbl` (`userid`, `name`, `phone`) VALUES ('user2', '영희', '01032165498');

[ DCL ]

-- 들어가서 유저 설정 변경
Alter user 'root'@'localhost' identified by 'TEst!234';
CREATE user 'root'@'%' identified by 'TEst!234';
GRANT ALL PRIVILEES ON *.* TO root@'%';  -- 원격 접속 root의 모든 권한 부여

-- 이거 해야지 적용됨
flush privileges;

 

 

DBMS

[ 데이터 무결성 ]

1. 무결성검사(hashing)

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

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

 

2. 자료 관리

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

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

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

 

[ 데이터 독립성 ]

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

 

[ 보안 ]

????

 

DB의 안정성 향상

 

48 일차부터 수정하면 됨

728x90