PostgreSQL

Cách sao chép cơ sở dữ liệu cùng server & khác server

Cách sao chép cơ sở dữ liệu PostgreSQL cùng server & khác server
Được viết bởi Minh Hoàng

Series chia sẻ về PostgreSQL – Cơ sở dữ liệu mã nguồn mở tiên tiến nhất thế giới.

Bài viết này sẽ mô tả cách sao chép cơ sở dữ liệu PostgreSQL trên cùng một máy chủ (server) hoặc từ máy chủ này sang máy chủ khác.

1. Sao chép cơ sở dữ liệu PostgreSQL trong cùng một máy chủ

1. Sao chép cơ sở dữ liệu PostgreSQL trong cùng một máy chủ

Đôi khi, bạn muốn sao chép cơ sở dữ liệu PostgreSQL trong server cho mục đích thử nghiệm, kiểm tra truy vấn,… PostgreSQL có thể dễ dàng thực hiện điều này thông qua câu lệnh CREATE DATABASE như sau:

CREATE DATABASE tên_db_mới WITH TEMPLATE tên_db_nguồn;

Ví dụ, sao chép cơ sở dữ liệu sampledb sau:

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 1

thành cơ sở dữ liệu sampledb_test thì chúng ta sẽ sử dụng truy vấn:

CREATE DATABASE sampledb_test WITH TEMPLATE sampledb;

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 2

※Tùy thuộc vào kích thước của cơ sở dữ liệu nguồn, có thể mất một lúc để hoàn thành việc sao chép.

Xem danh sách cơ sở dữ liệu thì thấy sampledb_test đã được tạo với cấu trúc giống database nguồn sampledb

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 3

Trường hợp copy database bị lỗi do database nguồn đang được kết nối bởi user khác

Khi thực thi lệnh copy database hiện thông báo lỗi do database nguồn đang được kết nối bởi user khác:

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 4

thì trước khi copy database chúng ta cần disconnect database nguồn:

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 5

2. Sao chép cơ sở dữ liệu PostgreSQL từ máy chủ này sang máy chủ khác

2. Sao chép cơ sở dữ liệu PostgreSQL từ máy chủ này sang máy chủ khác

Có một số cách để sao chép cơ sở dữ liệu giữa các máy chủ cơ sở dữ liệu PostgreSQL. Nếu kích thước của cơ sở dữ liệu nguồn lớn và kết nối giữa các máy chủ cơ sở dữ liệu chậm, bạn có thể kết xuất (dump) cơ sở dữ liệu nguồn vào một file .sql, sao chép file này vào máy chủ từ xa (remote server) và khôi phục nó.

Sau đây là 3 bước thực hiện:

#1/3:

Đầu tiên, kết xuất (dump) cơ sở dữ liệu nguồn vào một file .sql bằng lệnh có định dạng:

pg_dump -U "username" -h "IP / server name" -p "port_number" -d "database name" -W -f "path file sql"
Khi thực thi câu lệnh trên sẽ export cơ sở dữ liệu ra file sql bao gồm cả schema và data.

Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định hoặc không.

  • Trường hợp chỉ muốn export schema thì thay tham số -W thành -s
  • Trường hợp chỉ muốn export data thì thay tham số -W thành -a

Chúng ta sẽ thực hiện export cả schema và data của database sampledata ra file sql ở đường dẫn C:\Temp\sampledata.sql như sau:

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 6

#2/3:

Tiếp theo, tạo một cơ sở dữ liệu mới phía remote server, chẳng hạn là sampledata để copy dữ liệu vào:

CREATE DATABASE sampledata;
#3/3:

Ở bước cuối cùng này, chúng ta sẽ import file sql có được ở bước 1 vào cơ sở dữ liệu sampledata phía remote server đã tạo ở bước 2.

Bằng lệnh thực thi (★) có định dạng sau:

psql -U "username" -h "IP / server name" -p "port_number" -d "database name" -W -f "path file sql"

※Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định hoặc không.

Có 2 cách import file sql vào cơ sở dữ liệu:

① Thực hiện tại máy remote server import dữ liệu của file sql vào database:
Copy file sql ở bước 1 vào máy remote server rồi thực hiện lệnh (★)

Phần -h “IP / server name” -p “port_number” là option, có thể chỉ định -h localhost -p 5432 hoặc không cần cũng được.

Ví dụ, thực hiện import file sql vào database sampledata ở đường dẫn C:\Temp\sampledata.sql tại máy remote server như sau:

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 7

② Thực hiện tại máy local import dữ liệu của file sql lên database của máy remote server:

Trường hợp thực hiện lệnh (★) tại máy local thì PHẢI chỉ định -h “IP / server name”, -p “port_number” nếu là port mặc định của PostgreSQL là 5432 thì không cần chỉ định cũng được.

Ví dụ, IP của máy remote server là 10.256.12.36 thì chúng ta có -h 10.256.12.36

Cách sao chép cơ sở dữ liệu cùng server & khác server - Hình 8

Trường hợp từ máy local không thể kết nối đến máy remote server để copy database thì bạn xem thêm bài viết cách cấu hình PostgreSQL cho phía remote server.
Cách cài đặt file postgresql.conf
Cách cài đặt file pg_hba.conf

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

1 bình luận

Translate »