Thứ hai, 05/06/2017 | 00:00 GMT+7

Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04

Khi ứng dụng hoặc trang web phát triển, bạn có thể đến một thời điểm mà 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ẽ thảo luận về 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 với. Ta sẽ sử dụng WordPress làm ví dụ để ta có một cái gì đó để làm việc, 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 MySQL hỗ trợ.

Yêu cầu

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

Bước 1 - Cài đặt MySQL trên Server Database

Lưu trữ dữ liệu của ta 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 khi ta đạ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 ta hơn nữa sau này.

Để bắt đầu, ta sẽ cài đặt MySQL trên server mà ta không cài đặt LEMP . Đăng nhập vào server này, sau đó cập nhật cache gói của bạn và cài đặt phần mềm server MySQL:

  • sudo apt-get update
  • sudo apt-get install mysql-server

Bạn cần đặt và xác nhận password gốc cho MySQL trong quá trình cài đặt. Chọn một password mạnh và ghi chú lại password đó, vì ta cần nó sau này.

MySQL sẽ được cài đặt và chạy ngay bây giờ. Hãy kiểm tra bằng cách sử dụng systemctl :

  • systemctl status mysql
Output
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-05-23 14:54:04 UTC; 12s ago Main PID: 27179 (mysqld) CGroup: /system.slice/mysql.service └─27179 /usr/sbin/mysqld

Dòng Active: active (running) nghĩa là MySQL đã được cài đặt và đang chạy. Bây giờ ta sẽ làm cho việc cài đặt an toàn hơn một chút. MySQL đi kèm với một tập lệnh hướng dẫn bạn cách khóa hệ thống:

  • mysql_secure_installation

Thao tác này sẽ yêu cầu bạn nhập password gốc MySQL mà ta vừa đặt. Nhập nó vào và nhấn ENTER . Bây giờ ta sẽ trả lời một loạt các dấu nhắc có hoặc không. Hãy xem qua chúng:

Đầu tiên, ta được hỏi về plugin xác thực password , một plugin có thể tự động thực thi các luật về độ mạnh password nhất định cho user MySQL của bạn. Bật tính năng này là quyết định bạn cần thực hiện dựa trên nhu cầu bảo mật cá nhân của bạn . Nhập yENTER để bật hoặc chỉ cần nhấn ENTER để bỏ qua. Nếu được bật, bạn cũng sẽ được yêu cầu chọn cấp độ từ 0–2 về mức độ nghiêm ngặt của việc xác thực password . Chọn một số và nhấn ENTER để tiếp tục.

Tiếp theo, bạn sẽ được hỏi nếu bạn muốn thay đổi password gốc . Vì ta chỉ tạo password khi ta cài đặt MySQL, ta có thể bỏ qua điều này một cách an toàn. Nhấn ENTER để tiếp tục mà không cần cập nhật password .

Phần còn lại của dấu nhắc có thể được trả lời là . Bạn sẽ được hỏi về cách xóa user MySQL ẩn danh , không cho phép đăng nhập root từ xa, xóa database thử nghiệm và reload các bảng quyền đảm bảo các thay đổi trước đó có hiệu lực. Đây là một ý tưởng tốt. Nhập y và nhấn ENTER cho mỗi.

Tập lệnh sẽ thoát sau khi tất cả các dấu nhắc được trả lời. Bây giờ cài đặt MySQL của ta đã được bảo mật hợp lý. Trong bước tiếp theo, ta sẽ cấu hình MySQL để cho phép truy cập từ các kết nối từ xa.

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

Đến đây bạn đã cài đặt và chạy database của bạn , ta 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.

Mở file cấu hình mysqld với quyền root trong editor :

  • 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 các từ trong ngoặc ([và]). Tìm phần có nhãn mysqld :

mysqld.cnf
. . . [mysqld] 

Trong phần này, bạn cần tìm một tham số có tên 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.

Hiện tại, MySQL được cấu hình để chỉ tìm kiếm các kết nối local . Ta cần thay đổi điều đó để tham chiếu đến một địa chỉ IP bên ngoài mà server của bạn có thể được truy cập.

Nếu cả hai server của bạn đều 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 . Nếu không, bạn có thể sử dụng địa chỉ IP công cộng:

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

Vì ta sẽ kết nối với database qua internet, ta sẽ yêu cầu các kết nối được mã hóa để giữ an toàn cho dữ liệu của ta . 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. Thêm dòng sau vào dòng bind-address mà ta vừa cập nhật:

/etc/mysql/my.cnf
. . . require_secure_transport = on 

Lưu file khi bạn hoàn tất.

Để kết nối SSL hoạt động, ta cần tạo một số khóa và certificate . MySQL đi kèm với một lệnh tự động cài đặt mọi thứ ta cần:

  • sudo mysql_ssl_rsa_setup --uid=mysql

Thao tác này sẽ tạo các file cần thiết và làm cho chúng có thể đọc được bởi server MySQL ( --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 kiểm tra bằng netstat :

  • 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 ta . Kết quả này cho ta thấy rằng một tiến trình có tên là mysqld được gắn vào db_server_ip tại cổng 3306 , cổng MySQL tiêu chuẩn.

Bây giờ, hãy mở cổng đó trên firewall để cho phép lưu lượng truy cập qua:

  • sudo ufw allow mysql

Tiếp theo, ta sẽ cài đặt user và database mà ta cần để truy cập server từ xa.

Bước 3 - 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à user có thể truy cập nó.

Bắt đầu bằng cách kết nối với MySQL bằng account gốc MySQL:

  • mysql -u root -p

Bạn cần nhập password gốc MySQL của bạn và sau đó bạn sẽ nhận được một dấu nhắc mysql> mới.

Bây giờ ta có thể tạo database mà WordPress sẽ sử dụng. Ta sẽ chỉ gọi đây là wordpress để sau này có thể dễ dàng nhận biết:

  • CREATE DATABASE wordpress;

Lưu ý: Tất cả các câu lệnh SQL phải kết thúc bằng dấu chấm phẩy ( ; ). Nếu bạn nhấn ENTER trên một lệnh MySQL và chỉ thấy một dòng mới với dấu nhắc -> , có thể bạn đã quên dấu chấm phẩy. Chỉ cần nhập nó trên dòng mới và nhấn ENTER lần nữa để tiếp tục.

Bây giờ ta có một database , ta cần tạo user của bạn . Một bước ngoặt trong việc tạo user của ta là ta cần xác định hai cấu hình khác nhau dựa trên nơi user đang kết nối. Ta sẽ tạo một user chỉ local và một user từ xa được liên kết với địa chỉ IP của web server của ta .

Đầu tiên, ta tạo user local wordpressuser của bạn và làm cho 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 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

Hãy tiếp tục và cấp cho account này toàn quyền truy cập vào database của ta :

  • GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'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 .

Bây giờ, hãy tạo một account đồng hành sẽ trùng với các kết nối độc quyền từ web server của ta . Đối với điều này, bạn cần địa chỉ IP của web server của bạn . Ta có thể đặt tên cho account này là bất kỳ thứ gì, nhưng để có trải nghiệm nhất quán hơn, ta sẽ sử dụng cùng một tên user như đã làm ở trên, chỉ với phần server được sửa đổi.

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 đã sử dụng IP mạng riêng, bạn cần tạo luật bên dưới để sử dụng IP riêng của web server của bạn . 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 'wordpressuser'@'web-server_ip' IDENTIFIED BY 'password';

Bây giờ ta đã có account từ xa của bạn , ta có thể cấp cho nó các quyền giống như user local :

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

Xóa các quyền để ghi chúng vào đĩa và 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

Bây giờ ta đã cài đặt database mới và user hỗ trợ từ xa, hãy kiểm tra database và các kết nối.

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

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

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

mysql -u wordpressuser -p 

Nhập password bạn đã cài đặt cho account này khi được yêu cầu .

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

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

Trên web server của bạn, bạn cần cài đặt một số công cụ client cho MySQL để truy cập database từ xa. Cập nhật cache ẩn gói local của bạn, sau đó cài đặt các tiện ích khách:

  • sudo apt-get update
  • sudo apt-get install mysql-client

Bây giờ, ta có thể kết nối với server database của bạn bằng cú pháp sau:

  • mysql -u wordpressuser -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 wordpressuser của mình và nếu mọi việc suôn sẻ, bạn sẽ nhận được dấu nhắc MySQL. Ta có thể xác minh kết nối đang sử dụng SSL bằng lệnh sau:

  • status
Output
-------------- mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper Connection id: 52 Current database: Current user: wordpressuser@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 --------------

Dòng SSL: sẽ cho biết liệu mật mã SSL có đang được sử dụng hay không. Bạn có thể tiếp tục và thoát khỏi dấu nhắc ngay bây giờ, vì bạn đã xác minh bạn có thể kết nối từ xa:

  • exit

Để kiểm tra thêm, bạn có thể thử làm điều tương tự từ server thứ ba đảm bảo rằng server khác này không được cấp quyền truy cập. 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.

Hãy tiếp tục và thử quy trình tương tự trên server mà bạn không cấu hình account user cụ thể. Bạn có thể phải cài đặt các tiện ích khách như đã làm ở trên:

  • mysql -u wordpressuser -h db_server_ip -p

Điều này sẽ không hoàn thành . Nó sẽ trả lại một lỗi trông giống như sau:

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

Đây là những gì ta mong đợi và những gì ta muốn.

Ta đã kiểm tra thành công kết nối từ xa và hiện có thể tiến hành cài đặt WordPress của bạn .

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

Để chứng minh khả năng của server MySQL hỗ trợ từ xa mới của ta , ta sẽ cài đặt và cấu hình WordPress - nền tảng blog phổ biến - trên web server của ta . Điều này sẽ yêu cầu ta download và extract phần mềm, cấu hình thông tin kết nối của ta , 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. Ta 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 ta mở file , trình tự kinh doanh đầu tiên của ta sẽ là điều chỉnh một số khóa bí mật để cung cấp bảo mật cho cài đặt của ta . 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 ra một số cấu hình mà ta có thể sao chép và paste vào file wp-config.php .

Cảnh báo! Điều quan trọng là bạn yêu cầu các giá trị duy nhất mỗi lần. Không sao chép các giá trị hiển thị bên dưới!

Output
define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');

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 :

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, ta cần 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 ta đã 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 đó:

wp-config.php
. . . /** The name of the database for WordPress */ define('DB_NAME', 'wordpress');  /** MySQL database username */ define('DB_USER', 'wordpressuser');  /** 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 dán dòng sau yêu cầu WordPress sử dụng kết nối SSL với database MySQL của ta :

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

Lưu và đóng file .

Tiếp theo, ta cần sao chép các file và folder có trong folder ~/wordpress của ta vào folder root của Nginx. Ta sử dụng cờ -a đảm bảo các quyền của ta được duy trì:

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

Bây giờ tất cả các file của ta đã có sẵn. Điều duy nhất còn lại cần làm là sửa đổi quyền sở hữu file . Ta sẽ đặt tất cả các file trong root tài liệu thành thuộc sở hữu của user web server của ta , www-data :

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

WordPress hiện đã được cài đặt và sẵn sàng chạy thông qua quy trình cài đặt dựa trên web của nó. Ta sẽ làm điều đó trong bước tiếp theo.

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

WordPress có quy trình cài đặt dựa trên web sẽ hỏi một số câu hỏi và cài đặt các bảng cần thiết trong database của ta . Hãy bắt đầu điều đó ngay bây giờ.

Đ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 trang tổng quan nơi bạn có thể tùy chỉnh và vận hành trang web của bạn .

Kết luận

Trong hướng dẫn này, ta đã 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 ta đã sử dụng 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 gỡ lỗi WordPress "Lỗi thiết lập kết nối database" 2017-04-21
Cách bảo mật database OrientDB của bạn trên Ubuntu 16.04 2017-03-24
Cách backup, khôi phục và di chuyển database MongoDB trên Ubuntu 14.04 2016-04-15
Cách nhập và xuất database MongoDB trên Ubuntu 14.04 2016-04-15
Cách chạy database cụm đa node với Cassandra trên Ubuntu 14.04 2016-03-31
Cách nhập và xuất database OrientDB trên Ubuntu 14.04 2016-01-06
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL 2014-04-17
Cách kết nối Node.js với database MongoDB trên VPS 2013-10-09
Cách thiết lập database MongoDB có thể mở rộng 2013-02-26