Cài đặt, cấu hình, sao lưu và khôi phục PostgreSQL trên ubuntu 20.04 LTS

PostgreSQL là một Hệ Quản Trị Cơ Sở Dữ Liệu Quan Hệ – Hướng Đối Tượng (ORDBMS) mã nguồn mở, hỗ trợ đầy đủ các tiêu chuẩn SQL hiện đại như khóa ngoại (foreign keys), giao dịch (transactions) và tính toàn vẹn dữ liệu. Với khả năng mở rộng mạnh mẽ, bảo mật cao và hoàn toàn miễn phí, PostgreSQL hiện là lựa chọn hàng đầu cho nhiều doanh nghiệp và tập đoàn lớn như Apple, Reddit, Spotify và NASA.

Trong bài viết này, bạn sẽ được hướng dẫn từng bước cách cài đặt và cấu hình PostgreSQL trên Ubuntu 20.04 LTS, tạo cơ sở dữ liệu đầu tiên, thực hiện các thao tác xử lý dữ liệu cơ bản. Đồng thời, bạn cũng sẽ học cách bảo mật cơ sở dữ liệu bằng phương pháp sao lưu (backup) và khôi phục (restore), giúp tối ưu hệ thống cho các ứng dụng doanh nghiệp.

Yêu Cầu

Trước khi bắt đầu, hãy đảm bảo rằng bạn có:

1. Cài đặt máy chủ PostgreSQL

Bắt đầu bằng cách cập nhật chỉ mục thông tin các gói phần mềm trên Ubuntu của bạn.

# apt install sudo

Sau đó, cài đặt gói cốt lõi của PostgreSQL, trình khách dòng lệnh và các phụ thuộc bổ sung.

$ sudo apt install -y postgresql postgresql-contrib

Kiểm tra cài đặt PostgreSQL.

$ dpkg --status postgresql

Hãy đảm bảo rằng kết quả đầu ra tương tự như ví dụ dưới đây. Bạn sẽ thấy phiên bản PostgreSQL là 12.

Package: postgresql
Status: install ok installed

...

Version: 12+214ubuntu0.1

...
  • PostgreSQL chạy trên cổng 5432.
  • File cấu hình mặc định được đặt tại:
    /etc/postgresql/12/main/postgresql.conf
  • PostgreSQL tạo tất cả các cơ sở dữ liệu trong thư mục:
    /var/lib/postgresql/12/main

Máy chủ cơ sở dữ liệu PostgreSQL hoạt động dưới dạng dịch vụ có tên là postgresql.

Quản lý dịch vụ bằng các lệnh dưới đây:

  • Dừng máy chủ PostgreSQL:
    $ sudo systemctl stop postgresql
  • Khởi động máy chủ PostgreSQL:
    $ sudo systemctl start postgresql
  • Khởi động lại máy chủ PostgreSQL (ví dụ sau khi thay đổi cấu hình):
    $ sudo systemctl restart postgresql
  • Tải lại cấu hình máy chủ PostgreSQL:
    $ sudo systemctl reload postgresql
  • Kiểm tra trạng thái của PostgreSQL:
    $ sudo systemctl status postgresql

Bạn đã cài đặt thành công máy chủ cơ sở dữ liệu PostgreSQL. Trước khi sử dụng, bạn cần bảo mật tài khoản root của PostgreSQL bằng cách đặt mật khẩu trong bước tiếp theo.

2. Cấu hình máy chủ PostgreSQL

Theo mặc định, PostgreSQL đi kèm với psql – một trình khách dòng lệnh để đăng nhập vào máy chủ cơ sở dữ liệu. Quá trình cài đặt cũng tạo ra một người dùng UNIX tên là postgres, là tài khoản siêu người dùng (super-user) của PostgreSQL.

Để đăng nhập vào máy chủ PostgreSQL qua psql với tài khoản postgres, sử dụng lệnh dưới đây:

$ sudo -u postgres psql

Lệnh trên chuyển sang người dùng UNIX postgres và chạy lệnh psql. Khi thực hiện, bạn sẽ thấy dấu nhắc của PostgreSQL xuất hiện, cho biết máy chủ đã sẵn sàng nhận các lệnh SQL.

postgres=#

Khi cài đặt PostgreSQL lần đầu, mật khẩu cho tài khoản siêu người dùng chưa được thiết lập. Để tạo mật khẩu, hãy thực hiện lệnh dưới đây:

postgres=# \password postgres

Bạn sẽ thấy lời nhắc yêu cầu nhập mật khẩu mới. Hãy nhập một mật khẩu mạnh và xác nhận lại:

Enter new password: EXAMPLE_PASSWORD
Enter it again: EXAMPLE_PASSWORD

output

postgres=#

Tiếp theo, thoát khỏi giao diện dòng lệnh của psql:

postgres=# \q

Để kiểm tra mật khẩu mới, hãy chỉnh sửa file cấu hình /etc/postgresql/12/main/pg_hba.conf bằng trình soạn thảo nano:

$ sudo nano /etc/postgresql/12/main/pg_hba.conf

Tìm dòng có nội dung:

...

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only

...

Và thay đổi phương thức xác thực từ peer thành md5 để dòng đó trở thành:

...

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only

...

Sau đó, lưu file và đóng lại bằng cách nhấn Ctrl + X, sau đó Y và Enter.

Khởi động lại dịch vụ PostgreSQL để áp dụng cấu hình mới:

$ sudo systemctl restart postgresql

Thử đăng nhập lại vào máy chủ PostgreSQL; lần này, bạn sẽ được nhắc nhập mật khẩu.

$ sudo -u postgres psql

Nhập mật khẩu mà bạn đã tạo và nhấn Enter. Bạn sẽ thấy dấu nhắc của PostgreSQL:

postgres=#

Sau khi bảo vệ máy chủ PostgreSQL bằng mật khẩu, bạn có thể tạo một cơ sở dữ liệu mẫu và thực hiện một số thao tác xử lý dữ liệu.

3.Tạo cơ sở dữ liệu PostgreSQL

Sử dụng lệnh CREATE DATABASE để tạo cơ sở dữ liệu đầu tiên có tên test_db.

postgres=# CREATE DATABASE test_db;

Kết quả đầu ra sẽ là:

CREATE DATABASE

Để liệt kê các cơ sở dữ liệu, sử dụng lệnh \l:

postgres=# \l

Cơ sở dữ liệu test_db của bạn sẽ xuất hiện trong danh sách, ví dụ:

   Name    |  Owner   | Encoding | Collate |  Ctype  |   Access privileges
-----------+----------+----------+---------+---------+-----------------------

...

test_db   | postgres | UTF8     | C.UTF-8 | C.UTF-8 |

Để chuyển sang cơ sở dữ liệu test_db, sử dụng lệnh \c:

postgres=#  \c test_db;

Hoặc bạn có thể dùng cú pháp sau:

postgres=# \connect test_db;

Khi thấy thông báo xác nhận rằng bạn đã kết nối tới cơ sở dữ liệu test_db với tài khoản postgres, điều đó có nghĩa là cơ sở dữ liệu của bạn đã sẵn sàng để được sử dụng.

You are now connected to database "test_db" as user "postgres".
test_db=#

Tiếp theo, bạn có thể tạo bảng trong cơ sở dữ liệu.

4. Tạo bảng PostgreSQL và thực hiện các thao tác Crud

Tạo bảng đầu tiên có tên customers trong cơ sở dữ liệu test_db. Sử dụng từ khóa SERIAL để tạo cột tự tăng cho customer_id.

test_db-# CREATE TABLE customers (
          customer_id SERIAL PRIMARY KEY,
          first_name VARCHAR (50),
          last_name VARCHAR (50),
          phone VARCHAR (10)
          );

Kết quả đầu ra:

CREATE TABLE

Liệt kê các bảng PostgreSQL

Chạy lệnh \dt để liệt kê các bảng trong PostgreSQL.

test_db-# \dt;

Bảng customers của bạn sẽ xuất hiện trong danh sách quan hệ, ví dụ:

          List of relations
 Schema |   Name    | Type  |  Owner
--------+-----------+-------+----------
 public | customers | table | postgres
(1 row)

Mô tả bảng PostgreSQL

Để xem mô tả của bảng customers, sử dụng lệnh \d:

test_db=# \d customers;

Kết quả sẽ hiển thị cấu trúc của bảng customers:

   Column    |         Type          | Collation | Nullable |                    Default
-------------+-----------------------+-----------+----------+------------------------------------------------
 customer_id | integer               |           | not null | nextval('customers_customer_id_seq'::regclass)
 first_name  | character varying(50) |           |          |
 last_name   | character varying(50) |           |          |
 phone       | character varying(10) |           |          |
Indexes:
    "customers_pkey" PRIMARY KEY, btree (customer_id)

Nhấn Q để quay lại dấu nhắc test_db=#.

Chèn dữ liệu vào bảng PostgreSQL

Chạy các lệnh SQL sau đây lần lượt để chèn dữ liệu mẫu vào bảng customers:

test_db=# INSERT INTO customers(first_name, last_name, phone) VALUES ('JOHN', 'DOE', '11111');
test_db=# INSERT INTO customers(first_name, last_name, phone) VALUES ('MARY', 'ROE', '33333');
test_db=# INSERT INTO customers(first_name, last_name, phone) VALUES ('JANE', 'SMITH', '55555');

Sau mỗi lệnh INSERT, bạn sẽ thấy thông báo:

INSERT 0 1
...

Hiển thị dữ liệu từ bảng PostgreSQL

Chạy lệnh SELECT để hiển thị các bản ghi đã được chèn:

test_db=# SELECT * FROM customers;

Kết quả sẽ hiển thị danh sách khách hàng, ví dụ:

 customer_id | first_name | last_name | phone
-------------+------------+-----------+-------
           1 | JOHN       | DOE       | 11111
           2 | MARY       | ROE       | 33333
           3 | JANE       | SMITH     | 55555
(3 rows)

Cập nhật dữ liệu trong bảng PostgreSQL

Để chỉnh sửa dữ liệu trong bảng, sử dụng lệnh UPDATE kết hợp với WHERE. Ví dụ, để cập nhật số điện thoại của JOHN DOE từ 11111 thành 88888, thực hiện lệnh:

test_db=# UPDATE customers SET phone = '88888' WHERE customer_id = 1;

Kết quả:

UPDATE 1

Xác nhận cập nhật bằng cách chạy lệnh SELECT:

test_db=# SELECT * FROM customers WHERE customer_id = 1;

Kết quả sẽ cho thấy số điện thoại của JOHN DOE đã được cập nhật:

 customer_id | first_name | last_name | phone
-------------+------------+-----------+-------
           1 | JOHN       | DOE       | 88888
(1 row)

Xóa bản ghi trong bảng PostgreSQL

Để xóa một bản ghi khỏi bảng, sử dụng lệnh DELETE. Ví dụ, để xóa bản ghi của MARY ROE, thực hiện:

test_db=# DELETE FROM customers WHERE customer_id = 2;

Kết quả:

DELETE 1

Xác nhận việc xóa bằng cách chạy lệnh SELECT:

test_db=# SELECT * FROM customers;

Kết quả hiển thị sẽ không còn bản ghi của MARY ROE:

 customer_id | first_name | last_name | phone
-------------+------------+-----------+-------
           3 | JANE       | SMITH     | 55555
           1 | JOHN       | DOE       | 88888
(2 rows)

Thoát khỏi giao diện dòng lệnh PostgreSQL:

test_db=# \q

Tiếp theo, bạn sẽ học cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL.

5. Sao lưu và khôi phục cơ sở dữ liệu PostgreSQL

PostgreSQL đi kèm với các công cụ hữu ích để tạo bản sao lưu và khôi phục cơ sở dữ liệu từ file dump.

Sao Lưu Cơ Sở Dữ Liệu PostgreSQL

Để tạo bản sao lưu nén cho cơ sở dữ liệu test_db, sử dụng tiện ích pg_dump:

$ pg_dump -d test_db -U postgres | gzip > test_db_backup.sql.gz

Khi được nhắc, hãy nhập mật khẩu của tài khoản siêu người dùng cho máy chủ PostgreSQL và nhấn Enter. Quá trình pg_dump sẽ hoàn tất việc dump và nén cơ sở dữ liệu.

Để tạo bản sao lưu dạng văn bản thuần, chạy lệnh sau:

$ pg_dump -U postgres -f test_db_backup.sql test_db

Nhập mật khẩu khi được yêu cầu và nhấn Enter. Một file SQL dạng văn bản sẽ được tạo ra. Bạn có thể xác nhận việc tạo các file sao lưu trên bằng cách liệt kê các file hiện có trong thư mục làm việc:

$ ls -lsa

Kết quả sẽ hiển thị các file sao lưu, ví dụ:

...

... test_db_backup.sql
... test_db_backup.sql.gz

...

Sau khi tạo file dump, bạn sẽ khôi phục cơ sở dữ liệu về trạng thái ban đầu trong bước tiếp theo.

Khôi phục cơ sở dữ liệu PostgreSQL

Đăng nhập vào máy chủ PostgreSQL với tài khoản siêu người dùng:

$ sudo -u postgres psql

Nhập mật khẩu khi được nhắc. Sau đó, chuyển sang cơ sở dữ liệu test_db và xóa bảng customers mà bạn đã tạo ở bước trước. Sau đó, bạn sẽ khôi phục lại bảng này từ các bản sao lưu.

postgres=# \c test_db;
postgres=# DROP TABLE customers;

Thoát khỏi giao diện psql:

postgres=# \q

Tiếp theo, bạn có thể sử dụng một trong hai lệnh dưới đây để khôi phục cơ sở dữ liệu từ file sao lưu nén:

  1. Khôi phục từ file sao lưu nén:
    $ gunzip -c test_db_backup.sql.gz | psql -U postgres -d test_db
  2. Khôi phục từ file SQL văn bản:
    $ psql -U postgres -d test_db -f test_db_backup.sql

Nhập mật khẩu khi được yêu cầu và nhấn Enter. Cơ sở dữ liệu của bạn sẽ được khôi phục từ một trong hai file sao lưu. Đăng nhập lại vào máy chủ PostgreSQL để kiểm tra xem bảng customers đã được tái tạo thành công hay chưa.

$ sudo -u postgres psql

Nhập mật khẩu, sau đó chuyển sang cơ sở dữ liệu test_db:

postgres=# \c test_db;

Thử truy vấn dữ liệu từ bảng customers:

test_db=# SELECT * FROM customers;

Kết quả sẽ hiển thị danh sách khách hàng, ví dụ:

 customer_id | first_name | last_name | phone
-------------+------------+-----------+-------
           3 | JANE       | SMITH     | 55555
           1 | JOHN       | DOE       | 88888
(2 rows)

Điều này cho thấy việc khôi phục sao lưu đã được thực hiện thành công.

Kết luận

Qua hướng dẫn này, bạn đã nắm vững cách cài đặt và cấu hình PostgreSQL trên Ubuntu 20.04, đồng thời thực hành các thao tác cơ bản như tạo cơ sở dữ liệu, thực hiện CRUD (Create, Read, Update, Delete) bằng cú pháp SQL. Ngoài ra, bạn cũng đã tìm hiểu các giải pháp sao lưu và khôi phục dữ liệu, giúp đảm bảo tính an toàn và ổn định cho hệ thống.

Với nền tảng PostgreSQL đã được thiết lập, giờ đây bạn có thể kết hợp nó với các ngôn ngữ lập trình như PHP, Node.js hoặc Python để phát triển ứng dụng web, hệ thống quản lý dữ liệu hoặc trang web động theo nhu cầu của mình. Hãy tiếp tục khám phá và tối ưu PostgreSQL để xây dựng những dự án mạnh mẽ hơn!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *