2. DBMS이야기/02. MySQL 37

MySQL에서 Master-Master Replication 셋팅 방법②

MySQL에서 Master-Master Replication 셋팅 방법을 전 내용과 이어서 설명드립니다. Step 2 - Install and Configure MySQL on Server D우리는 우리가 우리가 다음 명령을 수행 할 수있는 설치해야합니다 서버 C. 먼저 다음에 동일한 단계를 반복해야합니다 :sudo apt-get install mysql-server mysql-client 두 개의 패키지가 제대로 설치되면, 우리는 우리가 우리가 /etc/mysql/my.cnf 파일을 편집하여 시작합니다 서버 C. 구성으로 거의 같은 방식으로 구성해야합니다.sudo nano /etc/mysql/my.cnf 우리가 이전 변경으로 우리는 구성 파일에 같은 네 줄을 변경해야합니다.우리가 변경해야하는 기본값 내..

MySQL에서 Master-Master Replication 셋팅 방법①

MySQL의 복제는 MySQL 데이터베이스에 저장 한 데이터 세트가 두 번째 서버로 라이브 복사되는 과정입니다."마스터 - 슬레이브"복제라고하는이 구성은 일반적인 설정입니다.마스터 마스터 복제는 데이터가 다른 하나에 두 서버에서 복사 할 수 있기 때문에 우리의 설정은,보다 더 좋을 것입니다.이 미묘하지만 중요한 차이는 우리가 MySQL을 읽거나 하나를 서버에서 쓰기를 수행 할 수 있습니다.이 구성은 리던던시를 추가하고, 데이터 액세스를 처리 할 때 효율을 증가시킵니다. 이 문서의 예는, 두 VPS를 기반으로 서버 C 및 서버 D에 지정됩니다. Server C: 3.3.3.3Server D: 4.4.4.4Step 1 - Install and Configure MySQL on Server C우리가해야 할 첫..

[MySQL TIP] 빈 테이블 검색하기

간혹 테스트 테이블이나, 테이블을 잘못생성하고 안사용하는 경우 등의 다양한 이유로 행수가 0인 테이블들이 존재한다. 아래의 스크립트는 MySQL에서 행이 없는 테이블에 대해 INFORMATION_SCHEMA에서 찾는 방법이다. 이런 테이블을 DBA 가 잘 리스트업할 필요가 있다. select CONCAT('SELECT \"',table_schema,'.',table_name,'\" AS tbl, COUNT(*) AS cnt FROM ',table_schema,'.',table_name,';') as cmd from information_schema.tables where table_schema not in ('mysql','performance_schema','information_schema') and..

MySQL에서의 AUTO_INCREMENT 사용법

MySQL을 AUTO_INCREMENT 기능은 기본 키 값을 증가의 자동 시퀀스를 생성 할 수있는 가장 쉬운 방법입니다. 너무 사용하기가 매우 쉽습니다 : create table t ( i integer auto_increment, other_field varchar(100), primary key(id) ); AUTO_INCREMENT를 사용할 때 염두에 두어야 할 몇 가지 기능. AUTO_INCREMENT는 결코 테이블에 이미 존재한 미만의 값을 제공하지는 않습니다. 명시 적으로 더 높은 값으로 ID를 추가 할 경우, AUTO_INCREMENT에 의해 생성되는 다음 값은 하나 더 높은 값일 것입니다. 이 말은 간격이 있다는 것을 의미합니다. 이것은 어떤 이유로 필드의 가능한 최대 값이 삽입되어있는 경..

Mysql에서 innodb_file_per_table을 사용하는 이유

InnoDB의 작업을 할 때, 테이블 스페이스 스토리지를 관리하기위한 두 가지 방법이있다 :모든 것들을 하나의 파일로 관리(선택적으로 분할).테이블 당 하나의 파일 생성.I will discuss the advantages and disadvantages of the two options, 두 옵션간의 장점과 단점을 논의하고, innodb_file_per_table가 가장 바람직한 방법이라는 점을 이야기 할 것이다. A single tablespace하나의 큰 파일에 모든 것을 저장한다는 것의 의미는 모든 테이블과 스키마를 비롯한 모든 인덱스들이 하나의 파일이 섞이게 된다는 것이다. 이러한 방식은 다른 테이블들과 다른 스키마들이 유휴 공간을 자유롭게 공유할 수 있다는 좋은 장점이 있다. 따라서, 만약 내..

MySQL InnoDB Next-Key Locking

InnoDB Next-Key Locking (phantom row 방지 기법) MySQL(InnoDB)의 트랜잭션 모델은 Repeatable Read Isolation 레벨을 기본으로 하고 있다. Repeatable Read는 Read Uncommitted, Read Committed 레벨과는 달리 Phatom Row가 발생하지 않는다는 장점이 있다. Phantom Row의 "Phatom"은 유령이라는 뜻으로, 아래와 같이 트랜잭션 수행중 다른 트랜잭션이 생성한 Row가 갑자기 나타나는 것을 말한다. 아래 예제에서는 Phantom Row를 만들기 위해 세션의 Isolation 레벨을 Read Committed로 변경하고, 2번째 SELECT 쿼리를 수행하기 전에 다른 트랜잭션에서 새로운 값을 INSERT..

MySQL Fulltext Indexing and searching

MySQL은 3.23.23 버전부터 Fulltext 인덱스를 지원한다. varchar 와 text 컬럼에 fulltext 인덱스를 지원하고 MySQL에서 Fulltext search 를 하기 위해서는 특별한 SQL 구문을 사용해야 한다. FULLTEXT 인덱스를 어떤 컬럼에 정의하려 할 때, 다른 인덱스 처럼 fulltext 인덱스도 여러 컬럼을 포함할 수 있다. 다음과 같이 Fulltext 인덱스를 정의한다. ALTER TABLE TB_Test ADD FULLTEXT(col1, col2); 이렇게 Fulltext 인덱스를 생성하면, MATCH, AGAINST 구문을 이용해 검색할 수 있다. SELECT (col1, col2 FROM TB_TestWHERE MATCH (col1, col2) AGAINST..

MySQL ERROR 1069

MySQL error 1069 는 다음과 같이 나타난다. ERROR 1069 (42000): Too many keys specified; max 64 keys allowed 일반적으로는 타당한 사용은 아니고, MySQL 테이블에 64개의 인덱스보다 더 많이 요구했을 때 발생한다. 그러나 이 에러메시지는 반드시 이런 경우에만 나타나는 것이 아니라, 명시적으로 인덱스를 지정하지 않았을 경우에도 발생할 수 있다. mysql> alter table TB_1 add index id_1 (name); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> alter table TB_1 add index id_1 (name);ER..

MySQL Index 유형별 적용

MySQL에서 인덱싱 컬럼은 일반적으로 속도를 향상시키나 적절한 유형의 인덱스는 성능에 더 큰 효율을 가져온다. SQL 구문에 최적화하기 위해 인덱스를 적용할 경우에는 일반적으로 4가지 인덱스 유형이 있다. 1. Column Index2. Concatenated Index3. Covering Index4. Partial Index 1. Column Index 단순하게 말해서, 단일 컬럼의 성능을 높이기 위한 인덱스이다. SELECT user_name, adress FROM TB_Test WHERE id = 1;id 컬럼에 인덱스를 추가한다.ALTER TABLE TB_Test ADD INDEX (id); 2. Concatenated Index 종종 테이블들에 많은 단일 컬럼 인덱스가 있는 것을 볼 수 있다..

Busy한 MySQL 서버에서 Deadlock Troubleshooting

관리자가 관리해야 하는 서버에는 많은 deadlock이 있습니다. 특히 비즈니스 기능적으로 중요한 몇 개의 테이블에서 자주 발생합니다. 데드락이 생기는 쿼리는 복잡하고, 많은 경우에 큰 데이터를 읽습니다. 대부분 오래 진행되는 트랜잭션에서 데드락이 발생할 수 있고, 짧은 쿼리에서 하나의 row에서 발생하기도 합니다. 많은 트랜잭션 시스템에서 데드락은 일상 생활입니다. 어플리케이션은 반드시 데드락을 다룰 수 있어야 합니다. 그 밖에도, 유저 트리거와 유저가 시도하는 것들을 포기해야 하더라도 작업이 종료될 필요가 있습니다. 종종 실패하기도 하고, 성공 할 때까지 재 시도를 하기도 합니다. 이 교착 상태 프로세스에 소요되는 시간에 따라, 그 낭비 작업의 엄청난 금액을 나타낼 수 있습니다. 여러번 재시작을 하려..