컴퓨터 공학/DB

컴퓨터 공학/DB

(MySQL) MySQL에서 실시간 쿼리 로그 확인하기

스프링 프로젝트를 진행하다 보면 실제 쿼리가 어떻게 나가는지 궁금할 때가 있습니다. 기본적으로 spring: jpa: show-sql: true 이런 설정을 하게 되면 콘솔창에 쿼리 로그를 보여주기 때문에 웬만한 쿼리는 확인이 가능합니다. 하지만 대량의 쿼리나 JPA에서 변환되어 실제로 MySQL 쿼리로 변환되어 나가는 쿼리는 알지 못한다는 문제가 있습니다. 이때 실시간 로그 확인이 필요하고 함께 로그를 확인하는 방법을 알아보려 합니다. 🧐MySQL 로그 설정하기 실시간 쿼리 로그를 확인하기 위해서는 먼저 로그 설정이 필요합니다. 먼저 MySQL에 접속합니다. mysql -u root -p 그리고 로그 설정을 확인해봅니다. show variables like 'general_log%'; 그럼 아래와 같은..

컴퓨터 공학/DB

(MySQL) Docker + MySQL를 Datagrip에 연결하기

이전에는 Dokcer로 MySQL 서버를 띄우는 글을 작성한 적이 있습니다. (Docker) Mysql(PostgreSQL, mariaDB 등)을 도커로 실행시키기 mysql과 postgresql은 각각 3306, 5432 포트를 기본으로 사용하기 때문에 겹칠일이 없지만, mysql과 mariaDB같은 경우 둘다 3306 포트로 실행되는데다, 같은 로컬환경에 출돌이 일어나기 쉽상이다. 그래서 이 mirrorofcode.tistory.com 위 방법은 여전히 잘 실행되는데요, DB를 Datagrip이나 MySQL workbench 같은 툴에 연결하고 싶을 때가 있을 겁니다. (왜인지는 모르겠는데 root 계정은 연결이 안되더라고요.)(사실 안 찾아봄) 이때는 db를 생성해주고, 사용자를 만들어서 권한을 넘..

컴퓨터 공학/DB

(MySQL) MySQL 8.0의 메모리 할당 및 사용구조

일반적으로 메모리는 코드, 데이터, 힙, 스택 영역으로 나누어져 있습니다. 그렇다면 MySQL 서버는 메모리를 어떻게 사용할까요? 🧐글로벌 영역과 로컬 영역 MySQL 서버도 일반적인 메모리 구조를 크게 벗어나지 않습니다. 글로벌 영역은 힙 영역, 로컬 영역은 스택 영역과 대조할 수 있겠네요. MySQL의 메모리 할당 방식은 상당히 복잡하기 때문에 MySQL 서버가 상요하는 정확한 메모리의 양을 측정하는 것은 쉽지 않습니다. 그래서 단순하게 MySQL의 시스템 변수로 설정해 둔 만큼 운영체제로부터 메모리를 할당받는다고 생각해도 무방합니다. (실제로 이론적인 계산이 아무런 의미가 없고 경험 기반으로 판단해야 할 때가 더 많다고 한다.) 🧐글로벌 영역 글로벌 영역은 말 그대로 모든 스레드에 공유되는 메모리 ..

컴퓨터 공학/DB

(Database) MySQL서버 구조와 스레딩 구조

MySQL을 사용할 때, MySQL은 어떤 방식으로 동작하는지 알고 싶지 않은가? MySQL은 다른 DBMS에 비해서 구조가 상당히 독특하다. Transaction만 봐도 그렇다. Postgresql의 경우, transaction을 적용하고 싶으면, begin과 commit 을 명시해줘야 한다. 하지만 MySQL의 InnoDB의 경우 Transaction을 기본으로 지원하므로, 훨씬 편리하게 사용이 가능하다. 그럼 MySQL 엔진 아키텍처에 대해 알아보자. 🧐MySQL 전체 구조 MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로 부터 접근 방법을 모두 지원한다. (개꿀) MySQL서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. MySQL 엔진 MySQL엔진은 커넥션 핸..

컴퓨터 공학/DB

(Database) 트랜잭션(ACID)과 무결성

구글에 트랙잭션을 검색하면 가장 많이 나오는 말이 있다. "DB의 상태를 변화시키기 수행하는 단위" 그런데 이것 만으로는 트랜잭션에 관해 전혀 감이 오지 않는다. (나만 그런가?) 나는 이 문장을 접했을 때 드는 생각은 아 DB에 접근하면 다 트랜잭션이구나 트랙잭션 자체의 개념에 대해 이해하지 못하면 스프링 서비스 레이어에 붙이는 @Transactional이나 MySQL에서의 잠금, 동시성에 대한 이해를 할 수 없다고 생각한다. 🧐What is Transaction? 트랙잭션을 이해하는데 가장 도움되는 말은 이것이라고 생각한다. 트랙잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생..

컴퓨터 공학/DB

(Database) MySQL 8.0 서버 업그레이드 시 주의 사항

아직까지 많은 회사들이 MySQL 5.7 버전을 사용하고 있지만, 개인 개발자 혹은 새로 생긴 스타트업의 경우 8.0이상의 버전을 사용하는 일이 많다. 개인의 경우 크게 문제가 되지 않지만 회사의 경우 5.7버전에서 8.0버전으로 업그레이드를 할 때 문제가 발생할 수 있기 때문에 여기에 관해서 몇글자 적어보려한다. (이 글의 내용은 Real MySQL 8.0)을 참고했다. MySQL 서버를 업그레이드 하는 방법 mysql 서버를 업그레이드 하는 데는 두가지 방법을 생각해 볼 수 있다. MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 하는 방법 mysqldump 도구 등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이드 된 버전의 MySQL 서버에서 덤프..

컴퓨터 공학/DB

(Docker) Mysql(PostgreSQL, mariaDB 등)을 도커로 실행시키기

mysql과 postgresql은 각각 3306, 5432 포트를 기본으로 사용하기 때문에 겹칠일이 없지만, mysql과 mariaDB같은 경우 둘다 3306 포트로 실행되는데다, 같은 로컬환경에 출돌이 일어나기 쉽상이다. 그래서 이에 대한 해결책으로 도커에서 DB를 띄우는 법에 대해서 얘기하려 한다. 🏴󠁩󠁤󠁪󠁷󠁿 MySQL을 Docker에서 당연히 이 과정을 수행하기 위해서는 Docker가 기본적으로 설치되어 있어야겠다. 그리고 당연히 기본적인 docker 명령어들은 숙지가 되어 있어야 한다. // 로그인 되어 있지 않다면 로그인 docker login // 실행되고 있는 것은 무엇인지 확인 docker ps // 사실 docker 앱 보면 바로 알 수 있긴하다 먼저 로컬환경에 mysql 도커 이미지를..

컴퓨터 공학/DB

(Database) DML, DDL, DCL

DML(Data Maniupluation Language) DML이라는 이름을 뜯어 보면 그 뜻을 알 수 있다. Data(정보)를 Manipulation(조작) 하는 Language(언어) 이다. 정말 간단하지 않은가! 그럼 어떤게 DML일까? 어떤게 정보를 조작하는 언어일까?(사실 단어에 가깝다) 정보를 추가하는 INSERT 정보를 수정하는 UPDATE 정보를 삭제하는 DELETE 정보를 조회하는 SELECT 등이 있다. DDL(Data Definition Language) DDL도 마찬가지다. 정보를 정의(+조작)하는 언어이다. 정보를 정의한다고? 정의할게 뭐가 있을까? 우리는 DB를 사용할 때 가장 처음으로 스키마를 정의(생성)한다. 그리고 조작으로는 테이블 삭제를 하는 DROP, 테이블을 변경하는..

후;
'컴퓨터 공학/DB' 카테고리의 글 목록