MySQL Workbench에서 delete나 update 시 where 조건문을 사용하지 않을 경우, 아래와 같은 에러 메시지가 나타나며 원하는 삭제나 수정 작업을 수행할 수 없다. where 조건없이 삭제/수정에 대한 사용자 실수를 예방하는 차원으로 MySQL Workbench 에 옵션으로 적용이 되어 있어서 그런 것이다.

실제 전체 데이터를 대상으로 삭제/수정 작업을 해야할 경우에 옵션 설정을 변경한 후 작업할 수 있다.

 

옵션은 Edit- Preferences - SQL editor 의 [ Safe Updates(rejects UPDATEs and DELETEs with no retrictions) ] 항목이다.

이 옵션을 disable 하면 조건절없이 수정/삭제 작업을 MySQL Workbench에서 수행할 수 있다.

 

0 21 17:36:18 delete from box Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec

 

 

옵션 설정을 변경하지 않고 작업할 경우에는 가상의 참인 조건절을 추가하면 된다.

where 1 = 1

 

 

 

 

 

Stored Programs 정의

각 저장 프로그램에는 SQL 문으로 구성된 문장이 포함되어 있습니다. 이 명령문은 세미콜론(;) 문자로 구분된 여러 명령문으로 구성된 복합 명령문입니다. 

예를 들어 다음 저장 프로시저에는 BEGIN ... END 블록에 select 문장이 있습니다.

CREATE PROCEDURE user_count()
BEGIN
  SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
END;

 

mysql 클라이언트 프로그램을 사용하여 위의 세미콜론 문자가 포함된 저장 프로그램을 작성하면 아래와 같이 에러가 발생합니다. 기본적으로 mysql은 세미콜론을 명령문 구분 기호로 인식하기 때문입니다. 

그러므로 mysql이 stored procedure 에서 세미콜론(;)을 인식하도록 임시로 구분 기호를 정의해야 합니다.

mysql> CREATE PROCEDURE user_count()
    -> BEGIN
    ->   SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '' at line 3

 

mysql 구분 기호를 재정의하려면 delimiter 명령을 사용합니다. 다음 예에서는 user_count() 프로시저를 정의하기 위해  delimiter를 (//) 로 사용했습니다. 이를 통해 프로시저 본문에 사용된 구분 기호*;)를 자체에서 해석하지 않고 서버로 전달하여 stored procedure를 생성할 수 있습니다. 

마지막 줄의 delimiter ; 는 다시 임시로 변경한 delimiter를 세미콜론(;)으로 원복하는 명령어입니다.

 

mysql> delimiter //

mysql> CREATE PROCEDURE user_count()
    -> BEGIN
    ->   SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

 

PROCEDURE, FUNCTION, TRIGGER에서 세미콜론을 구분하기 위해 delimeter를 사용합니다.

 

 

 

'MySQL' 카테고리의 다른 글

MySQL Lock 발생  (0) 2023.09.22
MySQL - stored procedure 성능  (0) 2023.06.29
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
mysql /*! */ 의미  (0) 2022.03.02

블록 스토리지 대 오브젝트 스토리지

 

예제를 통해 블록 스토리지와 오브젝트 스토리지의 차이점을 이해해 봅시다. 크기가 100MB인 Excel 파일이 있다고 가정합니다.

블록 스토리지

100MB 파일이 Block Storage에 어떻게 저장됩니까?
블록 스토리지의 경우 100MB 파일을 10MB씩 10개의 블록으로 나누어 메모리에 저장한다. 여기서 메모리란 하드 디스크를 의미합니다. 각 데이터 블록에는 고유한 식별자가 부여되어 스토리지 시스템이 가장 편리한 위치에 더 작은 데이터 조각을 배치할 수 있습니다.

100MB 파일에 어떻게 액세스할 수 있습니까?

각 블록 스토리지는 개별 하드 디스크로 취급될 수 있으므로 운영 체제를 통해 데이터에 액세스할 수 있습니다. 이 운영 체제는 로컬에 있거나 클라우드 스토리지의 경우 네트워크에 연결되어 있을 수 있습니다.

100MB 파일에서 업데이트는 어떻게 수행됩니까?

따라서 100MB 엑셀 시트의 몇 개의 셀을 변경하려는 경우 메모리에서 변경한 블록만 업데이트됩니다. 업데이트는 10개 블록 모두에서 수행되지 않습니다.

블록 스토리지 사용의 이점:

  1. 읽기/쓰기 작업이 더 빠름
  2. 스토리지 요구 사항이 증가함에 따라 조직은 성능 저하 없이 블록 스토리지 볼륨을 추가할 수 있지만 내구성은 저하될 수 있습니다.
  3. 파일 구조를 따르므로 인간 친화적입니다.

블록 스토리지 사용의 단점

  1. 블록 스토리지는 매우 제한된 메타데이터를 사용합니다. 이는 애플리케이션이 의미 있는 메타데이터로 스토리지 위치를 식별할 수 없고 필요한 데이터를 찾기 위해 많은 수의 블록을 스캔해야 할 수 있기 때문에 검색 및 검색과 같은 메타데이터 중요 작업에서 애플리케이션 성능에 영향을 미칠 수 있습니다.
  2. 스토리지와 애플리케이션 사이의 거리가 멀어질수록 대기 시간이 길어집니다.
  3. 블록 스토리지는 비용이 많이 듭니다. 값비싼 하드웨어와 고도로 훈련된 유지 보수 인력이 필요하기 때문입니다.

사용 사례 및 클라우드 예시

  1. 블록 스토리지는 고도로 구조화된 데이터에 유용합니다.
  2. 데이터베이스 및 트랜잭션 데이터에 유용합니다.
  3. AWS Elastic Block Storage(EBS)는 EC2 인스턴스에 연결할 수 있는 하드 디스크와 같은 원시 스토리지를 제공합니다.

객체 스토리지

100GB 파일은 Object Storage에 어떻게 저장됩니까?
오브젝트 스토리지에서 데이터는 오브젝트라고 하는 개별 단위로 분할되어 폴더에 파일로 보관되거나 서버에 블록으로 보관되는 대신 단일 리포지토리에 보관됩니다.
오브젝트 스토리지의 경우 100MB 파일을 청크로 나누지 않습니다. 대신 전체 데이터 덩어리가 단일 개체로 저장됩니다. 각 개체는 세 가지로 구성됩니다. 데이터(100MB 파일), 확장 가능한 양의 메타데이터 및 전역적으로 고유한 식별자.

100MB 파일에 어떻게 액세스할 수 있습니까?

각 개체에는 전역적으로 고유한 식별자가 있으며 대부분의 클라이언트에서 모든 언어로 사용되는 간단한 HTTP API(응용 프로그래밍 인터페이스)가 필요합니다.

100MB 파일에서 업데이트는 어떻게 수행됩니까?

그래서 100MB 엑셀 시트의 몇 개의 셀을 변경하고 싶다면 개체 저장소에서 전체 파일이 업데이트됩니다. 이로 인해 업데이트 작업이 매우 무거워집니다.

오브젝트 스토리지 사용의 이점:

  1. 개체 기반 스토리지는 파일이 여러 조각으로 나뉘어 하드웨어 간에 분산되는 평면 구조입니다. 오브젝트 스토리지에서 데이터는 오브젝트라고 하는 개별 단위로 분할되어 폴더에 파일로 보관되거나 서버에 블록으로 보관되는 대신 단일 리포지토리에 보관됩니다.
  2. 읽기 작업이 훨씬 빠릅니다.
  3. 노드를 추가하는 것만으로 개체 기반 스토리지 아키텍처를 확장하고 관리할 수 있습니다.

오브젝트 스토리지 사용의 단점

1.객체 스토리지를 사용하여 트랜잭션 및 데이터베이스 데이터를 저장할 수 없습니다.
2. 데이터 일부를 변경할 수 없으며 전체 개체를 읽고 써야 합니다.

사용 사례 및 클라우드 예시

  1. 구조화되지 않은 데이터를 저장하는 데 사용됩니다. 예: 이미지, 동영상
  2. AWS Simple Storage Service(S3)는 읽기 작업이 빈번한 파일을 저장하는 데 광범위하게 사용됩니다.

 

MySQL Workbench 를 활용한 방법을 설명합니다.

 

환경

- SQLServer : Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)

- MySQL : 8.0.32

- MySQL Workbench : 윈도우 10에 설치

 

ODBC 설정

1. SQLServer에 접속할 수 있는 ODBC 설정

MySQL Workbench 가 설치되어 있는 윈도우 환경에서 SQLServer에 접속하는 ODBC를 설정합니다.

제어판 - 관리도구 - ODBC 데이터 원본(64비트)

 

2. MySQL Workbench 에서 migration 수행

- [Database] - [Migration Wizard...] 클릭 후 첫 화면에서 [Start Migration] 버튼을 클릭한다.

아래와 같은 "Source Selection" 화면이 나오면 아래 내용을 선택하거나 입력한다.

- Database System : Microsoft SQ Server 를 선택

- Connection Method : ODBC Data Source 를 선택

- DSN에서는 각자가 만든 SQLServer ODBC를 선택(본 문서의 예시에서는 sqlserver-odbc 선택)

- Username : 소스 DB의 user명 입력

- Database : 데이터 마이그레이션을 할 Database 입력

[Test Connection] 버튼을 클릭하여 정상적으로 접속되는지 확인한 후 [Next] 버튼을 클릭한다.

 

아래와 같은 "Target Selection" 화면이 나오면 아래 내용을 선택하거나 입력한다.

- Connection Method : Standard(TCP/IP)를 선택

- Hostname : 타겟 DB의 IP나 호스트명을 입력

- Port : 타겟DB 접속 Port

- Username : 타겟 DB의 접속 user명 입력

- Database Schema : 데이터 마이그레이션을 할 Database 입력 --> 수정

[Test Connection] 버튼을 클릭하여 정상적으로 접속되는지 확인한 후 [Next] 버튼을 클릭한다.

 

위의 입력 내용을 바탕으로 소스DB와 타겟DB 접속을 확인하고 소스DB로부터 스키마를 조회한다. 아래 화면처럼 3개의 체크상태가 정상이면 [Next] 버튼을 클릭한다.

 

Schemas Selection

아래 화면이 나타나면 마이그레이션할 데이터베이스를 선택한다. 아래 화면은  "migratedb"를 선택한 예제이다.

스키마 이름 매핑 방법(Schema Name Mapping Method)은 Microsoft SQL Server에서 마이그레이션하기 위한 아래의 옵션을 제공한다.

  • Keep schemas as they are: Catalog.Schema.Table -> Schema.Table: 스키마당 하나씩 여러 데이터베이스가 생성
  • Only one schema: Catalog.Schema.Table -> Catalog.Table: 각 스키마를 단일 데이터베이스로 병합(다음 그림 참조).
  • Only one schema, keep current schema names as a prefix: Catalog.Schema.Table -> Catalog.Schema_table: 스키마 이름을 접두사로 유지

 

enumerate

  • 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능을 하는 파이썬 내장함수
  • 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴

enumerate 예제

names = ['철수', '영희', '영수']
for i, name in enumerate(names):
    print('{}번: {}'.format(i + 1, name))
결과값
1번: 철수
2번: 영희
3번: 영수

 

'Python' 카테고리의 다른 글

파이썬 소켓 프로그램 만들기  (0) 2022.04.20
Python - Virtual Environments and Packages  (0) 2022.01.06
Python - 표준라이브러리 II  (0) 2022.01.06
Python - 오류 및 예외  (0) 2022.01.06
Python - 입출력  (0) 2022.01.06

스프링부트 개발환경 구성하기

설치환경 : windows 10

 

1. JDK 설치

2. STS(Spring Tool Suite) 설치 : https://spring.io/tools 접속하여 Spring Tools 4 for Eclipse 파일을 다운로드

3. 

 

 

 

SQLServer 에 윈도우 인증이 아닌 SQL Server 인증모드로 접속 시 아래와 같은 오류가 발생할 경우에 조치 방법입니다.

 

SSMS(SQLServer Management Studio) 실행 후 좌측의 인스턴스를 선택 후 오른쪽 마우스를 클릭하여 "속성"을 클릭합니다. 속성화면에서 좌측의 [보안] 메뉴 클릭 후 "서버인증" 항목에서 "SQL Server  및 Windows 인증 모드(S)"를 선택합니다.

 

SQLServer를 재기동 한 후 SQLServer 인증모드로 DB 사용자로 DB에 접속할 수 있습니다.

 

 

ODBC 설정할 때 사용자 접속 오류  발생 시

기타 ODBC 설정 시 사용자 접속 오류가 발생할 경우, SQL Server 구성 관리자에서 TCP/IP 를 사용으로 변경해 준다.

"Sql Server Configuration Manager"를 연 후 좌측의 SQL Server 네트워크 구성 하위에 MSSQLSERVER에 대한 프로토콜을 선택한다. 선책 후 우측의 TCP/IP 항목을 더블 클릭한다.

TCP/IP 속성 창이 나타나면 "사용"을 "예"로 선택한다.

IP 주소 탭에서 접속하고자 하는 IP의 "사용"을 "예"로 선택해 준다. 본 문서에서는 127.0.0.1 에 대한 접속을 허용하도록 설정한 예이다.

설정을 변경한였으면 SQLServer를 재기동한다.

재기동 후 ODBC 설정을 하면 정상적으로 접속이 성공한다.

AWS serverless 데이터베이스 생성

AWS serverless 데이터베이스를 생성합니다.

본 문서에서는 serverless aurora DB 생성에 대해 설명합니다.

 

AWS 콘솔에 로그인한 후에 AWS 검색창에 rds를 입력하여 서비스를 검색합니다.

검색된 화면에서 RDS를 클릭합니다.

 

Amazon RDS화면에서 좌측의 데이터베이스를 클릭한 후 우측화면의 [데이터베이스 생성]을 클릭합니다.

아래와 같이 데이터베이스 생성화면이 화면에 나타납니다.

본 문서에서는 Aurora(MySQL Compatible) DB를 선택해서 생성하는 것을 설명합니다.

 

엔진 옵션

엔진 유형에서 Aurora(MySQL Compatible)을 선택합니다.

엔진 버전에서 "Serverless v2를 지원하는 버전 표시"를 클릭한 후 사용 가능한 버전에서

"Aurora MySQL 3.03.0(compatible with MySQL 8.0.26)을 선택합니다.

Serverless v2를 지원하는 다른 버전을 선택해도 됩니다.

 

템플릿 항목에서는 프로덕션 또는 개발/테스트를 선택합니다.

이 선택은 다른 선택사항은 동일하고 "가용성 및 내구성" 항목에 복제본을 생성 여부에 기본 선택사항이 달라집니다.

옵션선택에 크게 영향은 없으며, 관례적으로 개발/테스트용으로 생성할 경우에는 "개발/태스트"를 선택하고,

운영용으로 생성할 경우에는 "프로덕션"을 선택합니다.

 

설정

  • DB 클러스터 식별자 : 각자가 사용하고자 하는 클러스터명을 입력
  • 마스터 사용자 이름 : DB 마스터 사용자
  • 마스터 암호 : DB 마스터 사용자의 암호

 

인스턴스 구성

  • DB 인스턴스 클래스에서 서버리스를 선택합니다
  • 용량 범위 : 최소 ACU와 최대 ACU를 입력합니다.

*** 1 ACU는 2GB의 메모리와 이에 해당하는 CPU, 네트워크 등의 자원을 나타내는 단위입니다.

가용성 및 내구성

운영 환경인 경우 Muti-zone에 복제본/리더 노드 생성을 선택하고,

개발/테스트인 경우 Aurora 복제본 생성하지 않음을 선택합니다.

물론 각자가 원하는 방식으로 구성할 수 있습니다.

연결

  • 컴퓨팅 리소스 : EC2 컴퓨팅 리소스에 연결 안 함을 선택
  • 네트워트 유형  : IPv2를 선택
  • Virtual Private Cloud(VPC) : Aurora DB를 구성할 VPC를 선택
  • DB 서브넷 그룹 : VPC 내에 만들어진 DB 서브넷 그룹 선택
  • 퍼블릭 액세스 : "아니오"를 선택. 외부에서 직접 접근이 필요한 경우 "예"를 선택할 수 있으나, 보안상 위험
  • VPC 보안 그룹 : DB접근 제어를 위해 각자가 생성한 보안 그룹 선택하거나 신규 생성
  • 추가구성 : 기본 port가 3306인데 보안상 다른 포트를 설정. 

데이터베이스 인증

  • 데이터베이스 인증 옵션 : 암호 인증 선택

참고 : 암호 및 IAM 데이터베이스 인증을 선택하는 경우 https://hoing.io/archives/1238 참조해서 설정

 

모니터링

  • 성능 인사이트 켜기 : 성능 개선 도우미는 데이터베이스 성능을 표시하여 분석하는데 도움이 되므로 성능 모니터링이 필요한 경우 선택
  • 보존 기간 : 7일(무료), 24개월까지 보관 가능하나 비용 발생
  • AWS KMS키 : aws managed key나 customer manager key 선택
  • Enhanced 모니터링 활성화 : DB 인스턴스의 운영 체제를 실시간으로 모니터링할 수 있습니다. 다른 프로세스 또는 스레드에서 CPU를 사용하는 방법을 확인하려면 Enhanced Monitoring 지표가 유용합니다.

추가구성

  • 초기 데이터베이스 이름 : 초기 데이터베이스 이름을 입력하면 DB 클러스터 생성 시 데이터베이스를 생성
  • DB 클러스터 파라미터 그룹 : DB 클러스터에 적용될 파라미터 그룹 선택
  • DB 파라미터 그룹 : DB 인스턴스에 적용될 파라미터 그룹 선택
  • 옵션그룹 : 별도로 생성한 옵션그룹이 있을 경우 선택. 그렇지 않으면 default 옵션 그룹 사용
  • 장애 조치 우선 순위 : 장애 조치 우선 순위는 기본 인스턴스(마스터)의 장애 시 다수의 읽기 복제본 중에서 기본 인스턴스로 승격 시킬 인스턴스에 대한 우선 순위를 지정하는 옵션 입니다. 우선 순위가 가장 높은 복제본(티어 0으로 시작)을 새로운 기본 인스턴스로 승격시킵니다. 
  • 백업 보존기간 : 1일에서 35일까지 보관할 수 있음. 각자의 백업정책에 따라 설정
  • 암호화 : 데이터파일에 대한 암호화 설정
  • AWS KMS키 : aws managed key나 customer manager key 선택
  • 역추적 : 역추적을 활성화하면 DB를 특정 시점으로 되돌릴 수 있습니다.

 

로그 내보내기

  • CloudWatch logs로 게시할 로그 유형 선택 : 원하는 로그를 선택

유지관리

  • 마이너버전 자동 업그레이드 사용을 선택하면 AWS 가 마이너버전을 자동으로 업그레이드 함. 주의할 점은 다운타임이 발생한다는 것입니다. 운영DB인 경우에는 자동 업그레이드를 선택하지 않고 계획된 작업일정으로 업그레이드를 하도록 합니다.
  • 유지관리 기간 : Amazon RDS가 보류 중인 수정(예: DB 인스턴스 클래스 변경) 또는 패치를 DB 인스턴스에 적용할 기간을 선택합니다. 이러한 유지 관리는 선택한 기간 내에 시작하고 완료합니다. 기간을 선택하지 않으면 Amazon RDS가 임의로 기간을 할당합니다.

삭제방지

  • 데이터베이스가 실수로 삭제되는 것을 방지합니다. 이 선택을 하면 데이터베이스를 삭제할 수 없습니다. 삭제하려면 이 옵션을 변경하고 삭제해야 합니다.

위의 사항들을 입력 또는 선택완료후 [데이터베이스 생성] 버튼을 클릭합니다.

 

아래와 같은 화면이 나오는데

ElasticCache cluster와 RDS Proxy를 생성할지에 대한 선택 화면입니다. 

필요시 생성할 수 있습니다. 본 문서에서는 추가 생성하지 않습니다. 추후 시간이 가용하면 설명 추가 예정

- ElaticCache cluster

- RDS Proxy

 

데이터베이스가 생성된 화면입니다. 역할을 보면 "리전 클러스터"와 "라이터 인스턴스"가 생성된 걸 볼 수 있습니다.

 

AWS serverless 데이터베이스 연결

AWS serverless 데이터베이스 연결할 수 있는 여러 방법에 대해 설명합니다.

 

1) 쿼리 편집기 : AWS 콘솔에서Data API를 통해  DB와 연결할 수 있는 방법이나, 현재(2023. 04. 18) 서울 리전에서는 제공하고 있지 않음. 쿼리 편집기를 클릭하면 아래와 같은 메시지가 발생하고 서울 리전에서 Aurora 서버리스 데이터베이스 생성 시 Data API 활성화 옵션이 보이지 않음.

 

2) VPC 내의 Amazon Aurora DB 클러스터에 액세스 –VPC를 통해 Amazon AuroraDB 클러스터에 액세스할 수 있습니다. 이렇게 하려면 특정 Aurora DB 클러스터에 대한 액세스를 허용하도록 VPC의 보안 그룹에서 인바운드 규칙을 편집합니다. 

 

3) VPC 외부의 Amazon Aurora DB 클러스터에 액세스 – 외부에서 Amazon Aurora DB 클러스터에 액세스하려면 Amazon Aurora DB 클러스터의 퍼블릭 엔드포인트 주소를 사용하여 접속할 수 있습니다. 보안상의 이유로 외부에서 DB로의 액세스는 일반적으로 허용되지 않습니다.

 

AWS serverless 데이터베이스 장애조치(FailOver)

 

 

 

 

 

+ Recent posts