Bài tập: Di chuyển cơ sở dữ liệu PostgreSQL tại cơ sở sang Cơ sở dữ liệu Azure cho PostgreSQL
Trong bài tập này, bạn sẽ di chuyển cơ sở dữ liệu PostgreSQL sang Azure. Bạn sẽ di chuyển cơ sở dữ liệu PostgreSQL hiện có đang chạy trên máy ảo sang Cơ sở dữ liệu Azure cho PostgreSQL.
Bạn làm việc như một nhà phát triển cơ sở dữ liệu cho tổ chức AdventureWorks. AdventureWorks đã bán trực tiếp xe đạp và xe đạp cho người tiêu dùng cuối và các nhà phân phối trong hơn một thập kỷ qua. Hệ thống của họ lưu trữ thông tin trong cơ sở dữ liệu hiện đang chạy bằng PostgreSQL trên máy ảo Azure. Là một phần của bài tập hợp lý hóa phần cứng, AdventureWorks muốn di chuyển cơ sở dữ liệu sang cơ sở dữ liệu được quản lý của Azure. Bạn đã được yêu cầu thực hiện di chuyển này.
Quan trọng
Azure Data Migration Service không được hỗ trợ trong môi trường hộp cát Azure miễn phí. Bạn có thể thực hiện các bước này trong đăng ký cá nhân của riêng mình hoặc chỉ cần làm theo để tìm hiểu cách di chuyển cơ sở dữ liệu của bạn.
Thiết lập môi trường
Chạy các lệnh Azure CLI này trong Cloud Shell để tạo một máy ảo, chạy PostgreSQL, với bản sao của cơ sở dữ liệu adventureworks. Các lệnh cuối cùng sẽ in địa chỉ IP của máy ảo mới.
az account list-locations -o table
az group create \
--name migrate-postgresql \
--location <CHOOSE A LOCATION FROM ABOVE NEAR YOU>
az vm create \
--resource-group migrate-postgresql \
--name postgresqlvm \
--admin-username azureuser \
--admin-password Pa55w.rdDemo \
--image Ubuntu2204 \
--public-ip-address-allocation static \
--public-ip-sku Standard \
--vnet-name postgresqlvnet \
--nsg ""
az vm run-command invoke \
--resource-group migrate-postgresql \
--name postgresqlvm \
--command-id RunShellScript \
--scripts "
# Install PostgreSQL
sudo echo deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main > /etc/apt/sources.list.d/pgdg.list
sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install postgresql-10
# Clone exercise code
sudo git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git /home/azureuser/workshop
# Configure PostgreSQL
sudo service postgresql stop
sudo bash << EOF
printf \"listen_addresses = '*'\nwal_level = logical\nmax_replication_slots = 5\nmax_wal_senders = 10\n\" >> /etc/postgresql/10/main/postgresql.conf
printf \"host all all 0.0.0.0/0 md5\n\" >> /etc/postgresql/10/main/pg_hba.conf
EOF
sudo service postgresql start
# Add the azureuser role and adventure works
sudo bash << EOF
su postgres << EOC
printf \"create role azureuser with login;alter role azureuser createdb;alter role azureuser password 'Pa55w.rd';alter role azureuser superuser;create database adventureworks;grant all privileges on database adventureworks to azureuser; \" | psql
EOC
EOF
PGPASSWORD=Pa55w.rd psql -h localhost -U azureuser adventureworks -E -q -f /home/azureuser/workshop/migration_samples/setup/postgresql/adventureworks/adventureworks.sql
"
az vm open-port \
--resource-group migrate-postgresql \
--name postgresqlvm \
--priority 200 \
--port '22'
az vm open-port \
--resource-group migrate-postgresql \
--name postgresqlvm \
--priority 300 \
--port '5432'
echo Setup Complete
SQLIP="$(az vm list-ip-addresses \
--resource-group migrate-postgresql \
--name postgresqlvm \
--query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
--output tsv)"
echo $SQLIP
Các lệnh này sẽ mất khoảng 5 phút để hoàn tất. Bạn không cần phải chờ, bạn có thể tiếp tục với các bước dưới đây.
Tạo Cơ sở dữ liệu Azure cho máy chủ linh hoạt PostgreSQL
Sử dụng trình duyệt web, mở tab mới và dẫn hướng đến trang cổng thông tin Azure.
Trong thanh tìm kiếm, nhập Cơ sở liệu Azure cho máy chủ linh hoạt PostgreSQL.
Trên trang cơ sở dữ liệu Azure cho máy chủ linh hoạt PostgreSQL, chọn + Tạo.
Trên trang Máy chủ linh hoạt, nhập các chi tiết sau đây, rồi chọn xem lại + tạo:
Thuộc tính Giá trị Nhóm nguồn lực migrate-postgresql Tên máy chủ mạo hiểmnnn, trong đó nnn là hậu tố mà bạn chọn để làm cho tên máy chủ trở nên độc đáo Vị trí Chọn vị trí gần nhất của bạn Phiên bản PostgreSQL 13 Tính toán + lưu trữ Chọn Đặt cấu hìnhmáy chủ , chọn mức giá cơ bản và sau đó chọn OK Tên người dùng quản trị awadmin Mật khẩu Pa55w.rdDemo Xác nhận mật khẩu Pa55w.rdDemo Trên trang Xem + tạo bản, hãy chọn Tạo. Chờ cho dịch vụ được tạo trước khi tiếp tục.
Khi dịch vụ đã được tạo, hãy chọn Đi tới tài nguyên.
Chọn bảo mật kết nối.
Trên trang bảo mật Connection, đặt Cho phép truy nhập vào các dịch vụ Azure thành Có.
Trong danh sách quy tắc tường lửa, hãy thêm quy tắc có tên VMvà đặt START IP ADDRESS và END IP ADDRESS vào địa chỉ IP của máy ảo chạy máy chủ PostgreSQL mà bạn đã tạo trước đó.
Chọn thêm địa chỉ IP máy khách hiện tại, để cho phép máy khách của bạn kết nối với cơ sở dữ liệu.
Lưu, và chờ cập nhật quy tắc tường lửa.
Tại lời nhắc Cloud Shell, hãy chạy lệnh sau đây để tạo cơ sở dữ liệu mới trong Cơ sở dữ liệu Azure của bạn cho dịch vụ PostgreSQL. Thay [nnn] bằng hậu tố mà bạn đã sử dụng khi tạo Cơ sở dữ liệu Azure cho dịch vụ PostgreSQL. Thay [resource group] tên của nhóm tài nguyên bạn đã xác định cho dịch vụ:
az postgres flexible-server create \ --name azureadventureworks \ --resource-group migrate-postgresqlNếu cơ sở dữ liệu được tạo thành công, bạn sẽ thấy thông báo tương tự như sau:
{ "charset": "UTF8", "collation": "English_United States.1252", "name": "azureadventureworks", "resourceGroup": "migrate-postgresql", "type": "Microsoft.DBforPostgreSQL/servers/databases" }
Xuất lược đồ để sử dụng trên cơ sở dữ liệu đích
Bây giờ bạn sẽ kết nối với máy ảo PostgreSQL hiện có của mình bằng Cách sử dụng Cloud Shell để xuất sơ đồ cơ sở dữ liệu của bạn.
Chạy lệnh Azure CLI này để xem địa chỉ IP cho máy ảo hiện có của bạn.
SQLIP="$(az vm list-ip-addresses \ --resource-group migrate-postgresql \ --name postgresqlvm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $SQLIPKết nối với máy chủ cơ sở dữ liệu cũ của bạn bằng SSH. Nhập Pa55w.rdDemo để mật khẩu.
ssh azureuser@$SQLIPChạy lệnh sau đây để kết nối với cơ sở dữ liệu trên máy ảo. Mật khẩu cho người dùng azureuser máy chủ PostgreSQL chạy trên máy ảo là Pa55w.rd:
psql adventureworksCấp quyền sao chép cho azureuser:
ALTER ROLE azureuser REPLICATION;Đóng tiện psql tiện ích bằng \q của bạn.
Tại dấu nhắc bash, hãy chạy lệnh sau để xuất sơ đồ cho cơ sở dữ liệu hoạt động phiêu sang tệp có tên adventureworks_schema.sql
pg_dump -o -d adventureworks -s > adventureworks_schema.sql
Nhập sơ đồ vào cơ sở dữ liệu đích
Chạy lệnh sau đây để kết nối với máy chủ azureadventureworks[nnn]. Thay thế hai phiên bản [nnn] bằng hậu tố cho dịch vụ của bạn. Lưu ý rằng tên người dùng có @adventureworks [nnn] hậu tố. Tại dấu nhắc nhập mật khẩu, Pa55w.rdDemo.
psql -h adventureworks[nnn].postgres.database.azure.com -U awadmin@adventureworks[nnn] -d postgresChạy các lệnh sau để tạo người dùng có tên azureuser và đặt mật khẩu cho người dùng này thành Pa55w.rd. Câu lệnh thứ ba cung cấp cho azureuser các đặc quyền cần thiết để tạo và quản lý các đối tượng trong cơ sở dữ liệu azureadventureworks liệu. Vai trò azure_pg_admin cho phép người dùng azureuser đặt và sử dụng phần mở rộng trong cơ sở dữ liệu.
CREATE ROLE azureuser WITH LOGIN; ALTER ROLE azureuser PASSWORD 'Pa55w.rd'; GRANT ALL PRIVILEGES ON DATABASE azureadventureworks TO azureuser; GRANT azure_pg_admin TO azureuser;Đóng tiện psql tiện ích bằng \q của bạn.
Nhập sơ đồ cho cơ sở dữ liệu adventureworks vào cơ sở dữ liệu azureadventureworks chạy trên Cơ sở dữ liệu Azure cho dịch vụ PostgreSQL của bạn. Bạn đang thực hiện nhập dưới dạng azureuser, vì vậy hãy nhập mật khẩu Pa55w.rd khi được nhắc.
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -E -q -f adventureworks_schema.sqlBạn sẽ thấy một chuỗi thư khi từng mục được tạo. Tập lệnh sẽ hoàn tất mà không có bất kỳ lỗi nào.
Chạy lệnh sau. Tập lệnh findkeys.sql tạo ra một tập lệnh SQL khác có tên dropkeys.sql sẽ loại bỏ tất cả các khóa ngoại khỏi bảng trong cơ sở dữ liệu azureadventureworks liệu. Bạn sẽ chạy script dropkeys.sql ngay:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/findkeys.sql -o dropkeys.sql -tChạy lệnh sau. Kịch bản createkeys.sql tạo ra một kịch bản SQL tên là addkeys.sql sẽ tạo lại tất cả các khóa ngoại. Bạn sẽ chạy tập lệnh addkeys.sql sau khi bạn đã di chuyển cơ sở dữ liệu:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/createkeys.sql -o addkeys.sql -tChạy tập lệnh dropkeys.sql:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f dropkeys.sqlBạn sẽ thấy một chuỗi các alter TABLE hiển thị, khi các khóa ngoại bị bỏ.
Stat tiện ích psql một lần nữa và kết nối với cơ sở dữ azureadventureworks dữ liệu.
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworksChạy truy vấn sau đây để tìm chi tiết của bất kỳ khóa ngoại nào còn lại:
SELECT constraint_type, table_schema, table_name, constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'FOREIGN KEY';Truy vấn này sẽ trả về một tập kết quả trống. Tuy nhiên, nếu bất kỳ khóa ngoại nào vẫn tồn tại, đối với mỗi khóa ngoại, hãy chạy lệnh sau đây:
ALTER TABLE [table_schema].[table_name] DROP CONSTRAINT [constraint_name];Sau khi bạn đã loại bỏ bất kỳ khóa ngoại còn lại nào, hãy thực hiện câu lệnh SQL sau đây để hiển thị yếu tố kích hoạt trong cơ sở dữ liệu:
SELECT trigger_name FROM information_schema.triggers;Truy vấn này cũng phải trả về một tập kết quả trống, cho biết rằng cơ sở dữ liệu không chứa yếu tố kích hoạt. Nếu cơ sở dữ liệu có chứa yếu tố kích hoạt, bạn sẽ phải tắt chúng trước khi di chuyển dữ liệu và bật lại chúng sau đó.
Đóng tiện psql tiện ích bằng \q của bạn.
Thực hiện di chuyển trực tuyến bằng cách sử dụng Dịch vụ Di chuyển Cơ sở dữ liệu
Chuyển về cổng thông tin Azure.
Chọn tất cả dịch vụ, chọn đăng ký, sau đó chọn đăng ký của bạn.
Trên trang đăng ký của bạn, bên dưới đặt, chọn Nhà cung cấp tài nguyên.
Trong hộp Lọc theo, hãy nhập DataMigration, rồi chọn microsoft.DataMigration.
Nếu Microsoft.DataMigration chưa được đăng ký, hãy chọn Đăng kývà đợi Trạng thái thay đổi thành Đăng ký. Có thể cần phải chọn Làm làm thấy thay đổi trạng thái.
Chọn Tạo tài nguyên, trong hộp Tìm kiếm trong Marketplace, nhập dịch vụ di chuyển cơ sở dữ liệu Azure, rồi nhấn Enter.
Trên trang dịch dịch vụ di chuyển cơ sở dữ liệu Azure, hãy chọn tạo.
Trên trang Tạo Dịch vụ Di, nhập các chi tiết sau đây, rồi chọn Tiếp theo: Kết nối mạng>>.
Thuộc tính Giá trị Chọn một nhóm tài nguyên migrate-postgresql Tên dịch vụ adventureworks_migration_service Vị trí Chọn vị trí gần nhất của bạn Chế độ dịch vụ Azure Bậc giá Premium, với 4 vCores Trên kết mạng, chọn postgresqlvnet/posgresqlvmSubnet ảo. Mạng này được tạo như một phần của thiết lập.
Chọn Lại + tạo sau đó chọn Tạo. Hãy chờ trong khi tạo Dịch vụ Di chuyển Cơ sở dữ liệu. Thao tác này sẽ mất vài phút.
Khi dịch vụ đã được tạo, hãy chọn Đi tới tài nguyên.
Chọn Án Di Chuyển.
Trên trang án di chuyển mới, nhập các chi tiết sau đây, rồi chọn Tạo và chạy hoạt động.
Thuộc tính Giá trị Tên dự án adventureworks_migration_project Loại máy chủ nguồn PostgreSQL Cơ sở dữ liệu Đích cho PostgreSQL cơ sở dữ liệu Azure dành cho PostgreSQL Chọn loại hoạt động di chuyển dữ liệu Trực Khi trình hướng dẫn Di chuyển khởi động, trên trang Chọn nguồn, nhập các chi tiết sau đây, rồi chọn Tiếp theo: Chọn Trình hướng dẫn>>.
Thuộc tính Giá trị Tên máy chủ nguồn nn.nn.nn.nn.nn (Địa chỉ IP của máy ảo Azure chạy PostgreSQL) Cổng máy chủ 5432 Cơ sở dữ liệu mạo hiểm Tên người dùng azureuser Mật khẩu Pa55w.rd Chứng chỉ máy chủ tin cậy mục đã Mã hóa kết nối mục đã Trên trang Chọn cơ sở đích, hãy nhập các chi tiết sau đây, rồi chọn Tiếp theo: Chọn cơ sở dữ>>.
Thuộc tính Giá trị Azure PostgreSQL adventureworks[nnn] Cơ sở dữ liệu azureadventureworks Tên người dùng azureuser@adventureworks[nnn] Mật khẩu Pa55w.rd trên trang Chọn cơ sở dữ liệu, chọn cơ sở dữ liệu adventureworks và ánh xạ cơ sở dữ liệu đó azureadventureworks. Bỏ chọn thư dữ liệu dữ liệu. Chọn Tiếp theo: Chọn bảng>>.
Trên trang Chọn bảng, hãy chọn Tiếp theo: Đặt cấu hình cài đặt di>>.
Trên trang Đặt cấu hình cài đặt di chuyển, bung rộng danh sách thả xuống adventureworks, bung rộng danh sách thả xuống Cài đặt di chuyển trực tuyến nâng cao, xác minh rằng Số lần tải tối đa song song được đặt thành 5, rồi chọn Tiếp theo:>>Tóm tắt .
Trên trang Tóm tắt, trong hộp Tên hoạt động , nhập AdventureWorks_Migration_Activity, rồi chọn Bắt Bắt đầu di.
Trên trang AdventureWorks_Migration_Activity, chọn Làm làm lần thứ hai tại 15 khoảng thời gian thứ hai. Bạn sẽ thấy trạng thái của thao tác di chuyển khi quá trình di chuyển diễn ra. Chờ cho đến khi CHI TIẾT DI CHUYỂN đổi thành sẵn sàng chuyển giao.
Chuyển về Cloud Shell.
Chạy lệnh sau đây để tạo lại khóa ngoại trong cơ sở dữ azureadventureworks liệu. Bạn đã tạo tập lệnh addkeys.sql trước đó:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworks -f addkeys.sqlBạn sẽ thấy một chuỗi các câu ALTER TABLE khi thêm khóa ngoại. Bạn có thể thấy lỗi liên quan đến bảng SpecialOfferProduct bạn hiện có thể bỏ qua. Điều này là do ràng buộc UNIQUE không được chuyển một cách chính xác. Trong thế giới thực, bạn nên truy xuất chi tiết ràng buộc này từ cơ sở dữ liệu nguồn bằng truy vấn sau đây:
SELECT constraint_type, table_schema, table_name, constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'UNIQUE';Sau đó, bạn có thể khôi phục theo cách thủ công ràng buộc này trong cơ sở dữ liệu đích trong Cơ sở dữ liệu Azure cho PostgreSQL.
Sẽ không có lỗi nào khác.
Sửa đổi dữ liệu và cắt sang cơ sở dữ liệu mới
Quay lại trang AdventureWorks_Migration_Activity trong cổng thông tin Azure.
Chọn cơ sở dữ mạo hiểm liệu của bạn.
Trên trang adventureworks, hãy xác minh rằng giá trị Tải đầy đủ của đã hoàn tất là 66 và tất cả các giá trị khác là 0.
Chuyển về Cloud Shell.
Chạy lệnh sau đây để kết nối với cơ adventureworks dữ liệu đang chạy bằng PostgreSQL trên máy ảo:
psql adventureworksThực hiện các câu lệnh SQL sau để hiển thị, rồi loại bỏ các đơn hàng 43659, 43660 và 43661 khỏi cơ sở dữ liệu. Lưu ý rằng cơ sở dữ liệu thực hiện xóa xếp tầng trên bảng người bán hàng, thao tác này sẽ tự động xóa các hàng tương ứng khỏi bảng salesorderdetail.
SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661); DELETE FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661);Đóng tiện psql tiện ích bằng \q của bạn.
Quay lại trang tác mạo hiểm trong cổng thông tin Azure, rồi chọn Làm làm. Xác minh rằng đã áp dụng 32 thay đổi.
Chọn Bắt đầu Chuyển giao.
Trên trang chuyển giao hoàn, chọn Xác nhận, rồi chọn Áp dụng. Chờ cho đến khi trạng thái thay đổi thành Hoàn.
Quay lại Cloud Shell.
Chạy lệnh sau đây để kết nối với cơ sở dữ azureadventureworks đang chạy bằng Cơ sở dữ liệu Azure cho dịch vụ PostgreSQL của bạn:
psql -h adventureworks[nnn].postgres.database.azure.com -U azureuser@adventureworks[nnn] -d azureadventureworksMật khẩu là Pa55w.rd.
Thực hiện các câu lệnh SQL sau đây để hiển thị chi tiết đơn hàng và đơn hàng trong cơ sở dữ liệu. Thoát sau trang đầu tiên của mỗi bảng. Mục đích của các truy vấn này là để hiển thị rằng dữ liệu đã được truyền:
SELECT * FROM sales.salesorderheader; SELECT * FROM sales.salesorderdetail;Chạy câu lệnh SQL sau đây để hiển thị các đơn hàng và chi tiết cho các đơn hàng 43659, 43660 và 43661.
SELECT * FROM sales.salesorderheader WHERE salesorderid IN (43659, 43660, 43661); SELECT * FROM sales.salesorderdetail WHERE salesorderid IN (43659, 43660, 43661);Cả hai truy vấn sẽ trả về 0 hàng.
Đóng tiện psql tiện ích bằng \q của bạn.
Dọn dẹp tài nguyên bạn đã tạo
Quan trọng
Nếu bạn đã thực hiện các bước này trong đăng ký cá nhân của riêng mình, bạn có thể xóa từng tài nguyên hoặc xóa nhóm tài nguyên để xóa toàn bộ tập hợp tài nguyên. Tài nguyên còn lại đang chạy có thể làm tốn tiền của bạn.
- Sử dụng Cloud Shell chạy lệnh này để xóa nhóm tài nguyên:
az group delete --name migrate-postgresql