MySQL

· MySQL
💋 인트로 기존 EC2의 MySQL에서 사용중이던 데이터를 모두 신규 EC2의 MySQL로 옮겨야 하는 일이 발생했다. 기존 EC2 MySQL stampcrush 데이터베이스 → 신규 EC2 MySQL stampcrush 데이터베이스 💋 mysqldump 명령어 ✔️ 기존 데이터베이스의 정보 백업해서 덤프파일 생성 기존 MySQL이 설치된 EC2에 접속할 수 있는 위치로 이동한다. 나는 기존 MySQL에 외부 접속이 가능한 EC2로 이동했다. 이 경우에는 별도로 -h 명령어를 통해서 MySQL이 설치되어 있는 EC2의 IP까지 명시해야 한다. mysqldump -h 192.168.X.XXX -u root -p stampcrush > stamp_crush_dump.sql 192.168.X.XXX: MySQ..
· MySQL
💋 인트로 안녕하세요! 우아한테크코스 5기 깃짱입니다. 이번 포스팅에서는 mysqldump 명령어로 Docker 위에 띄운 MySQL 데이터베이스 백업하는 방법에 대해 알아보겠습니다. 스탬프크러쉬 팀원 제나가 열심히 옆에서 뚝딱뚝딱 했습니다. 💋 설정 방법 1. 백업 파일을 저장할 폴더를 생성 mkdir /db_backup 이름은 굳이 다른 것이어도 상관없음! 2. 생성된 백업 폴더의 권한을 수정 chmod 755 /db_backup 3. 백업을 수행할 스크립트 파일 생성 vi /db_backup/backup.sh 4. 생성된 스크립트 파일에 내용 입력 # /bin/bash FILE_NAME=backup_`date +"%Y%m%d%H%M%S"` BACKUP_DIR=/home/ubuntu/db_backup..
· MySQL
안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 💋 인트로 DBMS를 사용하는 이유는, 데이터를 안전하게 저장, 관리하고, 빠르게 조회하기 위해서이다. 옵티마이저가 쿼리를 최적으로 처리될 수 있도록 실행 계획을 수립하지만, 항상 좋은 실행 계획을 만드는 것은 아니기 때문에, 사용자가 실행 계획을 보완할 수 있도록 EXPLAIN 명령어로 실행 계획을 확인할 수 있도록 해준다. 백엔드 개발자라면, 이 실행 계획을 이해하고, 최적화할 수 있어야 한다. 먼저, 대략적인 쿼리의 실행 절차에 대해 살펴보자. 💋 쿼리 실행 ✔️ 쿼리 실행 절차 SQL 파싱 사용자로부터 온 SQL문을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리함. (파스트리) 최적화 및 실행 계획 수립 파스트리를 확인하면서, 어떤..
· MySQL
💋 데이터베이스 관련 명령어 데이터베이스 생성: CREATE DATABASE databasename; 데이터베이스 사용: USE databasename; 데이터베이스 삭제: DROP databasename; 💋 인덱스 관련 명령어 인덱스 생성: CREATE INDEX indexname ON tablename (column1, column2, ...); 인덱스 삭제: DROP INDEX indexname ON tablename; 인덱스 상태 확인: SHOW INDEX FROM tablename; 💋 실행 계획 관련 명령어 실행 계획 보기: EXPLAIN SELECT column1, column2, ... FROM tablename WHERE condition; 실행 계획의 종류와 의미: id: SELECT..
· MySQL
💋 인트로 데이터베이스 쿼리의 성능 개선을 위한 기능 쿼리 튜닝의 기본 💋 데이터베이스 성능 튜닝은 디스크 I/O를 줄이는 것이 관건! ✔ 전기식 장치 VS 기계식 장치 전기식 장치 예) CPU, 메모리 짧은 시간 동안 매우 빠른 속도로 발전 기계식 장치 예) 디스크 성능이 상당히 제한적으로 발전 ✔ 하드 디스크 드라이브(HDD) VS 솔리드 스테이트 드라이브(SSD) 둘 다 데이터 저장 매체 하드 디스크 드라이브(HDD) 기계식 장치 회전하는 디스크와 이동하는 팔을 사용하여 데이터를 저장 원판(아래 사진 참고)을 기계적으로 회전시켜야 하기 때문에 물리적으로 데이터 읽기가 느림. 랜덤 I/O에서 특히나 느림 솔리드 스테이트 드라이브(SSD) HDD를 대체하기 위해서 출시됨 플래시 메모리를 사용하여 데이터..
· MySQL
Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip 주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS development by creating an account on GitHub. github.com 앞선 포스팅에서 트랜잭션의 개념에 대해서 학습했다. 이번 포스팅에서는 ACID 중 Isolation을 보장하기 위해서, 먼저 트랜잭션 내에서 일어날 수 있는 이상현상을 정의한다. 그리고, 각각의 이상현상들을 어느 정도 허용하는 선에서 정합성과 동시성 사이에서 타협할 것인지 결정하는 격리 수준에 ..
· MySQL
💋 MVCC(Multi Version Concurrency Control) 레코드 레벨의 트랜잭션을 지원하는 DBMS가 제공하는 기능 배타적인 락을 사용하지 않으면서, 일관된 읽기를 제공하기 위한 목적 하나의 레코드에 대해 여러 개의 버전(Multi Version)이 동시에 관리됨. InnoDB는 언두 로그(Undo log)를 사용해 MVCC를 구현함. 💋 언두 로그(Undo log) 트랜잭션 격리 수준 READ COMMITTED라고 가정 CREATE문을 통해 데이터베이스 내에 테이블은 이미 존재한다고 가정 ✔ 예시를 통한 언두 로그 설명 1. INSERT INTO MEMBER (m_id, m_name, m_area) VALUES (12, '홍길동', '서울'); 실행하고 커밋함. 2. UPDATE m..
· MySQL
💋 락 (Lock) ✔ 분류 MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 분류 스토리지 엔진 레벨의 락 스토리지 엔진 간 상호 영향을 미치지 않음. MySQL 엔진 레벨의 락 모든 스토리지 엔진에 영향을 미침. 테이블 데이터 동기화를 위한 테이블 락 이외에도 메타데이터 락, 네임드 락 기능 존재 이번 포스팅에서는 MySQL 엔진 레벨의 락에 대해서 설명할 것이다! 💋 MySQL 엔진의 락 (Lock) ✔ 글로벌 락 FLUSH TABLES WITH READ LOCK 명령으로 획득 영향 범위는 MySQL 서버 전체로, MySQL에서 제공하는 락 중 가장 범위가 크다. 실행과 동시에 MySQL 서버에 존재하는 모든 테이블을 닫고 잠금을 건다. 한 세션에서 글로벌 락을 획득하면..
· MySQL
💋 인트로 MySQL 서버는 아래와 같이 구분할 수 있다. MySQL 엔진 스토리지 엔진 MySQL 서버에서 기본으로 제공하는 스토리지 엔진으로는 InnoDB, MyISAM 스토리지 엔진이 있다. 💋 MySQL 엔진 아키텍처 MySQL은 Oracle이 만든 DBMS 소프트웨어 다른 DBMS와 비교했을 때 독특한 구조 조금 더 분류해서 보자! ✔ MySQL 접속 클라이언트 MySQL 서버의 클라이언트 Python, JDBC(Java) 등등 대부분 프로그램이 언어를 모두 지원 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있도록 함. 쉘 스크립트를 통해서도 MySQL 쿼리를 사용할 수 있음. MySQL 서버 = MySQL 엔진 + MySQL 스토리지 엔진 ✔ MySQL 엔진 Optimizer가 작성한..
· MySQL
💋 인트로 MySQL의 동시성에 영향을 주는 요소 락(Lock) 트랜잭션 트랜잭션의 격리 수준(Isolation Level) ✔ 트랜잭션 작업의 완전성을 보장해주는 것 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원상복구해서 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능 ✔ 락 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 것 만일 하나의 레코드를 여러 커넥션에서 동시에 변경하려고 하는데, 락이 없다면 하나의 데이터를 여러 커넥션에서 동시 변경할 수 있게 되어, 레코드 값은 예측할 수 없는 상태가 됨 ✔ 락 VS 트랜잭션 락: 동시성 제어를 위한 기능 트랜잭션: 데이터 정합..
깃짱
'MySQL' 카테고리의 글 목록