본문 바로가기

반응형

IT 인프라/Database

(6)
MySQL 정보 확인 쿼리 Table Engine Type SELECT t.table_schema, t.table_name, ENGINE FROM information_schema.tables t INNER JOIN information_schema.columns c ON t.table_schema=c.table_schema AND t.table_name=c.table_name WHERE ENGINE != 'InnoDB' AND t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema') GROUP BY t.table_schema, t.table_name HAVING t.table_schema IN ('bns_training2', 'dic', 'pb_aio..
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 상태값을 확인하니 다음과 같이 나왔..

반응형