MySQL 서버 하드웨어 및 OS 조정:1. 전체 InnoDB 파일을 메모리에 로드하기에 충분한 물리적 메모리가 있어야 합니다. InnoDB는 디스크가 아닌 메모리에서 파일에 액세스할 수 있을때 훨씬 빠릅니다.2. 스와핑을 피합니다. 스와핑은 디스크에서 읽는 것이므로 속도가 느립니다.3. 배터리 지원 RAM(Battery-Backed RAM)을 사용합니다.4. 고급 RAID를 사용합니다. 가급적이면 RAID10 이상을 사용합니다.5. RAID5를 피합니다. 무결성을 보장하는데 필요한 체크섬은 비용이 많이 듭니다.6. OS와 데이터 파티션을 논리적으로뿐만 아니라 물리적으로 분리합니다. 비용이 많이 드는 OS 쓰기 및 읽기는 데이터베이스 성능에 영향을 미칩니다.7. mysql 임시 공간과 복제 로그를 데이터..
■ MySQL 기본 설정 • 하드웨어CPU코어와 메모리는 많을수록 좋습니다. 어떤 DBMS던 이건 공통적인 내용입니다. 스토리지 측면에서 SSD 디스크는 기존의 스핀들을 성공적으로 대체하여 비용 대비 최고의 성능을 제공합니다. RAID 10은 여전히 대부분의 워크로드에 가장 권장되는 수준이지만 먼저 RAID 컨트롤러가 SSD 드라이브의 성능을 활용할 수 있고 실제 병목 현상이 되지 않는지 확인해보아야 합니다. 더 많은 IOPS가 필요한 경우 많은 PCI-e 플래시 드라이브도 있습니다. • 운영 체제Linux는 고성능 MySQL 서버를 위한 가장 일반적인 운영 체제입니다. 최신 커널과 결합된 Linux의 EXT4 또는 XFS와 같은 최신 파일 시스템을 사용하는것이 좋습니다. 그리고 각각 고유한 한계와 ..
GTID 복제 모드에서 1236 에러에 관련된 내용에 대해 알아보겠습니다.원문 : https://www.percona.com/blog/2016/12/01/database-daily-ops-series-gtid-replication-binary-logs-purge/ mysql> show slave statusLast_IO_Errno: 1236Last_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 containing G..
■ 사용방법일반적으로 log_bin 파라미터가 ON으로 설정되면 모든 DDL, DML이 로그 파일에 작성되며 사용자가 MySQL세션에 접속할 경우 DDL, DML을 수행할때도 역시 바이너리 로그에 작성됩니다. 그러나 서버에 접속한 세션에서 특정 이유(유지보수 작업이나 기타 설정작업)로 바이너리 로그에 DDL, DML에 작성되지 않게끔 하는게 필요할 수도 있습니다. 이때 사용하는 파라미터가 sql_log_bin입니다. 이 명령어에 대해 사용방법을 알아보겠습니다. 사용방법바이로그 작성을 금지시킬 경우mysql> SET sql_log_bin = OFF 바이너리 로그 작성을 원할 경우(기본값)mysql> SET 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> 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..