개발로 자기계발
728x90
SMALL
article thumbnail
Docker에 MySQL Replication(Master-Slave) 구축
Database & Data/MySQL 2024. 10. 30. 10:34

먼저, Docker가 설치되어 있어야 한다. 만약 Docker가 설치되지 않았다면 Docker 공식 사이트에서 설치할 수 있다.Docker MySQL 이미지 찾기docker search mysql Docker MySQL 이미지 받기docker pull ubuntu/mysql 네트워크 생성Docker 컨테이너들이 서로 통신할 수 있도록 Docker 네트워크를 생성한다.docker network create mysql-cluster Master 컨테이너 생성MySQL 마스터 역할을 하는 컨테이너를 생성한다.docker run --name mysql-master -d --restart unless-stopped --network mysql-cluster -e MYSQL_ROOT_PASSWORD=root -e ..

article thumbnail
MySQL에서 PostgreSQL으로 마이그레이션 (Shell 환경)
Database & Data/MySQL 2024. 6. 28. 17:08

이기종 마이그레이션을 실습해 보고 간단하게 어떠한 과정을 거치는 알아보려고 한다.환경은 MySQL 8버전 PostgreSQL 15 버전이다. MySQL 데이터베이스 접속mysql -u root -p MySQL 데이터베이스 생성먼저 MySQL에서 데이터베이스를 생성한다.CREATE DATABASE testdb; MySQL 테이블 생성생성한 데이터베이스에 접속한 후 테이블을 생성한다.USE testdb;CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(15) NOT NULL, position VARCHAR(15), hire_date DATE); 샘플 데이터 삽입INSERT INTO employees (nam..

[MySQL] 트랜잭션 격리 수준(간단한 정리)
Database & Data/MySQL 2024. 2. 29. 14:19

READ UNCOMMITTED정의다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다.부정합'더티 리드(Dirty Reads)'가 발생할 수 있다. 아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되었을 경우 잘못된 정보를 기반으로 작업을 수행할 위험이 있다.상황 설명:도서관에서 책을 읽기 시작했다.다른 사람이 책에 메모를 하고 있지만, 아직 메모를 완성하지 않았다.READ UNCOMMITTED 상황에서는, 본인이 그 미완성 메모를 읽을 수 있다.즉, 작성자가 아직 메모를 확정하지 않았음에도 불구하고, 그 내용을 볼 수 있다.READ UNCOMMITTED는 다른 사람이 최종적으로 확정하지 않은 정보에 접근할 수 있다.이는 메모가 나중에 변경되거나 삭제될 수 있음을 의미하며, 이로 인해 잘못..

[MySQL] 쿼리 개선 기록 - 날짜 범위, 중복 제거
Database & Data/MySQL 2024. 1. 31. 13:35

날짜로 필터링을 하거나 데이터 중복을 제거할 때 인덱스에서 데이터를 찾는지 또는 추가적인 작업을 하는지는 쿼리 속도에 영향을 준다. 이 간단한 작업으로도 큰 효과를 가져올 수 있었다. 당시 회사내 쿼리 개선 된 결과) 분류 쿼리 속도 행 수 기존 쿼리 약 26401ms 약1800만건 개선 된 쿼리 약 190ms 약6만8천건 가정 예를 들어 이런 쿼리가 있다고 가정해 보자.(날짜에 파티션은 제외하고 가정) SELECT student, count(DISTINCT class_uid) as total FROM school.class1 WHERE date_format(plan_dt, '%Y%m') = '202307' GROUP BY student; 1. class1에는 plan_dt에 인덱스가 생성되어 있다. 2..

article thumbnail
Local MySQL로 DB 서버 만들기(외부 IP에서 접속)
Database & Data/MySQL 2023. 8. 26. 23:52

집에 남는 Window 노트북을 어떻게 활용할까 생각을 하다가 DB로 사용하면 좋겠다고 생각했다. 그래서 이 노트북에 MySQL Workbench와 서버 설치부터 외부 IP로 접속하는 방법까지 순차적으로 정리해보려고 한다. DB 컴퓨터: Window 11(사양 구림..) 버전: MySQL 8 Version 접속 컴퓨터: MacOS MySQL Workbench와 Server 설치하기 먼저, Window 컴퓨터에 MySQL Workbench와 Server를 설치하는 것이 필요하다. 설치 링크 : MySQL 공식 사이트 MySQL Workbench와 Server를 다운로드하고 설치할 수 있다. Workbench는 MySQL Server8.0과 호환이 되기 때문에 8.1이 아닌 8.xx 버전을 다운로드하자 새로..

article thumbnail
로컬 DB 공유기 포트 포워딩 하는 방법(방화벽 설정 포함)
Database & Data/MySQL 2023. 8. 26. 23:49

로컬 DB를 외부에서 사용하기 위해 포트포워딩이 꼭 필요했다. 그래서 까먹지 않게 방법을 정리해보려고 한다. 하려고 하는 공유기는 SK브로드밴드이지만 Iptime이든 타 공유기도 비슷하지 않을까 싶다. 컴퓨터: Window 11 공유기: SK브로드밴드(RUSH-337AC) 공유기 관리자 페이지에 접속하기 먼저, 관리자 페이지에 접속하기 위해서는 해당 공유기의 IP 주소를 알아야 한다. IP 주소 알아보기 (Windows) 1. 시작 메뉴를 클릭하고 cmd 혹은 명령 프롬프트를 입력하여 프로그램을 실행시킨다. 2. 명령 프롬프트에 ipconfig를 입력하고 엔터를 누른다. 이때 본인이 노트북과 공유기가 어떻게 연결했는지에 따라 다르게 보면 된다. 본인은 Wi-Fi로 연결했기 때문에 Wi-Fi 쪽만 확인하면..

MySQL CASE 구문에서 OR과 IN의 가독성 차이(개인적 견해)
Database & Data/MySQL 2023. 8. 21. 16:17

기본적으로 CASE 문에서는 복수의 조건을 테스트할 때 OR를 사용하곤 한다. 그러나, 같은 컬럼의 값이 특정 집합에 속하는지를 검사하려면 IN 연산자를 사용하는 것이 더 간결하고 읽기 쉬웠다. 예를 들어, lm.subj_nm 값이 '국어' 또는 '국어선택학습'인지를 검사하려면 다음과 같이 OR를 사용할 수 있다: when lm.subj_nm = '국어' or lm.subj_nm = '국어선택학습' then '1' 그러나 이것은 IN을 사용하면 더 간결하게 표현할 수 있다: WHEN lm.subj_nm IN ('국어', '국어선택학습') THEN '1' 두 쿼리는 완전히 동일한 결과를 내지만, 후자는 명확성과 가독성 면에서 더 우수하다고 생각한다. 특히 조건이 많아질수록 IN 연산자를 사용하는 것이 코드..

MySQL --login-path 옵션 이해하기
Database & Data/MySQL 2023. 7. 27. 15:26

MySQL의 --login-path 옵션은 MySQL 5.6.6. 버전부터 추가된 옵션으로, 서버에 로그인하기 위한 사용자 이름, 패스워드, 그리고 기타 연결 매개변수를 설정 파일에 저장하고, 이를 불러올 수 있게 해주는 매우 유용한 기능이다. MySQL --login-path의 중요성 MySQL에 접속할 때 일반적으로 사용자 이름과 패스워드를 직접 입력하는 방식을 사용한다. 그러나 이런 방식은 다음과 같은 문제점이 있다. 보안 문제 : 패스워드를 직접 입력하는 방식은 보안에 취약해진다. 특히, 스크립트나 명령 히스토리에서 패스워드가 노출될 수 있다. 편의성 문제 : 빈번하게 MySQL에 접속해야 할 경우 매번 패스워드를 입력하는 것은 매우 번거로울 수 있다. 그래서 문제점을 보완하기 위해 mysql_c..

MySQL SQL 쿼리 성능 향상: CASE WHEN vs UNION
Database & Data/MySQL 2023. 7. 26. 16:20

데이터베이스에서 쿼리를 수행할 때, 조건 판단 방식이 쿼리의 성능에 큰 영향을 미칠 수 있다. 이 포스팅에서는 WHERE 절에 CASE WHEN 구문을 사용하는 방식과 UNION을 사용하는 방식을 비교하며, 어떤 방식이 더 효율적인 쿼리 성능을 제공하는지 알아보려고 한다. 이 문제는 https://okky.kr/questions/389347 이 사이트에서 확인했다. 우선, SQL 쿼리에서 CASE WHEN 구문은 각 행을 하나씩 검사하면서 조건을 판단한다. 이로 인해 데이터베이스는 모든 행을 전체 검색(Full Scan)해야 하며, 이는 쿼리의 성능을 저하시킨다. SELECT F.friend_one, F.friend_two, F.requested_id, F.status FROM users U, frien..

MySQL 인덱스(클러스터드, 세컨더리, 커버링) 가볍게 이해하기
Database & Data/MySQL 2023. 7. 17. 10:39

개념적 클러스터드 인덱스(Clustered Index): 라이브러리에서 책을 찾는 것을 생각해 보자.책들이 그들의 주요 키인 ISBN 번호 순서대로 정렬되어 있다고 가정한다. 이 경우, ISBN 번호가 클러스터드 인덱스와 같다. 특정 ISBN을 가진 책을 찾으려면, 책장을 탐색하여 정확한 위치를 찾는다. 이러한 방식으로 책은 ISBN 번호에 따라 물리적으로 정렬된다. 세컨더리 인덱스(Secondary Index): 이제 책의 제목으로 책을 찾으려고 한다고 상상해 보자. 이 경우, 책의 제목은 보조 인덱스와 같다. 책 제목에 따라 정렬된 카드 카탈로그(세컨더리 인덱스)를 통해 먼저 책의 ISBN을 찾는다. 그다음, 이 ISBN을 사용하여 책장에서 실제 책을 찾는다. 커버링 인덱스(Covering Index..

728x90
SMALL