DATABASE27 MYSQL 파일 단위 백업 - InnoDB, MyISAM 파일 복원 MyISAM 파일 복원 - MyISAM의 구성 /mysql/data/DB명/테이블명.frm 테이블의 구조를 정의하는 파일 /mysql/data/DB명/테이블명.MYD 데이터 파일(actual data of MyISAM table) /mysql/data/DB명/테이블명.MYI 인덱스 파일 - 위 .frm, .myd, .myi 파일이 있다면 데이터베이스 폴더 (/var/lib/mysql)에 간단히 복사+붙여넣기 하는 것 만으로 복원 끝! 문제는, innoDB 엔진의 경우이다. InnoDB 파일 복원 -InnoDB는 MyISAM처럼 단순하고 간단하게 파일을 이용한 복구를 하기 어려운데, 이는 InnoDB의 구조 때문이다. -굉장히 복잡한데, 결론적으로는 .frm, .ibd 파일만으로 복구하기 위해서는 .ibd.. DATABASE 2022. 10. 20. MariaDB 손상 복구 관련 정리 자료(2) - MYISAM 자동 복구 옵션 이 전 글에서 DB 손상 시 수동으로 복구하는 방법에 대하여 정리했다. https://yenbook.tistory.com/109 MariaDB 손상 복구 관련 정리 자료(2) -MYISAM 사실 대부분의 테이블 손상이 일어나는 경우는 MariaDB-MYISAM의 조합이다. (InnoDB의 경우 이 전 포스팅을 참고) https://yenbook.tistory.com/108 MariaDB 손상 복구 관련 정리 자료(1) -InnoDB 우리 서비스에서.. yenbook.tistory.com 오늘은 이러한 복구 과정을 자동화 하는 옵션값을 발견하여 기록한다. my.cnf 설정파일 myisam_recover_options=mode 모드는 다중 선택이 가능하며, 컴마를 이용해 값을 입력한다. (myisam_rec.. DATABASE 2022. 10. 4. MariaDB 손상 복구 관련 정리 자료(2) -MYISAM 사실 대부분의 테이블 손상이 일어나는 경우는 MariaDB-MYISAM의 조합이다. (InnoDB의 경우 이 전 포스팅을 참고) https://yenbook.tistory.com/108 MariaDB 손상 복구 관련 정리 자료(1) -InnoDB 우리 서비스에서는 데이터베이스를 MSSQL, MariaDB 두 가지 옵션으로 제공하는데, 라이선스, 비용 등을 고려하여 MariaDB를 기본 타입으로 제공하고 있다. 하지만 MariaDB의 치명적인 단점이 있었으니, yenbook.tistory.com MYISAM의 경우 하나의 테이블에 대해 기본적으로 3개의 파일을 생성한다. /mysql/data/DB명/테이블명.frm 테이블의 구조를 정의하는 파일 /mysql/data/DB명/테이블명.MYD 데이터 파일 /m.. DATABASE 2022. 9. 27. MariaDB 손상 복구 관련 정리 자료(1) -InnoDB 우리 서비스에서는 데이터베이스를 MSSQL, MariaDB 두 가지 옵션으로 제공하는데, 라이선스, 비용 등을 고려하여 MariaDB를 기본 타입으로 제공하고 있다. 하지만 MariaDB의 치명적인 단점이 있었으니, 바로 테이블 crash 문제이다. 특히, InnoDB/MYISAM 데이터 엔진 중 어떤 엔진을 사용하냐에 따라 crash 위험성 차이가 있었다. (사실 MYISAM엔진을 사용하고 있는 MariaDB인 경우에서 거의 대부분의 테이블 손상-복구 문제가 문제가 일어났음) 매번 손상이 일어날 때마다 복구 방법을 찾아보기 번거로워, 이번 기회에 정리를 하고자 한다. 먼저, 손상 가능성이 적은 InnoDB의 경우를 먼저 정리한다. 1)InnoDB 테이블이 손상되는 경우는 상당히 희박하다. Double .. DATABASE 2022. 9. 27. [MySQL] trigger로 jsp페이지 호출하기 사용자들이 요청한 데이터가 있을 때 관리자에게 알람을 보내주는 API를 개발하려고 한다. DB 테이블에 변동사항이 있을 때 동작해야 하므로 trigger를 쓸 것이고, trigger를 통한 동작을 'jsp호출'이라는 함수 호출로 동작시키려고 한다. 먼저, jsp 페이지를 호출하는 사용자 정의 함수(UDF)를 생성해야한다. 1) lib_mysqludf_sys_64.zip 다운로드 2)lib_mysqludf_sys.dll 파일을 Mysql설치 폴더 아래 plugin 폴더에 넣어준다. *plugin 폴더 경로 확인 : show variables like 'plugin_dir'; 3)sys_exec() 함수 생성하기 - create function sys_exec returns int soname 'lib_my.. DATABASE 2022. 5. 26. [Database] where 1=2, where 1=1을 사용하여 테이블 복사하기 DB 쿼리문을 보다 보면 where절에 1=2, 1=1 등을 사용하는 것을 심심찮게 볼 수 있다. 쿼리문의 조건절에 where 1=1을 쓴다면, 말 그대로 항상 참일 것이고, (true for all rows) where 1=2를 쓴다면, 항상 거짓일 것이다.(false for all rows) where 1=2 사용하여 테이블 구조만 복사하기 CREATE TABLE [생성할 테이블명] AS SELECT * FROM [복사할 테이블명] WHERE 1=2; 위와 같은 쿼리문을 사용할 경우, 컬럼명과 데이터 타입이 동일한 테이블을 생성하지만, key, constraint, 테이블의 데이터는 복사하지 않는다. (1=2인 data는 존재하지 않기 때문) (중요한 점! 기본키, 외래키가 설정되어 있는 경우 이는 .. DATABASE 2022. 5. 23. [MySQL] MySQL Explain 실행계획 사용법 및 분석 MySQL Explain MySQL 튜닝에서 가장 중요한 것은 쿼리와 스키마 최적화이다. 스키마 설계는 한번 진행되면 그 테이블을 사용하는 모든 쿼리에 영향을 주기 때문에 좀처럼 변경하기 힘들지만 쿼리는 해당 쿼리만 수정하면 되므로 변경하기 쉽다. Slow Query를 없애는 것은 성능을 향상 시키기 위한 매우 중요한 수단이므로 어플리케이션의 성능을 향상 시키고 싶다면 우선적으로 쿼리의 튜닝을 검토해봐야 한다. 성능 진단의 가장 첫걸음은 실행한 SQL이 DB에서 어떻게 처리되는 지를 파악하는 것이다. 사람이 이해할 수 있는 언어로 구성된 SQL을 실행하도록 DB에 명령을 내리면 DB는 내부적으로 SQL 파싱 (문법 체크 및 DB에서 실행하기 위한 형태로 변환하는 단계)을 하고 옵티마이징 (데이터를 찾는 .. DATABASE 2022. 5. 3. [MSSQL] 엑셀 데이터 가져오기와 에러 해결하기 MSSQL에서 엑셀 데이터를 가져와보자. (csv는 지원이 안된다고 함) 오늘 가져 올 파일 엑셀 데이터 가져오기 1) 데이터를 가져와 테이블을 생성 할 데이터베이스 우 클릭 2) 태스크(T) > 데이터 가져오기 3) 데이터 원본 > Microsoft Excel 클릭 4) 파일 경로 넣기 5) 파일 경로 넣기 6) 인증 로그인 후 생성할 DB를 입력한다. (나는 새로 만들어 줌) 7) 가져 올 시트를 선택 여기서 [dbo].[사용자테이블$]이라고 되어 있는 것을 클릭 하면 원하는 테이블 명으로 바꿀 수 있다. (만약 빼먹었다면 바꾸는 방법은 아래 있다.) 또한, 매핑 편집 버튼을 클릭하여 가져 올 컬럼과 데이터를 수정할 수 있다. 8) 즉시 실행을 클릭 후 Finish! 하면 끝 9) excel 가져오기.. DATABASE 2022. 4. 22. [MySQL] MySQL 쓰면서 하지 말아야 할 것 17가지 작게 생각하기 – 조만간 규모가 커질거라면 MySQL ecosystem을 봐야된다. – 그리고 캐싱 빡시게 안 하는 메이저 웹사이트는 없다. – develooper.com의 Hansen PT랑 Ilia 튜토리얼 볼 것 – 처음부터 확장 가능하게 아키텍처 잘 쪼개놔야된다. – 복제랑 파티셔닝 어떻게 할지 미리 계획 세워놔라. – 파일 기반 세션 좀 쓰지마 -_- – 그렇다고 너무 쓸데없이 크게 생각하지도 말 것 – 특히 성능하고 확장성 구분 못 하면 난감함 EXPLAIN 안 써보기 – SELECT 앞에 EXPLAIN 이라고 붙이기만 하면 되는 것을 (..) – 실행 계획 확인 – 타입 컬럼에 index 써있는거랑 Extra 컬럼에 index 써있는거랑 “매우 큰” 차이 있음 * 타입에 있으면 Full 인덱.. DATABASE 2022. 4. 19. MSSQL 서버 최대 메모리 설정하기 / 메모리 할당 관련 MSSQL을 사용하고 있고 DB 전용 서버를 구축하고 있는 고객사에서 메모리 과부하 증상으로 원격 점검을 시행했다. 현상 분석 1.DB 서버의 전체 용량은 32G였으며, 점검 당시 약 30G의 메모리를 SQL Server에서 독점하고 있었다. 2.SQLServer 내 최대 메모리 설정은 29000MB로 설정되어 있었다. 메모리가 항상 이렇게 가득 차있어서 점검 요청을 한 것이고, 결론적으로는 '최대로 설정한 메모리만큼 가득 차 있고, 메모리 부족 에러가 발생하지 않는 상태는 '정상'이다!' 하지만 가득 차도 너무 가득 차서(30G/32G), 자칫 하면 메모리 부족 에러로 갈 수 있는 상황이였기 때문에 조치를 취했다. 여기서 드는 의문점 1) 최대 메모리 설정을 29G로 했는데, 왜 이를 넘어섰을까? 최대.. DATABASE 2022. 2. 17. [MYSQL] HeidiSQL 사용하여 간단하게 csv파일 테이블로 import 1. 파일의 형식을 .csv로 맞춰준다. -csv 파일이란 (Comma Separated Values) 쉼표로 구분된 값을 가진다. -excel 파일인 경우, 다른 이름으로 저장 후 csv 파일 형식으로 저장한다. -참고로, 파일 명이 너무 길면 에러가 난다. csv 파일명을 심플하게 넣어줄 테이블 이름으로 맞춰주면 편하다. 2. 정보가 들어갈 테이블을 세팅한다 ( 컬럼 개수와, 데이터 타입을 맞춰준다 ) -예를 들어 집어 넣을 csv 데이터가 아래와 같다면, CREATE TABLE abctest ( id INT(11) NULL, username VARCHAR(255) NULL, ipaddr VARCHAR(255) NULL ); 이렇게 넣어줄 데이터 타입과, 개수를 맞춰 테이블을 생성한다. 3. 도구 >.. DATABASE 2022. 1. 21. [MySQL] 문자로 된 숫자 정렬 String 형태로 되어있는 숫자 (정확히는 문자+숫자컬럼이었다) 컬럼을 정렬할 때, 그냥 ORDER BY 컬럼명 실행 시 문자열 자리수에 맞추어 정렬을 실행하기 때문에 위와 같이 정렬이 되는 현상이 발생한다. 이럴 때는, 해당 문자열을 LENGTH() 함수를 사용하여 길이를 반환 후, 그 길이로 정렬을 수행하고, 그 후에 안의 값으로 정렬을 실행한다. 무슨 말이냐면, 테스트1 부터 테스트9까지 글자수 = 4, 테스트10부터 테스트99까지 글자수 = 5, 테스트100부터 테스트999까지 글자수 = 6 이니까 먼저 글자수인 4,5,6 순으로 정렬하고, 그 각자 글자수 안에서 정렬을 수행한다. EX) username 컬럼이 '테스트{1}' 부터 '테스트{11}' 과 같이 늘어날 때 SELECT * FROM .. DATABASE 2021. 12. 20. 이전 1 2 3 다음