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> show g..
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클라이언트를 이용해서 접속 후 's'..
■ 카탈로그를 이용하여 각종 정보 조회 ▶︎ 최근 사용이 되었던 tableselect * 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..
■ MySQL 메모리 사용률 모니터링에 필요한 기본 내용1. MySQL은 하나의 프로세스로 동작. 세션은 thread로 확장되고 시스템 자원을 할당. MySQL의 Memory 부분은 Connection 수의 영향을 받는 부분이며 항상 주의를 요함.2. InnoDB의 기본 페이지 크기는 16KB 컴파일을 통하여 페이지 변경 가능3. 메모리 파리미터는 세션 파라미터와 글로벌(서버)파라미터로 구분 서버 메모리외에 세션별로 할당되는 메모리가 있기 때문에 컨넥션이 만으면 그만큼 메모리 사용량이 높아짐. 메모리 크기를 잘 산정해야 함 ■ 기본 메모리 설정1. 성능에 가장 영향을 미치는 buffer pool 크기 시스템 전체의 50% ~ 60%로 잡는다.파리미터명 : innodb_bu..
performance schema 스키마 테이블중 events_statements_summary_by_digest는 수행된 쿼리에 대해 실행 이력을 보관하는 테이블입니다. 쿼리가 처음 실행된 날짜부터 마지막으로 수행된 날짜, 테이블 Full scan수행여부, 인덱스 사용여부, 에러횟수, 그리고 수행된 쿼리등등을 볼수 있는 아주 유용한 테이블입니다.이 테이블에 대해서 유용하게 조회해 볼수 있는 성능 조회 쿼리에 대해 알아봅니다. ■ 활성화 방법1. performance schema 스키마 활성화mysql> show variables like 'performance_schema';+--------------------+-------+| Variable_name | Value |+-----------..
Ubuntu에서 MySQL을 deb패키지로 설치하면 데이터가 저장되는 datadir에 특수한 설정이 자리잡게 됩니다.바로 apparmor란 것인데 말 그대로 특정 앱에 대해 방어를 하는 목적으로 만들어진 것입니다. 즉 보안성을 높인 기능이라 할 수 있습니다.좋으면 좋고 귀찮으면 귀찮은 기능입니다. 구글로 검색하면 주로 사용하지 않는 방법이 더 많이 검색되는것을 보면 말이죠. 여기에서는 Ubuntu에서 데이터 디렉토를 바꾸는 방법을 알아봅니다.기본적으로 아래 환경 설정은 MySQL서버를 내리고 진행합니다.shell> systemctl stop mysqld ■ datadir을 apparmor에 추가하는 방법다음위치의 파일을 편집하여 신규 datadir을 추가하는 방법입니다. 1. apparmor mysqld..
InnoDB 페이지 압축은 InnoDB 테이블을 압축하는 현대적인 방법입니다. InnoDB의 COMPRESSED 행 형식과 유사하지만 많은 장점이 있습니다. 몇 가지 차이점은 다음과 같습니다.- InnoDB 페이지 압축을 사용하면 압축 된 페이지는 테이블 스페이스 파일에서 읽은 후 즉시 압축 해제되고 압축되지 않은 페이지 만 버퍼 풀에 저장됩니다. 반대로 InnoDB의 COMPRESSED 행 형식을 사용하면 압축 된 페이지는 테이블 스페이스 파일에서 읽은 직후 압축이 풀리고 압축되지 않은 페이지와 압축 된 페이지는 모두 버퍼 풀에 저장됩니다. 즉, COMPRESSED 행 형식은 InnoDB 페이지 압축보다 버퍼 풀에서 더 많은 공간을 사용합니다.- InnoDB 페이지 압축을 사용하면 테이블 스페이스 파일..
MySQL에서 복제 환경을 운영할때 격게 되는 이슈중 이해가 안되는 이슈가 하나가 있는데 바로 네트워크 관련 이슈입니다.이 네트워크 이슈에 대해 알아보겠습니다. 이 네트워크 이슈는 네트워크 관련 파라미터에 대해서 특별히 설정하지 않을 시 시간이 지나고 난 후에야 알게되는 경우가 많습니다.관련하여 이 문제에 대해 한번 알아보겠습니다.■ 상황MySQL서버 자체가 전원이 꺼지가나 문제가 생기면 서버에서 에러 로그가 발생하게 됩니다. 서버에 접속을 할 수 없다는 에러가 나타나게 됩니다. 그러나 마스터에서 네트워크 이슈가 발생하게 되면 MySQL은 인지를 하지 못하고 설정해 놓은 시간동안 대기를 하면서 마스터의 이벤트를 계속 기다리게 됩니다. 이때 이 마스터의 이벤트 대기 시간이 너무 길기 때문에 복제이슈가 발생..
PostgreSQL에서 사용자 계정에 대한 생성, 권한을 담당하는 ROLE에 대해 알아봅니다.PosgreSQL에서 Role은 다른 의미로 사용자도 됩니다. 즉 로그인 유저이자 권한을 동시에 가집니다.create user를 호출하면 내부적으로 create role을 호출합니다. ■ Role의 종류와 생성 방법postgresql에서 제공되는 데이터베이스 권한들을 특정 이름으로 모아 만드는 것을 role이라고 합니다. 예를 들어 databse를 생성할 수 있는 권한, 접속할 수 있는 권한만을 이용하여 특정 이름을 붙여 만드는것을 role이라고 합니다. 그리고 이 role은 사용자 혹은 그룹으로 간주될 수 있습니다.이 role의 명령어를 사용하기 위해서는 CREATEROL 권한이 있거나 데이터베이스 슈퍼 계정이..
■ PostgreSQL 업그레이드 방법PostgreSQL에서 메이저 버전을 업그레이드 하는 방법은 크게 2가지가 있습니다. • dump 프로그램 이용기존 PostgresQL에서 모든 데이터에 대해서 dump를 받은 다음 기존 엔진을 백업하고, 새로운 엔진을 설치 후 새로운 엔진에 기존에 백업받은 dump파일을 다시 밀어넣는 방법입니다.엔진 설치 시간, 데이터 크기만킁 시간이 소요됩니다. 데이터를 빼내와서 다시 밀어넣는만큼 autovacuum 효과가 있습니다.또한 데이터가 처음부터 입력되기 때문에 단편화 또한 해소되게 됩니다. • inplace 업그레이드pg_upgrade를 이용하는 방법입니다. 기존 엔진에 신규 엔진을 밀어 올리는 방식입니다.간단한 방법이기도 하면서 굉장히 어려운 방법이기도 합니다. 에러..
스토어드 프로그램은 다음과 같은 옵션이 있습니다. Definer ; 스토어드 프로그램이 기본적으로 가지는 옵션. 스토어드 프로그램을 작성한 유저. 프로그램이 실행될 때의 권한 SQL Security 옵션 : 프로그램을 실행할 때 누구의 권한으로 실행할지 결정하는 옵션. Invoker 또는 Definer둘중에 하나로 선택. definer는 스토어드 프로그램을 생성한 사용자를 의미하며 Invoker는 해당 프로그램을 호출한 사용자. 아래와같이 definer가 creator@%으로 생성된 스토어드 프로그램을 executer@% 사용자가 실행한다고 가정합니다 . SQL SECURITY가 INVOKER와 DEFINER일때 이 스토어드 프로그램이 어느 사용자의 권한으로 실행되는지 나타내는 표입니다. SQL SECU..