MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến, thường được triển khai trong bộ công nghệ LAMP (Linux, Apache, MySQL, PHP/Python/Perl). MySQL sử dụng mô hình quan hệ và ngôn ngữ truy vấn có cấu trúc (SQL) để tổ chức và quản lý dữ liệu hiệu quả.
Bạn muốn cài đặt MySQL trên Ubuntu 20.04 một cách dễ dàng? Hãy sử dụng VPS Việt Nam chất lượng cao từ các nhà cung cấp uy tín để đảm bảo hiệu suất tối ưu. Với hạ tầng mạnh mẽ, bạn sẽ có môi trường lý tưởng để triển khai cơ sở dữ liệu một cách nhanh chóng và an toàn.
Bài hướng dẫn này sẽ chỉ dẫn bạn cách cài đặt MySQL phiên bản 8.0 trên máy chủ Ubuntu 20.04. Sau khi hoàn thành, bạn sẽ có một hệ thống cơ sở dữ liệu quan hệ hoàn chỉnh, sẵn sàng hỗ trợ việc xây dựng và phát triển website hoặc ứng dụng của bạn.
Yêu cầu
Để theo dõi hướng dẫn này, bạn cần:
-
Một máy chủ Ubuntu 20.04 với người dùng quản trị không phải root và một Firewall được cấu hình với UFW. Để cài đặt, hãy theo dõi hướng dẫn thiết lập máy chủ ban đầu cho Ubuntu 20.04.
Bước 1 – Cài đặt MySQL
Trên Ubuntu 20.04, bạn có thể cài đặt MySQL bằng cách sử dụng kho gói APT. Tại thời điểm viết bài này, phiên bản MySQL có sẵn trong kho Ubuntu mặc định là phiên bản 8.0.27.
Để cài đặt, hãy cập nhật chỉ mục gói trên máy chủ của bạn (nếu chưa làm mới gần đây):
sudo apt update
Sau đó, cài đặt gói mysql-server:
sudo apt install mysql-server
Đảm bảo rằng máy chủ MySQL đang chạy bằng cách sử dụng lệnh khởi động systemctl:
sudo systemctl start mysql.service
Những lệnh trên sẽ cài đặt và khởi động MySQL, nhưng chưa yêu cầu bạn đặt mật khẩu hay thực hiện thay đổi cấu hình nào khác. Vì vậy, cài đặt MySQL ở trạng thái này chưa được bảo mật, và chúng ta sẽ tiến hành cấu hình ngay ở bước tiếp theo.
Bước 2 – Cấu hình MySQL
Với các cài đặt mới của MySQL, bạn nên chạy script bảo mật có sẵn của hệ quản trị cơ sở dữ liệu này. Script này sẽ thay đổi một số thiết lập mặc định kém an toàn, như đăng nhập root từ xa và các người dùng mẫu.
Chú ý:
Từ tháng 7 năm 2022, khi chạy script mysql_secure_installation mà không cấu hình bổ sung, sẽ xảy ra lỗi. Lỗi xảy ra vì script cố gắng đặt mật khẩu cho tài khoản MySQL root, nhưng theo mặc định trên Ubuntu, tài khoản này không được cấu hình để kết nối bằng mật khẩu.Trước tháng 7/2022, script sẽ thất bại một cách im lặng sau khi cố gắng đặt mật khẩu cho root và tiếp tục các bước còn lại. Tuy nhiên, kể từ thời điểm hiện tại, script sẽ trả về lỗi sau khi bạn nhập và xác nhận mật khẩu:
Output ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters. New password:Việc này dẫn đến vòng lặp đệ quy, và bạn chỉ thoát ra bằng cách đóng cửa sổ terminal.
Vì script mysql_secure_installation thực hiện nhiều thao tác hữu ích để bảo vệ cài đặt MySQL của bạn, nên vẫn được khuyến nghị chạy script này trước khi sử dụng MySQL để quản lý dữ liệu. Để tránh vòng lặp đệ quy trên, bạn cần điều chỉnh cách tài khoản root của MySQL xác thực trước.
Mở giao diện MySQL prompt:
sudo mysql
Sau đó, chạy lệnh ALTER USER sau để thay đổi phương thức xác thực của người dùng root thành sử dụng mật khẩu (ví dụ: mysql_native_password):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau khi thay đổi, thoát khỏi MySQL prompt:
exit
Sau đó, bạn có thể chạy script mysql_secure_installation mà không gặp lỗi.
Khi script bảo mật hoàn thành, bạn có thể mở lại MySQL và thay đổi phương thức xác thực của tài khoản root trở về mặc định, auth_socket. Để xác thực như tài khoản root với mật khẩu, chạy lệnh:
mysql -u root -p
Sau đó, trở lại sử dụng phương thức xác thực mặc định với lệnh:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
Việc này sẽ cho phép bạn kết nối lại với MySQL như tài khoản root bằng lệnh:sudo mysql
Chạy script bảo mật với quyền sudo:
sudo mysql_secure_installation
Script này sẽ đưa bạn qua một chuỗi các yêu cầu để thay đổi các thiết lập bảo mật của MySQL. Lần đầu tiên, script sẽ hỏi bạn có muốn cài đặt Validate Password Plugin hay không – plugin này dùng để kiểm tra độ mạnh của mật khẩu người dùng MySQL mới trước khi chấp nhận.
Nếu bạn chọn cài đặt Validate Password Plugin, mọi người dùng MySQL bạn tạo ra sau này dùng mật khẩu sẽ phải tuân theo chính sách mật khẩu mà bạn chọn. Mức chính sách mạnh nhất (bạn chọn nhập số 2) sẽ yêu cầu mật khẩu ít nhất tám ký tự và phải có sự kết hợp giữa chữ hoa, chữ thường, số và ký tự đặc biệt.
Ví dụ các thông báo trong quá trình chạy:
Output Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: Y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Dù bạn có chọn cài đặt Validate Password Plugin hay không, prompt tiếp theo sẽ yêu cầu bạn đặt mật khẩu cho tài khoản root của MySQL. Nhập và xác nhận một mật khẩu an toàn của bạn:
Output Please set the password for root here. New password: Re-enter new password:
Lưu ý rằng, mặc dù bạn đã đặt mật khẩu cho tài khoản root của MySQL, nhưng tài khoản này hiện chưa được cấu hình để xác thực bằng mật khẩu khi kết nối vào shell MySQL.
Nếu bạn sử dụng Validate Password Plugin, bạn sẽ nhận được phản hồi về độ mạnh của mật khẩu mới. Sau đó, script sẽ hỏi bạn có muốn tiếp tục với mật khẩu vừa nhập hay muốn nhập mật khẩu mới. Nếu hài lòng với mật khẩu, nhập Y để tiếp tục.
Output Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Tiếp theo, bạn có thể nhấn Y và sau đó nhấn ENTER để chấp nhận các thiết lập mặc định cho các câu hỏi tiếp theo. Quá trình này sẽ loại bỏ một số người dùng ẩn danh và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa, và nạp các quy tắc mới để MySQL ngay lập tức tuân theo các thay đổi bạn đã thực hiện.
Khi script hoàn thành, cài đặt MySQL của bạn đã được bảo mật. Bạn có thể chuyển sang bước tạo người dùng MySQL chuyên dụng bằng MySQL client.
Bước 3 – Tạo người dùng MySQL chuyên dụng và cấp quyền
Sau khi cài đặt, MySQL tạo ra một tài khoản người dùng root, tài khoản này có toàn quyền quản lý máy chủ MySQL, nghĩa là có quyền kiểm soát mọi cơ sở dữ liệu, bảng, người dùng, v.v. Vì vậy, tốt nhất bạn chỉ sử dụng tài khoản này cho các tác vụ quản trị. Bước này hướng dẫn cách sử dụng tài khoản root để tạo một tài khoản người dùng mới và cấp cho nó các quyền cần thiết.
Trên hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản sau), tài khoản MySQL root được thiết lập mặc định sử dụng plugin auth_socket thay vì xác thực bằng mật khẩu. Plugin này yêu cầu tên người dùng của hệ điều hành khớp với tên người dùng MySQL khi gọi lệnh, vì vậy bạn phải sử dụng sudo để truy cập tài khoản root của MySQL:
sudo mysql
Lưu ý: Nếu bạn cài đặt MySQL theo một hướng dẫn khác và đã bật xác thực bằng mật khẩu cho root, bạn sẽ cần sử dụng lệnh khác để truy cập shell MySQL, ví dụ:
mysql -u root -p
Khi đã truy cập được vào MySQL prompt, bạn có thể tạo người dùng mới với lệnh CREATE USER. Cú pháp chung như sau:
Sau CREATE USER, bạn chỉ định tên người dùng, theo sau là ký hiệu @ và sau đó là hostname mà người dùng này sẽ kết nối từ đó. Nếu bạn chỉ truy cập từ máy chủ Ubuntu, bạn có thể chỉ định localhost. Việc bao bọc tên người dùng và hostname trong dấu nháy đơn không bắt buộc, nhưng giúp tránh lỗi.
Bạn có nhiều lựa chọn cho plugin xác thực. Plugin auth_socket đã đề cập có thể tiện lợi vì nó cung cấp bảo mật mạnh mà không yêu cầu nhập mật khẩu, nhưng nó lại cản trở kết nối từ xa. Nếu bạn cần cho phép các chương trình bên ngoài tương tác với MySQL, bạn có thể bỏ qua phần WITH authentication_plugin để người dùng xác thực bằng plugin mặc định của MySQL, caching_sha2_password. Tài liệu MySQL khuyến khích plugin này cho người dùng đăng nhập bằng mật khẩu nhờ tính bảo mật cao.
Chạy lệnh sau để tạo người dùng xác thực bằng caching_sha2_password. Hãy thay sammy bằng tên người dùng mà bạn mong muốn và password bằng một mật khẩu an toàn:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Lưu ý: Một số phiên bản của PHP có vấn đề với caching_sha2_password. Nếu bạn định sử dụng cơ sở dữ liệu này với ứng dụng PHP (ví dụ như phpMyAdmin), bạn có thể muốn tạo người dùng xác thực bằng plugin cũ nhưng vẫn an toàn, mysql_native_password:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Nếu bạn chưa chắc chắn, bạn có thể tạo người dùng với caching_sha2_password rồi sau đó thay đổi bằng lệnh:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau khi tạo người dùng, bạn cần cấp quyền cho người dùng đó. Cú pháp chung để cấp quyền như sau:
GRANT PRIVILEGE ON database.table TO 'username'@'host';
Giá trị PRIVILEGE trong cú pháp này xác định các thao tác mà người dùng được phép thực hiện trên cơ sở dữ liệu và bảng chỉ định. Bạn có thể cấp nhiều quyền cho cùng một người dùng trong một lệnh, phân tách bằng dấu phẩy. Ngoài ra, bạn có thể cấp quyền toàn cục cho người dùng bằng cách thay tên cơ sở dữ liệu và bảng bằng dấu hoa thị (*) – ký tự đặc biệt đại diện cho “tất cả”.
Ví dụ, lệnh sau cấp quyền toàn cục cho người dùng để CREATE
, ALTER
, DROP
cơ sở dữ liệu, bảng và người dùng, cũng như quyền INSERT
, UPDATE
và DELETE
dữ liệu từ bất kỳ bảng nào trên máy chủ. Nó cũng cấp cho người dùng quyền SELECT
để truy vấn dữ liệu, REFERENCES
để tạo khóa ngoại, và RELOAD
để thực hiện thao tác FLUSH
. Tuy nhiên, hãy chỉ cấp những quyền cần thiết cho người dùng:
Bạn có thể tìm thấy danh sách đầy đủ các quyền hạn có sẵn trong tài liệu chính thức của MySQL.
Chạy câu lệnh GRANT này, thay sammy bằng tên người dùng MySQL của bạn, để cấp các quyền này cho người dùng của bạn:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Lệnh trên bao gồm cả WITH GRANT OPTION, cho phép người dùng MySQL có thể cấp lại bất kỳ quyền nào mà nó có cho các người dùng khác.
Chú ý: Một số người dùng có thể muốn cấp quyền ALL PRIVILEGES, tương đương với quyền của tài khoản root. Ví dụ:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;Tuy nhiên, quyền này nên được cấp một cách thận trọng vì nó cho phép người dùng có toàn quyền kiểm soát mọi cơ sở dữ liệu trên máy chủ.
Sau khi cấp quyền, hãy chạy lệnh FLUSH PRIVILEGES để giải phóng bộ nhớ đã được cache do các lệnh CREATE USER và GRANT:
FLUSH PRIVILEGES;
Sau đó, thoát khỏi MySQL client:
exit
Trong tương lai, để đăng nhập bằng người dùng MySQL mới, bạn có thể sử dụng lệnh sau:
mysql -u sammy -p
Tham số -p sẽ khiến MySQL client yêu cầu nhập mật khẩu của người dùng.
Bước 4 – Kiểm tra MySQL
Bất kể bạn đã cài đặt như thế nào, MySQL nên được khởi động tự động. Để kiểm tra, hãy xem trạng thái của nó:
systemctl status mysql.service
Bạn sẽ thấy đầu ra tương tự như sau:
Output ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago Main PID: 10382 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1137) Memory: 370.0M CGroup: /system.slice/mysql.service └─10382 /usr/sbin/mysqld
Nếu MySQL chưa chạy, bạn có thể khởi động bằng lệnh:sudo systemctl start mysql
Để kiểm tra thêm, bạn có thể thử kết nối với cơ sở dữ liệu bằng công cụ mysqladmin, công cụ này cho phép bạn chạy các lệnh quản trị. Ví dụ, lệnh sau yêu cầu kết nối với MySQL với người dùng sammy (thay đổi nếu cần), yêu cầu mật khẩu và hiển thị phiên bản MySQL:
sudo mysqladmin -p -u sammy version
Bạn sẽ thấy đầu ra tương tự như sau:
Output mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Server version 8.0.19-0ubuntu5 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 10 min 44 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038
Điều này có nghĩa là MySQL đã được khởi động và đang chạy.
Kết luận
Bây giờ, bạn đã có một cài đặt MySQL cơ bản trên máy chủ của mình. Dưới đây là một vài bước tiếp theo mà bạn có thể thực hiện:
-
Thiết lập một stack LAMP hoặc LEMP.
-
Thực hành chạy các truy vấn với SQL.
-
Quản lý cài đặt MySQL của bạn bằng phpMyAdmin.
Để vận hành MySQL mượt mà trên Ubuntu 20.04, việc chọn VPS giá rẻ nhưng đáng tin cậy là yếu tố then chốt. Các gói VPS giá rẻ tại Việt Nam hiện nay cung cấp tài nguyên dồi dào, giúp bạn tiết kiệm chi phí mà vẫn đảm bảo hiệu suất cao cho cơ sở dữ liệu.