이 가이드에서는 Compute Engine에서 실행되는 SQL Server 2017 Enterprise에서 SQL Server 2017 Enterprise용 Cloud SQL로 데이터를 마이그레이션합니다. 이 가이드에서는 SQL Server 2017에서 데이터를 내보내고, 데이터를 SQL Server 2017용 Cloud SQL로 가져오고, 데이터 가져오기가 성공했는지 검증하는 방법을 보여줍니다.
SQL Server 2008에서 데이터를 마이그레이션하려면 백업 파일을 사용하여 SQL Server 2008과 SQL Server용 Cloud SQL 사이에 데이터 마이그레이션을 참조하세요.
이 가이드는 SQL Server 2017에서 SQL Server용 Cloud SQL로 데이터를 마이그레이션하려는 시스템 관리자, 개발자, 엔지니어, 데이터베이스 관리자, DevOps 엔지니어에게 유용합니다.
이 가이드에서는 사용자가 다음 항목에 익숙하다고 가정합니다.
- Microsoft SQL Server
- Microsoft PowerShell
- Compute Engine
- Cloud Storage
- Cloud SQL
목표
- Compute Engine에서 샘플 데이터베이스를 호스팅하기 위한 SQL Server 가상 머신(VM) 인스턴스를 만듭니다.
- SQL Server용 Cloud SQL 인스턴스를 만듭니다.
- Cloud Storage 버킷을 만듭니다.
- 샘플 데이터베이스를 백업합니다.
- SQL Server용 Cloud SQL로 데이터베이스를 가져옵니다.
- 가져온 데이터를 검증합니다.
비용
이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Compute Engine
- Cloud SQL
- Cloud Storage
- SQL Server (premium with Compute Engine)
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Storage, Cloud SQL Admin, and Compute Engine APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
샘플 데이터베이스 스크립트 만들기
이 섹션에서는 사전 로드된 샘플 데이터베이스를 채우기 위한 스크립트를 만듭니다. 그런 후 Compute Engine에 이 데이터베이스를 사용하는 SQL Server 2017 인스턴스를 만듭니다.
Cloud Shell에서 시작 스크립트로 배포할 PowerShell 스크립트를 만듭니다.
cat << 'EOF' > startup.ps1 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $dataseturl = "https://opendata.maryland.gov/api/views/ryxx-aeaf/rows.csv?accessType=DOWNLOAD" Invoke-WebRequest -Uri $dataseturl -OutFile c:\dataset.csv Invoke-Sqlcmd -Query "CREATE DATABASE testdb;" Invoke-Sqlcmd -Query "CREATE TABLE testdb.dbo.MarylandZipCodes ( zipcode int NOT NULL PRIMARY KEY, city varchar(255), county varchar(255))" Invoke-Sqlcmd -Query "BULK INSERT testdb.dbo.MarylandZipCodes FROM 'c:\dataset.csv' WITH (DATAFILETYPE='char',FIELDTERMINATOR=',' ,ROWTERMINATOR = '0x0a', FIRSTROW=2);" EOF
이 시작 스크립트는
MarylandZipCodes
테이블이 포함된testdb
라는 로컬 데이터베이스를 만듭니다. 그런 다음 스크립트에서 메릴랜드 공개 우편번호 레지스트리를 다운로드하고 레지스트리를 테이블로 가져옵니다.Windows Server 2016용 SQL Server 2017 Enterprise 인스턴스를 만듭니다.
gcloud compute instances create sql-server --machine-type n1-highmem-4 \ --boot-disk-size 50GB \ --image-project windows-sql-cloud --image-family sql-ent-2017-win-2016 \ --zone us-central1-f \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --metadata-from-file windows-startup-script-ps1=startup.ps1
이 가이드에서는
us-central1-f
영역에 부팅 디스크 크기가 50GB인 인스턴스를 만듭니다. 영역에 대한 자세한 내용은 Cloud 위치를 참조하세요.--metadata-from-file
플래그는 PowerShell 스크립트를 인스턴스의 시작 스크립트로 설정합니다.
Cloud SQL 인스턴스 및 Cloud Storage 버킷 만들기
Cloud Shell에서 나중에 데이터베이스를 마이그레이션할 SQL Server 2017 Enterprise용 Cloud SQL 인스턴스를 만듭니다.
gcloud beta sql instances create target \ --database-version=SQLSERVER_2017_ENTERPRISE \ --cpu=2 \ --memory=5GB \ --root-password=sqlserver12@ \ --zone=us-central1-f
인스턴스를 만드는 데 몇 분 정도 걸릴 수 있습니다. 기본 루트 사용자 이름은
sqlserver
이고 기본 비밀번호는sqlserver12@
입니다. 이 가이드에서는us-central1-f
영역에 인스턴스를 만듭니다. 영역에 대한 자세한 내용은 Cloud 위치를 참조하세요.데이터를 Cloud SQL로 가져오기 전에 백업 파일을 저장할 Cloud Storage 버킷을 만듭니다.
gcloud storage buckets create "gs://${DEVSHELL_PROJECT_ID}-sql-backups" --location=US
샘플 데이터베이스 백업
이 섹션에서는 SQL Server 가상 머신(VM)에 연결하고, 데이터베이스 백업을 만들고, 백업 데이터베이스를 Cloud Storage에 업로드합니다.
Cloud Shell에서 SQL Server VM 인스턴스에 대해 비밀번호를 재설정합니다.
gcloud compute reset-windows-password sql-server --zone=us-central1-f
사용자의 새 비밀번호를 기록해 둡니다.
원격 데스크톱 프로토콜(RDP) 클라이언트를 설치합니다. 자세한 내용은 Microsoft 원격 데스크톱 클라이언트를 참조하세요.
Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.
Google Cloud 콘솔의 Compute Engine 섹션에서 RDP 드롭다운을 클릭하고 RDP 파일 다운로드 옵션을 선택하여 SQL Server VM 인스턴스용 RDP 파일을 다운로드합니다.
이 파일을 사용하여 RDP 클라이언트를 사용하는 인스턴스에 연결합니다. 자세한 내용은 Microsoft 원격 데스크톱 클라이언트를 참조하세요.
브라우저에서 모든 창을 최소화하고 PowerShell 명령줄 도구를 시작합니다.
백업 폴더를 만듭니다.
mkdir c:\backup
브라우저에서 백업 폴더에 데이터베이스 백업을 만듭니다.
osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"
인스턴스의 셸에서 백업 파일을 Cloud Storage 버킷에 복사합니다.
$PROJECT_ID=(gcloud config get-value core/project) gcloud storage cp c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups --no-clobber
Cloud SQL로 백업 파일 가져오기
Cloud Shell에서 Cloud SQL 인스턴스와 연결된 서비스 계정을 검색하고 이를 변수에 저장합니다.
SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \ --format='value(serviceAccountEmailAddress)') echo $SVC_EMAIL_ADDRESS
Cloud SQL 인스턴스를 만들 때 Google Cloud에서 서비스 계정이 생성됩니다. 서비스 계정을 사용하여 Cloud SQL 인스턴스에 필요한 리소스에 액세스하기 위한 권한을 제공합니다.
서비스 계정에 Cloud Storage 버킷에 쓸 수 있는 권한을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups \ --member=serviceAccount:${SVC_EMAIL_ADDRESS} \ --role=roles/storage.legacyBucketWriter
서비스 계정에 Cloud Storage 버킷의 파일을 읽을 수 있는 권한을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak \ --member=serviceAccount:${SVC_EMAIL_ADDRESS} \ --role=roles/storage.legacyObjectReader
백업 파일을 Cloud SQL 데이터베이스로 가져옵니다.
gcloud beta sql import bak target \ gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak --database testdb
데이터 가져오기 검증
이 섹션에서는 샘플 데이터를 성공적으로 가져왔는지 확인합니다.
Cloud Shell에서 SQL Server 툴킷을 설치합니다.
sudo apt-get install -y mssql-tools
라이선스 조건에 동의하면 메시지가 표시되었을 때
yes
를 입력합니다.Cloud SQL 인스턴스에 안전하게 액세스하려면 Cloud SQL 프록시를 다운로드합니다.
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
Cloud SQL 프록시를 시작합니다.
CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)') ./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
Cloud SQL 테이블에서 행 수를 읽습니다.
/opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "select count(*) from testdb.dbo.MarylandZipCodes"
메시지가 표시되면
sqlserver12@
비밀번호를 입력합니다. 출력에서 결과가619
인지 확인합니다.
삭제
비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 Google Cloud 프로젝트를 삭제하는 것입니다.프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
다음 단계
- SQL Server용 Cloud SQL의 고객 관리 암호화 키(CMEK) 알아보기
- SQL Server용 Cloud SQL의 비공개 IP 연결 구성에 대해 알아보기
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항 살펴보기. Cloud 아키텍처 센터를 살펴보세요.