본문 바로가기
반응형

Database/MYSQL248

Foreign Key 에 대한 사용 유무 어떤게 좋을까? FK에 대한 기본적인 이야기 FK를 사용하지 않는 이유FK는 한 테이블이 다른 테이블을 참조하는 제약 조건이라 데이터 무결성을 보장하여 안전한 데이터 관리가 가능하다. 그러나 성능 저하를 유발할수도 있고, 복잡도 때문에 데이터베이스 운영 난이도를 높일 수 있다.성능 저하FK를 사용하지 않는 경우보다 FK를 사용할 경우 데이터 변경 시 더 많은 lock을 유발하기 때문에 동시성이 높은 상황에서 성능 저하가 발생할 우려가 있다. 데이터 변경이 빈번한 경우 성능 저하에 대한 문제가 더 많이 발생할 수 있다.유지 관리 어려움FK를 사용하면 데이터 변경이나 삭제 시 관련된 각 테이블 간의 연관성을 고려해야 한다. 테이블의 수가 증가하고 관계가 더 복잡해질수록 데이터 수정 작업은 점점 어려워진다. 그리고 FK가 적.. 2025. 3. 21.
Mysql 8.4 -> Mysql 8.0 다운 그레이드 mysqldump option–single-transaction : lock 을 걸지 않고도 dump 파일의 정합성 보장하는데 InnoDB 테이블이 아닌 MyISAM or MEMORY 테이블인 경우에는 여전히 상태가 변경 될 수 있다.MySQL에선 큰 테이블을 덤프하려면 –quick 옵션과 결합하기를 권장한다.–databases : dump 할 db명을 지정한다. 여러 개를 한번에 지정하는 것도 가능하다.–tables : dump 할 table명을 지정한다. 마찬가지로 여러 개를 한번에 지정 할 수 있다.# 전체 백업mysqldump --single-transaction --all-databases -h [db주소] -u [username] -p > backup_file.sql# 백업시 프로시저 및 이벤.. 2025. 3. 20.
Mysql - Foreign Key(외래키) 1. 외래키 (Foreign Key)란?외래키는 두 테이블을 서로 연결하는 데 사용되는 키이다.외래키가 포함된 테이블을 자식 테이블이라고 하고 외래키 값을 제공하는 테이블을 부모 테이블이라한다.2. 외래키 사용시 주의 사항1) 외래키 값은 NULL이거나 부모 테이블의 기본키 값과 동일해야한다. (참조 무결성 제약조건)2) 부모 테이블의 기본키, 고유키를 외래키로 지정할 수 있다.3) 부모 테이블의 기본키, 고유키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정할 수 있다. CREATE TABLE `parent` ( `id1` INT(11) NOT NULL, `id2` INT(11) NOT NULL, `id3` INT(11) NOT NULL, `.. 2025. 3. 12.
MySQL - 외래키(Foreign Key) 의견. 외래키를 쓰지 않는 이유 관계형 DB에 관계가 단순할때는 문제가 없지만, 복잡한 관계를 맺으면 문제가 생긴다. 기본적으로 FK는 인덱스이다. UPDATE, DELETET시 외래키로 인해 성능 저하가 생긴다.부모테이블, 자식테이블 모두 해당 컬럼 인덱스 생성이 필요하고, 변경 시 부모/자식 테이블 데이터 체크 과정이 필요하여 잠금이 발생한다.데드락의 원인이 된다. (참고 : https://martin-son.github.io/Martin-IT-Blog/mysql/foreign%20key/performance/2022/02/28/foreign-key-Performance.html)확장성, 유연성이 좋지 못하다.설계 수정 같은 것을 하고 싶을때 병목이 된다.데이터베이스 schema 마이그래이션, 샤딩 할때 방.. 2025. 3. 12.
mysql_native_passwordMySQL 8.4에서 로드되지 않은 오류를 수정하는 방법 MySQL 8.4(2024년 기준 최신 LTS 릴리스)에 도입된 주요 변경 사항 중 하나는 "MySQL Native Password" 플러그인이 더 이상 기본적으로 활성화되지 않는다는 것입니다. 또한 MySQL 9.0은 이 플러그인을 완전히 제거합니다.이 변경 사항은 인증 플러그인과 함께 MySQL 데이터베이스를 사용하는 PHP 및 기타 애플리케이션에 영향을 미칩니다 mysql_native_password. mysql_native_password플러그인이 더 이상 기본적으로 로드되지 않거나 전혀 사용할 수 없기 때문에 PHP PDO/MySQLi 연결이 실패합니다.더 이상 로드되지 않은 플러그인을 사용하여 데이터베이스에 연결을 시도하면 mysql_native_passwordPDO/MySQLi는 MySQL에.. 2025. 3. 4.
Mysqldump 사용법 알아보 1. mysqldump 기본구조mysqldump -u[user_id] -p[user_pw] [option] [db_name] [tb_name] > [backup_file_name.sql]-u[user_id] : MariaDB 접속 계정-p[user_pw] : MairaDB 접속 비밀번호[option] : dump 옵션, 여러개 중첩이 가능[db_name] : 옵션 별 필요에 의한 Database 명칭[tb_name] : 옵션 별 필요에 의한 Table 명칭[backup_file_name.sql] :  백업받을 파일 명, 경로가 지정되지 않을 경우 스크립트를 실행하는 디렉토리에 파일 생성.2. 전체 데이터베이스 백업하기Option : --all-databases mysqldump -u[user_id] -p.. 2025. 3. 4.
MySQL 8.4 LTS 변경 내역 - Changes in MySQL 8.4.0 MySQL 8.4 LTS 버전InnoDB 파라미터 기본값 변경사항innodb_buffer_pool_in_core_fileinnodb_buffer_pool_instancesinnodb_change_bufferinginnodb_dedicated_serverinnodb_adaptive_hash_indexinnodb_doublewrite_filesinnodb_doublewrite_pagesinnodb_flush_methodinnodb_io_capacityinnodb_io_capacity_maxinnodb_log_buffer_sizeinnodb_numa_interleaveinnodb_page_cleanersinnodb_parallel_read_threadsinnodb_purge_threadsinnodb_read_.. 2025. 2. 27.
MySQL 8.0 업그레이드 - MySQL Upgrade pgrade PathsMySQL 8.0 으로 업그레이드는 5.7의 GA 버전에서만 지원되고 있습니다. (5.7.9 or higher) 그래서 5.7.9 이전 버전이라면 일단 5.7.9까지는 업그레이드나 마이그레이션 후 8.0 버전으로의 업그레이드를 진행해야 합니다.권장되는 것은 5.7버전의 가장 최근의 버전까지 업그레이드 이후 8.0 버전으로의 업그레이드입니다. 다른 버전 즉 5.6이나 그 이하의 버전에서는 8.0으로 Direct 업그레이드의 지원이 되지 않습니다.해당 포스팅에서는 MySQL 5.7.31에서 MySQL 8.0.23 버전으로 INPLACE 업그레이드의 내용이 기술되어 있습니다.               업그레이드 프로세스MySQL 서버 가 실행될 때 필요한 정보를 저장하는 테이블이 포함된 .. 2025. 2. 27.
MySQL 8.0 Upgrade 방법 및 참고사항 MySQL 5.7에서 8.0으로의 업그레이드는 주요한 데이터베이스 시스템 변경을 수반하며, 이 과정은 몇 가지 핵심 단계와 고려해야 할 중요한 포인트로 구성됩니다. 아래에서는 이 업그레이드 과정의 기본 배경, 주요 단계, 예상되는 도전 과제 및 이를 해결하기 위한 방안에 대해 상세하게 설명합니다.배경MySQL 8.0은 여러 새로운 기능과 개선사항을 제공합니다. 이는 보안 강화, 쿼리 실행 최적화, 새로운 데이터 타입의 지원, JSON 확장 및 성능 개선을 포함합니다. 또한, MySQL 8.0은 새로운 기본 문자 세트인 utf8mb4로의 전환을 포함하여, 국제화 및 다양한 언어 지원 면에서도 개선을 제공합니다.업그레이드 준비 단계업그레이드 필요성 인식: MySQL 5.7의 공식 지원 종료와 보안, 성능, .. 2025. 2. 25.
갑자기 Mysql slow_log crash 나는 이유는 무엇일까? Mysql 재구동을 했거나 운영중에 갑자기 slow_log crash 가 발생하는 경우가 있는데 어떤 이유때문에 이런 에러가 발생할까 궁금합니다. [ERROR] /usr/local/libexec/mysqld: Table 'slow_log' is marked as crashed and should be repaired  MySQL slow_log가 충돌하는 경우, slow_log 테이블이 손상되었을 경우니데요. 이유는 이런듯 합니다.   원인 하드디스크 용량 부족, query_time이 35일 이상인 경우.  위처럼 증상이 발생하는 이유는 인듯합니다. MySQL Administrator에서 slow query를 확인하려고 할 때 충돌  Select 시 "is marked as crashed and shou.. 2025. 2. 14.
MySQL 그룹 복제 - 모니터링 MySQL을 위한 멀티 마스터 업데이트 솔루션이 여기 있습니다. MySQL 그룹 복제는 충돌 처리 및 실패 감지를 통해 MySQL 서버 그룹의 모든 멤버에 대한 가상 동기 업데이트를 보장합니다. 분산 복구도 패키지에 포함되어 있어 새 멤버를 추가하는 과정을 용이하게 합니다.MySQL 5.7.2부터 복제 팀은 성능 스키마 테이블에서 복제 성능을 모니터링하기 위한 더 많은 필드를 제공하기 위해 끊임없이 노력해 왔습니다. 이 게시물은 MySQL 그룹 복제에 도입된 성능 스키마 테이블에 대한 간략한 개요를 제공합니다.참고: 최근 변경 사항 및 업데이트는 다음을 확인하세요.그룹 복제 - 그룹 복제 performance_schema 테이블 확장  소개된 표MySQL 그룹 복제 모니터링의 일부로 두 개의 새로운 테이.. 2024. 12. 26.
MySQL의 데이터를 엘라스틱서치와 싱크(sync)해서 빠른 검색과 분석을 하는 방법 원문 : https://blog.naver.com/ghostlover23/221644176875 관계형 데이터베이스(RDBMS)의 데이터를 엘라스틱서치로 저장하면 데이터의 검색을 빠르게 할 수 있는 여러 가지 작업이 자동으로 이루어집니다. 엘라스틱서치는 데이터를 인덱싱(indexing)하고 '샤드'라는 단위로 데이터를 쪼개서 여러 데이터 노드에 분산을 시키고, 만약에 복제본(replica) 세팅이 1 이상이면 일종의 read replica를 생성해서 역시 여러 데이터 노드에 분산시켜서 QPS를 향상시킵니다.  일단 엘라스틱서치에 인덱싱이 되면 강력한 Query api(https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-que.. 2024. 12. 16.
MySQL HA (Replication, Group Replication, Galera Cluster) mySQL의 HA(High Availabilty)를 위한 Replicaiton 기법은 다음과 같습니다.Master-Slave ReplicationGroup ReplicationGalera Cluster이 기법들에 대해서 알아보도록 하겠습니다.Master-Slave Replication하나의 Master DB와 다수의 Slave DB들을 통해 Replication을 수행하는 방식인데 Master는 Read/Write Mode로 동작하고 Slave들은 Read Mode로 동작합니다.이 말 뜻은 DB 변경 Query를 수신 받는 DB는 반드시 Master DB에게 변경 요청을 전달하고 Master DB는 변경 내용을 Slave DB에게 전달하여 복제를 수행한다는 말입니다. 그리고 Read 요청은 로드밸런서를 .. 2024. 12. 11.
MySQL LOAD DATA MySQL LOAD DATALOAD DATA statement사전 준비 : secure_file_privLOAD DATA 최소 설정Field and Line Handling : Default 설정헤더 라인 무시LOAD DATA 기본 설정 (CSV)Duplicate-Key and Error Handling필드 개수, 순서Input PreprocessingIndex Handling : LOAD DATA 문의 성능향상을 위한 Index check option로컬(클라이언트) 데이터 원격 INSERT사전 준비 : local_infile 설정 (server and client)LOCAL PATH 지정MySQL 테이블에 Text 파일을 빠르게 Insert 하는 방벙MySQL LOAD DATAPermalinkhttp.. 2024. 12. 4.
좌표(위도,경도)로 실제 거리 구하기 소수점 거리. GCS(Geographic Coordinate System)지리 좌표계(GCS)는 지구상에 위치를 정의하는데 3차원의 구면을 이용하는 좌표계로 한 지점은 위도(latitude)와 경도(longitude) 값으로 나타냅니다. 위도와 경도는 지구 중심에서 지표면 상에 지점까지 측정된 각으로 흔히 도(degrees)로 표시합니다. 위도와 경도에 대해 설명하면 아래와 같습니다. 위도(latitude)위도는 지구를 테이블위에 올려놓고 가로로 그은 선으로 생각하면 이해하기 쉽습니다.위 그림처럼 위도는 Equator를 기준으로 위쪽은 플러스 아래쪽은 마이너스 값을 가집니다.모두 아시겠지만 Equator는 "적도"입니다.우리에게 적도로 알려진 유래는 고대 중국 천문학에서 적도를 붉은 색으로 표현해서라고 합니다.위도는 .. 2024. 11. 14.
spatial database 공간 데이터 베이스 로컬 베이스, 지역기반 프로그램을 하다 보면 공간 데이터 베이스에 대한 개념이 필요하다. 여러모로 필요해서 정리해 보았다. 공간 데이터베이스 & 함수 in MariaDB (혹은 MySQL)공간 함수는 공간 관계 함수와 공간 연산 함수로 구분 질 수 있다.두 함수를 알아 보기 전 공간 Data Type을 먼저 알아본다. MySQL에는 문자형, 숫자 형, 날짜 형 외에 Geometry(공간 형)이 있다.공간 데이터 타입 ( Spatial Data Type )쉽게 설명하면 X, Y 좌표로 구성된 공간 데이터를 저장하고 연산할 수 있는 기능을 제공해주는 데이터베이스. 다른 말로, 공간 데이터의 저장 형태를 구분하는 공간 데이터 타입과 공간 데이터를 연산할 수 있는 공간 함수가 제공되는 데이터베이스라고 표현 가능.. 2024. 7. 30.
Mysql Geo 함수 - 거리구하기 point, linestring, polygon, geometry 등 디비로 표현할 수 있는 지도 데이터는 다양합니다.다양한 타입에 데이터를 조금 더 유용하게 사용할 수 있도록 해준 함수들도 물론 존재했습니다.그중에서 이번글에서는 두 위치 사이의 거리를 구하는 함수에 대해 설명하고자 합니다.구글맵에서 손이 가는대로 아무곳이나 A, B 두곳을 찍어서 거리를 구해봤습니다.위와 같은 A, B 위치가 있고 두 위치 사이의 거리가 76.04m라는 값이 화면상에 표시됩니다.구글맵에서 두 위치 사이의 거리를 알려주는 것처럼 같은 기능을 sql을 통해서 얻어내고자 합니다.A와 B 사이의 거리를 구하고자 할때 수학시간에 배웠던 거리 구하는 공식대로 각각의 경도, 위도를 그 식에 대입해서 구하는 방법대로 거리를 구한다고 .. 2024. 7. 30.
Mysql / Mariadb 공간 데이터베이스 쉽게 설명하면 X, Y 좌표로 구성된 공간 데이터를 저장하고 연산할 수 있는 기능을 제공해주는 데이터베이스라고 생각하시면 됩니다. 다른 말로, 공간 데이터의 저장 형태를 구분하는 공간 데이터 타입과 공간 데이터를 연산할 수 있는 공간 함수가 제공되는 데이터베이스라고 표현 가능합니다.   우리가 일반적으로 사용하고 있는 RDBMS인 Oracle, MariaDB, MySQL, PostgreSQL 등에서 공간 데이터를 처리하기 위한 기능을 제공하고 있습니다. 이 솔루션을 이용해 공간 데이터베이스를 생성/관리할 수 있는 겁니다. 심지어 Hive에서도 관련 Library를 설치하면 공간 데이터를 저장하고 공간 연산이 가능합니다.   그럼, 공간 데이터 타입과 공간 함수를 알면 공간 데이터베이스를 정복하게 되는걸까.. 2024. 7. 29.
UTC Time to KST Time, TimeZone을 이용한 시간변환 (CONVERT_TZ) 원본 : https://m.blog.naver.com/developer501/222491601872 해당 게시물의 2편으로 Java8 이후의 날짜 API 에 대한 내용을 포스팅 하기에 앞서, UTC TIME으로 세팅된 시간설정을 KST TIME으로 변경하는 방법에 대해서 알아보려고 한다​우선 아래 쿼리를 보자​​STR_TO_DATE 와 CONVERT_TZ 부분이 눈에 띈다. STR_TO_DATE는 지난 포스팅(하단)을 참고하고, 이번 포스팅에서는 CONVERT_TZ 에 대해서 알아보려 한다STR_TO_DATE에 대한 포스팅은 지난 포스팅을 참고 하자-> https://blog.naver.com/developer501/2224916015041. Default Timezone 설정 확인우선 현재 Defaul.. 2024. 7. 4.
대용량 partition lock 없이 삭제 방 원본 : https://dungbeetle.co.kr/mysql-%EB%8C%80%EC%9A%A9%EB%9F%89-partition-lock-%EC%97%86%EC%9D%B4-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0/ mysql 대용량 partition lock 없이 삭제하기 - 쇠똥구리 DBA's Work and Life Balance간혹 대용량 파티션 데이터의 삭제는 테이블의 성격에 따라선 까다로운 작업이 되기도 한다dungbeetle.co.kr 1. 대용량 파티션 테이블이란간혹 대용량 파티션 데이터의 삭제는 테이블의 성격에 따라선 까다로운 작업이 되기도 한다파티션 테이블은 보통 insert해서 데이터를 저장하는 용도로 사용하지만때로는 실시간으로 트래픽이 치는 테이블도 파티션.. 2024. 7. 2.
반응형