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();
????
'Development(Web, Server, Cloud) > 22) LINUX - Cloud' 카테고리의 다른 글
클라우드 50일차 (0) | 2022.03.16 |
---|---|
클라우드 49일차 (0) | 2022.03.15 |
클라우드 47일차 (0) | 2022.03.13 |
클라우드 46일차 (0) | 2022.03.10 |
클라우드 45일차 (HAPROXY, python, Docker Stack, Docker Swarm, HAProxy, Nginx를 이용한 웹서비스와 로드밸런싱, GCP) (0) | 2022.03.08 |