Aurora MySQL 3 Online DDL 버그
·
MySQL
writer에서 in-place DDL 수행시 reader에서 해당 테이블을 인식하지 못하는 버그가 발견되었다. 관련 DDL: add column, drop column (offline ddl이나 instant ddl, add index는 해당 없음) 테스트 버전: Aurora MySQL 3.02.2 1. add column after # session 1(Writer) mysql> alter table test add col3 varchar(10) not null after col2; Query OK, 0 rows affected (7.35 sec) Records: 0 Duplicates: 0 Warinings: 0 # session 2(Writer)에서 processlist 확인 altering ta..
[GTID] 복제 환경 GTID 틀어졌을 때 해결하기
·
MySQL
복제 환경에서 GTID가 간혹 가다 틀어지는 경우가 있다. GTID가 틀어지는 원인 다양한 원인이 존재하나, 대부분은 sql_log_bin=ON 상태에서 DBA의 변경 작업(DML, DDL)으로 인해 발생한다. slave의 sql_log_bin 상태가 "ON"이면 트랜잭션에도 master 서버로부터 넘어오는 GTID set과 별개로 GTID가 부여되면서 두 서버간의 GTID set이 달라지게 되는 것 GTID가 틀어졌을 때의 문제점 failover시 문제 발생 달라진 데이터에 대해 master로부터 DML이 넘어오는 경우 replication 자체가 깨질 위험 있음 해결 방법 기본적으로 GTID 맞추는 작업은 1. 데이터 정합성 맞추기 → 2. GTID 맞추기의 과정이며, 1. 데이터 정합성 맞추기 단계..
[MacOS] MySQL 8.0 Debug 환경 Xcode로 만들기
·
MySQL
MySQL 소스코드를 봐야 할 때가 있는데, 변수명이 친절하게 써져 있는 편은 아니라 디버깅 과정이 필요하다. 맥에서 기본으로 제공하는 Xcode를 이용하여 디버깅 환경을 구축하면 편하게 쓸 수 있다. 우석님께서 잘 정리해 두셔서 그대로 차용하면서 중간중간 에러가 나는 부분 주석을 달아두었다. 설치환경 macOS Monterey 12.1 1. open SSL 설치 1) 소스 다운로드 https://www.openssl.org/source/ 2) build & install * 참고로 build 하고 전역으로 install 할 예정이라 경로는 아무데나 해도 된다. $ ./config ※ /usr/bin/ path 로 기본 설치되지만, 원하는 경로가 있다면 --prefix option 을 붙여주면 된다. $..
Character set & Collation
·
MySQL
default_collation_for_utf8mb4 MySQL 8.0부터 생긴 변수로, utf8mb4의 default collation을 설정할 수 있다. utf8mb4_0900_ai_ci: uft8mb4_unicode_ci의 상위버전으로, ai(accent insensitive) & ci(case insensitive). 공백을 다른 문자로 구분(NO PAD) utf8mb4_general_ci: padding을 포함한 동일 문자가 들어간 string은 동일한 문자열로 봄(PAD SPACE) ※ unicode_ci VS general_ci unicode_ci: collation set으로 general_ci와 동일하게 검색시에 대소문자 구분과 전각/반각문자, 이모티콘 구분도 하지 않음 => 고유값을 비..
InnoDB flush method
·
MySQL
mysql에서 데이터 flush를 하는 기본 순서는 1. 버퍼 풀 or log buffer에 있는 내용을 flush하면 2. mySQL 안의 버퍼에 있던 내용을 메모리 상의 OS cache로 이동(write) 3. OS cache 안의 내용을 디스크상의 데이터 파일로 이동(flush) 인데, innodb storage engine에서는 innodb_flush_method 변수를 통해 flush 방법을 설정할 수 있다. fsync: default로 설정되어 있는 방법. 버퍼 풀과 로그 버퍼 모두 OS cache를 이용하고, fsync()를 통해 OS cache에서 디스크로 데이터를 이동한다. O_DSYNC: 로그 버퍼에서 write를 할 때(2번 단계) 자동적으로 데이터 파일에 fsync()까지 한 번에 ..
[Collation] UTF8 charset & collation 비교
·
MySQL
UTF8 VS UTF8MB4 영어 등 서구권 언어: 1글자당 1byte 한글 등 아시아권 언어: 1글자당 2byte UTF-8: 1글자당 1~3byte(가변적) utf8mb4: 가변 4byte utf-8 charset 다국어를 지원하기 위해 1~3 가변바이트 charset utf-8이 주로 사용되어왔다. 그러나 emoji 등 새로 개발된 언어는 글자당 4바이트를 차지하므로, 해당 charset으로 설정되어있는 경우 글자가 깨지는 현상이 발생한다. 따라서 mySQL 5.5 이후 버전부터는 utf8mb4 charset을 지원하면서 최대 4바이트까지 문자를 저장할 수 있도록 하고 있다😄 검색이나 로그인 등 다양한 경우에서 대소문자 구분 여부는 중요하다. 예를 들어, 회원가입 시 비밀번호 설정 부분에서는 대/소..
Year 2038 Problem
·
MySQL
Unix 시간 변수에 32bit 정수형을 사용해서 발생한 이슈로,DBMS에서 현재 날짜+시간+timezone을 나타내는 TIMESTAMP 타입 변수를 사용할 시2038-01-19 03:14:07 UTC까지가 표기 최대범위인 문제가 있다.MySQL에는 아직 해당 이슈가 남아있다. 이 시간을 초과하면 사인 비트가 1로 변하면서 음수가 되어 자동으로 오류를 감지하면서 시간이 0으로 초기화(1970-01-01 00:00:00)으로 돌아가는 버그이다.따라서 TIMESTAMP 대신 DATETIME변수를 사용하거나, 시간 변수에 64비트를 사용하면 문제가 해결(?)된다. 292,277,026,596년까지 표기되므로 나를 포함한 이 글을 보고 있는 사람들 모두 64비트를 사용함으로써 발생하는 문제와는 상관이 없지 않을..
[data type]CHAR형의 pad_char_to_full_length 옵션과 VARCHAR형 비교
·
MySQL
Mysql document를 읽던 도중 PAD_CHAR_TO_FULL_LENGTH 옵션에 대해 알게 되었다. 고정길이 문자형 변수를 저장하는 CHAR타입 컬럼에 이 옵션을 disable시키면, VARCHAR타입과 같이 남은 공간을 space가 아닌 null로 처리해주는 옵션이었다. (default로 활성화되어있는 변수이기 때문에, CHAR타입의 길이보다 적게 데이터를 입력하면 알아서 space처리가 된다.) 그렇다면 VARCHAR형과 같은 데이터 타입인데.. 굳이 이 옵션을 만들어서 둘을 구분해 둔 이유가 궁금해서 테스트를 진행해 보았다. 테스트 환경은 macOS Catalina 10.15, MySQL 5.7 버전을 사용하였다. char type 우선 PAD_CHAR_TO_FULL_LENGTH = dis..
erin.yoon
'MySQL' 카테고리의 글 목록