NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
12/06/2023
Lượt xem

Cách thiết lập remote database tối ưu hiệu suất trang web bằng MySQL trên Ubuntu 20.04

12/06/2023
21 phút đọc
Lượt xem

Đánh giá

5/5 - (192 bình chọn)

Khi quy mô website ngày càng được mở rộng thì bạn cần có những chiến lược hiệu quả để phản hồi tốt các yêu cầu từ khách truy cập. Bài viết này sẽ hướng dẫn chi tiết cách cấu hình remote MySQL database để tối ưu hiệu suất trang web trên Ubuntu 20.04.

Điều kiện để thiết lập cơ sở dữ liệu từ xa với MySQL trên Ubuntu 20.04

Bài viết này sẽ hướng dẫn trên WordPress. Các ứng dụng khác chạy bằng MySQL cũng có thể được cấu hình theo cách tương tự.

Điều kiện để thiết lập cơ sở dữ liệu từ xa với MySQL trên Ubuntu 20.04
Điều kiện để thiết lập cơ sở dữ liệu từ xa với MySQL trên Ubuntu 20.04

Trước khi bắt đầu, bạn đọc hãy bảo đảm đáp ứng đủ các điều kiện sau:

  • Có hai server Ubuntu 20.04. Mỗi server có một user non-root với quyền sudo và firewall UFW bật sẵn (Hướng dẫn chi tiết cách thiết lập tường lửa bằng UFW trên Ubuntu 20.04 tại đây). Trong đó một server sẽ host backend MySQL (tạm gọi là database server). Server còn lại sẽ kết nối đến database server từ xa này và hoạt động như web server (tạm gọi là web server trong hướng dẫn này).
  • Trên database server cần cài đặt sẵn MySQL.
  • Trên web server đã cài sẵn Nginx và PHP.
  • Có thể cài đặt chứng chỉ TLS/SSL trên server.

Xem thêm: Hướng dẫn chi tiết cách cài đặt Nginx trên Ubuntu 20.04

Bước 1: Cấu hình MySQL để nghe kết nối remote trên database server

Lưu trữ dữ liệu trên một server riêng biệt là một cách hiệu quả để mở rộng server sau khi bắt đầu vượt quá giới hạn tài nguyên lưu trữ. Bên cạnh đó, việc này cũng giúp cung cấp cấu trúc cơ bản để cân bằng tải và mở rộng cơ sở hạ tầng sau này. Sau khi cài đặt xong MySQL theo hướng dẫn này, bạn cũng sẽ cần thay đổi một số giá trị để cho phép kết nối từ các máy tính khác.

Hầu hết các thay đổi trong cấu hình của MySQL có thể được thực hiện trong file mysqld.cnf ở thư mục /etc/mysql/mysql.conf.d/. Mở file này trên database server bằng quyền root:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

File này được chia thành các phần khác nhau, đánh dấu bằng nhãn chứa trong cặp cấu ngoặc vuông ([]). Tìm phần có nhãn mysqld như dưới đây:

. . .
[mysqld]
. . .

Trong phần này, tìm tham số bind-address – cho biết địa chỉ mạng để phần mềm database nghe kết nối. Theo mặc định thì giá trị này là 127.0.0.1, vì vậy MySQL chỉ được cấu hình để nghe các kết nối cục bộ. Bây giờ bạn cần đổi thành địa chỉ IP bên ngoài mà server có thể kết nối đến.

Nếu cả hai server đều trong một Datacenter với khả năng kết nối mạng riêng thì hãy dùng địa chỉ IP private của database server. Nếu không thì bạn cũng có thể dùng địa chỉ IP public.

[mysqld]
. . .
bind-address = db_server_ip

Bạn sẽ kết nối đến database qua internet, do đó nên sử dụng kết nối được mã hóa để đảm bảo an toàn cho dữ liệu. Nếu không mã hóa kết nối MySQL thì bất kỳ ai trên mạng cũng có thể nghe lén (sniff) thông tin giữa server web và database.

Thêm dòng dưới đây vào sau bind-address để mã hóa kết nối MySQL:

[mysqld]
. . .
require_secure_transport = on
. . .

Sau đó lưu rồi đóng file lại.

Để kết nối SSL có thể hoạt động, ta sẽ cần tạo một số key và chứng chỉ. MySQL một lệnh cho phép thực hiện các thao tác này hoàn toàn tự động.

Chạy lệnh dưới đây để tạo các file cần thiết:

sudo mysql_ssl_rsa_setup --uid=mysql

Restart lại database để yêu cầu MySQL cập nhật cấu hình và thêm thông tin SSL mới:

sudo systemctl restart mysql

Xác nhận xem server có đang nghe các interface bên ngoài hay không bằng lệnh ss:

sudo ss -plunt | grep mysqld
Output
tcp     LISTEN   0        70             127.0.0.1:33060          0.0.0.0:*      users:(("mysqld",pid=4053,fd=22))                                              
tcp     LISTEN   0        151        db_server_ip:3306           0.0.0.0:*      users:(("mysqld",pid=4053,fd=24))

Trong đó, ss hiển thị các thống kê về hệ thống mạng của server. Từ đó bạn có thể thấy một tiến trình tên mysqld được đính kèm với db_server_ip tại cổng 3306 – cổng tiêu chuẩn của MySQL. Do đó bạn có thể đảm bảo rằng server đang nghe trên đúng interface.

Tiếp đến, mở cổng này trên firewall để cho phép lưu lượng truy cập:

sudo ufw allow mysql

Bước 2: Thiết lập database WordPress và thông tin đăng nhập remote trên database server

Bây giờ MySQL đang nghe trên địa chỉ IP bên ngoài, tuy nhiên vẫn chưa có user hay database từ xa nào được cấu hình. Bây giờ hãy tạo một database cho WordPress và một cặp user có quyền truy cập.

Kết nối đến MySQL bằng quyền root:

sudo mysql

Lưu ý: Nếu sử dụng phương thức xác thực bằng password thì hãy chạy lệnh sau để truy cập MySQL shell:

mysql -u root -p

Sau đó nhập mật khẩu root cho tài khoản MySQL.

Trong MySQL prompt, tạo một database mới cho WordPress sử dụng. Giả sử bạn đặt tên nó là wordpress:

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bây giờ bạn cần tạo một cặp user: một user chỉ có ở server cục bộ và một user ở xa tương ứng với địa chỉ IP của web server.

Trước tiên, tạo local user (có tên là local_db_user), sau đó dùng localhost trong phần khai báo để biết tài khoản này chỉ tương ứng với các kết nối cục bộ:

CREATE USER 'local_db_user'@'localhost' IDENTIFIED BY 'password';

Sau đó gán đầy đủ quyền truy cập vào database wordpress cho tài khoản này:

GRANT ALL PRIVILEGES ON wordpress.* TO 'local_db_user'@'localhost';

Bây giờ user này có thể thực hiện bất kỳ thao tác nào trên database cho WordPress. Tuy nhiên user này không thể được sử dụng từ xa vì chỉ khớp với các kết nối từ máy cục bộ. Do đó, bạn cần tạo thêm một tài khoản khớp với các kết nối từ web server.

Lưu ý rằng bạn cần có một địa chỉ IP sử dụng cùng một mạng đã cấu hình trong file mysqld.cnf. Do đó, nếu trong file này bạn chỉ định một địa chỉ IP mạng private thì bạn cũng sẽ dùng địa chỉ IP private của web server trong hai lệnh dưới đây. Ngược lại, nếu dùng mạng public thì bạn sử dụng địa chỉ IP public của web server:

CREATE USER 'remote_user'@'web_server_ip' IDENTIFIED BY 'password';

Sau đó cung cấp quyền tương tự như user cục bộ:

GRANT ALL PRIVILEGES ON wordpress.* TO 'remote_user'@'web_server_ip';

Flush các đặc quyền để MySQL sử dụng:

FLUSH PRIVILEGES;

Sau đó thoát MySQL prompt:

exit

Để đảm bảo khả năng mở rộng linh hoạt và dễ dàng theo sự gia tăng của database WordPress sau một thời gian sử dụng, việc lựa chọn máy chủ lưu trữ rất quan trọng. Một trong những giải pháp tốt nhất hiện nay là sử dụng hosting, VPS của Vietnix.

Với các gói dịch vụ tại Vietnix, bạn sẽ được cung cấp một không gian lưu trữ dữ liệu tốc độ cao, ổn định và bảo mật. Bên cạnh đó, VPS Vietnix còn cung cấp cho bạn bảng quản trị giúp quản lý và vận hành web đơn giản hơn. Tùy theo nhu cầu sử dụng mà bạn có thể lựa chọn Hosting Giá Rẻ, VPS Giá Rẻ, Hosting Business, VPS NVMe cho phù hợp. Liên hệ với đội ngũ Vietnix để được tư vấn nhanh chóng và chi tiết các gói dịch vụ.

Bước 3: Kiểm tra kết nối remote và local

Log in vào web server để kiểm tra kết nối remote:

ssh remote_user@web_server_ip

Bạn sẽ cần cài đặt thêm một số công cụ client cho MySQL trên web server để truy cập remote database. Trước tiên, cập nhật cache package cục bộ:

sudo apt update

Cài đặt bộ công cụ client MySQL:

sudo apt install mysql-client

Sau đó kết nối đến database server bằng cú pháp dưới đây:

mysql -u remote_user -h db_server_ip -p

Hãy đảm bào rằng bạn đã sử dụng đúng địa chỉ IP cho database server. Nếu đã cấu hình MySQL để nghe mạng private thì hãy nhập địa chỉ IP private của mạng, ngược lại thì hãy dùng địa chỉ IP public tương ứng.

Bây giờ ta cần nhập password cho tài khoản remote_user, sau đó ta sẽ vào được prompt của MySQL. Kiểm tra xem có đang dùng SSL bằng lệnh sau:

status

Nếu kết nối đang sử dụng SSL thì sẽ có dòng SSL: như dưới đây:

Output
--------------
mysql  Ver 8.0.29-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))

Connection id:          14
Current database:
Current user:           remote_user@web_server_ip
SSL:                    Cipher in use is TLS_AES_256_GCM_SHA384
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.29-0ubuntu0.20.04.2 (Ubuntu)
Protocol version:       10
Connection:             db_server_ip via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Binary data as:         Hexadecimal
Uptime:                 1 hour 8 min 28 sec

Threads: 2  Questions: 69  Slow queries: 0  Opens: 206  Flush tables: 3  Open tables: 125  Queries per second avg: 0.016
--------------

Bây giờ thoát khỏi prompt bằng lệnh exit. Như vậy là bạn đã có thể truy cập cục bộ và truy cập từ web server. Tuy nhiên bạn chưa xác nhận xem các kết nối khác có bị từ chối hay không. Để kiểm tra xem, bạn có thể thực hiện tương tự từ một server thứ ba, server này chưa được cấu hình một tài khoản user cụ thể nào để đảm bảo server chưa được gán quyền truy cập.

Trước khi kiểm tra kết nối, ca tần cài đặt công cụ client MySQL như các bước trên:

mysql -u wordpressuser -h db_server_ip -p

Nếu lệnh này sẽ xảy ra lỗi như dưới đây thì database server đã có khả năng từ chối truy cập từ những user chưa được xác thực.

Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server

Bước 4: Chuẩn bị web server để cài đặt WordPress

WordPress cùng với các plugin đều dựa trên những tiện ích mở rộng của PHP, vì vậy bạn cần cài sẵn Nginx và PHP trước khi bắt đầu. Trước tiên, cài đặt một số tiện ích PHP để dùng cho WordPress như sau:

sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

Sau khi hoàn tất việc cài đặt, restart lại tiến trình PHP-FPM để process PHP đang chạy có thể sử dụng những tính năng vừa cài đặt:

sudo systemctl restart php7.4-fpm

Bây giờ bạn cần thực hiện một số thay đổi cho các file Nginx server block. Bạn cần có sẵn một file config /etc/nginx/sites-available được cấu hình để phản hồi lại tên miền hoặc địa chỉ IP của server, đồng thời được bảo vệ bằng chứng chỉ TLS/SSL. Ví dụ này sẽ làm việc trên thư mục /etc/nginx/sites-available/your_domain. Bên cạnh đó, /var/www/your_domain cũng sẽ được dùng như root directory. Bạn đọc cần lưu ý chỉnh tên thư mục tương ứng với máy của mình.

Mở file server block bằng một text editor bất kỳ:

sudo nano /etc/nginx/sites-available/your_domain

Trong server block này bạn cần thêm một vài block vị trí khác. Trước tiên là block để khớp các request đến /favicon.ico/robots.txt. Cụ thể, bạn sẽ dùng biểu thức chính quy (regex) để khớp bất kỳ request nào cho các file tĩnh, tắt chế độ logging và đánh dấu ưu tiên cache vì các file này thường tốn rất nhiều tài nguyên để phục vụ lại.

Bạn có thể chỉnh sửa danh sách file tĩnh này để chứa bất kỳ phần mở rộng nào khác mà trang có thể sử dụng:

server {
    server_name your_domain www.your_domain;
    root /var/www/your_domain;

    index index.html index.htm index.php;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
    . . .
}

Bên trong block location / có sẵn, bạn có thể thay đổi danh sách try_files. Trước tiên, comment thiết lập mặc định bằng cách thêm ký hiệu # ở phía trước. Sau đó thêm các dòng dưới đây:

server {
    . . .
    location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php$is_args$args;
    }
    . . .
}

Bây giờ thay vì trả về lỗi 404 (mặc định) thì quyền kiểm soát sẽ được truyền sang file index.php với các đối số được yêu cầu.

Sau khi kết thúc bước này, phần đầu của file sẽ có dạng như dưới đây:

server {
    server_name your_domain www.your_domain;
    root /var/www/your_domain;

    index index.html index.htm index.php;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }

    location / {
       # try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php$is_args$args;
    }

  ...
}

Sau đó lưu và đóng lại file. Bây giờ hãy thử kiểm tra cấu hình cho các lỗi cú pháp:

sudo nginx -t

Nếu không có lỗi trả về thì hãy reload lại Nginx:

sudo systemctl reload nginx

Bước 5: Cài đặt WordPress trên web server

Để minh họa khả năng của server MySQL remote, bạn sẽ cài đặt và cấu hình WordPress – hệ thống quản lý nội dung (CMS) phổ biến nhất hiện nay. Vietnix khuyên bạn nên download WordPress trực tiếp từ website chính thức để đảm bảo an toàn.

Trước tiên, chuyển sang thư mục có thể viết được (nên dùng các thư mục tạm thời như /tmp):

cd /tmp

Download phiên bản mới nhất của WordPress:

curl -LO https://wordpress.org/latest.tar.gz

Giải nén file vừa download:

tar xzvf latest.tar.gz

Copy file cấu hình mẫu vào tên file mà WordPress đọc:

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

Sau đó copy toàn bộ nội dung của thư mục vào tài liệu gốc. Trong đó flag -a giúp đảm bảo mọi quyền đều được giữ lại. Lệnh này sẽ copy cả các file ẩn trong thư mục.

sudo cp -a /tmp/wordpress/. /var/www/your_domain

Tiếp theo, gán quyền sở hữu cho user và group www-data. Đây là user và group mà Nginx chạy, đồng thời Nginx cũng cần có quyền đọc và ghi các file WordPress để phục vụ website hay thực hiện cập nhật tự động:

sudo chown -R www-data:www-data /var/www/your_domain

Bước 6: Thiết lập fie cấu hình WordPress

Trước tiên, mở file cấu hình WordPress để chỉnh sửa một số private key nhằm đảo bảo an toàn cho quá trình cài đặt. WordPress cung cấp sẵn một công cụ tạo key an toàn nên bạn có thể dùng lệnh sau để tạo nhanh:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Bạn sẽ nhận về các giá trị khác nhau ở dạng define('AUTH_KEY', 'L4|ABC....] %G00O....)');

Copy phần output, rồi sau đó mở file cấu hình WordPress:

sudo nano /var/www/your_domain/wp-config.php

Tìm phần có chứa các giá trị mẫu:

. . .
define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');
. . .

Xóa những dòng này rồi paste giá trị ở trên vào.

Tiếp theo ta cần đổi tên database, user database và mật khẩu được cấu hình trong MySQL.

Nhập thông tin kết nối cho remote database, sử dụng địa chỉ IP và thông tin đăng nhập giống với các bước ở trên:

 . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'remote_user');

/** MySQL database password */
define('DB_PASSWORD', 'remote_user_password');

/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

Bây giờ thêm dòng dưới đây vào sau define( 'DB_COLLATE', '' ); để yêu cầu WordPress sử dụng kết nối SSL cho database MySQL:

...
define( 'DB_COLLATE', '' );

define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
...

Cuối cùng là lưu rồi đóng file lại.

Bước 7: Thiết lập WordPress qua giao diện web

Bạn sẽ thiết lập WordPress qua giao diện web. Việc thiết lập tương đối đơn giản, WordPress sẽ chỉ hỏi các câu hỏi cần thiết và cài đặt những bảng cần trong database.

Chuyển đến tên miền (hoặc địa chỉ IP public) của web server, theo sau là /wp-admin:

http://your_domain.com/wp-admin

Sau đó hệ thống sẽ yêu cầu chọn ngôn ngữ muốn sử dụng.

Chọn ngôn ngữ
Chọn ngôn ngữ

Tiếp đến là trang cài đặt chính. Chọn tên cho trang WordPress và username (nên hạn chế chọn tên admin để đảm bảo bảo mật). Sau đó một password mạnh sẽ được tự động tạo.

Tiếp theo là nhập địa chỉ email và chọn xem có muốn hiển thị trang cho các công cụ tìm kiếm hay không.

Các bước thiết lập thông tin cần thiết của WordPress
Các bước thiết lập thông tin cần thiết của WordPress

Sau khi hoàn tất, bạn sẽ đăng nhập được vào giao diện admin WordPress bằng tài khoản vừa tạo. Bây giờ ta có thể truy cập dashboard để bắt đầu việc tùy chỉnh trang WordPress này.

Nếu bạn đang gặp khó khăn khi thực hiện các thao tác trên hoặc cảm thấy chúng quá phức tạp, không cần phải lo lắng. Với sự hỗ trợ nhanh chóng từ Vietnix, việc cài đặt sẽ trở nên dễ dàng hơn bao giờ hết. Vietnix sở hữu nhiều ưu điểm vượt trội so với các nhà cung cấp khác mà bạn không thể bỏ qua như:

  • 11 năm kinh nghiệm hoạt động trong lĩnh vực giải pháp lưu trữ số.
  • 50.000 khách hàng cá nhân, doanh nghiệp.
  • 100.000 dịch vụ được kích hoạt.
  • 97% khách hàng giới thiệu dịch vụ sau khi sử dụng.
  • Thương hiệu Việt Nam xuất sắc 2022.

Liên hệ với đội ngũ để trải nghiệm dịch vụ lưu trữ số hosting, VPS, tên miền chất lượng cao với chi phí tiết kiệm nhất. Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Hotline: 1800 1093.
  • Email: sales@vietnix.com.vn.

Lời kết

Bài viết này đã hướng dẫn chi tiết cách thiết lập cơ sở dữ liệu từ xa với MySQL trên Ubuntu 20.04 được bảo vệ bằng SSL từ một trang remote WordPress. Các bước thực hiện và lệnh trong hướng dẫn này đều có thể áp dụng được cho bất kỳ ứng dụng web nào. Bạn đọc có thể tham khảo tài liệu hướng dẫn của ứng dụng hoặc database để biết rõ hơn chi tiết thực hiện.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

ĐĂNG KÝ DÙNG THỬ HOSTING

7 NGÀY MIỄN PHÍ

XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG