mysql
-
docker 설정개인 프로젝트 진행/이커머스 작업 2023. 5. 29. 15:09
https://github.com/rlawls1991/commerce/tree/main/docker GitHub - rlawls1991/commerce: 내가 만드는 커머스 내가 만드는 커머스. Contribute to rlawls1991/commerce development by creating an account on GitHub. github.com docker를 이용하여 MySQL 서버 및 Redis 서버를 관리하고자 한다. 버전은 3버전을 선택했으며, docker 이미지는 biarms/mysql 5.7 및 redis 5.08버전을 사용하기로 하였다. 그리고 MySQL 같은 경우 Master/Slave 구조로 작성하였다. version: '3' services: mysql-master: image..
-
MySQL Explain 보는 법DataBase/MySQL 2022. 7. 31. 16:55
테이블 설계시 Index를 고민하면서 설계를 해야되며, 이를 이용해서 쿼리를 잘 작성해야 된다는 것을 알고 있었으나 근래 회사 프로젝트를 진행하면서 더욱 중요하다는 것을 알게 되었다. 좋은 쿼리를 만들 수 있는 방법이 실행계획을 보는 것을 알게 되었고 한번 정리를 해보고자 한다. explain 예시 아래의 쿼리 앞에 사용쿼리 앞에 explain을 붙이면 발생되는 화면이다. (DB 클라이언트는 DBeaver를 사용) 위의 실행계획을 보게 된다면 id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows를 볼 수 있는데 해당되는 컬럼의 타입은 아래와 같다. select_type id 해당 id 내에 있는 select문 에 ..
-
Real MySQL 인덱스DataBase/MySQL 2022. 5. 8. 16:21
디스크 읽기 방식 저장소 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) SSD는 기존 하드 디스크 드라이브에서 데이터 저장용 플레터(원판)을 제거하고, 그 대신 플래시 메모리를 장착하고 있다. 그래서 디스크 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다. 플레시 메모리는 전원이 공급되지 않아도 데이터가 삭제되지 않는다. 게다가 데이터 베이스 서버에서 순차 I/O 작업은 비중이 크지 않고, 보통 랜덤 I/O 작업을 통해 작은 데이터를 읽고 쓰는 작업이 대부분이기 때문에 DBMS용으로 SSD를 많이 사용하고 있다. 순차 I/O와 랜덤 I/O란 위 그림을 보게 된다면 순차 I/O는 디스크 헤더를 한번만 사용한 반면 랜덤 I/O은 헤더가 3번을 움직였다. 헤..
-
Real MySQL 격리수준(Isolation Level)DataBase/MySQL 2022. 5. 1. 15:38
과거 정리한 내역이다. 해당 내역은 기본적인 이론만 작성했고, 이번에는 기본적인 내용과 깊은 내역까지 정리할 것이다. 2021.03.09 - [DataBase/공통] - DB 트랜잭션 격리수준(Isolation Level) 트랜잭션 격리수준에 따른 발생되는 문제 격리수준(Isolation Level) 설명 READ UNCOMMITTED Shared Lock이 걸리지 않는 상태이다. 해당 그림을 보게 된다면 사용자 A는 Lara라는 데이터를 Insert를 했고, 아직 commit상태가 아닌경우지만 사용자 B는 Lara라는 데이터를 읽을 수가 있다. 즉 coomit 상태가 아닌경우에도 데이터를 읽읅 수 있다. 사용자 A가 처리도중 알 수 없는 오류로 롤백한다고 하더라고 사용자 B는 Lara가 정상적인 상태라..
-
Real MySQL 트랜잭션DataBase/MySQL 2022. 4. 30. 14:27
트랜잭션 트랜잭션이란? 트랜잭션의 정의 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어 주는 것 즉 트랜잭션은 데이터의 정합성을 보장하기 위한 기능 MySQL에서의 트랜잭션 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나(commit을 실행했을때) 아무것도 적용되지 않아야(RollBack 또는 트랜잭션을 RollBack시키는 오류가 발생했을 때)함을 보장해주는 것 잠금 잠금은 동시성을 제어하기 위한 기능 트랜잭션 수준과 잠금의 차이 잠금은 여러 커넥션에서 동시에 동일한 자원(레코드나 테이블)을 요청한 경우 순서대로 한 시점에는 하나의 커..
-
Real MySQL 아키텍처DataBase/MySQL 2022. 3. 12. 14:25
MySQL 엔진 아키텍처 각 부분에 대한 하는 역활 커넥션 핸들러 클라이언트로부터 접속 및 쿼리 요청을 처리 MySQL 엔진 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당되는 처리 수행 스토리지 엔진 디스크 스토리지에 저장하거나 디스크 스토리지부터 데이터를 읽어오는 부분 핸들러 API MySQL 엔진에서 데이터를 읽어나 쓰거나 할 때는 각 스토리지엔진에 쓰기 또는 읽기를 요청을 하는데 이러한 요청을 핸들러(handler)요청이라 한다. 여기서 사용되는 API를 핸들러 API MySQL 스레딩 구조 스레딩 구조 설명 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동 포그라운드 스레드나 백그라운드 스레드로 구분 동일한 이름의 스레드가 2개 이상 보이는 것은 MySQL 서버의 설정..
-
MySQL ReplicationDataBase/공통 2021. 4. 24. 16:35
공부한 이유최근 이직한 회사의 데이터를 확인을 해보니 DB가 Master-Slave 구조로 되어있었다. 처음에 이러한 구조를 몰랐을 때 DB들을 확인해보니 같은 테이블명을 가졌으며, 같은컬럼을 공유하는 것이 매우 많아서 당황했었다.(진심으로.. 이거때문에 반나절을 날렸던...) 그래서 앞으로 이렇게 당황하지 않기위해서 오늘 MySQL Replication을 공부를 할 것이다. MySQL Replication이란?리플리케이션(Replication)은 복제를 뜻하며 2대 이상의 DBMS를 나눠서 데이터를 저장하는 방식이며, 사용하기 위한 최소 구성은 Master / Slave 으로 되어있다.Master웹서버로 부터 데이터 등록/수정/삭제 요청시 바이너리로그(Binarylog)를 생성하여 Slave 서버로 ..
-
스프링 데이터 - MySQL백기선(인프런 강의)/스프링 부트 개념과 활용 2020. 7. 4. 13:09
예제 의존성 추가 mysql mysql-connector-java docker 설치 https://www.docker.com/ 아래 소스 실행 docker run -p 3306:3306 --name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=jinseok -e MYSQL_PASSWORD=pass -d mysql docker exec -i -t mysql_boot bash mysql -u root -p 소스 설치결과 MySQL용 Datasource 설정 spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useSSL=false spring.datasou..