Cài đặt và sử dụng PostgreSQL trên CentOS 7: Hướng dẫn chi tiết và hiệu quả

Giới thiệu về PostgreSQL và CentOS 7

Chào mừng bạn đến với hướng dẫn chi tiết về cách cài đặt và sử dụng PostgreSQL trên hệ điều hành CentOS là gì. Nếu bạn đang tìm kiếm một giải pháp cơ sở dữ liệu mạnh mẽ, ổn định và có tính bảo mật cao cho dự án của mình, thì sự kết hợp này chính là lựa chọn hoàn hảo. PostgreSQL, thường được gọi là “Postgres”, là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (ORDBMS) mã nguồn mở hàng đầu. Nó nổi tiếng với sự tuân thủ chuẩn SQL, khả năng mở rộng và một cộng đồng phát triển năng động trên toàn thế giới.

Trong khi đó, CentOS 7 là một bản phân phối Linux là gì miễn phí, được xây dựng dựa trên mã nguồn của Red Hat Enterprise Linux (RHEL). Điều này mang lại cho CentOS 7 sự ổn định và độ tin cậy vượt trội, biến nó thành nền tảng lý tưởng để triển khai các ứng dụng máy chủ quan trọng. Việc kết hợp sức mạnh của PostgreSQL với sự bền bỉ của CentOS 7 tạo ra một môi trường vững chắc cho cả giai đoạn phát triển và sản xuất. Bài viết này sẽ hướng dẫn bạn từng bước, từ việc thêm repository, cài đặt, cấu hình ban đầu cho đến các thao tác quản trị cơ bản, giúp bạn tự tin làm chủ hệ thống của mình.

Hình minh họa

Cách thêm repository để cài đặt PostgreSQL trên CentOS 7

Để đảm bảo bạn cài đặt được phiên bản PostgreSQL mới nhất và nhận được các bản cập nhật bảo mật kịp thời, phương pháp tốt nhất là sử dụng repository chính thức do nhóm phát triển PostgreSQL cung cấp. Đây là bước đầu tiên và cực kỳ quan trọng trong toàn bộ quy trình.

Giới thiệu repository PostgreSQL chính thức

Việc sử dụng repository chính thức (PostgreSQL Yum Repository) mang lại nhiều lợi ích rõ rệt. Thứ nhất, bạn sẽ luôn có quyền truy cập vào các phiên bản PostgreSQL mới nhất, thay vì bị giới hạn ở phiên bản mặc định, thường đã cũ, có sẵn trong repository của CentOS 7. Thứ hai, nó đảm bảo tính tương thích và ổn định, vì các gói này được xây dựng và kiểm thử dành riêng cho hệ điều hành của bạn. Cuối cùng, việc cập nhật và vá lỗi bảo mật trong tương lai sẽ trở nên đơn giản hơn rất nhiều, chỉ cần một vài lệnh cơ bản.

Các bước thêm repository PostgreSQL

Thêm repository PostgreSQL vào CentOS 7 là một thao tác rất đơn giản. Bạn chỉ cần chạy một lệnh duy nhất để tải về và cài đặt tệp RPM cấu hình repository. Hãy mở terminal và thực thi lệnh sau. Lưu ý, bạn có thể thay đổi số phiên bản (ví dụ `13`) tùy theo nhu_cầu_của_dự_án.

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Sau khi lệnh hoàn tất, hệ thống của bạn đã được cấu hình để kết nối đến repository của PostgreSQL. Để kiểm tra lại và chắc chắn rằng repository đã được thêm thành công, bạn có thể sử dụng lệnh sau để liệt kê các repository đang được kích hoạt. Bạn sẽ thấy các repository của PostgreSQL (như `pgdg14`, `pgdg13`,…) xuất hiện trong danh sách.

yum repolist

Hình minh họa

Các bước cài đặt gói PostgreSQL trên CentOS 7

Khi repository chính thức đã sẵn sàng, bước tiếp theo là tiến hành cài đặt các gói cần thiết của PostgreSQL. Quá trình này bao gồm việc cài đặt máy chủ cơ sở dữ liệu và các công cụ tiện ích đi kèm để bạn có thể bắt đầu làm việc ngay lập tức.

Cài đặt gói PostgreSQL và tiện ích kèm theo

Bây giờ, bạn có thể sử dụng trình quản lý gói `yum` để cài đặt PostgreSQL server. Trong lệnh dưới đây, chúng tôi sẽ cài đặt phiên bản 13 làm ví dụ. Lệnh này sẽ cài đặt hai gói chính: `postgresql13-server` (chứa máy chủ cơ sở dữ liệu và các tệp dữ liệu) và `postgresql13` (chứa các công cụ client như `psql` để tương tác với cơ sở dữ liệu).

Hãy chạy lệnh sau trong terminal của bạn:

sudo yum install -y postgresql13-server postgresql13

Trình quản lý `yum` sẽ tự động xử lý các gói phụ thuộc và cài đặt mọi thứ cần thiết. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng của bạn.

Kiểm tra phiên bản PostgreSQL sau khi cài đặt

Sau khi quá trình cài đặt hoàn tất, một thói quen tốt là kiểm tra lại để xác nhận mọi thứ đã diễn ra đúng như mong đợi. Bạn có thể kiểm tra phiên bản của PostgreSQL client vừa được cài đặt bằng cách sử dụng công cụ dòng lệnh `psql` (Command Line Interface – CLI) với tùy chọn `–version`. Thao tác này giúp bạn chắc chắn rằng phiên bản đúng đã được cài vào hệ thống.

Chạy lệnh đơn giản sau:

psql --version

Kết quả trả về sẽ hiển thị phiên bản cụ thể của `psql` mà bạn vừa cài, ví dụ: `psql (PostgreSQL) 13.7`. Điều này xác nhận rằng việc cài đặt đã thành công và bạn đã sẵn sàng cho các bước tiếp theo.

Hình minh họa

Khởi động và cấu hình dịch vụ PostgreSQL

Việc cài đặt chỉ là bước khởi đầu. Để PostgreSQL có thể hoạt động, bạn cần khởi tạo cơ sở dữ liệu, khởi động dịch vụ và thực hiện một vài cấu hình cơ bản để đảm bảo hệ thống hoạt động ổn định và an toàn.

Khởi tạo và kích hoạt dịch vụ PostgreSQL

Trước khi khởi động dịch vụ lần đầu tiên, bạn cần phải khởi tạo một “cụm cơ sở dữ liệu” (database cluster). Đây là nơi PostgreSQL sẽ lưu trữ toàn bộ dữ liệu của bạn. CentOS 7 cung cấp một công cụ tiện ích để thực hiện việc này một cách dễ dàng. Hãy chạy lệnh sau (nhớ thay `13` bằng phiên bản bạn đã cài):

sudo /usr/pgsql-13/bin/postgresql-13-setup initdb

Khi lệnh trên báo thành công, bạn có thể khởi động dịch vụ PostgreSQL bằng `systemctl`. Đồng thời, hãy kích hoạt nó để dịch vụ tự động khởi chạy mỗi khi máy chủ khởi động lại. Điều này rất quan trọng đối với môi trường sản xuất.

sudo systemctl start postgresql-13

sudo systemctl enable postgresql-13

Cấu hình ban đầu dịch vụ PostgreSQL trên CentOS 7

Mặc định, PostgreSQL được cấu hình với các thiết lập an toàn nhất. Hai tệp tin cấu hình quan trọng nhất bạn cần biết là `postgresql.conf` và `pg_hba.conf`, cả hai đều nằm trong thư mục `/var/lib/pgsql/13/data/`. Tệp `postgresql.conf` quản lý các thiết lập chung của máy chủ như bộ nhớ, số lượng kết nối tối đa. Tệp `pg_hba.conf` (host-based authentication) kiểm soát quyền truy cập và phương thức xác thực của người dùng.

Ví dụ, để cho phép người dùng cục bộ kết nối tới cơ sở dữ liệu bằng mật khẩu thay vì phương thức `ident` mặc định, bạn cần chỉnh sửa tệp `pg_hba.conf`. Hãy tìm các dòng tương tự như dưới đây và thay đổi `ident` hoặc `peer` thành `md5`. Phương thức `md5` yêu cầu người dùng phải cung cấp mật khẩu đã được mã hóa.

# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5

Sau khi thay đổi bất kỳ tệp cấu hình nào, bạn phải khởi động lại dịch vụ PostgreSQL để các thay đổi có hiệu lực: sudo systemctl restart postgresql-13.

Hình minh họa

Hướng dẫn tạo cơ sở dữ liệu và quản lý người dùng

Một hệ quản trị cơ sở dữ liệu sẽ không hoàn chỉnh nếu thiếu người dùng và cơ sở dữ liệu. Trong PostgreSQL, khái niệm “người dùng” được gọi chung là “role”. Một role có thể là người dùng, nhóm, và có thể sở hữu các đối tượng trong cơ sở dữ liệu và có các quyền truy cập cụ thể.

Tạo người dùng (role) trong PostgreSQL

Mặc định sau khi cài đặt, PostgreSQL tạo một siêu người dùng (superuser) tên là `postgres`. Để thực hiện các tác vụ quản trị, bạn cần chuyển sang người dùng này trên hệ thống. Sử dụng lệnh:

sudo su - postgres

Từ đây, bạn có thể tạo một role mới. Cách đơn giản nhất là dùng tiện ích `createuser`. Lệnh dưới đây sẽ tạo một người dùng mới tên là `myuser` và hỏi bạn mật khẩu cho người dùng đó.

createuser --interactive --pwprompt

Trong quá trình tương tác, bạn sẽ nhập tên người dùng (`myuser`), đặt mật khẩu và quyết định xem người dùng này có phải là superuser hay không (nên chọn không cho các tài khoản ứng dụng). Hoặc bạn có thể tạo trực tiếp bằng một dòng lệnh SQL sau khi đăng nhập vào `psql`:

CREATE ROLE myuser WITH LOGIN PASSWORD 'mypassword';

Tạo và quản lý cơ sở dữ liệu

Tương tự như tạo người dùng, bạn có thể tạo cơ sở dữ liệu bằng tiện ích `createdb` hoặc lệnh SQL. Để tạo một cơ sở dữ liệu mới tên là `mydb` và gán quyền sở hữu cho `myuser` vừa tạo, bạn có thể chạy lệnh:

createdb -O myuser mydb

Nếu bạn đang ở trong giao diện dòng lệnh `psql`, bạn có thể dùng lệnh SQL:

CREATE DATABASE mydb OWNER myuser;

Sau khi tạo xong, bạn đã có một cơ sở dữ liệu `mydb` thuộc sở hữu của người dùng `myuser`. `myuser` sẽ có toàn quyền trên cơ sở dữ liệu này. Đây là cách thiết lập cơ bản và an toàn để một ứng dụng có thể kết nối và làm việc với cơ sở dữ liệu riêng của nó mà không ảnh hưởng đến các phần khác của hệ thống.

Hình minh họa

Cách kết nối và sử dụng PostgreSQL hiệu quả

Sau khi đã có cơ sở dữ liệu và người dùng, bước tiếp theo là kết nối và bắt đầu thực hiện các truy vấn. Bạn có thể làm việc với PostgreSQL thông qua dòng lệnh hoặc sử dụng các công cụ đồ họa (GUI) để quản lý một cách trực quan hơn.

Kết nối tới PostgreSQL từ dòng lệnh và công cụ GUI

Công cụ dòng lệnh mặc định và mạnh mẽ nhất là `psql` (Command Line Interface – CLI). Để kết nối đến cơ sở dữ liệu `mydb` với người dùng `myuser`, bạn sử dụng lệnh sau. Hệ thống sẽ yêu cầu bạn nhập mật khẩu đã tạo ở bước trước.

psql -U myuser -d mydb -h 127.0.0.1 -W

Trong đó, `-U` là tên người dùng, `-d` là tên cơ sở dữ liệu, `-h` là địa chỉ máy chủ (127.0.0.1 cho kết nối cục bộ), và `-W` để `psql` yêu cầu nhập mật khẩu.

Bên cạnh `psql`, có rất nhiều công cụ GUI giúp bạn làm việc với PostgreSQL dễ dàng hơn. Một số công cụ phổ biến bao gồm pgAdmin (công cụ quản trị chính thức và đầy đủ tính năng nhất) và DBeaver (công cụ đa nền tảng, hỗ trợ nhiều loại cơ sở dữ liệu khác nhau). Các công cụ này cung cấp giao diện đồ họa để bạn viết truy vấn, quản lý bảng, xem dữ liệu và theo dõi hiệu năng mà không cần nhớ hết các câu lệnh.

Các lệnh truy vấn và thao tác cơ bản

Khi đã kết nối vào cơ sở dữ liệu, bạn có thể thực hiện các lệnh SQL để tương tác với dữ liệu. Dưới đây là các thao tác cơ bản (CRUD: Create, Read, Update, Delete).

Đầu tiên, hãy tạo một bảng đơn giản tên là `products`:

CREATE TABLE products (id serial PRIMARY KEY, name VARCHAR(100), price NUMERIC(10, 2));

Tiếp theo, chèn (INSERT) một vài dòng dữ liệu vào bảng:

INSERT INTO products (name, price) VALUES ('Laptop', 25000000);
INSERT INTO products (name, price) VALUES ('Mouse', 500000);

Để xem (SELECT) dữ liệu vừa chèn:

SELECT * FROM products;

Để cập nhật (UPDATE) giá của một sản phẩm:

UPDATE products SET price = 450000 WHERE name = 'Mouse';

Và cuối cùng, để xóa (DELETE) một sản phẩm:

DELETE FROM products WHERE name = 'Laptop';

Nắm vững các lệnh cơ bản này là nền tảng để bạn xây dựng và quản lý ứng dụng của mình.

Hình minh họa

Mẹo quản trị và bảo trì PostgreSQL trên CentOS 7

Để hệ thống cơ sở dữ liệu của bạn hoạt động ổn định và an toàn trong dài hạn, việc quản trị và bảo trì định kỳ là vô cùng cần thiết. Dưới đây là những mẹo quan trọng bạn nên áp dụng cho máy chủ PostgreSQL trên CentOS 7.

Một trong những nhiệm vụ quan trọng nhất là sao lưu và phục hồi dữ liệu. PostgreSQL cung cấp hai tiện ích dòng lệnh mạnh mẽ cho việc này: `pg_dump` và `pg_restore`. Để tạo một bản sao lưu logic của cơ sở dữ liệu `mydb`, bạn có thể dùng lệnh: `pg_dump -U myuser -d mydb -F c -f mydb.dump`. Lệnh này tạo ra một tệp sao lưu ở định dạng nén. Khi cần phục hồi, bạn sẽ tạo một cơ sở dữ liệu rỗng và dùng `pg_restore`: `pg_restore -U myuser -d new_db mydb.dump`. Bạn có thể tìm hiểu thêm chi tiết về Backup là gì để xây dựng kế hoạch bảo vệ dữ liệu hiệu quả.

Giám sát hiệu năng và tài nguyên cũng là một yếu tố không thể bỏ qua. Hãy thường xuyên kiểm tra nhật ký (log) của PostgreSQL tại `/var/lib/pgsql/13/data/log/`. Đồng thời, sử dụng các công cụ hệ thống của CentOS như `top`, `htop`, `iostat` để theo dõi việc sử dụng CPU, bộ nhớ và ổ đĩa. Việc này giúp bạn sớm phát hiện các truy vấn chậm hoặc các vấn đề về tài nguyên trước khi chúng gây ảnh hưởng nghiêm trọng. Khái niệm Bottleneck là gì sẽ giúp bạn hiểu sâu hơn nguyên nhân các nút thắt hiệu năng trong hệ thống.

Cuối cùng, hãy luôn giữ cho hệ thống của bạn được cập nhật. Chạy lệnh `sudo yum update` định kỳ để cài đặt các bản vá bảo mật mới nhất cho cả CentOS 7 và PostgreSQL. Việc này giúp bảo vệ máy chủ của bạn khỏi các lỗ hổng đã được biết đến, đảm bảo an toàn cho dữ liệu quý giá của bạn.

Hình minh họa

Các vấn đề thường gặp và cách khắc phục

Trong quá trình vận hành PostgreSQL, đôi khi bạn sẽ gặp phải một số lỗi phổ biến. Hiểu rõ nguyên nhân và cách xử lý sẽ giúp bạn tiết kiệm rất nhiều thời gian và giảm thiểu gián đoạn dịch vụ.

Lỗi khởi động dịch vụ PostgreSQL trên CentOS 7

Một trong những lỗi phổ biến nhất là dịch vụ PostgreSQL không thể khởi động. Khi bạn chạy `systemctl start postgresql-13` và gặp lỗi, nguyên nhân thường đến từ một vài nguồn chính. Thứ nhất, có thể là do lỗi cú pháp trong các tệp cấu hình `postgresql.conf` hoặc `pg_hba.conf`. Thứ hai, quyền sở hữu hoặc quyền truy cập của thư mục dữ liệu (`/var/lib/pgsql/13/data/`) bị sai. Thứ ba, máy chủ có thể đã hết dung lượng ổ đĩa.

Để chẩn đoán, bước đầu tiên luôn là kiểm tra nhật ký hệ thống. Sử dụng lệnh: `journalctl -u postgresql-13.service -n 50 –no-pager`. Lệnh này sẽ hiển thị 50 dòng log cuối cùng của dịch vụ, thường sẽ chứa thông báo lỗi cụ thể giúp bạn xác định nguyên nhân và cách khắc phục nhanh chóng.

Lỗi kết nối tới PostgreSQL không thành công

Lỗi “connection refused” hoặc “no pg_hba.conf entry” cũng rất hay xảy ra, đặc biệt khi bạn cố gắng kết nối từ một máy khác. Để khắc phục, hãy kiểm tra theo một danh sách các bước sau:

1. Kiểm tra trạng thái dịch vụ: Đảm bảo dịch vụ đang chạy bằng lệnh `sudo systemctl status postgresql-13` trên Linux Server là gì.

2. Kiểm tra tường lửa (Firewall): CentOS 7 mặc định bật firewall. Hãy chắc chắn rằng bạn đã mở cổng 5432 (cổng mặc định của PostgreSQL). Sử dụng lệnh: `sudo firewall-cmd –list-all` để kiểm tra và `sudo firewall-cmd –permanent –add-port=5432/tcp` để mở cổng.

3. Kiểm tra `listen_addresses`: Trong tệp `postgresql.conf`, hãy đảm bảo rằng giá trị của `listen_addresses` được thiết lập là `*` nếu bạn muốn nhận kết nối từ mọi địa chỉ IP, hoặc địa chỉ IP cụ thể của máy chủ.

4. Kiểm tra `pg_hba.conf`: Đây là nguyên nhân phổ biến nhất. Hãy chắc chắn rằng có một dòng trong tệp này cho phép kết nối từ địa chỉ IP, người dùng và phương thức xác thực mà bạn đang sử dụng.

Hình minh họa

Best Practices khi sử dụng PostgreSQL trên CentOS 7

Để tối ưu hóa hiệu suất, bảo mật và độ tin cậy của hệ thống PostgreSQL trên CentOS 7, việc tuân thủ các thực hành tốt nhất (best practices) là điều vô cùng quan trọng. Đây là những nguyên tắc đã được cộng đồng đúc kết qua nhiều năm kinh nghiệm.

Luôn sao lưu dữ liệu định kỳ: Đây là quy tắc vàng. Dữ liệu là tài sản quý giá nhất, và không có gì đảm bảo nó sẽ không bị mất do lỗi phần cứng, phần mềm hay con người. Hãy thiết lập một lịch trình sao lưu tự động bằng `pg_dump` và lưu trữ các bản sao lưu ở một nơi an toàn, tách biệt với máy chủ chính. Tham khảo thêm về Backup là gì để có kế hoạch hiệu quả.

Cập nhật hệ thống và PostgreSQL thường xuyên: Luôn giữ cho Windows Server là gì cũng như Linux là gì và PostgreSQL được cập nhật lên phiên bản vá lỗi mới nhất. Việc này không chỉ mang lại các tính năng mới mà quan trọng hơn là vá các lỗ hổng bảo mật, giúp hệ thống của bạn đứng vững trước các mối đe dọa.

Hạn chế cấp quyền superuser không cần thiết: Tài khoản siêu người dùng `postgres` có toàn quyền trên hệ thống cơ sở dữ liệu. Tuyệt đối không sử dụng tài khoản này cho các ứng dụng hàng ngày. Thay vào đó, hãy tạo các role riêng với quyền hạn được giới hạn ở mức tối thiểu cần thiết để thực hiện công việc.

Tối ưu hóa cấu hình PostgreSQL theo nhu cầu: Các thiết lập mặc định của PostgreSQL được tạo ra để hoạt động trên nhiều loại phần cứng khác nhau. Bạn nên tinh chỉnh tệp `postgresql.conf` để phù hợp với tài nguyên của máy chủ (RAM, CPU). Các tham số quan trọng cần xem xét là `shared_buffers`, `effective_cache_size`, và `work_mem`.

Không tùy ý chỉnh sửa cấu hình khi chưa hiểu rõ: Mỗi thay đổi trong tệp cấu hình đều có thể ảnh hưởng lớn đến hiệu năng và sự ổn định. Trước khi thay đổi bất kỳ tham số nào, hãy đọc kỹ tài liệu chính thức để hiểu rõ tác động của nó.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết, từ những bước đầu tiên như thêm repository, cài đặt PostgreSQL trên CentOS 7, cho đến các thao tác quan trọng như khởi tạo dịch vụ, cấu hình bảo mật, tạo người dùng và cơ sở dữ liệu. Bạn cũng đã được làm quen với các lệnh SQL cơ bản, các mẹo quản trị và cách xử lý những sự cố thường gặp. Sự kết hợp giữa sự ổn định của CentOS 7 và sức mạnh của PostgreSQL thực sự tạo nên một nền tảng cơ sở dữ liệu lý tưởng cho mọi dự án, từ nhỏ đến lớn.

Kiến thức chỉ thực sự trở thành kỹ năng khi được thực hành. Tôi khuyến khích bạn hãy tự tay triển khai các bước đã học trên một môi trường thử nghiệm. Đừng ngần ngại thử nghiệm, tạo lỗi và tìm cách khắc phục, vì đó là cách học hỏi nhanh nhất. Thế giới của PostgreSQL rất rộng lớn và luôn có những điều mới để khám phá. Hãy tiếp tục tìm đọc các tài liệu chuyên sâu và tham gia vào các cộng đồng để không ngừng nâng cao kiến thức và kỹ năng quản trị cơ sở dữ liệu của mình. Chúc bạn thành công trên con đường chinh phục công nghệ!

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ
Bài viết liên quan