Thứ tư, 28/11/2018 | 00:00 GMT+7

Cách thiết lập cơ sở dữ liệu từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 18.04

Khi ứng dụng hoặc trang web phát triển, có thể đến lúc bạn phát triển hơn cài đặt server hiện tại của bạn . Nếu bạn đang lưu trữ web server và chương trình backend database của bạn trên cùng một máy, có thể là ý kiến hay khi tách hai chức năng này ra để mỗi chức năng có thể hoạt động trên phần cứng của riêng mình và chia sẻ tải đáp ứng yêu cầu của khách truy cập.

Trong hướng dẫn này, ta sẽ giới thiệu cho các bạn cách cấu hình server database MySQL từ xa mà ứng dụng web của bạn có thể kết nối. Ta sẽ sử dụng WordPress làm ví dụ để có thứ gì đó hoạt động, nhưng kỹ thuật này có thể áp dụng rộng rãi cho bất kỳ ứng dụng nào được hỗ trợ bởi MySQL.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần :

  • Hai server Ubuntu 18.04. Mỗi người phải có user không phải root có quyền sudo và firewall UFW được kích hoạt, như được mô tả trong hướng dẫn Cài đặt server ban đầu với Ubuntu 18.04 của ta . Một trong những server này sẽ lưu trữ phần backend MySQL của bạn và trong suốt hướng dẫn này, ta sẽ gọi nó là server database . Cái kia sẽ kết nối với server database của bạn từ xa và hoạt động như web server của bạn; tương tự như vậy, ta sẽ gọi nó là web server trong quá trình hướng dẫn này.
  • Nginx và PHP được cài đặt trên web server của bạn . Hướng dẫn Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP ) trong Ubuntu 18.04 của ta sẽ hướng dẫn bạn qua quá trình này, nhưng lưu ý bạn nên bỏ qua Bước 2 của hướng dẫn này, phần tập trung vào cài đặt MySQL, vì bạn sẽ cài đặt MySQL trên server database của bạn.
  • MySQL được cài đặt trên server database của bạn . Làm theo Cách cài đặt MySQL trên Ubuntu 18.04 để cài đặt điều này.
  • Theo tùy chọn (nhưng được khuyến khích đặc biệt), certificate TLS / SSL từ Let's Encrypt được cài đặt trên web server của bạn . Bạn cần mua một domain và cài đặt bản ghi DNS cho server của bạn , nhưng bản thân các certificate đều miễn phí. Hướng dẫn của ta Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04 sẽ chỉ cho bạn cách lấy các certificate này.

Bước 1 - Cấu hình MySQL để lắng nghe kết nối từ xa

Lưu trữ dữ liệu của một người trên một server riêng biệt là một cách hay để mở rộng một cách duyên dáng sau khi đạt đến mức hiệu suất của cấu hình một máy. Nó cũng cung cấp cấu trúc cơ bản cần thiết để cân bằng tải và mở rộng cơ sở hạ tầng của bạn hơn nữa sau này. Sau khi cài đặt MySQL theo hướng dẫn tiên quyết, bạn cần thay đổi một số giá trị cấu hình để cho phép kết nối từ các máy tính khác.

Hầu hết các thay đổi cấu hình của server MySQL có thể được thực hiện trong file mysqld.cnf , được lưu trữ trong folder /etc/mysql/mysql.conf.d/ theo mặc định. Mở file này trên server database của bạn với quyền root trong trình soạn thảo bạn muốn . Ở đây, ta sẽ sử dụng nano :

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

Tệp này được chia thành các phần được ký hiệu bằng nhãn trong dấu ngoặc vuông ( [] ). Tìm phần có nhãn mysqld :

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
[mysqld]
. . .

Trong phần này, hãy tìm một tham số được gọi là bind-address . Điều này cho phần mềm database biết địa chỉ mạng nào để lắng nghe các kết nối.

Theo mặc định, điều này được đặt thành 127.0.0.1 , nghĩa là MySQL được cấu hình để chỉ tìm kiếm các kết nối local . Bạn cần thay đổi điều này để tham chiếu đến một địa chỉ IP bên ngoài nơi server của bạn có thể được kết nối.

Nếu cả hai server của bạn nằm trong một trung tâm dữ liệu có khả năng kết nối mạng riêng, hãy sử dụng IP mạng riêng của server database của bạn. Nếu không, bạn có thể sử dụng địa chỉ IP công cộng của nó:

/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
bind-address = db_server_ip

Vì bạn sẽ kết nối với database của bạn qua internet, bạn nên yêu cầu các kết nối được mã hóa để giữ an toàn cho dữ liệu của bạn . Nếu bạn không mã hóa kết nối MySQL của bạn , bất kỳ ai trên mạng có thể đánh hơi thông tin nhạy cảm giữa web server và database của bạn. Để mã hóa các kết nối MySQL, hãy thêm dòng sau vào dòng bind-address mà bạn vừa cập nhật:

/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
require_secure_transport = on
. . .

Lưu file khi bạn hoàn tất. Nếu bạn đang sử dụng nano , hãy thực hiện việc này bằng cách nhấn CTRL+X , Y , sau đó ENTER .

Để kết nối SSL hoạt động, bạn cần tạo một số khóa và certificate . MySQL đi kèm với một lệnh sẽ tự động cài đặt chúng. Chạy lệnh sau để tạo các file cần thiết. Nó cũng làm cho chúng có thể đọc được bởi server MySQL bằng cách chỉ định UID của user mysql :

  • sudo mysql_ssl_rsa_setup --uid=mysql

Để buộc MySQL cập nhật cấu hình của nó và đọc thông tin SSL mới, hãy khởi động lại database :

  • sudo systemctl restart mysql

Để xác nhận server hiện đang lắng nghe trên giao diện bên ngoài, hãy chạy netstat sau:

  • sudo netstat -plunt | grep mysqld
Output
tcp        0      0 db_server_ip:3306     0.0.0.0:*               LISTEN      27328/mysqld

netstat in số liệu thống kê về hệ thống mạng của server của bạn. Kết quả này cho ta thấy rằng một quá trình gọi là mysqld được gắn vào db_server_ip tại cổng 3306 , cổng MySQL tiêu chuẩn, xác nhận server đang lắng nghe trên giao diện thích hợp.

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

  • sudo ufw allow mysql

Đó là tất cả những thay đổi cấu hình bạn cần thực hiện đối với MySQL. Tiếp theo, ta sẽ xem xét cách cài đặt database và một số profile user , một trong số đó bạn sẽ sử dụng để truy cập server từ xa.

Bước 2 - Cài đặt database WordPress và thông tin đăng nhập từ xa

Mặc dù bản thân MySQL hiện đang lắng nghe trên một địa chỉ IP bên ngoài, nhưng hiện không có user hoặc database hỗ trợ từ xa nào được cấu hình . Hãy tạo một database cho WordPress và một cặp user có thể truy cập nó.

Bắt đầu bằng cách kết nối với MySQL với quyền là user MySQL gốc :

  • sudo mysql

Lưu ý: Nếu bạn đã cài đặt xác thực password , như được mô tả trong Bước 3 của hướng dẫn MySQL yêu cầu , thay vào đó bạn cần sử dụng lệnh sau để truy cập MySQL shell:

  • mysql -u root -p

Sau khi chạy lệnh này, bạn cần nhập password gốc MySQL của bạn và sau khi nhập password đó, bạn sẽ nhận được dấu nhắc mysql> mới.

Từ dấu nhắc MySQL, hãy tạo database mà WordPress sẽ sử dụng. Có thể hữu ích nếu đặt cho database này một cái tên dễ nhận biết để bạn có thể dễ dàng xác định nó sau này. Ở đây, ta sẽ đặt tên cho nó là wordpress :

  • CREATE DATABASE wordpress;

Đến đây bạn đã tạo database của bạn , tiếp theo bạn cần tạo một cặp user . Ta sẽ tạo một user chỉ local cũng như một user từ xa được liên kết với địa chỉ IP của web server .

Đầu tiên, tạo user local của bạn, wpuser và đặt account này chỉ trùng với các nỗ lực kết nối local bằng cách sử dụng localhost trong khai báo:

  • CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';

Sau đó cấp cho account này toàn quyền truy cập vào database wordpress :

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

User này hiện có thể thực hiện bất kỳ thao tác nào trên database cho WordPress, nhưng không thể sử dụng account này từ xa, vì nó chỉ trùng với các kết nối từ máy local . Với ý nghĩ này, hãy tạo một account đồng hành sẽ trùng với các kết nối chỉ từ web server của bạn. Đối với điều này, bạn cần địa chỉ IP của web server của bạn .

Xin lưu ý bạn phải sử dụng địa chỉ IP sử dụng cùng một mạng mà bạn đã cấu hình trong file mysqld.cnf của bạn . Điều này nghĩa là nếu bạn đã chỉ định một IP mạng riêng trong file mysqld.cnf , bạn cần bao gồm IP riêng của web server của bạn trong hai lệnh sau. Nếu bạn đã cấu hình MySQL để sử dụng Internet công cộng, bạn phải trùng với địa chỉ IP công cộng của web server .

  • CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';

Sau khi tạo account từ xa, hãy cấp cho nó các quyền giống như user local của bạn:

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

Cuối cùng, xóa các quyền để MySQL biết để bắt đầu sử dụng chúng:

  • FLUSH PRIVILEGES;

Sau đó, thoát khỏi dấu nhắc MySQL bằng lệnh :

  • exit

Đến đây bạn đã cài đặt database mới và user hỗ trợ từ xa, bạn có thể chuyển sang kiểm tra xem bạn có thể kết nối với database từ web server của bạn hay không.

Bước 3 - Kiểm tra kết nối từ xa và local

Trước khi tiếp tục, tốt nhất nên xác minh bạn có thể kết nối với database của bạn từ cả máy local - server database của bạn - và từ web server của bạn.

Trước tiên, hãy kiểm tra kết nối local từ server database của bạn bằng cách cố gắng đăng nhập bằng account mới của bạn:

  • mysql -u wpuser -p

Khi được yêu cầu , hãy nhập password bạn đã cài đặt cho account này.

Nếu bạn nhận được dấu nhắc MySQL, thì kết nối local đã thành công. Bạn có thể thoát ra bằng lệnh :

  • exit

Tiếp theo, đăng nhập vào web server của bạn để kiểm tra kết nối từ xa:

  • ssh sammy@web_server_ip

Bạn cần cài đặt một số công cụ client cho MySQL trên web server của bạn để truy cập database từ xa. Trước tiên, hãy cập nhật bộ nhớ cache gói local của bạn nếu bạn chưa làm như vậy gần đây:

  • sudo apt update

Sau đó cài đặt các tiện ích client MySQL:

  • sudo apt install mysql-client

Sau đó, kết nối với server database của bạn bằng cú pháp sau:

  • mysql -u remotewpuser -h db_server_ip -p

, bạn phải đảm bảo bạn đang sử dụng địa chỉ IP chính xác cho server database . Nếu bạn đã cấu hình MySQL để lắng nghe trên mạng riêng, hãy nhập IP mạng riêng của database của bạn. Nếu không, hãy nhập địa chỉ IP công cộng của server database của bạn.

Bạn cần nhập password cho account remotewpuser của mình. Sau khi nhập nó và nếu mọi thứ hoạt động như mong đợi, bạn sẽ thấy dấu nhắc MySQL. Xác minh kết nối đang sử dụng SSL bằng lệnh sau:

  • status

Nếu kết nối thực sự đang sử dụng SSL, dòng SSL: sẽ cho biết điều này, như được hiển thị ở đây:

Output
--------------
mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper

Connection id:      52
Current database:
Current user:       remotewpuser@203.0.113.111
SSL:         Cipher in use is DHE-RSA-AES256-SHA
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version:   10
Connection:     203.0.113.111 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3306
Uptime:         3 hours 43 min 40 sec

Threads: 1  Questions: 1858  Slow queries: 0  Opens: 276  Flush tables: 1  Open tables: 184  Queries per second avg: 0.138
--------------

Sau khi xác minh bạn có thể kết nối từ xa, hãy tiếp tục và thoát khỏi dấu nhắc :

  • exit

Như vậy, bạn đã xác minh quyền truy cập local và quyền truy cập từ web server , nhưng bạn chưa xác minh các kết nối khác sẽ bị từ chối. Để kiểm tra thêm, hãy thử làm điều tương tự từ server thứ ba mà bạn không cấu hình account user cụ thể đảm bảo rằng server khác này không được cấp quyền truy cập.

Lưu ý trước khi chạy lệnh sau để thử kết nối, bạn có thể phải cài đặt các tiện ích client MySQL như bạn đã làm ở trên:

  • mysql -u wordpressuser -h db_server_ip -p

Quá trình này sẽ không hoàn thành và sẽ trả lại một lỗi tương tự như sau:

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

Điều này được mong đợi, vì bạn chưa tạo user MySQL được phép kết nối từ server này và cũng mong muốn, vì bạn muốn chắc chắn rằng server database của bạn sẽ từ chối user lạ truy cập vào server MySQL của bạn.

Sau khi kiểm tra thành công kết nối từ xa, bạn có thể tiến hành cài đặt WordPress trên web server của bạn .

Bước 4 - Cài đặt WordPress

Để chứng minh khả năng của server MySQL hỗ trợ từ xa mới của bạn, ta sẽ thực hiện quá trình cài đặt và cấu hình WordPress - hệ thống quản lý nội dung phổ biến - trên web server của bạn. Điều này sẽ yêu cầu bạn download và extract phần mềm, cấu hình thông tin kết nối của bạn, sau đó chạy qua cài đặt dựa trên web của WordPress.

Trên web server của bạn, hãy download bản phát hành mới nhất của WordPress vào folder chính của bạn:

  • cd ~
  • curl -O https://wordpress.org/latest.tar.gz

Extract các file , sẽ tạo một folder có tên là wordpress trong folder chính của bạn:

  • tar xzvf latest.tar.gz

WordPress bao gồm một file cấu hình mẫu mà ta sẽ sử dụng làm điểm khởi đầu. Tạo một bản sao của file này, xóa -sample khỏi tên file để nó sẽ được tải bởi WordPress:

  • cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

Khi bạn mở file , trình tự kinh doanh đầu tiên của bạn sẽ là điều chỉnh một số khóa bí mật để cung cấp bảo mật hơn cho cài đặt của bạn. WordPress cung cấp một trình tạo an toàn cho các giá trị này để bạn không phải cố gắng tự mình đưa ra các giá trị tốt. Chúng chỉ được sử dụng trong nội bộ, vì vậy sẽ không ảnh hưởng đến khả năng sử dụng khi có các giá trị phức tạp, an toàn ở đây.

Để lấy các giá trị bảo mật từ trình tạo khóa bí mật của WordPress, hãy nhập:

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

Thao tác này sẽ in một số khóa vào kết quả của bạn. Bạn sẽ thêm chúng vào file wp-config.php trong giây lát:

Cảnh báo! Điều quan trọng là bạn phải yêu cầu các giá trị độc đáo của riêng mình mỗi lần. Không sao chép các giá trị hiển thị ở đây!

Output
define('AUTH_KEY',         'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY',  'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY',    '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY',        'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT',        '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT',   '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT',       '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');

Sao chép kết quả bạn nhận được vào clipboard , sau đó mở file cấu hình trong editor của bạn:

  • nano ~/wordpress/wp-config.php

Tìm phần chứa các giá trị giả cho các cài đặt đó. Nó trông giống như sau :

/wordpress/wp-config.php
. . .
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 các dòng đó và dán các giá trị bạn đã sao chép từ dòng lệnh.

Tiếp theo, nhập thông tin kết nối cho database từ xa của bạn. Các dòng cấu hình này nằm ở đầu file , ngay phía trên nơi bạn đã dán khóa của bạn . Hãy nhớ sử dụng cùng một địa chỉ IP mà bạn đã sử dụng trong kiểm tra database từ xa của bạn trước đó:

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

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

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

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

Và cuối cùng, ở bất kỳ vị trí nào trong file , hãy thêm dòng sau yêu cầu WordPress sử dụng kết nối SSL vào database MySQL của ta :

/wordpress/wp-config.php
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

Lưu và đóng file .

Tiếp theo, sao chép các file và folder được tìm thấy trong folder ~/wordpress của bạn vào folder root của tài liệu Nginx. Lưu ý lệnh này bao gồm cờ -a đảm bảo tất cả các quyền hiện có được chuyển sang:

  • sudo cp -a ~/wordpress/* /var/www/html

Sau đó, điều duy nhất cần làm là sửa đổi quyền sở hữu file . Thay đổi quyền sở hữu của tất cả các file trong tài liệu root thành www-data , user web server mặc định của Ubuntu:

  • sudo chown -R www-data:www-data /var/www/html

Như vậy, WordPress đã được cài đặt và bạn đã sẵn sàng chạy qua quy trình cài đặt dựa trên web của nó.

Bước 5 - Cài đặt Wordpress thông qua giao diện web

WordPress có quy trình cài đặt dựa trên web. Khi bạn xem qua nó, nó sẽ hỏi một số câu hỏi và cài đặt tất cả các bảng mà nó cần trong database của bạn. Ở đây, ta sẽ xem xét các bước đầu tiên của việc cài đặt WordPress, mà bạn có thể sử dụng làm điểm bắt đầu để xây dựng trang web tùy chỉnh của riêng mình sử dụng chương trình backend database từ xa.

Điều hướng đến domain (hoặc địa chỉ IP công cộng) được liên kết với web server của bạn:

http://example.com

Bạn sẽ thấy màn hình lựa chọn ngôn ngữ cho trình cài đặt WordPress. Chọn ngôn ngữ thích hợp và nhấp qua màn hình cài đặt chính:

Màn hình cài đặt WordPress

Khi bạn đã gửi thông tin của bạn , bạn cần đăng nhập vào giao diện quản trị WordPress bằng account bạn vừa tạo. Sau đó, bạn sẽ được đưa đến một console nơi bạn có thể tùy chỉnh trang web WordPress mới của bạn .

Kết luận

Theo hướng dẫn này, bạn đã cài đặt database MySQL để chấp nhận các kết nối được bảo vệ bằng SSL từ cài đặt Wordpress từ xa. Các lệnh và kỹ thuật được sử dụng trong hướng dẫn này có thể áp dụng cho bất kỳ ứng dụng web nào được viết bằng bất kỳ ngôn ngữ lập trình nào, nhưng các chi tiết triển khai cụ thể sẽ khác nhau. Tham khảo tài liệu database ứng dụng hoặc ngôn ngữ của bạn để biết thêm thông tin.


Tags:

Các tin trước

Cách quản lý cơ sở dữ liệu SQL 2018-09-26
Cách cải thiện tìm kiếm cơ sở dữ liệu với tìm kiếm toàn văn bản (Full Text Search) trong MySQL 5.6 trên Ubuntu 16.04 2017-10-30
Cách thiết lập cơ sở dữ liệu đồ thị Titan với Cassandra và ElasticSearch trên Ubuntu 16.04 2017-06-27
Cách thiết lập cơ sở dữ liệu từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04 2017-06-05
Cách gỡ lỗi WordPress "Lỗi thiết lập kết nối cơ sở dữ liệu" 2017-04-21
Cách bảo mật cơ sở dữ liệu OrientDB của bạn trên Ubuntu 16.04 2017-03-24
Cách sao lưu, khôi phục và di chuyển cơ sở dữ liệu MongoDB trên Ubuntu 14.04 2016-04-15
Cách nhập và xuất cơ sở dữ liệu MongoDB trên Ubuntu 14.04 2016-04-15
Cách chạy cơ sở dữ liệu cụm đa node với Cassandra trên Ubuntu 14.04 2016-03-31
Cách nhập và xuất cơ sở dữ liệu OrientDB trên Ubuntu 14.04 2016-01-06