■ MySQL Shell 설치 ▶︎ 설치 방법 • 다운로드 URL https://dev.mysql.com/downloads/shell/ OS와 플랫폼에 맞는 버전을 다운로드합니다. 여기서는 CentOS 7에 설치하는 방법을 알아봅니다.. 위의 경로에 접속 후 Select Operating System에 Redhat Enterprise Linux / Oracle Linux를 선택 후 Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), RPM Package 8.0.23 31.6M (mysql-shell-8.0.23-1.el7.x86_64.rpm) 을 다운로드 합니다. 그리고 아래와 같은 명령어로 설치합니다. shell> yum install mysql-s..
■ Innodb Buffer Pool 크기 설정 서버가 실행되는 동안 InnoDB 버퍼 풀 크기를 오프라인(시작시) 또는 온라인으로 구성 할 수 있습니다. 이 곳에 설명 된 동작은 두 방법 모두에 적용됩니다. innodb_buffer_pool_size를 늘리거나 줄이면 작업이 청크로 수행됩니다. 청크 크기는 innodb_buffer_pool_chunk_size 구성 옵션에 의해 정의되며 기본값은 128M입니다. 버퍼 풀 크기는 항상 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances의 배수와 같아야합니다. innodb_buffer_pool_size를 innodb_buffer_pool_chunk_size * innodb_buffer_pool_inst..
■ LOCK TABLES 그리고 UNLOCK TABLES 문법 LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ... lock_type: { READ [LOCAL] | [LOW_PRIORITY] WRITE } UNLOCK TABLES MySQL은 클라이언트 세션이 테이블에 액세스하기 위해 다른 세션과 협력하거나 세션에 독점 액세스가 필요한 기간 동안 다른 세션이 테이블을 수정하지 못하도록 하기 위해 명시적으로 테이블 잠금을 획득할 수 있도록 합니다. 세션은 자체 잠금만 획득하거나 해제할 수 있습니다. 한 세션은 다른 세션에 대한 잠금 또는 다른 세션이 보유한 잠금 해제를 획득할 수 없습니다. 잠금은 트랜잭션을 ..
트랜잭션 문법은 다음과 같습니다. START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY } BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1} 이 문법은 트랜잭션 사용에 대한 제어를 제공합니다 : + START TRANSACTION 또는 BEGIN 문법으로 새로운 트랜잭션을 시작합니다. + ..
■ MySQL 보안접속 MySQL을 접속할때 일반적인 접속 방법으로 접속하면 해커들에 의해서 해킹을 당하기 쉽습니다. 물론 내부망 통신이나 방화벽 구축 등등 내부 보안 시스템으로 안전하게 하고 계시겠지만 어쨌든 보안 접속이 아닌이상 일반 접속으로 아이디 패스워드 입력시 전송 패킷 내용을 보면 평문으로 나옵니다. 이는 문제가 될 수 있기도 합니다. 그래서 이번에는 SSL/TSL을 이용해서 평문이 아닌 암호문으로 서버와 클라이언트간에 통신을 하는 방법을 알아보도록 하겠습니다. ■ SSL 환경설정 방법 ▶︎ 서버환경설정 서버 파라미터인 --ssl을 mysqld로 시작할때 옵션 사용으로 시작합니다. 기본값이 사용이기 때문에 특별히 ‘사용안함’으로 지정하지 않는 한 사용으로 설정됩니다. mysqld(mysqld_..
MySQL에는 여러가지 Timeout 종류가 있습니다. 세션에서, 서버에서 혹은 접속시도중이나 기타 여러가지 상황에서의 Timout값이 존재합니다. 각 파라미터마다 특성이 있는데 이 관계를 잘 이해하고 설정해야 원치않는 상황에서 갑자기 세션이 종료되는 상황을 방지하거나, 필요없이 오래 접속되어 있는 세션을 종료시킬 수 있습니다. 이 Timeout 파라미터의 종류들에 대해 알아보겠습니다. * connect_timeout : mysqld 서버가 접속실패로 응답하기 전에 연결 패킷을 기다리는 시간( 초). 기본값은 10 초입니다. connect_timeout값을 늘리면 클라이언트에서 Lost Connection 오류가 자주 발생하는 경우 도움이 될 수 있습니다. Lost connection to MySQL s..
■ MySQL이 메모리를 사용하는 방법 MySQL은 데이터베이스 작업 성능을 향상시키기 위해 버퍼와 캐시를 할당합니다. 기본 구성은 약 512MB의 RAM이 있는 가상 머신에서 MySQL 서버를 시작하도록 설계되었습니다. 특정 캐시 및 버퍼 관련 시스템 변수의 값을 증가시켜 MySQL 성능을 향상시킬 수 있습니다. 메모리가 제한된 시스템에서 MySQL을 실행하도록 기본 구성을 수정할수도 있습니다. 다음 목록은 MySQL이 메모리를 사용하는 몇 가지 방법을 설명합니다. 해당되는 경우 관련 시스템 변수가 참조됩니다. 일부 항목은 스토리지엔진 또는 기능에 따라 다릅니다. + InnoDB 버퍼풀은 테이블, 인덱스 및 기타 보조 버퍼에 대해 캐시된 InnoDB 데이터를 보유하는 메모리 영역입니다. 대량 읽기 조작..
■ MySQL 기본 설정 • 하드웨어 CPU코어와 메모리는 많을수록 좋습니다. 어떤 DBMS던 이건 공통적인 내용입니다. 스토리지 측면에서 SSD 디스크는 기존의 스핀들을 성공적으로 대체하여 비용 대비 최고의 성능을 제공합니다. RAID 10은 여전히 대부분의 워크로드에 가장 권장되는 수준이지만 먼저 RAID 컨트롤러가 SSD 드라이브의 성능을 활용할 수 있고 실제 병목 현상이 되지 않는지 확인해보아야 합니다. 더 많은 IOPS가 필요한 경우 많은 PCI-e 플래시 드라이브도 있습니다. • 운영 체제 Linux는 고성능 MySQL 서버를 위한 가장 일반적인 운영 체제입니다. 최신 커널과 결합된 Linux의 EXT4 또는 XFS와 같은 최신 파일 시스템을 사용하는것이 좋습니다. 그리고 각각 고유한 한계..
■ AES 암호화 기법 MySQL에서 제공하는 암호화 기법은 여러가지가 있습니다. https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html 그중에 키를 이용한 AES 암호화 기법이 있습니다. 이것에 대해 한번 알아보겠습니다. 이 암호화 기법은 AES 암호 알고리즘(Advanced Encryption Standard)이라고 합니다. 다음을 참고하시면 자세한 내용을 확인해 보실 수 있습니다. https://namu.wiki/w/AES ■ 암호화 설정 암호화 방식은 서버 변수로 설정을 합니다. 이 설정 방법에 따라 강력한 암호화를 설정할 수 있습니다. 대신 그만큼 성능이 낮아지는것은 참고하셔야 합니다. 서버변수중 block_encryption_mod..
■ InnoDB 문제 해결 다음 지침은 InnoDB 문제 해결에 적용됩니다. + 작업이 실패하거나 버그가 의심되면 MySQL 서버 오류 로그를 확인합니다. + 장애가 교착 상태와 관련된 경우, 각 교착 상태에 대한 세부 사항이 MySQL 서버 오류 로그에 인쇄되도록 innodb_print_all_deadlocks 옵션을 사용하여 실행합니다. + InnoDB 데이터 딕셔너리와 관련된 문제에는 실패한 CREATE TABLE 문(고아 테이블 파일: orphan table files), “InnoDB 파일을 열 수 없음” 및 “시스템이 경로 지정 오류를 찾을 수 없음”이 포함됩니다. + 문제 해결시 일반적으로 mysqld_safe 또는 Windows 서비스가 아닌 명령 프롬프트에서 MySQL 서버를 실행하는 것..
■ 서버 자동 설정 변수(파라미터) MySQL 8.0에는 서버 메모리 환경을 자동으로 설정해주는 파라미터가 있습니다. 이 파라미터에 대해 한번 알아보겠습니다. ▶︎ 변수 확인 먼저 서버 변수에 대해 알아보겠습니다. 변수명 : innodb_dedicated_server 명령라인 형식 --innodb-dedicated-server[={OFF|ON}] 시스템 변수 innodb_dedicated_server 범위 전역 동적여부 아니오 SET_VAR 힌트 적용 아니오 형식 Boolean(참, 거짓) 기본값 OFF ▶︎ 자동 설정 변수 innodb_dedicated_server가 활성화되면 InnoDB는 자동으로 다음 변수를 구성합니다. • innodb_buffer_pool_size • innodb_redo_log..
■ 파일오픈갯수의변경및자원사용량변경의필요성 리눅스를 설치하면 기본적으로 오픈할 수 있는 File의 갯수가 작습니다. 이게 중요한 이유는 오픈할 수 파일 갯수가 작다면 성능에 제약을 받기 때문입니다. 예를 들어 파일 요청파일 갯수가 3000이 들어왔는데 열수 있는 파일이 1000개라면 1000개 이후의 모든 요청은 거절되거나 대기상태로 빠지기 때문입니다. 서버의 성능이 어느정도 된다면 기본값보다 값을 늘려 성능을 향상시킬 수 있습니다. ■ Linux의 확인 및 환경 설정 서버에서는 file-max 란 시스템 파라미터로 불리며 이것은 한번에 운영할 수 있는 파일수를 의미합니다. 보통 4MB 메모리당 256개의 파일을 운용할 수 있다고 합니다. ▶︎ 오픈 가능한 파일 갯수 확인 및 적용 방법 • 확인 방법 현..
MySQL 서버 변수중 back_log라는 시스템 변수가 있습니다. 이 변수는 MySQL 커넥션 성능과 굉장히 밀접한 관련이 있는데 OS 커널파라미터중 네트워크와 밀접한 관련이 있습니다. 이 시스템 변수에 대해 알아보겠습니다. ■ 서버 변수 back_log에 대한 설명 MySQL이 가질 수 있는 미해결 연결 요청 수 입니다. MySQL 스레드가 매우 짧은 시간에 매우 많은 연결 요청을 받을 때 작동합니다. 그런 다음 메인 스레드가 연결을 확인하고 새 스레드를 시작하는 데 약간의 시간(아주 짧지만)이 걸립니다. back_log 값은 MySQL이 일시적으로 새 요청에 대한 응답을 중지하기 전에 이 짧은 시간 동안 쌓일 수 있는 요청 수를 나타냅니다. 단기간에 많은 수의 연결이 예상되는 경우에만 이 값을 늘려..
MySQL 5.7 부터 read_only종류가 4가지 종류로 늘어나게 되었습니다. 단순히 복제 서버에서 Write를 막기위한 read_only뿐만이 아니라 특수한 read_only 파라미터도 있는데 이것에 대해 알아보겠습니다. ■ innodb_read_only innodb Strage Engine을 사용하는 테이블들에 대해 모두 읽기로만 작동되게 합니다. 기존 5.7 이하 버전에서는 InnoDB Storage엔진을 사용하는 테이블들에 대해서만 삭제나 생성이 불가능했는데 8.0 이상부터는 모든 스토리지 엔진을 대상으로 읽기 상태로 바뀌게 됩니다. 참고로 위의 innodb_read_only가 활성화 되면 다음과 같은 명령어들이 실패하게 됩니다. ANALYZE TABLE, ALTER TABLE tbl_name..
■ MHA 체크 방법 먼저 MHA 설치 및 환경설정까지는 완료가 되었습니다. 이제 MHA 설정에 이상이 없는지 체크를 진행합니다. ▶ MHA 주요 명령어 확인 Script명 설명 masterha_check_ssh SSH 접속 체크 masterha_manager Manager 실행(모니터링 시작) - 장애 발생시 failover 수행됨 masterha_stop Manager 중지 masterha_master_switch TakeOver(relocate) 수행 masterha_check_repl 복제 현황(Master/Slave 노드 정보등) masterha_check_status Status 확인하기 위의 스크립트 수행은 mha 유저로 수행합니다. 또한 실행 역시 MHA Manager서버에서 수행합니다. ..
■ MHA 구성 요소 ▶ Manager 패키지 매니저 노드에 설치되며 복제 그룹을 모니터링하는 패키지와 장애조치 스크립트들이 포함되어 있습니다. ▶ 노드 패키지 매니저 노드를 제외한 모든 노드에 설치되며 바이너리 로그, 릴레이 로그등을 관리하기 위한 패키지와 스크립트들이 포함되어 있습니다. ■ 실습환경 호스트명 IP ROLE mhamgr 192.168.0.100 MHA Manager db1 192.168.0.101 Master db2 192.168.0.102 Slave 1 db3 192.168.0.103 Slave 2 VIP 192.168.0.105 VIP Keep alived를 이용한 가상 IP관리 방법도 있으나 추후 알아보겠습니다. 여기서는 ifconfig를 이용하여 가상 IP를 관리해보도록 하겠습니..
■ MHA 소개 MHA는 MySQL High Available의 약자로 MySQL의 HA솔루션중에 하나입니다. 구글에서 오픈소스로제공되었으나 현제는 중단되고 다른 개발자가 업데이트를 해오다 2018년도부터 중단되었습니다. 하지만 지금도 MySQL에서 가장 많이 쓰이는 HA솔루션중에 하나입니다. 보통 DB의 HA솔루션은 Shared Disk를 이용하고 액티브 서버에 문제 발생시 HA솔루션이 문제를 감지하고 Shared Disk를 스탠바이 서버에 붙인 후 스탠바이 서버를 액티브로 기동하여 서비스를 정상화 시킵니다. 하지만 MHA는 특이하게 마스터 - 슬레이브 복제 구조에서 슬레이브중 하나를 마스터로 승격시키고 나머지 슬레이브들을 신규로 승격된 마스터에 모두 옮김으로서 HA를 완성시킵니다. 물론 Peace M..
■ 세미싱크 소개 일반적으로 MySQL에서 복제라 얘기하면 Master - Slave(Replica)구조의 복제방식입니다. 그리고 이 복제방식은 특별한 설정을 하지 않는다면 비동기 방식입니다. 동기 방식은 크게 반동기(세미싱크) 방식과 비동기 방식 2가지가 있습니다. 이걸 구분하는 방법은 슬레이브 바이너리 로그에 DML이 적용되었는지 여부를 판단하느냐 않하느야에 달려 있습니다. 먼저 비동기 방식에 대해 알아보겠습니다. 비동기 방식은 마스터에서 DML이 발생하면 바이너리 로그에 DML을 작성하고 이 바이너리 로그를 슬레이브로 보냅니다. 이때 비동기 방식은 바이너리 로그가 슬레이브 로그에 적용되었는지 여부에 관련없이 무조건 자신의 DML만 수행합니다. 이 방식은 마스터에서의 수행 여부만 판단하기 때문에 속도..
■ MSR (Multi Source Replication)이란? 간단하게 설명해서 여러개의 마스터 서버 발생하는 데이터를 하나의 슬레이브 서버에서 받아내는 방식입니다. 그림 1. MSR 구성도 이 방식을 이용하면 여러 마스터 서버의 특정 DB만을 슬레이브에서 받아서 한번에 조회가 가능하다는 장점이 있습니다. 예를 들어 MASTER 1번의 특정 DB, MASTER 2번의 특정 DB, MASTER 3은 전체 DB를 복제하여 이 DB들을 한곳에 모아서 조회를 할수가 있습니다. 이것을 응용한다면 아래와 같은 그림으로도 구성할 수 있습니다. 그림 2. MSR 다중 구성도 여러개의 마스터-슬레이브 복제 클러스터들이 있을때 이중에서 특정 마스터의 특정 DB들만을 한곳에 모을 수 있습니다. 또한 이 데이터를 통계데이터..