Giới thiệu
MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở, thường được cài đặt như một phần của LAMP (Linux, Apache, MySQL, PHP/Python/Perl) stack phổ biến. Nó triển khai mô hình quan hệ và sử dụng ngôn ngữ truy vấn có cấu trúc (hay còn gọi là SQL - Structured Query Language) để quản lý dữ liệu. Hướng dẫn này sẽ giới thiệu cho các 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 cơ sở dữ liệu quan hệ đang hoạt động, có thể sử dụng để xây dựng trang web hoặc ứng dụng tiếp theo của mình.
Yêu cầu
- Một máy chủ Ubuntu 20.04 với user quản trị không phải root và tường lửa được định cấu hình bằng UFW.
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 lưu trữ gói APT. Tại thời điểm này, phiên bản MySQL có sẵn trong kho lưu trữ 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 server của bạn nếu gần đây bạn chưa làm như vậy:
Sau đó, cài đặt gói mysql-server
:
Đảm bảo rằng server đang chạy bằng cách sử dụng lệnh systemctl start
:
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 quá trình cài đặt MySQL của bạn không an toàn, tiếp theo chúng tôi sẽ giải quyết vấn đề này.
Bước 2: Cấu hình MySQL
Đối với các bản cài đặt mới của MySQL, bạn sẽ muốn chạy tập lệnh bảo mật đi kèm của DBMS. 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ư thông tin đăng nhập mặc định từ xa và người dùng mẫu.
Chạy tập lệnh bảo mật với sudo
:
Sau khi chạy tập lệnh sẽ đưa bạn qua một loạt lời nhắc, tại đây bạn có thể thực hiện một số thay đổi đối với các tùy chọn bảo mật của cài đặt MySQL của mình. Lời nhắc đầu tiên sẽ hỏi bạn có muốn thiết lập Validate Password Plugin, có thể được sử dụng để kiểm tra độ mạnh mật khẩu của người dùng MySQL mới trước khi cho là hợp lệ hay không. Nếu bạn chọn thiết lập Validate Password Plugin, bất kỳ người dùng MySQL nào mà bạn tạo xác thực bằng mật khẩu sẽ được yêu cầu có mật khẩu đáp ứng policy bạn chọn. Cấp policy mạnh nhất – mà bạn có thể chọn bằng cách nhập 2 – sẽ yêu cầu mật khẩu phải dài ít nhất 8 ký tự và bao gồm kết hợp các ký tự viết hoa, viết thường, số và ký tự đặc biệt:
Bất kể bạn chọn thiết lập Validate Password Plugin hay không, lời nhắc tiếp theo sẽ là đặt mật khẩu cho người dùng MySQL root. Nhập và sau đó xác nhận một mật khẩu bảo mật mà bạn chọn:
Lưu ý rằng mặc dù bạn đã đặt mật khẩu cho người dùng MySQL root, 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 MySQL shell. 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 của mình. 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. Giả sử bạn hài lòng với độ mạnh của mật khẩu bạn vừa nhập, hãy nhập Y
để tiếp tục script:
Từ đó bạn có thể nhấn Y
và sau đó nhấn ENTER để chấp nhận giá trị mặc định cho tất cả các câu hỏi tiếp theo. Thao tác này sẽ xóa một số người dùng ẩn danh và cơ sở dữ liệu thử nghiệm, vô hiệu hóa đăng nhập root từ xa và load các quy tắc mới này để MySQL ngay lập tức tuân theo những thay đổi bạn đã thực hiện. Khi script hoàn tất, cài đặt MySQL sẽ được bảo mật. Bây giờ, bạn có thể chuyển sang tạo người dùng cơ sở dữ liệu 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 các đặc quyền
Sau khi cài đặt, MySQL tạo một 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. User này có toàn quyền đối với server 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. Do đó, tốt nhất bạn nên 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 MySQL gốc để tạo tài khoản người dùng mới và cấp đặc quyền cho tài khoản đó. Trong hệ thống Ubuntu chạy MySQL 5.7 (và các version mới hơn). Người dùng MySQL root được đặt để xác thực bằng cách sử dụng plugin auth_socket
theo mặc định chứ không phải bằng mật khẩu. Plugin này yêu cầu tên của user 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
để có quyền truy cập vào user MySQL root:
Khi 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 bằng câu lệnh CREATE USER
. Chúng tuân theo cú pháp chung sau:
Sau CREATE USER
, bạn chỉ định tên người dùng. Ngay sau đó là dấu @ và tiếp đến là tên server mà user này sẽ kết nối. Nếu bạn chỉ định truy cập cục bộ người dùng này từ máy chủ Ubuntu của mình, bạn có thể chỉ định localhost
. Việc gói cả tên người dùng và server trong một dấu ngoặc kép 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 tránh lỗi. Bạn có một số tùy chọn khi chọn plugin xác thực người dùng của mình. Plugin auth_socket
được đề cập trước đây có thể tiện lợi vì nó cung cấp bảo mật mạnh mẽ mà không yêu cầu người dùng hợp lệ nhập mật khẩu để truy cập cơ sở dữ liệu. Nhưng nó cũng ngăn chặn các kết nối từ xa, điều này có thể làm phức tạp mọi thứ 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ể loại bỏ hoàn toàn phần WITH verify_plugin
của cú pháp để 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 đề xuất plugin này cho người dùng muốn đăng nhập bằng mật khẩu do tính năng bảo mật mạnh mẽ của nó. Chạy lệnh sau để tạo người dùng xác thực với caching_sha2_password
. Đảm bảo thay đổi sammy
thành tên người dùng và password thành một mật khẩu mạnh mà bạn chọn:
Sau khi tạo user mới, bạn có thể cấp cho họ các đặc quyền thích hợp. Cú pháp chung để cấp đặc quyền người dùng như sau:
Giá trị PRIVILEGE
trong cú pháp ví dụ này xác định những hành động mà người dùng được phép thực hiện trên database
và table
được 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 từng đặc quyền bằng dấu phẩy. Bạn cũng có thể cấp đặc quyền người dùng bằng cách nhập dấu hoa thị (*
) vào vị trí của cơ sở dữ liệu và tên bảng. Trong SQL, dấu hoa thị là các 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 đây cấp cho người dùng đặc quyền để 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 Foreign Key với từ khóa REFERENCES
và thực hiện các hoạt động FLUSH
với đặc quyền RELOAD
. Tuy nhiên, bạn chỉ nên cấp cho người dùng các quyền mà họ cần, vì vậy, hãy thoải mái điều chỉnh các đặc quyền của người dùng nếu cần. 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 MySQL chính thức. Chạy lệnh GRANT
thay thế sammy
bằng tên người dùng MySQL của riêng bạn, để cấp các đặc quyền này cho người dùng của bạn:
Lưu ý rằng 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 những người dùng khác trên hệ thống.
Sau đây, bạn nên 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ớ cache do kết quả của các câu lệnh CREATE USER
và GRANT
trước đó:
Sau đó, bạn có thể thoát khỏi máy khách MySQL:
Trong tương lai, để đăng nhập với tư cách là người dùng MySQL mới của bạn, bạn sẽ sử dụng một lệnh như sau:
Flag -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 phải bắt đầu chạy tự động. Để thử nghiệm, hãy kiểm tra trạng thái của nó.
Bạn sẽ thấy đầu ra tương tự như sau:
Nếu MySQL không chạy, bạn có thể bắt đầu bằng 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ách sử dụng tool mysqladmin
là một ứng dụng khách cho phép bạn chạy các lệnh quản trị. Ví dụ: lệnh này cho biết kết nối với tư cách là người dùng MySQL có tên là sammy (-u sammy
), nhắc nhập mật khẩu (-p
) và trả về version. Đảm bảo 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:
Bạn sẽ thấy đầu ra tương tự như sau:
Điều này có nghĩa là MySQL đang hoạt động. Trên đây chúng tôi đã hướng dẫn chi tiết 4 bước cài đặt MySQL trên Ubuntu 20.04 rất đơn giản dễ làm. Chúc bạn thực hiện thành công nhé!