MySQL là một hệ thống quản lý cơ sở dữ liệu mã nguồn mở, thường được cài đặt như một phần của bộ công cụ LAMP (Linux, Apache, MySQL, PHP/Python/Perl) phổ biến. Nó triển khai mô hình quan hệ và sử dụng Structured Query Language (được biết đến nhiều hơn với tên gọi SQL) để quản lý dữ liệu.
Để triển khai MySQL hiệu quả trên Ubuntu 22.04, bạn cần một nền tảng ổn định. Sử dụng VPS Việt Nam từ các nhà cung cấp uy tín như DataOnline đảm bảo hiệu suất cao, hỗ trợ kỹ thuật 24/7, giúp bạn dễ dàng quản lý cơ sở dữ liệu cho các dự án web.
Sau đây, DataOnline sẽ hướng dẫn bạn thật chi tiết cách cài đặt MySQL 8.0 trên máy chủ Ubuntu 22.04. Sau khi hoàn tất, bạn sẽ có một cơ sở dữ liệu quan hệ mạnh mẽ và hoạt động ổn định, sẵn sàng hỗ trợ việc xây dựng trang web hoặc ứng dụng tiếp theo của mình.
Điều kiện tiên quyết
Để thực hiện theo hướng dẫn này, bạn sẽ cần: ● Một máy chủ Ubuntu 22.04 với người dùng quản trị không phải root và tường lửa được cấu hình với UFW. Để thiết lập điều này, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 22.04.
Bước 1 – Cài đặt MySQL
Trên Ubuntu 22.04, bạn có thể cài đặt MySQL bằng kho lưu trữ 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 lưu trữ mặc định của Ubuntu là phiên bản 8.0.28.
Để 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 gần đây bạn chưa thực hiện:
sudo apt update
Sau đó cài đặt gói mysql-server
:
sudo apt install mysql-server
Đảm bảo rằng máy chủ đang chạy bằng lệnh systemctl start
:
sudo systemctl start mysql.service
Các lệnh này sẽ cài đặt và khởi động MySQL, nhưng sẽ không nhắc bạn đặt mật khẩu hoặc thực hiện bất kỳ thay đổi cấu hình nào khác. Vì điều này khiến bản cài đặt MySQL của bạn không an toàn, chúng ta sẽ giải quyết vấn đề này tiếp theo.
Bước 2 – Cấu hình MySQL
Đối với các cài đặt MySQL mới, bạn sẽ muốn chạy tập lệnh bảo mật có sẵn của hệ thống quản lý cơ sở dữ liệu. Tập lệnh này thay đổi một số tùy chọn mặc định kém an toàn hơn cho những thứ như không cho phép đăng nhập root từ xa và xóa người dùng mẫu.
Cảnh báo: Tính đến tháng 7 năm 2022, một lỗi sẽ xảy ra khi bạn chạy tập lệnh
mysql_secure_installation
mà không có một số cấu hình bổ sung. Lý do là tập lệnh này sẽ cố gắng đặt mật khẩu cho tài khoản MySQL root của bản cài đặt nhưng theo mặc định trên các bản cài đặt 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 năm 2022, tập lệnh này sẽ âm thầm thất bại sau khi cố gắng đặt mật khẩu tài khoản root và tiếp tục với phần còn lại của các lời nhắc. Tuy nhiên, tại thời điểm viết bài này, tập lệnh 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:Điều này sẽ dẫn tập lệnh vào một vòng lặp đệ quy mà bạn chỉ có thể thoát ra bằng cách đóng cửa sổ terminal.
Bởi vì tập lệnh
mysql_secure_installation
thực hiện một số hành động khác có ích để giữ an toàn cho bản cài đặt MySQL của bạn, vẫn được khuyến nghị rằng bạn chạy nó trước khi bắt đầu sử dụng MySQL để quản lý dữ liệu của mình. Tuy nhiên, để tránh đi vào vòng lặp đệ quy này, bạn sẽ cần điều chỉnh trước cách người dùng MySQL root của bạn xác thực.Đầu tiên, mở lời nhắc MySQL:
sudo mysqlSau đó 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 một phương thức sử dụng mật khẩu. Ví dụ sau thay đổi phương thức xác thực thànhmysql_native_password
:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Sau khi thực hiện thay đổi này, thoát khỏi lời nhắc MySQL:
exitSau đó, bạn có thể chạy tập lệnh
mysql_secure_installation
mà không gặp vấn đề.
Chạy tập lệnh bảo mật với sudo
:
sudo mysql_secure_installation
Điều này sẽ đưa bạn qua một loạt các lời nhắc nơi bạn có thể thực hiện một số thay đổi đối với tùy chọn bảo mật của bản cài đặt MySQL. Lời nhắc đầu tiên sẽ hỏi liệu bạn có muốn thiết lập Plugin Xác thực Mật khẩu, có thể được sử dụng để kiểm tra độ mạnh của mật khẩu của người dùng MySQL mới trước khi coi chúng là hợp lệ.
Nếu bạn chọn thiết lập Plugin Xác thực Mật khẩu, bất kỳ người dùng MySQL nào bạn tạo xác thực bằng mật khẩu sẽ cần có mật khẩu đáp ứng chính sách bạn chọn:
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
Bất kể bạn có chọn thiết lập Plugin Xác thực Mật khẩu hay không, lời nhắc tiếp theo sẽ là đặt mật khẩu cho người dùng root MySQL. Nhập và sau đó xác nhận mật khẩu an toàn theo lựa chọ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 người dùng root MySQL, người dùng này hiện không được cấu hình để xác thực bằng mật khẩu khi kết nối với shell MySQL.
Nếu bạn đã sử dụng Plugin Xác thực Mật khẩu, bạn sẽ nhận được phản hồi về độ mạnh của mật khẩu mới của mình. Sau đó, tập lệnh sẽ hỏi liệu bạn có muốn tiếp tục với mật khẩu bạn vừa nhập hay bạn muốn nhập mật khẩu mới. Giả sử bạn hài lòng với độ mạnh của mật khẩu bạn vừa nhập, nhập Y
để tiếp tục tập lệnh:
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
Từ đó, bạn có thể nhấn Y
và sau đó ENTER
để chấp nhận các mặc định cho tất cả các câu hỏi tiếp theo. Điều này sẽ xóa một số người dùng ẩn danh và cơ sở dữ liệu kiểm tra, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới này để MySQL ngay lập tức tôn trọng các thay đổi bạn đã thực hiện.
Lưu ý: Sau khi tập lệnh 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 người dùng root trở lại mặc định,
auth_socket
. Để xác thực dưới dạng người dùng root MySQL bằng mật khẩu, hãy chạy lệnh này:mysql -u root -pSau đó quay lại sử dụng phương thức xác thực mặc định bằng lệnh này:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;Điều này có nghĩa là bạn có thể kết nối lại với MySQL dưới dạng người dùng root bằng cách sử dụng lệnh
sudo mysql
.
Sau khi tập lệnh hoàn thành, bản cài đặt MySQL của bạn sẽ được bảo mật. Bạn bây giờ có thể tiếp tục tạo người dùng MySQL chuyên dụng với MySQL client.
Bước 3 – Tạo người dùng MySQL chuyên dụng và cấp quyền
Khi cài đặt, MySQL tạo tài khoản người dùng root mà bạn có thể sử dụng để quản lý cơ sở dữ liệu của mình. Người dùng này có đầy đủ đặc quyền trên máy chủ MySQL, có nghĩa là nó có toàn quyền kiểm soát mọi cơ sở dữ liệu, bảng, người dùng và v.v. Vì lý do này, tốt nhất là tránh sử dụng tài khoản này bên ngoài các chức năng quản trị. Bước này phác thảo cách sử dụng người dùng root MySQL để tạo tài khoản người dùng mới và cấp quyền cho nó.
Trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản sau), người dùng root MySQL được đặt để xác thực bằng plugin auth_socket
theo mặc định thay vì bằng mật khẩu. Plugin này yêu cầu tên của người dùng hệ điều hành gọi MySQL client phải khớp với tên của người dùng MySQL được chỉ định trong lệnh, vì vậy bạn phải gọi mysql
với đặc quyền sudo
để truy cập người dùng root MySQL:
sudo mysql
Lưu ý: Nếu bạn đã cài đặt MySQL với hướng dẫn khác và đã bật xác thực mật khẩu cho root, bạn sẽ cần sử dụng lệnh khác để truy cập shell MySQL. Lệnh sau sẽ chạy MySQL client của bạn với đặc quyền người dùng thông thường, và bạn sẽ chỉ có đặc quyền quản trị viên trong cơ sở dữ liệu bằng cách xác thực:
mysql -u root -p
Khi bạn có quyền truy cập vào lời nhắc MySQL, bạn có thể tạo người dùng mới với câu lệnh CREATE USER
. Những câu lệnh này tuân theo cú pháp chung sau:
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Sau CREATE USER
, bạn chỉ định tên người dùng. Ngay sau đó là dấu @
và sau đó là tên máy chủ từ đó người dùng này sẽ kết nối. Nếu bạn chỉ dự định truy cập người dùng này cục bộ từ máy chủ Ubuntu của mình, bạn có thể chỉ định localhost
. Việc bọc cả tên người dùng và máy chủ trong dấu ngoặc đơn không phải lúc nào cũng cần thiết, nhưng làm như vậy có thể giúp ngăn ngừa lỗi.
Bạn có một số tùy chọn khi lựa chọn plugin xác thực của người dùng. Plugin auth_socket
đã đề cập trước đó có thể thuận tiện, vì nó cung cấp bảo mật mạnh mà không yêu cầu người dùng hợp lệ phải nhập mật khẩu để truy cập cơ sở dữ liệu. Nhưng nó cũng ngăn chặn kết nối từ xa, điều này có thể làm phức tạp vấn đề khi các chương trình bên ngoài cần tương tác với MySQL.
Thay vào đó, bạn có thể bỏ qua phần WITH authentication_plugin
của cú pháp để người dùng xác thực với plugin mặc định của MySQL, caching_sha2_password
. Tài liệu MySQL khuyến nghị plugin này cho người dùng muốn đăng nhập bằng mật khẩu do các tính năng bảo mật mạnh của nó.
Chạy lệnh sau để tạo người dùng xác thực với caching_sha2_password
. Hãy chắc chắn thay đổi sammy
thành tên người dùng bạn muốn và password
thành mật khẩu mạnh mà bạn chọn:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Lưu ý: Có một vấn đề đã biết với một số phiên bản của PHP gây ra vấn đề với
caching_sha2_password
. Nếu bạn dự định sử dụng cơ sở dữ liệu này với ứng dụng PHP – ví dụ: phpMyAdmin – bạn có thể muốn tạo người dùng xác thực với pluginmysql_native_password
cũ hơn, mặc dù vẫn an toàn:
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Nếu bạn không chắc chắn, bạn luôn có thể tạo người dùng xác thực với
caching_sha2_plugin
và sau đóALTER
nó sau này với lệnh này:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Sau khi tạo người dùng mới, bạn có thể cấp cho họ đặc quyền thích hợp. Cú pháp chung để cấp đặc quyền người dùng như sau:
GRANT PRIVILEGE ON database.table TO 'username'@'host';
Giá trị PRIVILEGE
trong ví dụ cú pháp này xác định những hành động nào người dùng được phép thực hiện trên database
và table
đã chỉ định. Bạn có thể cấp nhiều đặc quyền cho cùng một người dùng trong một lệnh bằng cách phân tách mỗi đặc quyền bằng dấu phẩy. Bạn cũng có thể cấp đặc quyền cho người dùng một cách toàn cầu bằng cách nhập dấu hoa thị (*
) thay cho tên cơ sở dữ liệu và bảng. Trong SQL, dấu hoa thị là ký tự đặc biệt được sử dụng để đại diện cho “tất cả” cơ sở dữ liệu hoặc bảng.
Để minh họa, lệnh sau cấp cho người dùng đặc quyền toàn cầu để CREATE
, ALTER
, và 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 khả năng truy vấn dữ liệu với SELECT
, tạo khóa ngoại với từ khóa REFERENCES
, và thực hiện thao tác FLUSH
với đặc quyền RELOAD
. Tuy nhiên, bạn chỉ nên cấp cho người dùng những quyền họ cần, vì vậy hãy tự do điều chỉnh đặc quyền của người dùng của bạn khi cần thiết.
Bạn có thể tìm thấy danh sách đầy đủ các đặc quyề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 thế sammy
bằng tên người dùng MySQL của bạn, để cấp những đặ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ưu ý rằng câu lệnh này cũng bao gồm WITH GRANT OPTION
. Điều này sẽ cho phép người dùng MySQL của bạn cấp bất kỳ quyền nào mà nó có cho người dùng khác trên hệ thống.
Cảnh báo: Một số người dùng có thể muốn cấp cho người dùng MySQL của họ đặc quyền
ALL PRIVILEGES
, điều này sẽ cung cấp cho họ các đặc quyền siêu người dùng rộng rãi tương tự như đặc quyền của người dùng root, như sau:GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;Các đặc quyền rộng như vậy không nên được cấp một cách nhẹ nhàng, vì bất kỳ ai có quyền truy cập vào người dùng MySQL này sẽ có quyền kiểm soát hoàn toàn đối với mọi cơ sở dữ liệu trên máy chủ.
Sau đó, thực hiện tốt là chạy lệnh FLUSH PRIVILEGES
. Điều này sẽ giải phóng bất kỳ bộ nhớ nào mà máy chủ đã lưu vào bộ nhớ đệm do các câu lệnh CREATE USER
và GRANT
trước đó:
FLUSH PRIVILEGES;
Sau đó bạn có thể thoát khỏi MySQL client:
exit
Trong tương lai, để đăng nhập với tư cách người dùng MySQL mới của bạn, bạn sẽ sử dụng lệnh như sau:
mysql -u sammy -p
Tham số -p
sẽ khiến MySQL client nhắc bạn nhập mật khẩu của người dùng MySQL để xác thực.
Cuối cùng, hãy kiểm tra cài đặt MySQL.
Bước 4 – Kiểm tra MySQL
Bất kể bạn đã cài đặt nó như thế nào, MySQL nên đã bắt đầu chạy tự động. Để kiểm tra điều này, hãy kiểm tra trạng thái của nó.
systemctl status mysql.service
Đầu ra sẽ 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 Mon 2022-04-11 16:04:39 UTC; 2h 36min ago Process: 2593 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 2601 (mysqld) Status: "Server is operational" Tasks: 38 (limit: 1119) Memory: 354.3M CPU: 19.944s CGroup: /system.slice/mysql.service └─2601 /usr/sbin/mysqld
Nếu MySQL không chạy, bạn có thể khởi động nó với 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
, đây là một client cho phép bạn chạy các lệnh quản trị. Ví dụ, lệnh này nói để kết nối với tư cách người dùng MySQL có tên sammy (-u sammy
), nhắc nhập mật khẩu (-p
), và trả về phiên bản. Hãy chắc chắn thay đổi sammy
thành tên của người dùng MySQL chuyên dụng của bạn, và nhập mật khẩu của người dùng đó khi được nhắc:
sudo mysqladmin -p -u sammy version
Dưới đây là một ví dụ về đầu ra:
Output
mysqladmin Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2022, Oracle and/or its affiliates. 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.28-0ubuntu4 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 2 hours 31 min 57 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 160 Flush tables: 3 Open tables: 79 Queries per second avg: 0.000
Điều này có nghĩa là MySQL đang hoạt động.
Kết luận
Sau khi cài đặt MySQL, việc tối ưu hóa môi trường là rất quan trọng. Thuê máy chủ VPS chất lượng từ DataOnline cung cấp tài nguyên mạnh mẽ, băng thông không giới hạn, giúp bạn vận hành cơ sở dữ liệu mượt mà và đáp ứng nhu cầu phát triển ứng dụng dài hạn.
Hiện tại, MySQL đã được cài đặt thành công trên máy chủ của bạn, cung cấp một nền tảng cơ sở dữ liệu quan hệ ổn định và mạnh mẽ. Để tối ưu hóa khả năng quản trị và khai thác hiệu quả hơn nguồn dữ liệu, dưới đây là một số bước tiếp theo bạn có thể thực hiện:
● Thiết lập bộ công cụ LAMP hoặc bộ công cụ LEMP
● Luyện tập chạy các truy vấn với SQL
● Quản lý cài đặt MySQL của bạn với phpMyAdmin