728x90

1.DCL : (data control language)권한 부여, 권한 회수, 트랜잭션 확정,취소 등

   grant , revoke, commit, rollback, checkpoint

2.DDL : (Data Definition Language)DB 오브젝트를 생성,수정,삭제

   create, alter, drop, truncate

3.DML : (Data Manipulation Language)데이터를 삽입, 삭제, 변경, 조회 

  insert, update, delete, select

4.테이블사용량 점검

더보기

# mariadb 기준

# 테이블별 사이즈 확인
SELECT 
    table_name,
    table_rows,
    round(data_length/(1024*1024),2) as 'DATA_SIZE(MB)',
    round(index_length/(1024*1024),2) as 'INDEX_SIZE(MB)'
FROM information_schema.TABLES
where table_schema = '데이터베이스이름'
GROUP BY table_name 
ORDER BY data_length DESC 
LIMIT 10;


SELECT
count(*) NUM_OF_TABLE,
 table_schema,
 case when sum(table_rows) = 0
       then concat (0,'M')
      else concat(round( sum(table_rows)/1000000,2),'M') 
      end row_size,
concat(round(sum(data_length)/(1024*1024*1024),2),'G') DATA,
concat(round(sum(index_length)/(1024*1024*1024),2),'G') idx,
concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size,
round(sum(index_length)/sum(data_length),2) idxfrac
FROM information_schema.TABLES
GROUP BY table_schema
ORDER BY sum(data_length+index_length) DESC LIMIT 10;

5.하드용량 확인( 리눅스 명령어 )

#하드 용량
df -h

#총 하드디스크 용량 합산
df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum/1024/1024 " GB" }'

#사용중인 하드디스크 용량 합산
df -P | grep -v ^Filesystem | awk '{sum += $3} END { print sum/1024/1024 " GB" }'

#남은 하드디스크 용량 합산
df -P | grep -v ^Filesystem | awk '{sum += $4} END { print sum/1024/1024 " GB" }'

잘 정리되어 있어서 여기서 가져왔습니다. => https://ysyun0201.tistory.com/16

 

[리눅스]리눅스 하드디스크 용량 사용량 남은용량

리눅스 명령어#하드 용량df -h#총 하드디스크 용량 합산df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum/1024/1024 " GB" }'#사용중인 하드디스크 용량 합산df -P | grep -v ^Filesystem | awk '{sum += $3} END { print s

ysyun0201.tistory.com

6. 데이터베이스 용량 산정

   a. 접근방법 : 전체 데이터 베이스로 산정하는 것이 아닌 주요 테이블별 산정한 다음 합산하는 방식으로 소요예측하여 산정하여야 한다. 

   b. 예측이기 때문에 오차가 발생할 수 있음

DATA ROW길이 산정

데이터타입	산정길이
NUMBER	ROUND(DATA_PRECISION)/2)+1
DATE	7
CHAR	DATA_LENGTH
VARCHAR2 길이30이상	ROUND(DATA_LENGTH/3)
VARCHAR2 길이30미만	DATA_LENGTH

#INDEX ROW길이 산정
 - 테이블에 포함된 인덱스들의 총길이 기술

#초기건수 산정
 - 테이블에 포함된 인덱스들의 총길이 기술

#DATA SPACE 길이 산정
 - 테이블의 1레코드에 소요되는 공간을 계산하여 기술

#INDEX SPACE 길이 산정
 - 테이블의 1레코드의 인덱스에 소요되는 공간을 계산하여 기술

#초기크기 산정
 - 초기구축시 소요되는 테이블별 소요 공간을 계산하여 기술

#증가건수(년) 산정
 - 년간 증가레코드 건수를 기술

#총용량(1년후) 산정
 - 초기 구축후 1년후 소요되는 테이블별 소요 공간을 계산하여 기술
 - (DATA ROW길이*년간증가건수*0.7)+(INDEX ROW길이*년간증가건수*1.2)+초기크기

#총용량(5년후) 산정
 - 초기 구축후 5년후 소요되는 테이블별 소요 공간을 계산하여 기술
 - (DATA ROW길이*년간증가건수*0.7*5)+(INDEX ROW길이*년간증가건수*1.2*5)+초기크기

출처 : https://dev-road.tistory.com/36

 

 

728x90

'database > mariadb' 카테고리의 다른 글

심심풀이_온라인강의사이트 DATABASE(2024.07.07~)  (0) 2024.07.07
계정 권한 주기  (0) 2023.08.19
mariadb docker 설치(2023.07.11)  (0) 2023.07.11
728x90

 지인중에 온라인 강좌를 회원 가입해서 볼 수 있는게 필요하다고 해서 사이드 프로젝트로 해볼까 생각중에 문득 오늘 해보는 것도 좋을 것 같아서 시작하게 되었습니다.

 서비스 구성은 일단 최근에는 오라클보다 mariadb를 주로 사용중이고 하니 전에 구성해 두었던 mariadb에 생성하면서 정리해보려 합니다.

 크게 서비스 구성은 관리자 사이트랑 회원 사이트, 강사용 사이트 정도로 구성하고, 회원 사이트는 Thymeleaf로 만들고 추후 flutter, react 로 만들어 볼까 합니다.  뭐 이건 심심풀이 프로젝트라 심심하지 않으면 진행인 안될 수 있습니다. 지인이 당장 필요하다고 이야기한 것도 아니어서 기한은 없는 프로젝트라 파일롯 프로젝트로 디자인을 포기하고 한달 목표로 진행하고 주말에 살짝 시간내서... ㅡ.ㅡ 마구 시간내서... 지인이 년말에 제촉하니 한여름 가기전에는 해 놓아야 겠네요...

 시작은 가볍게... 디자인 딴지는 지인이 감각이 좋은 관계로 최종 디자인 작업은 지인에게 넘길 생각도 가지고 있습니다. 그런 관계로 스피드하게...


1. 기본 접근 정보 만들기

create database studydb;

create user 'studyon'@'%' identified by 'studyon1234';

grant all privileges on studydb.* to 'studyon'@'%';

flush privileges;

show databases;

 

 2.  생성한 유저로 로그인해서 ( studyon ) 기본 테이블 생성하기

더보기

 테이블 고민하다보니 심심풀이 프로젝트로 접근하려면 일단 간단하게 접근하고 보완하는 방식으로 가야할 것 같습니다. 테이블3개 만드는데 너무 이것 저것 따지고 오래 걸리네요.

 이글을 보시는 분들 중에 경험삼아 가볍게 따라 해보시는 분들은 필요한 기능을 우선적으로 설계하고 프로그램 확장하면서 기능에 맞춰서 table 변경하는 것을 추천합니다. 반대로 고민을 해서 DB설계 하실 분들은 테이블별 필요내용들을 작성하고 화면스토리보드를 작성 후 데이터를 도출하여 정규화 과정을 거친 항목들을 테이블에 반영 후 전체 프로세스를 검토반영해서 테이블 설계보완이 된 후 생성하는 것을 추천합니다. 

use studydb;

CREATE TABLE t_users (
    user_seq BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '고유 id',
    user_id VARCHAR(50) NOT NULL COMMENT '사용자 id',
    user_name VARCHAR(200) NOT NULL COMMENT '사용자 성명',
    user_pw VARCHAR(255) NOT NULL COMMENT '사용자 비밀번호',
    author_cd char(5) DEFAULT NULL COMMENT '권한 코드',
    pw_updt_yn char(1) DEFAULT 'N' COMMENT '비밀번호 변경 여부',
    pw_updt_dt timestamp DEFAULT NULL COMMENT '비밀번호 변경 일시',
    pw_failr_cnt int(11) DEFAULT NULL COMMENT '비밀번호 실패 횟수',
    last_conect_dt timestamp NULL DEFAULT NULL COMMENT '최근접속일시',
    use_yn char(1) DEFAULT 'Y' COMMENT '사용 여부',
    user_del_dt timestamp  NULL DEFAULT NULL COMMENT '삭제일시',
    user_del_dsc varchar(1000) NULL COMMENT '삭제설명ex불랙회원,불량ID',
    email VARCHAR(200) NULL COMMENT '회원이메일',
    hp VARCHAR(20) NULL COMMENT '회원hp',
    reg_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '등록일시',
    req_id  varchar(50) DEFAULT NULL COMMENT '등록id',
    up_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '수정일시',
    up_id  varchar(50) DEFAULT NULL COMMENT '수정id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='일반사용자';

CREATE TABLE t_course (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '고유 id',
    title VARCHAR(1000) NOT NULL COMMENT '강의풀제목',
    s_title varchar(100) not null COMMENT '강의제목약어',
    description TEXT COMMENT '강의설명',
    video_url VARCHAR(255) NULL COMMENT '강의영상url',
    file_list_id varchar(200) NULL COMMENT '강의관련파일목록',
    reg_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '등록일시',
    req_id  varchar(50) DEFAULT NULL COMMENT '등록id',
    up_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '수정일시',
    up_id  varchar(50) DEFAULT NULL COMMENT '수정id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='강의목록';

CREATE TABLE t_user_course (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_seq BIGINT,
    course_id BIGINT,
    progress INT DEFAULT 0,
    reg_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '등록일시',
    req_id  varchar(50) DEFAULT NULL COMMENT '등록id',
    up_dt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '수정일시',
    up_id  varchar(50) DEFAULT NULL COMMENT '수정id',
    FOREIGN KEY (user_seq) REFERENCES t_users(user_seq),
    FOREIGN KEY (course_id) REFERENCES t_course(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='수강목록';

--------- 기본 spring boot 웹 서비스 구성중...(계속...)

728x90

'database > mariadb' 카테고리의 다른 글

database관련 잡학정리  (0) 2024.09.05
계정 권한 주기  (0) 2023.08.19
mariadb docker 설치(2023.07.11)  (0) 2023.07.11
728x90

데이터 덤프를 파일로 내려서 스크립트를 확보하였지만 해당 데이터 베이스에 유저정보가 없을 경우 만들어 줘야 하더군요.

유저 백업과 관계없이 데이터베이스 백업이 이루어 지는 것 같습니다.

그래서 해당 유저를 만들었는데 권한 부족으로 덤프 파일을 실행 못하는 경우가 발생하고 삽질을 하는 경우가 있죠.

그런 경우 단순 한줄의 명령어만 주면 되는데 대부분 딕셔널리 사용을 고려안한 데이터베이스에 대한 권한만 주어 딕셔널리 테이블을 사용 못하는 경우가 발생합니다.

 

딕셔널리 관련 데이터베이스는 mysql 입니다.

 

자 그럼 한줄로 사용하는 것을 기업해 봅시다.

 

grant all privileges on *.* to 'userid'@'접속위치';

 

ex) grant all privileges on *.* to 'userid'@'%';

 

이상입니다.

728x90

'database > mariadb' 카테고리의 다른 글

database관련 잡학정리  (0) 2024.09.05
심심풀이_온라인강의사이트 DATABASE(2024.07.07~)  (0) 2024.07.07
mariadb docker 설치(2023.07.11)  (0) 2023.07.11
728x90

마리아db 최신버전 설정 옵션명칭이 바뀌었네요 이전 버전 글을 남기고 최신것을 위에 적어 봅니다.

2023.10.31 - [분류 전체보기] - mariadb docker (2023.10.31)

아래글을 참고만하시고 위에 글보고 하세요


2023.05.29 - [프로그램/docker] - 도커 작성글 모아보기

 

 

도커 작성글 모아보기

여러 게시글에서 도커를 사용하다 보니 도커를 모아서 보고 싶은 생각이 들어 정리해 보았습니다. 2022.03.01 - [프로그램/짜투리상식] - mac에서 도커설치해서 사용하기 mac에서 도커설치해서 사용

jsi0.tistory.com

 

도커 설치 완료 후 Mariadb를 설치해 보자

1. mariadb docker 이미지 다운로드

docker search mariadb

docker pull mariadb

2. mariadb container 생성

   가. 마리아 db 로컬 폴더로 저장

docker container run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1004 -v D:\data\mariadb:/var/lib/mysql --name mariadb mariadb

   나. 디비데이터를 컨테이너에 저장

docker container run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1004 --name mariadb mariadb

   다. 도커 실행여부 확인 및 접속

docker ps -a
docker exec -i -t mariadb bash
mysql -uroot -p 1004
create database test;

create user 'usera'@'%' identified by '1234';
grant all privileges on test.* to 'usera'@'%';
flush privileges;
show databases;

   etc) mysql not found 해결법 

가. 해당 폴더에 파일이 있는경우 경로를 환경변수로 잡아 준다.
파일확인 : /usr/local/mysql/bin/mysql

>> 변경 파일 
vi /etc/profile
>> 내용추가
export DB_HOME=/usr/local/mysql
export PATH="$PATH:/usr/local/mysql/bin"

나. 없으면 새로 설치해 준다.
# mariadb
apt-get install mariadb-client

# ubuntu16
apt-get install mysql-client

# ubuntu14
apt-get install mysql-client-core-5.6

현재 최신버전에 mysql 실행에 문제가 있는 관계로 프로젝트에서 10버전으로 사용주이라 다운로드부터 다시 했습니다.

docker pull mariadb:10.9.7-jammy

 

 

docker container run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1004 -v D:\data\mariadb:/var/lib/mysql --name mariadb10 mariadb:10.9.7-jammy

이제 컨테이너에 접속해서 정상 여부를 확인해 보자

docker exec -it mariadb10 /bin/bash
mysql -uroot -p1004
create database test;

create user 'usera'@'%' identified by '1234';
grant all privileges on test.* to 'usera'@'%';
flush privileges;
show databases;

 

역시 최신 도커에 문제점을 느낌다면 검증된 도커 이미지를 선택하는 것을 추천합니다.

 

2시간동안 찾아다니다가 결국 20분도 안걸려서 해결했네요. 

 

오늘은 여기까지 정리하고 다음에는 스키마 백업을 하고 생성하는 것을 해볼까합니다.

 

오라클 개념에서 스키마인데 마리아디비에서는 어떤 개념인지도 알아봐야 겠네요.

728x90

'database > mariadb' 카테고리의 다른 글

database관련 잡학정리  (0) 2024.09.05
심심풀이_온라인강의사이트 DATABASE(2024.07.07~)  (0) 2024.07.07
계정 권한 주기  (0) 2023.08.19

+ Recent posts