본문 바로가기
반응형

Database/MYSQL238

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.
Mysql - procedure 사용법 - 2 안녕하세요. 오늘은 프로시져 사용에 대한 두번째 자료를 업로드 할려고 합니다. 너무 자세한 설명보다는 사용 가능한 부분위주로 설명을 하기 때문에 부족한 부분이 많을거에요. 부족한부분은 다른 글이나 구글링을이용해주세요 TRANSACTION 실행부 1. 수행된 데이터 작업들을 DB에 적용할지 취소할지 결정하는 처리부 2. COMMIT: 하나의 트랜잭션이 성공적으로 끝났을 때 사용 3. ROLLBACK : 비정상적으로 종료되어 다시시작하거나 연산을 취소할 때 사용 Delimiter ~ Begin DELIMITER $$ 구분자 USE `DB_NAME`$$ // 사용할 디비명 DROP PROCEDURE IF EXISTS `p_프로시져명`$$ // 같은 이름이 있으면 삭제 CREATE DEFINER=`생성자`@`생.. 2023. 8. 1.
Mysql - Stored Procedure 사용 방법 - 1 안녕하세요. Mysql DB를 정말 오랬동안 사용하고 있는데요. 처음 나왔을때는 아니겠지만 버젼 4부터 사용해서 버젼 8까지 지금까지 사용하고있는듯합니다. 처음에는 DB 테이블이 수시로 깨지고 했었는데 5.5 이후부터 안정적인 서비스 운영이 가능해지면서 지금은 많은 업체에서 사용하고 있는것 같아요. 오늘은 Mysql Stored Procedure 사용 방법에 대해서 알아보도록 하겠습니다. •프로시저는 절차형 sql 을 활용하여 특정 기능을 수행 할 수 있는 트랜잭션 언어. •일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합. •프로시저는 호출을 통해 실행. 프로시저 의 장점 1. Stored procedure를 처음 호출하면 MySQL은 DB의 catalog에서 이름을 찾아서 Stored p.. 2023. 7. 28.
2023년 상반기 한국인이 가장 많이 사용한 앱 & 다양한 소식 안녕하세요. 2023년 7월도 이제 몇일 남지 않았네요. 오늘은 이런 정보들을 중심으로 고려해보면 어떨까 싶어요. 자금 블랙홀 전락한 IPO 시장 > 40개 기업 시가총액 90조 증발 > 2020년 이후 코스피시장에 상장한 61개 기업 중 40개가 상장 직후 시총 하락 > 수익성 검증 안된 기업의 졸속상장 > 상장 심사를 맡고 있는 거래소의 철저한 기업심사가 필요 일부 기업은 IPO로 자금을 조달하고도 ‘매출 0원’을 지속하거나, 자금난에 유상증자를 단행하며 일반 투자자들 피해를 초래를 했던적이 있기에 더 철저한 심사를 진행하나봅니다. 2023년 상반기 한국인이 가장 많이 사용한 앱 > 카카오톡, 유튜브, 네이버, 쿠팡, 네이버 지도 순 > 2023년 상반기 가장 많이 사용한 앱은 ‘카카오톡’(월 평균 .. 2023. 7. 27.
MYSQL - DML 명령어1(Data Manipulation Language), DCL 안녕하세요. 이번에는 MYSQL - DML 명령어1(Data Manipulation Language) 종류에 대해서 알아볼건데요. 전체적으로 전부 알아보면 좋겠지만 그래도 필요한 부부분 위주로 알아보도록 하겠습니다. SELECT 기본 사용법 # 기본 선택 명령어(table_name 테이블에서 모두 가져오기) SELECT * FROM [table_name]; # WHERE문 포함 선택 명령어(table_name 테이블에서 name이 '반화넬'인 값 가져오기 SELECT * FROM [table_name] WHERE name='반화넬'; SELECT * FROM [table_name] WHERE name LIKE '반화넬'; # 애매한 것도 모두 선택하는 명령어(table_name 테이블에서 name에 '반.. 2023. 7. 27.
Mysql- Data Definition Language(DDL) 안녕하세요. 지금까지 Mysql 설치를 알아보았는데요. 이제는 Mysql- Data Definition Language(DDL)에 대해서 알아볼까 합니다. DDL, DML, DCL등 알아야 할건 많겠지만 그래도 하나씩 알아둔다면 많은 도움이 될거라 생각됩니다. DATABASE 명령어 # 데이터베이스 생성 명령어 CREATE DATABASE [dbname]; # 데이터베이스 생성 및 속성 설정 명령어 CREATE DATABASE [dbname]CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci; # 테이블 생성 명령어 Drop table member_basic; CREATE TABLE member_basic ( auto_no INT PRIMARY KEY AUTO_INCRE.. 2023. 7. 26.
Mysql 알아가기 - Mysql control Monitoring Explain 등 안녕하세요. 지금가지 Dual Master 구성을 진행 했었는데요. 가능하면 듀얼 마스터를 순환형으로 구축을 한번 해보는것도 좋을것 같다는 생각이 듭니다. 가능하면 여러번 연습해서 내꺼로 만드는걸 강력하게 추천 드립니다. 이번에는 Mysql의 control, Monitoring, Explain등 추가적인부분을알아볼까합니다. Table Design - control – 대용량 MySQL instances/schemas/tables을 관리하는 추가 코스트 ( > 2TB) – 데이터 사이즈가 커짐에 따라 인덱스 구조가 더 넓어지고 깊어짐, 모든 SQL 작업에 영향 – 사용 하지 않는 이력 데이터에 대해서 삭제하거나 아카이브 성능 저하 – 신속하게 늘어나는 테이블에 대해서 대책을 세워야 함 – 파티션 테이블을 .. 2023. 7. 25.
Mysql 알아가기 - 1단계 (Information_schema, Table, Column, Index 등) 1차 안녕하세요. 지금가지 Dual Master 구성을 진행 했었는데요. 가능하면 듀얼 마스터를 순환형으로 구축을 한번 해보는것도 좋을것 같다는 생각이 듭니다. 가능하면 여러번 연습해서 내꺼로 만드는걸 강력하게 추천 드립니다. 이번에는 Mysql 에 대해서 자세히 알아갈건데요. Information_schema, Table, Column, Index 등 기본 Design 구조부터 해서 항목들 설명을 진행하게 될것 같습니다. 순서는 아래 순서지만 이번글에 모두 포함되진 않으니 참고하시고 읽어주세요. 1.Information_schema 설명 2.Table, Column 정의 방식 3.Index 정의 방식 4.Table Design 방식 > 기본정의 , 추가 방식, Indexing > Control, Monite.. 2023. 7. 25.
Mysql Dual master – slave replication - 3단계 안녕하세요. 오늘은 간단하게 Mysql Dual master – slave replication 구성하는 방법을 단계별로 알아보고 있는데요. 이번에는 복제 연동시, 듀얼 마스터 연동시 나올만한 에러 사항들을 확인해보 넘어가도록 하겠습니다. 복제 구성 연동 - 에러 # error1 Last_IO_Errno: 2003 Last_IO_Error: error connecting to master 'master@192.168.152.128:3306' - retry-time: 60 retries: 3 message: Can't connect to MySQL server on '192.168.152.128:3306' (111) # blind address 주석처리 # bind-address 부분을 주석처리하면 모든 .. 2023. 7. 24.
Mysql Dual master – slave replication - 1단계 안녕하세요. 오늘은 간단하게 Mysql Dual master – slave replication 구성하는 방법을 단계별로 알아볼까 합니다. 차근 차근 따라 하시면 쉽게 구성 가능하실거에요. 사용 프로그램 Dual master replication 구성 가상머신 : VMware-player-full-16.2.1-18811642 OS : ubuntu-20.04.3-desktop-amd64 SQL Client : SQLyog-13.1.8-0.x64Community 복제 서버 구성 시작 PC에서 설치를 하기 때문에 가상 머신을 설치 해야합니다. Trail 버젼을 사용해서 학습 하시고 정식 이용은 정식 버젼을 이용하세요. 서버는 총 2대를 설치할예정이며 해당 서버는 Dual Master 구성을 위한 서버 구성입니.. 2023. 7. 23.
Mysql Dual master – slave replication - 준비사항 안녕하세요. 오늘은 간단하게 Mysql Dual master – slave replication 구성하는 방법을 단계별로 알아볼까 합니다. 차근 차근 따라 하시면 쉽게 구성 가능하실거에요. Replication 왜 필요하지? 데이터베이스에 데이터를 잘 저장하고 잘 불러오고 있는데 굳이 서버 하나를 늘려서 이중화를 시켜야 하는 이유가 무엇입니까? 라고 당연히 물어볼 수 있을 것 같습니다. Replication이 필요한 이유는 다음과 같습니다. 일종의 부하 분산이 가장 큰 이유죠.. 개인 프로젝트를 포함하여 모든 프로젝트가 그렇지만, DB에 접근해서 처리해야 하는 것들이 대부분일 겁니다. 읽기, 쓰기, 수정의 모든 연산이 하나의 DB에서 일어난다면 트래픽이 늘어남에 따라 자연스럽게 병목 현상 이 생길 수 밖.. 2023. 7. 23.
테이블 조인 (MariaDB) - join_cache_level 조인 알고리즘 MiriaDB 5.3 이전 : 네스티드 루프 알고리즘만 사용 MiriaDB 5.3 이후 : 다양한 형태의 알고리즘 도입. 활용율은 높지 않지만 개선중. MiriaDB 5.3 부터 지원되는 알고리즘의 종류 단순 네스티드 루프(Simple Nested Loop) 블록 네스티드 루프(Block Nested Loop) 블록 네스티드 루프 해시(Block Nested Loop Hash) 블록 인덱스(Block Index Join, Batched Key Access) 블록 인덱스 해시(Block Index Hash Join, Batched Key Access Hash) 블럭 기반 조인 알고리즘의 종류 8가지 join_cache_Incremental=offjoin_cache_hashed=offjoin_.. 2023. 7. 20.
MySQL 8.0.1 utf8mb4_0900_ai_ci의 한글 사용에 대한 문제점 MySQL 8.0.1 버전부터 기본값으로 채택된 utf8mb4_0900_ai_ci의 한글 사용에 대한 문제점 MySQL 8.0.1 버전부터 utf8mb4_0900_ai_ci를 기본값으로 적용했습니다. 기존의 5.x버전대의 MySQL을 사용해 오던 유저분들이라면 한글을 사용해야 하는 환경에서 대부분 utf8mb4_general_ci를 사용해왔을 겁니다. 0900_ai_ci로 기본 값이 변경되면서 아마 처음 MySQL을 시작하거나 그냥 설치만 해서 사용하시는 분들은 무슨 차이가 있나 궁금하실 수도 있습니다. 우선 기본값으로 설정된 utf8mb4_0900_ai_ci에 대해 간단히 설명 해보겠습니다. uft8mb4는 각 문자가 UTF-8 인코딩 체계에서 최대 4바이트로 저장됨을 의미. 0900은 유니코드 데이터.. 2023. 7. 10.
Mysql slave 동기화 반영 에러 - Concat() 쿼리 부분에 concat(년,월,일) 으로 합산하여 특정 컬럼에 Data를 기록하는 부분의 쿼리에서 형변환이 되지 않아 Slave 전송 반영이 안될경우 입니다. 1. Master에서 쿼리 실행 2. Slave에서 반영할때 해당 쿼리가 NULL 발생함 (실제 Data 누락됨) 자동 형변환일 될거라고 생각하고 SQL 작성할경우 이렇게 버그에 발목이 잡힐수 있으니 불편하더라도 형변환을 하는 습관을 가져봅시다. 카테고리 내용 InnoDB -- clustered index record를 deleted 마크하고 업데이트된 버전의 레코드를 clustered index에 삽입하는 row_upd_clust_rec_by_insert 함수가 하위 수준 함수에 잘못된 n_ext 값(총 외부 필드 수)을 전달하는 버그 픽스 -.. 2023. 6. 22.
Mysql 파티션 추가시 느려지는 문제 해결 : innodb_adaptive_hash_index = OFF 파티션을 사용하다보면 파티션 추가 부분에서 갑자기 느려지는 경우가 있습니다. 이렇게 해보시면 어떨까요? 파티션 관련 ADD 작업시 AHI 유지라고 생각하는데 AHI 행이 크면 이 작업이 느려지지만 이 작업은 DDL 커밋 단계에서 mdl x로 보호하므로 선택이 중단된다고 합니다. innodb_adaptive_hash_index = OFF 하면 되니 참고하세요 2023. 5. 15.
[Google Cloud]외부 서버에서 복제하는 방법 외부 서버 구성 사용 사례 외부 서버 구성은 다음과 같은 목표를 달성하는 방법을 제공합니다. 최소한의 다운타임으로 데이터를 자체 관리형 MySQL 서버에서 Google Cloud로 마이그레이션하기 복제본 관리를 Cloud SQL로 오프로드하면서 서버의 코로케이션 및 제어 유지하기 이 사용 사례를 하이브리드 클라우드라고도 합니다. 자체 관리형 서버와 Cloud SQL 복제본 간의 복제는 무기한으로 지속됩니다. 외부 복제 구성 외부 복제 구성에는 다음 인스턴스가 포함됩니다. 사용자가 관리하는 MySQL 서버: 소스 데이터베이스 서버라고도 합니다. Cloud SQL 복제본 하나의 소스 데이터베이스 서버에 여러 개의 복제본이 있을 수 있습니다. 소스 표현 인스턴스 소스 표현 인스턴스는 Cloud SQL 복제본에.. 2023. 3. 27.
[Google Cloud]복제를 위한 Cloud SQL 및 외부 서버 구성 용어 외부 서버. 데이터를 복제하려는 Cloud SQL 외부의 MySQL 서버입니다. 소스 데이터베이스 또는 외부 데이터베이스 서버라고도 합니다. 다른 Cloud SQL 인스턴스이거나 온프레미스, Amazon 관계형 데이터베이스 서비스(RDS) 등과 같은 다른 데이터베이스 서버일 수 있습니다. 소스 표현 인스턴스. Cloud SQL 복제본에 대한 외부 서버를 나타내는 Cloud SQL 인스턴스의 모델입니다. Google Cloud 콘솔에서 볼 수 있고 일반 Cloud SQL 인스턴스와 비슷하게 표시되지만 데이터를 포함하거나, 구성 또는 유지보수가 필요하거나, 결제에 영향을 주지 않습니다. Cloud SQL 복제본. 외부 서버에서 복제하는 Cloud SQL 인스턴스. 외부 기본 읽기 복제본이라고도 합니다... 2023. 3. 27.
반응형