320x100

DB 41

Replication

Single Master & Single Slave 하나의 Master와 하나의 Slave로 구성된다.Master에 Insert, Update, Delete 같이 데이터가 변경되는 쿼리가 실행되면 binary log에 내용이 저장되고 쿼리가 실행된다.Slave는 그 binary log를 주시하다가 변경점이 생기면 Master에게 변경점에 대해 요청한다.그러면 Master가 binary log에 있는 쿼리를 Slave로 보내고, 응답을 받아 데이터가 전달됨을 보장받는다.Slave는 realy log에 저장되고 적용된다. Single Master & Multi Slave Single & Single과 동일한 방법대로 실행된다. 주로 데이터가 변경되는 Insert, Update, Delete 쿼리는 Maste..

DB/MYSQL 2021.10.14

INSERT와 REPLACE 차이

INSERT는 무조건 테이블에 추가하는 것이고 REPLACE는 기존 테이블에 데이터가 있으면 삭제 하고 추가하는 것이다. REPLACE를 사용하는 경우는 다음과 같다. INSERT로 데이터를 삽입하는 경우 기존 테이블의 데이터와 충돌하면 뒤의 작업들은 실패 처리 된다. 그러므로 SELECT를 하고 나서 충돌나지 않게 작업해줘야 하는데 REPLACE는 한번의 쿼리로 작동이 가능하다. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=reinstate10&logNo=220071702943 MySQL에서 INSERT 와 REPLACE 의 차이 MySQL에서 사용하는 INSERT 구문과 REPLACE 구문의 용도와 차이점을 정리한다. INS..

DB/MYSQL 2021.10.13

실행 계획 보기

쿼리 또는 저장프로시저의 실행 흐름을 보고 구체적인 예상 소요 시간 파악을 통해 병목점을 수정하고 싶을 땐 실행 계획을 통해 어디서 얼마나 걸리는지 확인할 수 있다. 1. 쿼리의 실행 계획 보기 EXPLAIN SELECT * FROM table_name; 2. 저장 프로시저의 실행 계획 보기 SET profiling = 1; CALL sp_name(); SHOW PROFILES; 3. 원형 {EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild] {EXPLAIN | DESCRIBE | DESC} [explain_type] {explainable_stmt | FOR CONNECTION connection_id} explain_type: { EXTENDED | PAR..

DB/MYSQL 2021.10.12

인코딩 설정 관련 설정

MYSQL에서 다국어 지원을 위해 인코딩을 UTF로 설정 해야한다. UTF은 글자당 바이트 수에 따라 숫자가 붙는데 UTF-8, UTF-16, UTF-32등으로 나뉜다. UTF-16은 기본 다국어 평면에 해당하는 문자를 16비트(2바이트)로, 그 외는 32비트(4바이트)로 저장하고, UTF-32는 모든 문자를 32비트(4바이트)로 저장한다. 가장 많이 사용하는 UTF-8은 8비트부터 32비트까지 가변적으로 ASCII와 유니코드를 병행해 저장할 수 있어 자주 사용한다. 하지만 MYSQL의 utf8은 과거 UTF-8을 완벽하게 지원하지 않고 3바이트까지로 제한된 방식으로 구현했었다. 대부분의 문자들이 해당 바이트 내에서 표현됐기 때문이라고 생각하는데, 최근들어 4바이트로 표현되는 문자들이 생기면서 기존 ut..

DB/MYSQL 2021.10.11

스케줄러 사용

MYSQL에서 Event Scheduler를 사용하기 위해선 'event_scheduler'가 활성화 되어있어야 한다. 다음 쿼리로 확인할 수 있다. SHOW VARIABLES event_scheduler; 해당 값이 OFF인 경우 다음 쿼리로 활성화 한다. SET GLOBAL event_scheduler = ON; 생성하기 CREATE EVENT [IF NOT EXISTS] 이벤트명 ON SCHEDULE 스케줄 [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT '주석'] DO [BEGIN] 실행할 sql문; [실행할 sql문]; [END] 스케줄: { AT 타임 [+ INTERVAL 간격 [+INTERVAL 간격...]] | EVERY 간격 [ST..

DB/MYSQL 2021.10.07

paging 작업

대량의 데이터를 불러올 때 한 번에 불러오면 부하가 크기 때문에 게시판 같은 곳에서도 전부 페이징 처리를 해서 데이터를 소량씩 불러온다. 테이블에서 불러올 데이터의 양을 정해주기 위해 쿼리에 LIMIT을 걸 수 있는데 사용법은 다음과 같다. IN PAGE_NUM AS INT ,IN COUNT_PER_PAGE AS INT; SELECT * FROM TABLE_NAME ORDER BY PK ASC LIMIT COUNT_PER_PAGE OFFSET (PAGE_NUM * COUNT_PER_PAGE) 여기서 LIMIT은 가져올 데이터 수, OFFSET은 어디서 부터 가져올건지 정하는 수치다. 대략 페이지 번호와 페이지 당 갯수를 예시처럼 파라미터로 받던지 SP 내부에 정해놓고 페이지만큼 OFFSET을 설정해 원하..

DB/MYSQL 2021.10.07

[펌] MyISAM와 InnoDB 비교

내용이 좋아 별도의 정리없이 퍼온 내용으로 작성한다. 출처: https://needjarvis.tistory.com/45?category=619256 현재 하고 있는 프로젝트는 MySQL DB를 사용하고 있고, TA로 투입이 되면서 테이블을 설계 업무도 병행하게 되었다. (물론 다 하는건 아니었지만) 큰 그림을 그리는 작업을 하는 거라, 업무별 테이블 설계는 해당 업무의 특성인 조회 특화, 트랜잭션 없음, 집계 필요 등 데이터마이닝용 테이블 설계라 MyISAM 쪽으로 가닥을 잡고 설계를 했다. 사실 처음에는 InnoDB로 테이블을 생성하여 테스트를 하였는데... 10만건당, 테이블에 밀어넣는(Batch Insert) 작업이 약 10초정도 걸렸고, MyISAM은 7초정도에 끝났기 때문에.. 고민은 끝난듯 ..

DB/MYSQL 2021.10.07

commands out of sync you can't run this command now

C++에서 API를 통해 MYSQL의 Query를 실행하는 와중에 commands out of sync you can't run this command now 라는 에러 메시지가 출력되며 Query가 작동하지 않았다. 공식 홈페이지에서는 mysql_use_result()를 사용 하고 mysql_free_result()를 호출해 리소스를 해제하기 전에 또 다시 Query를 시도하면 발생할 수 있다고 한다. 또는 mysql_use_result() 또는 mysql_store_result() 호출하지 않고 데이터를 반환하는 2개의 Query를 실행하려고 할 때도 발생한다고도 한다. https://dev.mysql.com/doc/refman/8.0/en/commands-out-of-sync.html MySQL :..

DB/MYSQL 2021.10.07

MYSQL을 위한 GUI 툴

MYSQL을 설치하면 WorkBench는 기본적으로 설치되는데, 몇몇 불편한 점이 있어서 다른 툴을 알아본 내용을 정리한다. 1. SQLYog SQLyog 에서 개발한 MySQL 전용 GUI 툴로, 유료버전(Trial)과 무료버전(Community Edition)이 있으니 상황에 맞게 설치하면 될 것 같다. 다운로드 주소 https://github.com/webyog/sqlyog-community/wiki/Downloads 2. heidisql heidsql은 ‘MySQL Front’로 알려졌던 제품이며 오픈 소스 클라이언트다. 다운로드 주소 https://www.heidisql.com/download.php 아직 둘 다 써본지 얼마 안되서 장단점은 잘 모르겠다. 더 사용 해보고 추후에 수정해보겠다.

DB/MYSQL 2021.10.05
320x100