MySQL에서 복제 환경을 운영할때 격게 되는 이슈중 이해가 안되는 이슈가 하나가 있는데 바로 네트워크 관련 이슈입니다.이 네트워크 이슈에 대해 알아보겠습니다. 이 네트워크 이슈는 네트워크 관련 파라미터에 대해서 특별히 설정하지 않을 시 시간이 지나고 난 후에야 알게되는 경우가 많습니다.관련하여 이 문제에 대해 한번 알아보겠습니다.■ 상황MySQL서버 자체가 전원이 꺼지가나 문제가 생기면 서버에서 에러 로그가 발생하게 됩니다. 서버에 접속을 할 수 없다는 에러가 나타나게 됩니다. 그러나 마스터에서 네트워크 이슈가 발생하게 되면 MySQL은 인지를 하지 못하고 설정해 놓은 시간동안 대기를 하면서 마스터의 이벤트를 계속 기다리게 됩니다. 이때 이 마스터의 이벤트 대기 시간이 너무 길기 때문에 복제이슈가 발생..
스토어드 프로그램은 다음과 같은 옵션이 있습니다. Definer ; 스토어드 프로그램이 기본적으로 가지는 옵션. 스토어드 프로그램을 작성한 유저. 프로그램이 실행될 때의 권한 SQL Security 옵션 : 프로그램을 실행할 때 누구의 권한으로 실행할지 결정하는 옵션. Invoker 또는 Definer둘중에 하나로 선택. definer는 스토어드 프로그램을 생성한 사용자를 의미하며 Invoker는 해당 프로그램을 호출한 사용자. 아래와같이 definer가 creator@%으로 생성된 스토어드 프로그램을 executer@% 사용자가 실행한다고 가정합니다 . SQL SECURITY가 INVOKER와 DEFINER일때 이 스토어드 프로그램이 어느 사용자의 권한으로 실행되는지 나타내는 표입니다. SQL SECU..
MySQL에서 Function과 Procedure를 합쳐서 Routine이라고 부릅니다.이 Routine들은 MySQL내에서 좀 특별히 취급됩니다. 아래 내용에서 좀더 자세하게 확인해 봅니다. 1. DefinerRoutine은 생성될 때 Definer라는 특별한 내용이 추가가 됩니다. 예제를 통해 확인해 봅니다.[예제]보통 아래와 같이 프로시저를 만듭니다.CREATE PROCEDURE `sbtest`.`proc1`()BEGIN select * from sbtest.sbtest1; select * from sbtest.sbtest2;END그리고 그 소스를 확인해 보면 다음과 같이 Definer라는 내용이 추가됩니다.CREATE DEFINER=`jhlee`@`%` PROCEDURE `sbtest..
auto_increment_increment 및 auto_increment_offset은 소스와 소스간(Source to Source) 복제와 함께 사용하기위한 것이며 AUTO_INCREMENT 컬럼의 작업을 제어하는데 사용할 수 있습니다. 두 변수 모두 전역 및 세션 값이 있으며 각각 1에서 65,535 사이의 정수 값을 가정할 수 있습니다. 이 두 변수 중 하나의 값을 0으로 설정하면 값이 대신 1로 설정됩니다. 이 두 변수중 하나의 값을 65,535보다 크거나 0보다 작은 정수로 설정하려고 하면 값이 대신 65,535로 설정됩니다. auto_increment_increment 또는 auto_increment_offset의 값을 정수가 아닌 값으로 설정하려고하면 오류가 발생하고 변수의 실제 값은 변경..
RDS는 AWS에 제공하는 Database 서비스입니다. Oracle, MS-SQL, MySQL, MariaDB, PostgreSQL Database가 제공됩니다.다양한 스펙의 인스턴스가 제공되며 엔진도 일반적으로 가장 많이 사용되는 DBMS가 제공됩니다.원하는 사양의 스펙으로 생성하여 사용하면 됩니다. ■ RDS 생성방법RDS를 생성하는 순서는 Subnet Group 생성, Parameter Group 생성 후 RDS를 생성하는 것입니다.Subnet Group, Parameter Group의 생성 순서는 상관없습니다.먼저 AWS Console에 로그인 후 RDS를 클릭합니다. 파라미터 그룹을 생성합니다. 아래 파라미터 그룹을 클릭합니다. 파라미터 그룹을에 사용될 엔진을 선택합니다. 여기서는 MySQL ..
■ Procedure 및 Function에서 User와 Execute의 관계 ▶︎ Execute 권한관련보통 Function과 Procedure를 생성하면 세션에 접속되어 있는 User에 IP를 이용해서 Definer라는 정보를 생성하게 됩니다.그런데 이때 조심해야 할 것이 있습니다.Definer가 EXECUTE권한이 없으면 Procedure나 Function 생성권한이 있더라도 수행이 되지 않습니다. 즉 Create권한만 있으면 자신이 생성했다 하더라도 Procedure나 Function을 수행할 수 없는 것입니다. ▶︎ Definer 및 생성 User 존재 여부Function이나 Procedure를 만든 User가 반드시 존재해야 합니다.예를 들어 user1@IP를 가지는 User가 특정 Proc1프..
MySQL에서 대소문자 구별 파라미터입니다.관련 옵션들은 다음과 같습니다.lower_case_table_names = 0테이블 생성 및 조회 시 대·소문자 구분한다. 유닉스 혹은 리눅스에서 사용. lower_case_table_names = 1입력 값이 대·소문자든 소문자로 인식 소문자 인식 파일 생성. 모든시스템에서 사용하려면 이것으로 사용. lower_case_table_names = 2윈도우에서 대·소문자를 구분해서 테이블생성 테이블 및 데이터베이스 이름은 CREATE TABLE 또는 CREATE DATABASE 문에 지정된 문자 대소 문자를 사용하여 디스크에 저장되지만 MySQL은 조회시이를 소문자로 변환합니다. 이름 비교는 대소 문자를 구분하지 않습니다. 이것은 대소 문자를 구분하지 않는 파일..
■ 컬럼의 문자 연결MySQL에서 컬럼의 문자를 연결하는 대표적인 함수는 다음과 같습니다. ▶︎ concat :컬럼 데이터와 컬럼 데이터를 연결합하여 하나의 스트링 문자열로 표시합니다. ▶︎ group_concat :특정컬럼의 각 결과값을 하나의 가로열(ROW)로 표시합니다. ■ 예제▶︎ concat :mysql> select * from concat_test;+------+------+-------+| c1 | c2 | c3 |+------+------+-------+| 1 | A | COMMA || 2 | B | DESK |+------+------+-------+2 rows in set (0.00 sec) mysql> select concat(c1,c2,c3) ..
▶︎ sysdate와 now의 차이 MySQL에서 날짜 관련된 처리 함수는 대표적으로 sysdate와 now가 있습니다. 두가지 모두 시간을 표시한다는 점에서는 차이가 없습니다. mysql> select sysdate(); +---------------------+ | sysdate() | +---------------------+ | 2021-03-28 23:41:04 | +---------------------+ 1 row in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2021-03-28 23:41:10 | +---------------------+ 1 row in set..
■ Percona XtraBackup 소개Percona에서 만든 백업 유틸리티로 MySQL에 사용되는 온라인 백업입니다. mysqldump처럼 논리적인 백업이 아니라 아예 물리적인 파일을 통째로 특정 디렉토리에 복사하는 방법을 사용합니다. 풀백업, 증분백업, 암호화 백업, 압축백업을 지원합니다. MySQL 엔터프라이즈 라이센스에 포함된 백업 도구의 기능을 모두 제공할 뿐만 아니라 더 유용한 기능들도 제공합니다.현재 xtrabackup은 현재 2.4, 8.0 2가지를 제공하고 있습니다. 2.4 이하 버전은 EOS되었습니다.2.4는 MySQL 5.7 이하 버전에 대해 제공하고 있으며 8.0은 MySQL 8.0을 지원합니다. 여기서는 2.4버전으로 설명을 합니다.2.4 버전은 백업 프로그램명이 xtraback..
■ 세션 임시 테이블MySQL도 특정 사용자가 접속한 해당 세션에서만 생성하고 조회할 수 있는 임시 테이블을 만들 수 있습니다.일반 테이블처럼 영구적으로 저장되는 테이블이 아닌 임시 테이블을 만들고 그 테이블을 이용하여 데이터를 잠깐 처리할때 사용하면 유용합니다. 이 임시 테이블은 생성을 했던 해당 세션이 끊기면 자동으로 삭제됩니다.그리고 이 임시테이블은 DMl(Select, insert, update, delete)을 사용할 수 있습니다. ■ 사용방법1. 일반 생성create database tempdb; 2. 다른 테이블 참조하여 생성CREATE TEMPORARY TABLE ttb1 SELECT * FROM ntb1 LIMIT 0; ■ 테스트세션을 2개 만들고 테스트를 진행합니다.임시 테이블이 만들고..
■ InnoDB 디스크 I/OInnoDB는 I/O가 진행되는 동안 다른 데이터베이스 작업이 진행되도록 허용하면서 많은 스레드를 만들어 I/O 작업을 처리함으로써 비동기 디스크 I/O를 사용합니다. Linux 및 Windows 플랫폼에서 InnoDB는 사용 가능한 OS 및 라이브러리 기능을 사용하여 "기본"비동기 I/O를 수행합니다. 다른 플랫폼에서 InnoDB는 여전히 I/O 스레드를 사용하지만 스레드는 실제로 I/O 요청이 완료 될 때까지 기다릴 수 있습니다. 이 기술을 "시뮬레이션 된"비동기 I/O라고합니다. ▶ Read-Ahead(미리읽기) InnoDB가 데이터가 곧 필요할 가능성이 높다고 판단하면 미리 읽기 작업을 수행하여 해당 데이터를 버퍼 풀로 가져와 메모리에서 사용할 수 있게합니다. 연속된 ..