본문 바로가기
반응형

Database/MYSQL234

좌표(위도,경도)로 실제 거리 구하기 소수점 거리. 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.
UFT8MB4 변환시 에러 - Specified key was too long; max key length is 3072 bytes UTF8 -> UTF8MB4 변환시 발생하는 에러중 하나로 아래처럼 변환시 에러가 발생한다.ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 에러 발생 [ERROR] /usr/local/libexec/mysqld: Incorrect key file for table '테이블명.MYI'; try to repair it 이경우  UTF8MB4 에서는 한 글자당 4바이트이기 때문에 인덱스 최대 사이즈가 달라지기 때문에 발생한다.4000바이트로 최대값인 3072바이트보다 크기 때문이다. # 해결 방벙 > 속성의 크기를 줄인다.ALTER TABLE 테이블명 DROP PRIMARY KEY, ADD PRIMARY KEY(컬럼.. 2024. 4. 30.
Mysql euckr -> utf8mb4 변환시 ALTER [IGNORE] 참고 ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ... alter_specification: ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | ADD INDEX [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] [index_type] (.. 2024. 4. 17.
MySQL의 sql_mode와 기본 sql_mode들이 하는 역할 MySQL 서버에는 sql_mode 라는 시스템 변수가 있습니다. 이 변수를 이용하면 각기 다른 클라이언트에 다른 sql 모드를 적용하는 것이 가능합니다. sql_mode 설정은 서버 운영 요구사항에 맞게 global 하게 설정할 수도 있고 각각의 애플리케이션 요구사항에 맞도록 session에 설정하는 것도 가능합니다. Mode는 MySQL이 지원하는 SQL 문법과 데이터 유효성 검사에 영향을 주게 됩니다. 예를 들어 GROPU BY를 할 때 SELECT문에 unique한 column이 있더라도 SELECT가 가능하게 되서 데이터 조회가 가능하게 만드는 것도 가능합니다. sql_mode 설정 방법 서버가 시작할 때 sql_mode를 설정하고 싶다면 command line에서 --sql-mode=“mode.. 2024. 4. 1.
Mysql Incorrect integer value 에러 발생시 에러 나오지 않게 하려면? 안녕하세요. Mysql 버젼을 업그레이드하고나서 발생할때 뭐지 하면서 놀라기도 하는데요. SQL 사용에 대한 보안 등급이 높아지면서 해당 부분이 기본설정으로 되어 있어서 발생하게 됩니다. 하지만 가능하면 입력 컬럼 input data type에 맞게 호출하시면 좋을것 같습니다. 우선 에러 발생을 안하게 하는 방법을 알려드릴께요. # 에러 내용 Incorrect integer value: '' for column 'memChnl' at row 1 ...... 해당 내용의 경우 int 컬럼에 값이 잘못 입력이 된 상태로 실행되었기 때문이기에 해당 값을 int 형으로 맞춰주거나 아니면 에러를 무시 하도록 해야합니다. ​ ​ # 설정 확인 (Mysql 5.7 기준) ​ select @@global.sql_mod.. 2024. 2. 29.
Mysql 5.7 Old_password 대체용 function Mysql 5.7 상위 버젼부터는 Old_password 함수가 없어졌기 때문에 그전에 사용했었다면 대체 가능한 함수를 만들어서 사용해야합니다. DROP FUNCTION IF EXISTS OLD_PASSWORD; DELIMITER $$ CREATE FUNCTION OLD_PASSWORD (input BLOB) RETURNS CHAR(16) DETERMINISTIC BEGIN DECLARE nr BIGINT; DECLARE nr2 BIGINT; DECLARE ad BIGINT; DECLARE inlen INT; DECLARE i INT; DECLARE b CHAR; DECLARE tmp INT; DECLARE output CHAR(16); SET nr = 1345345333; SET nr2 = 0x1234.. 2024. 2. 15.
정규표현식(영어만 표현, 숫자만 표현 등) 정규 표현식 잘 사용하면 정말 최고랍니다. 메타문자 기능 설명 . 문자 1개의 문자와 일치한다. 단일행 모드에서는 새줄 문자를 제외한다. [ ] 문자 클래스 "["과 "]" 사이의 문자 중 하나를 선택한다. "¦"를 여러 개 쓴 것과 같은 의미이다. 예를 들면 [abc]d는 ad, bd, cd를 뜻한다. 또한, "-" 기호와 함께 쓰면 범위를 지정할 수 있다. "[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 의미한다. [^ ] 부정 문자 클래스 안의 문자를 제외한 나머지를 선택한다. 예를 들면 [^abc]d는 ad, bd, cd는 포함하지 않고 ed, fd 등을 포함한다. [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미한다. ^ 처음 문자열이나 행의 처음.. 2024. 1. 15.
[MySQL] CHECK TABLE & Repair TABLE ■ CHECK TABLE 명령 CHECK TABLE tbl_name [, tbl_name] ... [option] ... option: { FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED } CHECK TABLE은 테이블에 오류가 있는지 확인합니다. MyISAM 테이블의 경우 주요 통계도 업데이트됩니다. CHECK TABLE은 뷰 정의에서 더 이상 존재하지 않는 테이블을 참조하는 문제같은 것들을 확인할 수도 있습니다. 테이블을 확인하려면 테이블에 대한 권한이 있어야합니다. CHECK TABLE은 InnoDB, MyISAM, ARCHIVE 및 CSV 테이블에서 작동합니다. InnoDB 테이블에서 CHECK TABLE을 실행하기 전에 InnoDB 테이블에.. 2024. 1. 12.
MySQL 5.6에서 5.7로 업그레이드한 방법 블로그를 보다 유익한 정보가 있어서 스크랩 해봅니다. 정말 도움 되는 글 같아요. 본문 내용입니다. 어제 Synthesio Coffee Team은 Percona 5.6에서 Percona 5.7로 22TB MySQL Cluster 업그레이드를 완료했습니다. 우리는 이미 대부분의 클러스터를 업그레이드 했고 시간이 걸리는 것을 알고 있었지만 9개월이나 걸릴 것으로 생각하지는 않았습니다. 이것은 다운타임 없이 거대한 데이터베이스 클러스터를 마이그레이션하는 것에 관해 우리가 배웠던 것입니다. 초기 설정 우리의 데이터베이스 클러스터는 고전적인 고 가용성 3+1 노드 토폴로지로서 HAProxy를 이용합니다. 이것은 Systemd없이 Debian Jessie에서 4.9.1 커널 (처음에는 4.4.36)에서 실행됩니다... 2024. 1. 8.
MySQL/MARIADB auto_increment_increment, auto_increment_offset 설정 듀얼 마스터 구성에서 auto_increment 에 대한 에러가 발생하게되는데 이때 시작과 변동폭을 지정해줘야 합니다. Auto_increment 가 2씩 증가해야 대문에 auto_increment_increment 설정이 2로 되어있어서 2씩 증가 하도록설정 하고 또한 시작점을 지정해줘야 2씩 증가를 하겠죠? mysql> SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 2 | | auto_increment_offset | 1 | +-------------------.. 2023. 9. 18.
Mysql procedure LEAVE 처리 하는 방법 안녕하세요. 프로시져를 사용하면서 트랜잭션을 이용해서 롤백을 해도 되지만 Myisam이나 다른 엔진을 사용할경우 롤백없이 그냥 에러처리를하고 싶거나 아니면 그냥 프로시져를 중단하고 싶을때 사용해도 될것 같아서 공유합니다. 명령문 LEAVE은 지정된 레이블을 이용해서 종료 처리 LEAVE label; CREATE PROCEDURE sp_name() sp: BEGIN IF condition THEN LEAVE sp; END IF; -- other statement END$$ label명을 sp로 생성해서 해당 에러가 발생시 종료 시키는 예시 프로시져입니다. DELIMITER $$ CREATE PROCEDURE CheckCredit( inCustomerNumber int ) sp: BEGIN DECLARE c.. 2023. 9. 5.
InnoDB 전문 검색 : N-gram Parser 기본 InnoDB 전문 검색(Full Text) 파서는 공백이나 단어 분리자가 토큰인 라틴 기반 언어들에서는 이상적이지만 개별 단어에 대한 고정된 구분자가 없는 중국어, 일본어, 한국어(CJK)같은 언어들에서는 각 단어는 여러개의 문자들의 조합으로 이루어집니다. 그래서 이경우엔 단어 토큰들을 처리할 수 있는 다른 방법이 필요합니다. 우리는 CJK에서 사용할 수 있는 n-gram 파서를 제공하기 위한 새로운 플러그블 전문 파서(pluggable full-text parser)를 MySQL 5.7.6 에서 제공할 수 있게되어 정말 기쁩니다. N-gram이 정확히 뭘까요? 전문 검색에서 n-gram은 주어진 문자열에서 n개 문자의 인접한 순서입니다. 예를들어 n-gram 을 이용해 우리는 “abcd” 문자열을.. 2023. 9. 2.
SQL Injection A1Injection (인젝션)SQL, OS, XXE(Xml eXternal Entity), LDAP 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로써, 인터프리터로 보내질 때 발생한다. 공격자의 악의적인 데이터는 예상하지 못하는 명령을 실행하거나 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있다. Injection은 주입이라는 뜻으로, SQL 언어를 주입하여 해킹을 하는 기법을 뜻한다. 방어방법. Statement 대신, PreparedStatement같이 안전한 구문을 사용한 보안코딩 사용. statement구문을 사용시에는 꼭 컬럼값에 Injection을 유발할 수 있는 '(외따옴표) ;(세미콜론) 같은 DB에서 사용하는 특수문자 값을 제거하여 보안성 강화 그외 .. 2023. 8. 28.
Mysql 이메일 검사 및 정규표현식 정규표현식? 1. 정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 쓰이는 형식 언어 2. 문자열을 처리하는 방법 중의 하나 3. 특정한 조건의 문자를 ‘검색’하거나 ‘치환’할 때 사용 4. mySQL에서는 REGEXP라는 키워드를 사용하여 정규표현식을 처리함 이메일주소 정규표현 검사 SELECT 'abcdefg@gmail.com' REGEXP '^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9._-]@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]\\.[a-zA-Z]{2,4}$'; SELECT 'abcdefg@gmail.com' REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$'; #정규 표현식으로 지정된 메일 조소인지.. 2023. 8. 17.
Mysql Error Log logging 옵션 log_warnings, log_error_verbosity 안녕하세요 오늘은 Mysql Error Log logging하는 옵션에 대해서 알아볼께요. 에러만 기록할수도 있고 에러와 경고, 아니면 모든 Note 로그까지 기록하는 옵션이 있답니다. System variables –log_warnings[=#] 에러 로그에 경고 메시지를 생성하는 옵션으로 기본값은 5.7.2이전에는 1, 이후에는 2로 활성되어있다. 5.7.2부터 log_warnings에 의해 관리되는 정보는 log_error_verbosity에 의해 관리되며 log_error_verbosity는 이전 log_warnings 보다 우선 사용된다. log_warnings에 값을 할당하면 log_error_verbosity에도 할당이 되며 반대의 경우에도 마찬가지로 적용된다. log_warnings=0은 .. 2023. 8. 1.
반응형