Cài đặt MySQL trên Ubuntu 20.04
MySQL là một hệ quản trị database open-souce, thường được cài đặt như một phần của LAMP (Linux, Apache, MySQL, PHP / Python / Perl) 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) để quản lý dữ liệu. Hướng dẫn này sẽ trình bày về cách cài đặt MySQL version 8.0 trên server Ubuntu 20.04.Yêu cầu
Để làm theo hướng dẫn này, bạn cần:
- Một server Ubuntu 20.04 với user không phải root có thể sudo, và một firewall được cấu hình bằng UFW. Để cài đặt điều này, hãy làm theo hướng dẫn cài đặt server 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 repository APT. Tại thời điểm viết bài này, version MySQL có sẵn trong repository Ubuntu mặc định là version 8.0.19 .
Để cài đặt, hãy cập nhật index gói trên server nếu chưa thực hiện:
- sudo apt update
Sau đó cài đặt gói mysql-server
:
- sudo apt install mysql-server
Thao tác này sẽ cài đặt MySQL, nhưng sẽ không yêu cầu đặt password 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, 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 bản cài đặt mới của MySQL, ta cần chạy tập lệnh bảo mật đi kèm. 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 như thông tin đăng nhập root từ xa và user mẫu.
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 dấu nhắc mà 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 bạn. Dấu nhắc đầu tiên sẽ hỏi bạn có muốn cài đặt Trình kiểm tra password, được dùng để kiểm tra độ mạnh password của user MySQL mới trước khi cho là hợp lệ hay không.
Nếu bạn chọn cài đặt Trình kiểm tra password, bất kỳ user MySQL nào bạn tạo để xác thực bằng password sẽ được yêu cầu có password phù hợp policy (chính-sách) bạn chọn. Cấp policy (chính-sách) mạnh nhất - mà bạn có thể chọn bằng lệnh 2
(chọn như dưới đây) - sẽ yêu cầu password phải dài ít nhất tám ký tự và bao gồm kết hợp các ký tự viết hoa, viết thường, số và đặc biệt:
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
Sau đó nhập password root:
Please set the password for root here.
New password:
Re-enter new password:
Lưu ý mặc dù bạn đã đặt password cho user MySQL root , user này hiện không được cấu hình để xác thực bằng password khi kết nối với MySQL shell.
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 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ố user ẩn danh và database thử nghiệm, vô hiệu hóa đăng nhập root từ xa và tải các rule (luật) mới này để MySQL áp dụng ngay những thay đổi bạn đã thực hiện.
Khi tập lệnh hoàn tất, cài đặt MySQL của bạn đã được bảo mật. Đến đây bạn có thể chuyển sang tạo user database chuyên dụng với client MySQL.
Bước 3 - Tạo User MySQL Chuyên dụng và Cấp các Quyền
Sau khi cài đặt, MySQL tạo một account user root mà bạn có thể sử dụng để quản lý database của bạn. User này có đầy đủ quyền đối với server MySQL, nghĩa là nó có toàn quyền kiểm soát mọi database, bảng, user, v.v. Do đó, tốt nhất bạn nên tránh sử dụng account này ngoài các chức năng quản trị. Bước này phác thảo cách sử dụng user MySQL root để tạo account user mới và cấp quyền cho account đó.
Trong hệ thống Ubuntu chạy MySQL 5.7
(và các version mới hơn), user 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 password. Plugin này yêu cầu tên của user hệ điều hành gọi client MySQL phải trùng với tên của user MySQL được chỉ định trong lệnh, vì vậy bạn phải gọi mysql
với quyền sudo
để có quyền truy cập vào user MySQL root :
- sudo mysql
Lưu ý: Nếu bạn đã cài đặt MySQL bằng một hướng dẫn khác và đã cài đặt xác thực password cho root , bạn cần sử dụng một lệnh khác để truy cập MySQL shell:
- mysql -u root -p
Khi bạn có quyền truy cập vào dấu nhắc MySQL, bạn có thể tạo user mới bằng lệnh CREATE USER
, tuân theo cú pháp chung sau:
- CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Sau khi CREATE USER
, bạn chỉ định tên user. Ngay sau đó là dấu @
và sau đó là tên server mà user này sẽ kết nối. Nếu bạn chỉ định truy cập local user này từ server Ubuntu của bạn, bạn có thể chỉ định localhost
. Việc cả tên user và server lưu trữ trong 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 ngăn ngừa lỗi.
Bạn có một số tùy chọn khi chọn plugin xác thực user. Plugin auth_socket
được đề cập trước đây có thể rất tiện lợi, vì nó cung cấp bảo mật mạnh mẽ mà không yêu cầu user hợp lệ nhập password để truy cập database. 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 khi các chương trình bên ngoài cần tương tác với MySQL (như phpMyAdmin...).
Thay vào đó, bạn có thể loại bỏ hoàn toàn phần WITH authentication plugin
của cú pháp để user xác thực bằng plugin mặc định của MySQL, caching_sha2_password
. Tài liệu MySQL khuyến nghị plugin này cho user muốn đăng nhập bằng password do tính năng bảo mật mạnh mẽ của nó.
Chạy lệnh sau để tạo user xác thực bằng caching_sha2_password
. Thay đổi sammy
thành tên user và password
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ố version PHP gây ra sự cố với caching_sha2_password
. Nếu bạn định sử dụng database này với một ứng dụng PHP - ví dụ: phpMyAdmin - bạn có thể cần tạo một user sẽ xác thực với plugin mysql_native_password
cũ hơn, mặc dù vẫn an toàn, thay vào đó:
- 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 user xác thực bằng caching_sha2_plugin
và sau đó ALTER
nó sau này bằng lệnh này:
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau khi tạo user mới, bạn có thể cấp các quyền thích hợp. Cú pháp chung để cấp quyền user như sau:
- GRANT PRIVILEGE ON database.table TO 'username'@'host';
Giá trị PRIVILEGE
trong cú pháp ví dụ này xác định những hành động mà user được phép thực hiện trên database
và table
. Bạn có thể cấp nhiều quyền cho cùng một user trong một lệnh bằng cách phân tách từng quyền bằng dấu phẩy. Bạn cũng có thể cấp quyền user trên phạm vi global bằng lệnh dấu hoa thị ( *
) vào vị trí của database 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ả" database hoặc bảng.
Để minh họa, lệnh sau đây cấp cho user các quyền chung để CREATE
, ALTER
và DROP
database, bảng và user, cũng như quyền INSERT
, UPDATE
và DELETE
dữ liệu từ bất kỳ bảng nào trên server. Nó cũng cấp cho user khả năng truy vấn dữ liệu với SELECT
, tạo foreign keys với từ khóa REFERENCES
và thực hiện các hoạt động FLUSH
với quyền RELOAD
. Tuy nhiên, bạn chỉ nên cấp cho user các quyền mà họ cần.
Bạn có thể tìm thấy danh sách đầy đủ các quyền có sẵn trong tài liệu MySQL chính thức .
Chạy câu lệnh GRANT
này, thay thế sammy
bằng tên user MySQL của bạn, để cấp các quyền này cho user:
- GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Lưu ý lệnh này cũng bao gồm WITH GRANT OPTION
. Điều này sẽ cho phép user MySQL của bạn cấp bất kỳ quyền nào mà nó có cho user khác trên hệ thống.
Cảnh báo : Một số user có thể cần cấp cho user MySQL của họ quyền ALL PRIVILEGES
, điều này sẽ cung cấp cho họ các quyền superuser rộng rãi tương tự như quyền của user root , như vậy:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Không nên cấp quyền rộng như vậy, vì bất kỳ ai có quyền truy cập vào user MySQL này sẽ có toàn quyền kiểm soát mọi database trên server.
Chạy lệnh FLUSH PRIVILEGES
để áp dụng thay đổi:
- FLUSH PRIVILEGES;
Sau đó, bạn có thể thoát khỏi client MySQL:
- exit
Trong tương lai, để đăng nhập với quyền là user MySQL mới của bạn, bạn sẽ sử dụng một lệnh như sau:
- mysql -u sammy -p
Cờ -p
để nhắc bạn nhập password xác thực.
Cuối cùng, hãy kiểm tra cài đặt MySQL.
Bước 4 - Kiểm tra MySQL
MySQL cần chạy tự động. Để kiểm tra điều này, hãy kiểm tra trạng thái.
- systemctl status mysql.service
Bạn sẽ thấy kết quả giống như sau:
● 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 không chạy, bạn có thể khởi động bằng sudo systemctl start mysql
.
Để kiểm tra thêm, bạn có thể thử kết nối với database bằng công cụ mysqladmin
, là một ứng dụng client 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 quyền user MySQL có tên sammy ( -u sammy
), nhập password ( -p
) và trả về version. Đảm bảo thay đổi sammy
thành tên của user MySQL và nhập password của user đó khi được yêu cầu:
- sudo mysqladmin -p -u sammy version
Bạn sẽ thấy kết quả giống như sau:
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 nghĩa là MySQL đang hoạt động.
Kết luận
Đến đây bạn đã cài đặt cài đặt MySQL cơ bản trên server. Dưới đây là một số ví dụ về các bước tiếp theo mà bạn có thể thực hiện:
Các tin trước
Cấu hình sudoers file trên Ubuntu và Centos 2020-07-07
Tạo sudo cho user mới trên Ubuntu 20.04 [Quickstart] 2020-06-22
Cài đặt và sử dụng Docker trên Ubuntu 20.04 2020-06-09
Cài đặt Node.js trên Ubuntu 20.04 2020-05-08
Cài đặt và cấu hình VNC trên Ubuntu 18.04 2020-05-07
Cài đặt Java bằng apt trên Ubuntu 18.04 2020-05-07
Cài đặt Java với Apt trên Ubuntu 20.04 2020-05-07
Cài đặt Nginx trên Ubuntu 18.04 2020-05-06
Cài đặt và bảo mật phpMyAdmin trên Ubuntu 20.04 2020-05-04
Cài đặt và bảo mật Redis trên Ubuntu 18.04 2020-04-30