■ PostgreSQL의 데이터베이스 속성 어떤 RDBMS든 스키마를 다루는 방법 혹은 개념이 약간 틀리듯이 PostgreSQL도 약간 스키마의 개념이 틀립니다. PostgreSQL에서 데이터 베이스는 스키마의 집합이며 이 스키마에는 테이블, 펑션등이 포함됩니다. 전체 구조로 본다면 인스턴스 -> 데이터베이스 -> 스미카 -> 테이블 또는 기타 객체 구조로 되어 있습니다. 그림 1 : PostgreSQL 클러스터 구조 ■ 데이터베이스 생성과정 postgresql 접속 후 데이터베이스를 조회하면 template0,1 이라는 데이터베이스가 있dp습니다. 이 데이터베이스는 템플릿 데이터베이스라고 해서 이름에서도 알수 있듯이 데이터베이스를 만드는 기초 정보들이 들어 있습니다. 그리고 이 템플릿 데이터베이스가 2..
GTID 복제 모드에서 1236 에러에 관련된 내용에 대해 알아보겠습니다. 원문 : https://www.percona.com/blog/2016/12/01/database-daily-ops-series-gtid-replication-binary-logs-purge/ mysql> show slave status Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containin..
■ 사용방법 일반적으로 log_bin 파라미터가 ON으로 설정되면 모든 DDL, DML이 로그 파일에 작성되며 사용자가 MySQL세션에 접속할 경우 DDL, DML을 수행할때도 역시 바이너리 로그에 작성됩니다. 그러나 서버에 접속한 세션에서 특정 이유(유지보수 작업이나 기타 설정작업)로 바이너리 로그에 DDL, DML에 작성되지 않게끔 하는게 필요할 수도 있습니다. 이때 사용하는 파라미터가 sql_log_bin입니다. 이 명령어에 대해 사용방법을 알아보겠습니다. 사용방법 바이로그 작성을 금지시킬 경우 mysql> sql_log_bin = OFF 바이너리 로그 작성을 원할 경우(기본값) mysql> sql_log_bin = ON ■ 제약사항 1. 트랜잭션 또는 하위 쿼리 내에서 sql_log_bin의 세션..
■ RESET MASTER 명령어 사용방법 : mysql> RESET MASTER 바이너리 로깅이 활성화된(my.cnf에서 log_bin이 ON인) 서버의 경우 RESET MASTER는 기존의 모든 바이너리 로그 파일을 삭제하고 바이너리 로그 인덱스 파일을 재설정하여 서버를 바이너리 로깅이 시작되기 전의 상태로 재설정합니다. 바이너리 로깅을 다시 시작할 수 있도록 새로운 바이너리 로그 파일이 생성됩니다. GTID가 사용 중인 서버의 경우(gtid_mode가 ON임) RESET MASTER를 실행하면 GTID 실행 기록이 재설정됩니다. gtid_purged 시스템 변수의 값은 빈 문자열('')로 설정되고, gtid_executed 시스템 변수의 글로벌 값(세션 값은 아님)은 빈 문자열로 설정되며, mysq..
Java에서 쓰이는 MySQL Connector 8.0을 사용하면 다음과 같은 에러가 발생할 수 있습니다. 또한 MySQL 5.7에서 mysql 인증 플러그인을 mysql_native_password에서 sha256_password로 변경시 다음과 같은 에러가 발생할 수 있습니다. Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed 즉 Public Key Retrieval 속성이 사용되지 않았다는 얘기입니다. 8.x부터는 강제 의무 사항으로 이 속성을 true로 반드시 변경해 주어야 합니다. 1. Java driver 속성 추가 방법 jdbc driver url속성..
MySQL Thread는 접속방법과 아키텍쳐와 관련이 있습니다. MySQL은 스레드 방식의 아키텍쳐를 가지고 있습니다. 유저가 접속하게 되면 Thread가 할당이 되고 유저가 접속을 종료하면 할당했던 스레드를 회수하게 됩니다. 이때 스레드를 할당하고 회수하는 작업이 MySQL 성능에 영향을 많이 미치게 됩니다. 특히 사용량이 많은 시스템에서는 이 스레드 작업이 부담스러울 정도로 영향을 많이 받게 됩니다. 이 접속 스레드에 대한 모니터링 방법 및 튜닝 방법을 알아보겠습니다. ■ Global Status 확인 MySQL Client에서 다음과 같이 확인을 합니다. mysql> show global status like '%Threads%'; 그러면 다음과 같은 시스템 상태의 변수들이 나옵니다. mysql> ..
MySQL 클라이언트를 이용해서 접속을 하면 자신이 현재 SSL/TLS을 이용해서 접속을 했는지 아니면 일반 암호 접속을 했는지 알아내는 방법입니다. my.cnf 의 파라미터를 이용해서 SSL/TLS 접속만을 강제하거나 클라이언트 환경에 따라 일반접속, SSL/TLS접속을 선택해서 접속할 수 있습니다. 혹은 계정을 생성할 때 강제로 TLS/SSL접속만 접속할 수 있게끔 할 수 있습니다. 여기서는 자신의 접속상태가 SSL/TLS인지 일반접속인지 여부에 대해서 알아보고 SSL/TLS 환경설정 및 접속방법에 대해서는 다음 페이지를 참고하시기 바랍니다. https://myinfrabox.tistory.com/14?category=804724 ■ SSL/TLS 접속 여부 확인 mysql클라이언트를 이용해서 접속 ..
■ 카탈로그를 이용하여 각종 정보 조회 ▶︎ 최근 사용이 되었던 table select * from information_schema.TABLES order by UPDATE_TIME desc ; ▶︎ 테이블 생성시간별 조회 select * from information_schema.TABLES where table_schema='database' order by create_time desc ; ▶︎ 활성중인 프로세스 리스트만 확인 select * from information_schema.PROCESSLIST where 1=1 and command 'Sleep' and user='service_user' and info is not null order by time desc; ▶︎ host CONNE..
■ MySQL 메모리 사용률 모니터링에 필요한 기본 내용 1. MySQL은 하나의 프로세스로 동작. 세션은 thread로 확장되고 시스템 자원을 할당. MySQL의 Memory 부분은 Connection 수의 영향을 받는 부분이며 항상 주의를 요함. 2. InnoDB의 기본 페이지 크기는 16KB 컴파일을 통하여 페이지 변경 가능 3. 메모리 파리미터는 세션 파라미터와 글로벌(서버)파라미터로 구분 서버 메모리외에 세션별로 할당되는 메모리가 있기 때문에 컨넥션이 만으면 그만큼 메모리 사용량이 높아짐. 메모리 크기를 잘 산정해야 함 ■ 기본 메모리 설정 1. 성능에 가장 영향을 미치는 buffer pool 크기 시스템 전체의 50% ~ 60%로 잡는다. 파리미터명 : innodb_buffer_pool_siz..
performance schema 스키마 테이블중 events_statements_summary_by_digest는 수행된 쿼리에 대해 실행 이력을 보관하는 테이블입니다. 쿼리가 처음 실행된 날짜부터 마지막으로 수행된 날짜, 테이블 Full scan수행여부, 인덱스 사용여부, 에러횟수, 그리고 수행된 쿼리등등을 볼수 있는 아주 유용한 테이블입니다. 이 테이블에 대해서 유용하게 조회해 볼수 있는 성능 조회 쿼리에 대해 알아봅니다. ■ 활성화 방법 1. performance schema 스키마 활성화 mysql> show variables like 'performance_schema'; +--------------------+-------+ | Variable_name | Value | +----------..