보통 IP를 DB에 저장할때는 캐릭터 형태의 컬럼(varchar 혹은 char)을 많이 사용하는것으로 알고 있습니다. 저또한 마찬가지 입니다. 그러나 MySQL에서는 IP를 특화된 방법으로 저장하고 불러올 수 있습니다. 또한 저장 방법이 Integer방식이기 때문에 검색에서 더 효율적이기도 합니다. MySQL에서 IP를 저장하는 방법과 호출하는 방법에 대해 알아보겠습니다. ▶︎ 준비사항 MySQL에서 IP를 저장하는 방법은 숫자형으로 저장이 됩니다. MySQL문서에서는 INT형보다는 INT UNSIGNED 컬럼을 사용할것을 권고하고 있습니다. create table addr(ip int(11) unsigned); ▶︎ 사용방법 INET_ATON(expr) 일발적인 IPv4 네트워크 주소 방식으로 표현된 ..
MySQL Performance Cheat Sheet MySQL은 확장가능하고 원하는 성능을 위해 최적화하고 조정할 영역이 많습니다. 일부 변경은 동적으로 수행할 수 있고 다른 변경은 서버를 다시 시작해야 합니다. 기본 구성으로 MySQL 설치를 하는 것은 매우 일반적이지만 때로는 워크로드 및 설정 자체에 적합하지 않을 수 있습니다. MySQL의 주요 영역을 요약하여 이를 살펴보겠습니다. System Variables MySQL에는 변경을 고려할 수 있는 많은 변수가 있습니다. 일부 변수는 동적이므로 SET 문을 사용하여 설정할 수 있습니다. 다른 것들은 구성 파일(예: /etc/my.cnf, etc/mysql/my.cnf)에서 설정한 후 서버를 다시 시작해야 합니다. 서버를 최적화하기 위해 조정하는데 ..
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 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> SET sql_log_bin = OFF 바이너리 로그 작성을 원할 경우(기본값) mysql> SET sql_log_bin = ON ■ 제약사항 1. 트랜잭션 또는 하위 쿼리 내에서 sql_log..
■ 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..