본문 바로가기

반응형

분류 전체보기

(36)
PID 파일이 사라지는 이유 문제점 glibc 보안패치 후 리눅스 시스템 재부팅을 할 때, MySQL/MariaDB 복제 구성이 되어 있는 서버은 직접 작업했다. 재부팅 전에 MySQL 프로세스를 Stop하려고 하였으나 아래와 같은 메시지가 나오며 데몬이 정상적으로 내려가지 않았다. [root@Linux ~]# /etc/init.d/mysql stop MySQL server PID file could not be found! [FAILED] MySQL 데몬의 Process ID 값을 가지고 있는 PID 파일이 없고, 따라서 어느 데몬을 죽여야 할지 알 수 없기 때문에 발생한 문제이다. 종료할 MySQL 데몬의 PID 값을 찾아 이 PID 값을 가진 pid 파일을 생성하여 해결할 수 있다. 원인 리눅스는 내부적으로 /tmp 및 /va..
MySQL Rename Database RENAME DATABASE Syntax (Deprecated) RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 얼마전에 데이터베이스 이름 변경할 일이 있어서 이 명령어를 사용하려 했는데 Syntax Error가 나면서 되지 않았다. 찾아보니 MySQL 5.1.7에서 추가된 문법이지만 데이터베이스 내용물이 손실될 위험성이 발견되어 MySQL 5.1.23에서 제거되었다고 한다. 데이터베이스 명을 변경하려면 ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME을 대신 사용하면 된다. 하지만 아직 직접 테스트해보진 않아서 다른 방법으로 데이터베이스 명을 변경했다. 방법 1 : 내가 사용한 방법 새로운 데이터베이스를 생성한 후, 이..
데이터 & 인덱스 단편화 줄이기 인덱스 단편화 B-Tree 인덱스는 Leaf 페이지로 데이터를 찾아 들어가는 과정에서 Randon Disk Access가 필요하다. 이때 물리적인 디스크에 순차적으로 데이터가 있다면 더 나은 성능을 보이지만, 그렇지 않은 경우엔 성능 저하가 발생하며 이를 단편화라고 한다. 단편화가 발생할 경우 Range Scane이나 Full Index Scan시 더 많은 시간이 소요된다. 데이터 단편화 데이터 역시 단편화가 발생하며, 인덱스 단편화 보다 좀 더 복잡하다. 데이터 단편화에는 총 세가지 종류가 있다 : Row Fragmentation Row가 이곳 저곳에 조각이 나서 저장될 때 발생하는 단편화 타입. Row Fragmentation은 인덱스로부터 단일 행만 필요한 쿼리일 경우에도 성능 저하가 발생한다. I..
MySQL Replication에서 Binlog Format을 Statement로 사용할 경우 문제점 현상황 운영중이던 서버의 에러로그에 이전부터 지속적으로 다음과 같은 경고문구가 남는 것을 보았다. [Warning] Statement is not safe to log in statement format. Statement: 원인 해당 서버의 Binlog Format은 Statement로 설정되어 있기 때문에 발생하였다. 에러 로그에 기록된 SQL문을 보면 대부분 LIMIT 구문을 사용하고 있다. Statement 포맷에서 LIMIT 구문을 사용하면 마스터와 슬레이브에서 해당 SQL문을 동시에 실행한다 하더라도 100% 동일한 결과를 보장할 수 없기 때문에 데이터 정합성에 문제가 생길 수 있기 때문에 경고 메시지가 나왔다. 해결책 개발사 측에 Statement 포맷 사용시 안전하지 않은 SQL문을 사용하..
MySQL Aborted Connections 현상 운영중인 서버의 에러로그에 지속적으로 아래와 같은 경고 메시지가 남았다. [Warning] Aborted connection xxxxxxx to db: 'database' user: 'user' host: 'xxx.xxx.xxx.xxx' (Got an error reading communication packets) 원인 클라이언트가 정상적으로 연결되었지만 이후 부적절하게 또는 강제적으로 종료되었을 때 Aborted_clients 상태값의 카운트를 증가한 후 에러 로그에 남게 된다. 이때 에러 로그에 기록을 남기려면 --log-warnings 옵션을 활성화해야 한다. MySQL Client에서 Aborted_clients 상태값을 확인하니 다음과 같이 나왔..
Docker 이미지 용량을 줄이는 Tip FromLatest.io 사용하기 FromLatest에서 Dockerfile Lint를 하고, 이미지를 작게 할 수 있는 다양한 팁을 얻을 수 있다. https://www.fromlatest.io/#/ 더 작은 Base 이미지 사용하기 alpine 이미지를 사용하면 이미지 용량을 줄일 수 있다. DockerHub에서 이미지 태그에 alpine이 명시된 것들을 볼 수 있다. https://hub.docker.com/_/alpine/ Application De-Coupling 하기 하나의 컨테이너는 단 하나의 어플리케이션 / 용도로만 사용한다. (객체지향 원칙의 SRP와 같이) 한 이미지에 다수의 애플리케이션/컴포넌트가 들어있다면 이를 각각의 컨테이너로 나눈다. 이를 통해 이미지 사이즈 감소, 더 나은 확장..
나만의 Docker Compose Cheat Sheet Docker Compose 구성 파일 (docker-compose.yml) 일반적으로 어플리케이션은 여러 컴포넌트(웹 서버, 어플리케이션 서버, 캐시, DB 등)와 함께 구동된다. 또한 한 어플리케이션도 다수의 서비스로 분리하고, 이것들이 모여 하나의 어플리케이션으로 역할을 하기도 한다. 각각의 구성요소를 컨테이너로 만들어 개별로 운영하는 것은 매우 번거로울 것 이다. Docker Compose를 이용하면 여러 컨테이너를 일괄 관리하고, 설정하고, 의존성을 관리할 수 있다. Compose 정의 파일은 사용할 Docker Engine에 맞는 Compose File Format Version을 지정해야 한다. 호환되는 버전은 https://docs.docker.com/compose/compose-file/ ..
나만의 Dockerfile Cheat Sheet 명령어 키워드들은 대/소문자를 구분하지는 않지만, 관례적으로 대문자를 사용한다. 주석은 #을 사용한다. 기본 명령어 FROM Base Image를 지정한다. ### # 사용법 ### FROM [이미지명] FROM [이미지명]:[태그명] FROM [이미지명]@[다이제스트] ### # 사용 예시 ### FROM ubuntu:xenial RUN (이미지를 작성하기 위해 실행하는) 명령을 실행한다. ### # 사용법 ### RUN [실행하고 싶은 명령] ### # 사용 예시 : Shell 형식 # - /bin/sh -c를 사용하는 것과 동일 # - 기본 쉘을 변경하려면 SHELL 명령 사용 ### RUN apt-get install -y nginx ### # 사용 예시 : Exec 형식 # - 쉘을 경유하지 않..

반응형