everydayminder
MySQLdp서 binlog가 켜 있는지 확인하기 보통은 binlog를 항상 켜놓고 쓸 것이므로 그다지 신경쓰지 않는 설정일 것이지만, 만약 AWS Aurora를 사용한다면 binlog 설정을 끈채로도 replication을 할 수 있다. 경우에 따라, 이 설정을 끄고 사용할 수도 있므므로 내 MySQL의 설정이 어떻게 되어 있는지 이해하는데는 분명 도움이 될 것이다. Query로 간단하게 확인하는 방법 다음의 쿼리를 실행하면, binlog의 현재 설정값을 쉽게 확인할 수 있다. $ mysql> show variables like 'log_bin'; 이 명령어를 실행하면, log_bin이라는 값이 현재 어떻게 설정되어 있는지를 확인할 수 있다. 쿼리 실행 결과가 ON/ OFF로 리턴될 것이다.
MySQL에서 Ignoring query to other database 에러 발생시 어느 날, MySQL에 CLI로 접속하여 명령을 수행하는데, 아래와 같은 에러가 발생했다. mysql> show databases; Ignoring query to other database 원인 파악 $ mysql -u사용자ID -p 명령어를 실행하면서 옵션을 혹시 대소문자를 다르게 입력했는지 확인해 보자. 내 경우는, $ mysql -U사용자ID -p 와 같이, -U를 대문자로 입력하고 로그인 하여 위의 문제가 발생하였다. 대소문자에 따른 옵션 차이 인식 -u와 -p는 대소문자에 따라 의미하는 바가 명확히 다르다. 따라서, 클라이언트 실행시 대소문자에 주의하여 실행해야 한다. -u, --user=name User f..
MySQL에서 auto_increment 값을 조정하려면? MySQL에서 id를 지정하고 auto_increment 옵션을 지정하면, 데이터를 추가할 때 마다 1씩 자동 증가한다. 그런데, 이 값을 다시 임의의 값으로 조정하거나 초기화 하려면 어떻게 해야 할까? 테스트 테이블 구조 다음과 같은 테이블로 테스트 해 보자. CREATE TABLE IF NOT EXISTS `idtest` ( id int(6) AUTO_INCREMENT, name varchar(255) NOT NULL, PRIMARY KEY (id) ); 따라서, 이 테이블에 insert를 하면, id가 1씩 증가하도록 사용할 수 있는 상태이다. insert 하기 이 테이블에서 insert를 테스트 하면 아래와 같다. mysql> insert..
2038년 버그란? 도대체 2038년에 어떤 일이 생기길래 2038년 버그라는 말이 있고, Y2K38이라는 단어까지 존재하는 것일까? 예전에 1999년에서 2000년으로 넘어갈 무렵에 전산상 표기할 수 있는 자릿수가 변경되면서 발생하는 문제를 통칭하여 Y2K 문제라고 불렀었다. 90년대 후반까지는 년도를 두자리로 부르는 것이 관례적이었는데, (마치 우리가 학번을 부르면 끝에 두 자리만 부르고, 주민등록 번호상으로도 년도는 뒤의 두 자리만 주로 쓰듯이) 1999년에서 2000년도로 넘어가면서 99->00으로 바뀌는 과정에서 00을 2000으로 인식하느냐, 1900으로 인식하느냐의 문제가 발생했었다. 그리고, 이름으로도 유추할 수 있듯이 유사한 문제가 2038년에 발생하려고 한다. 왜 그럴까? 2038년 버..
날짜와 시간을 표현하는 데이터타입 비교 - datetime vs. timestamp MySQL에서 YYYY-MM-DD HH:MM:SS (년-월-일 시:분:초)로 날짜를 표현하는데 사용되는 데이터 타입으로, datetime과 timestamp 두 가지가 있다. 기본적으로 시간을 표현한다는 점에서는 유사해 보이지만, 저장되는 값의 형태와 동작하는 방식의 차이점, 그리고 제약사항을 인지하고 사용해야 한다. DATETIME과 TIMESTAMP 비교 시간 정보를 DATETIME과 TIMESTAMP로 표현할 때 어떤 차이가 있는지 살펴보자. DATETIME 표현가능 범위: 1000-01-01 00:00:00~9999 - 12:31 23:59:59 타임존에 대한 변환 없이, 저장할 때 값 그대로 저장이 된다. 타임존..
개요 글로벌 서비스를 하면서 Time Zone 설정은 신경써야 할 부분이 된다. 본 포스트에서는 MySQL의 Time Zone을 설정하는 방법에 대해 정리한다. 테스트의 편의상 Docker를 기반으로 테스트하였다. 현재 설정 확인 mysql> select @@global.time_zone, @session.time_zone; +--------------------+----------------------------------------+ | @@global.time_zone | @session.time_zone | +--------------------+----------------------------------------+ | SYSTEM | 0x | +--------------------+-----..
용어비교 OLTP와 OLAP는 종종 세트로 인용되곤 한다. 본 포스트에서는 이 두 단어의 각각의 개념과 차이점을 정리한다. 두 단어는 각각 아래와 같은 의미를 지닌다. OLTP: Online Transaction Processing OLAP: Online Analytical Processing OLTP: Online Transaction Processing 운영계 데이터 및 데이터를 처리하는 방법을 뜻한다. 보통 OTLP는 원천 데이터를 뜻하기에, 예전에는 주로 RDBMS 기반의 시스템을 근간으로 했으나, 요새는 굳이 RDBMS여야 한다는 강제성을 넘어, 데이터를 어떻게 처리하느냐의 관점에 보다 주안점을 두기 때문에 NoSQL을 바탕으로 하더라도 데이터의 성격이 운영계의 성격을 지닌다면 OLTP로 분류할..
PostgreSQL로 트랜잭션 격리 수준 동작 테스트를 하고, 결과를 정리해 놓는다. 트랜잭션 범위 PostgreSQL에서 트랜잭션은 BEGIN으로 시작하고, COMMIT 또는 ROLLBACK으로 끝난다. BEGIN; ... (트랜잭션) ... COMMIT; (또는 ROLLBACK;) 트랜잭션 격리 수준 확인/ 변경 PostgreSQL에서 트랜잭션 격리수준 확인 및 변경은 아래 포스트를 참고한다. PostgreSQL 트랜잭션 격리수준 확인/변경 본 포스트에서는 PostgreSQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. 트랜잭션 격리수준 확인하기 SELECT current_setting('transaction_isolation'); 또는, show transaction isol..
MySQL에서 자동으로 증가하는 ID를 PK로 사용하기 위해 auto_increment를 사용한다. 그러면, PostgreSQL에서는 이와 동일한 기능을 어떻게 사용할까? MySQL에서의 auto_increment를 PostgreSQL에서는 어떻게 쓸까? 몇 가지 방식으로 해당 요구사항을 만족시킬 수 있다. MySQL에서 어떤 id를 자동 증가하게 하고, 그 값을 PK로 지정하기 위해 다음과 같은 방식으로 표현한다. CREATE TABLE IF NOT EXISTS `students` ( id int(6) AUTO_INCREMENT, ... PRIMARY KEY (id) ); 이와 동일하게 하려면, PostgreSQL에서는 다음과 같은 방법이 사용가능하다. Sequence 사용 오라클에서 Sequence와..
PostgreSQL 트랜잭션 격리수준 확인/ 변경 본 포스트에서는 PostgreSQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. 트랜잭션 격리수준 확인하기 SELECT current_setting('transaction_isolation'); 또는, show transaction isolation level; 이 명령어를 실행한 결과는 다음과 같이 노출된다. current_setting ----------------- read committed (1 row) 트랜잭션 격리수준 변경하기 트랜잭션 격리수준을 필요에 따라 아래와 같은 방법으로 변경할 수 있다. 설정으로 변경하기 postgresql.conf내 설정을 변경한다. #default_transaction_isolation = ..
MySQL로 트랜잭션 격리 수준 동작 테스트를 하고, 결과를 정리해 놓는다. 트랜잭션 범위 MySQL에서 트랜잭션은 START TRANSACTION으로 시작하고, COMMIT으로 다음과 같이 실행된다. START TRANSACTION ... (트랜잭션) ... COMMIT 트랜잭션 격리 수준 확인/ 변경 MySQL에서의 트랜잭션 격리수준 확인 및 변경은 아래 포스트를 참고한다. MySQL 트랜잭션 격리수준 확인/변경 본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 ali. luran.me 본 포스트에서는, 구문형..
본 포스트에서는 MySQL 트랜잭션 격리수준을 확인하는 방법과 변경하는 방법에 대해 정리한다. MySQL 버전에 따른 사용법 차이 예전에는 tx_isolation이 쓰였는데, MySQL 5.7.20에서 transaction_isolation이 alias로 추가되었고, 8.0에 이르러서는 tx_isolation이 더 이상 사용되지 않기 때문에 변수를 사용하여 트랜잭션 격리수준을 확인하거나 설정할 때, 이를 참고하여 활용하면 된다. MySQL 5.7.2 이하: tx_isolation 사용가능 MySQL 8.0 이상: transaction_isolation 사용 트랜잭션 격리수준 확인하기 현재 트랜잭션 격리 수준이 어떻게 설정되어 있는지는 간단히 쿼리로 확인할 수 있다. SELECT @@GLOBAL.trans..
어찌보면 psql은 pgadmin과 더불어 Postgresql의 공식 client 중 하나이다. 그리고, 생각보다 많은 기능을 준다. CLI라는 점 때문에 무시할 법도 하지만, 오히려 psql 고유의 커맨드 때문에 이것을 더 선호하는 순간이 있기도 하다. Postgresql에 접속하기 위한 psql 옵션들 접속에 사용하는 주요 파라미터는 다음과 같다. -d: 데이터베이스 -h: 호스트 또는 IP -p: 포트 -U: 사용자계정 -w: 패스워드 없이 접속 -W: 패스워드 확인 help를 실행하자 psql에 접속한 후에 help를 실행하면 다음과 같이 안내 메시지가 뜬다. postgres=# help You are using psql, the command-line interface to PostgreSQL...
Docker 기반 Postgresql 설치하기 Docker를 사용하여 Postgresql을 설치하는 방법을 정리한다. docker-compose.yml YAML 파일의 기본 골격을 다음과 같이 작성한다. version: "3" services: db: image: postgres:latest container_name: postgres restart: always ports: - "5432:5432" environment: POSTGRES_USER: "${DB_USER_ID}" POSTGRES_PASSWORD: "${DB_USER_PASSWORD}" volumes: - ${POSTGRES_HOME_DIR}/data/:/var/lib/postgresql/data 파일내 변수로 선언한 내용은 .env에 작성..
트랜잭션 DB에서의 트랜잭션이란, 보통 데이터베이스의 어떤 변경을 유발하는 작업 단위를 의미한다. 논리적으로 한 개의 실행 단위를 뜻하며, 물리적으로는 한 개 혹은 여러 개의 실행단위가 묶여 실행되기도 한다. 설명의 편의성을 위해, 종종 은행 계좌간 돈을 이체하는 사례가 주로 인용된다. 트랜잭션의 특징 - ACID DB에서의 트랜잭션은 아래 네 개의 특징을 지닌다. Atomicity Consitency Isolation Durability Atomicity(원자성) 트랜잭션은 논리적으로 하나의 실행단위여야 한다. 물리적으로 여러 개의 statement로 구성되어 있다 하더라도 논리적인 단위로 묶일 수 있어야 한다. 하나의 실행단위라면, 실행시 두 개의 상태로 귀결된다. 성공하거나 실패하거나 (all or..