Cài đặt MySQL trên Ubuntu 18.04
MySQL là hệ quản trị database mã nguồn mở, thường được cài đặt như một phần của LAMP (Linux, Apache, MySQL, PHP / Python / Perl) phổ biến. Mysql sử dụng database quan hệ và SQL (Ngôn ngữ truy vấn có cấu trúc) để quản lý dữ liệu.Cài đặt rất đơn giản: cập nhật apt, cài đặt mysql-server
và sau đó chạy tập lệnh bảo mật đi kèm.
- sudo apt update
- sudo apt install mysql-server
- sudo mysql_secure_installation
Hướng dẫn này trình bày cách cài đặt MySQL phiên bản 5.7 trên server Ubuntu 18.04. Tuy nhiên, nếu bạn đang tìm cách cập nhật cài đặt MySQL hiện có lên phiên bản 5.7, bạn có thể đọc hướng dẫn cập nhật MySQL 5.7 này.
Yêu cầu
Để làm theo hướng dẫn, bạn sẽ cần:
- Một server Ubuntu 18.04 được thiết lập theo hướng dẫn thiết lập server ban đầu này , bao gồm user không phải root có quyền
sudo
và firewall.
Bước 1 - Cài đặt MySQL
Trên Ubuntu 18.04, chỉ có phiên bản MySQL mới nhất được đưa vào kho lưu trữ gói APT theo mặc định. Tại thời điểm viết bài này, đó là MySQL 5.7
Để cài đặt nó, hãy cập nhật apt trên server của bạn với apt
:
- sudo apt update
Sau đó cài đặt gói mặc định:
- sudo apt install mysql-server
Thao tác này sẽ cài đặt MySQL, nhưng không nhắc bạn đặt password hoặc thực hiện thay đổi cấu hình nào khác. Vì điều này khiến quá trình cài đặt MySQL 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, ta nên chạy tập lệnh bảo mật đi kèm. Điều này thay đổi một số tùy chọn mặc định kém an toàn hơn như đăng nhập root từ xa ... Trên các phiên bản MySQL cũ hơn, bạn cũng cần phải khởi tạo dữ liệu theo cách thủ công, nhưng điều này được thực hiện tự động ở đây.
Chạy tập lệnh bảo mật:
- sudo mysql_secure_installation
Sẽ đưa ra các gợi ý cài đặt mà ta 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âu hỏi đầu tiên là bạn có muốn thiết lập Trình xác thực password, có thể được sử dụng để kiểm tra độ mạnh của password MySQL của bạn hay không. Tiếp theo sẽ là đặt password cho user root MySQL. Nhập và sau đó xác nhận một password an toàn.
Từ đó, ta có thể nhấn Y
và sau đó ENTER
để chấp nhận các giá trị mặc định cho 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 test, vô hiệu hóa đăng nhập root từ xa và tải các rule mới này để MySQL áp dụng ngay.
Để khởi tạo thư mục dữ liệu MySQL, ta sẽ sử dụng mysql_install_db
cho các phiên bản trước 5.7.6 và mysqld --initialize
cho 5.7.6 trở lên. Tuy nhiên, nếu đã cài đặt MySQL từ bản phân phối Debian, như được mô tả trong Bước 1, thư mục dữ liệu được khởi tạo tự động; bạn không phải làm bất cứ điều gì. Nếu bạn vẫn thử chạy lệnh, sẽ thấy lỗi sau:
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
Lưu ý mặc dù bạn đã đặt password cho user MySQL root , user này không được cầu hình để xác thực bằng password khi kết nối với MySQL shell. Nếu muốn, bạn có thể điều chỉnh cài đặt này bằng cách làm theo Bước 3.
Bước 3 - (Tùy chọn) Điều chỉnh Xác thực user và quyền
Trong hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản 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. Điều này cho phép một số bảo mật và hữu dụng trong nhiều trường hợp, nhưng nó cũng có thể làm phức tạp mọi thứ khi ta cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập vào Db.
Để sử dụng password kết nối với MySQL dưới dạng root , ta cần chuyển phương thức xác thực từ auth_socket
sang mysql_native_password
. Để thực hiện việc này, mở MySQL từ terminal của bạn:
- sudo mysql
Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi tài khoản user MySQL sử dụng bằng lệnh sau:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Trong ví dụ này, bạn có thể thấy rằng user root xác thực bằng cách sử dụng plugin auth_socket
. Để làm cho tài khoản root để xác thực bằng password, hãy chạy ALTER USER
. Đảm bảo thay đổi password
mạnh mà bạn chọn và lưu ý rằng lệnh này sẽ thay đổi password root mà bạn đã đặt ở Bước 2:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau đó, chạy FLUSH PRIVILEGES
để server tải lại các thay đổi mới có hiệu lực:
- FLUSH PRIVILEGES;
Kiểm tra lại các phương pháp xác thực được sử dụng bởi từng user của bạn để xác nhận rằng root không còn xác thực bằng plugin auth_socket
:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Bạn có thể thấy trong đầu ra ví dụ này rằng user MySQL root hiện xác thực bằng password. Khi bạn xác nhận điều này trên server, bạn có thể thoát MySQL shell:
- exit
Ngoài ra, nếu việc kết nối với MySQL bằng user riêng sẽ phù hợp hơn với quy trình làm việc của bạn, thì ta tạo một user như vậy, hãy mở lại MySQL shell:
- sudo mysql
Lưu ý: Nếu bạn đã bật xác thực password cho root , như được mô tả trong các đoạn trước, bạn sẽ cần sử dụng một lệnh khác để truy cập vào MySQL shell. Phần sau sẽ chạy ứng dụng client MySQL với quyền user thông thường và ta sẽ chỉ có được quyền admin trong database bằng cách xác thực:
- mysql -u root -p
Từ đó, tạo một user mới và đặt password mạnh:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Sau đó, cấp cho user mới các quyền thích hợp. Ví dụ: có thể cấp quyền user cho tất cả các bảng trong database, cũng như quyền thêm, thay đổi và xóa user bằng lệnh này:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Lưu ý rằng, tại thời điểm này, bạn không cần chạy lại lệnh FLUSH PRIVILEGES
. Lệnh này chỉ cần thiết khi bạn sửa đổi các bảng grant quyền bằng cách sử dụng các câu lệnh như INSERT
, UPDATE
hoặc DELETE
.
Sau đó, thoát khỏi MySQL shell:
- exit
Cuối cùng, hãy kiểm tra cài đặt MySQL.
Bước 4 - Kiểm tra MySQL
Sau khi đã cài đặt, MySQL sẽ bắt đầu 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 đầu ra tương tự như sau:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
Main PID: 3754 (mysqld)
Tasks: 28
Memory: 142.3M
CPU: 1.994s
CGroup: /system.slice/mysql.service
└─3754 /usr/sbin/mysqld
Nếu MySQL không chạy, bạn có thể khởi động nó 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 admin. Ví dụ: lệnh này cho biết kết nối với MySQL dưới dạng root ( -u root
), nhắc nhập password ( -p
) và trả về phiên bản.
- sudo mysqladmin -p -u root version
Bạn sẽ thấy đầu ra tương tự như sau:
mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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 5.7.21-1ubuntu1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 30 min 54 sec
Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006
Có nghĩa là MySQL đang hoạt động.
Kết luận
Vậy ta đã cài đặt thiết lập 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:
- Thực hiện một số biện pháp bảo mật bổ sung
- Định vị lại thư mục dữ liệu
- Quản lý server MySQL của bạn với SaltStack
Các tin trước
Cài đặt Webserver Apache trên CentOS 7 2019-05-29 So sánh SQLite , MySQL , PostgreSQL 2019-03-19 Cài đặt và sử dụng Docker trên Ubuntu 16 2018-10-19 Cài đặt và sử dụng Composer trên Ubuntu 18.04 2018-10-16 Cài đặt WordPress với LAMP trên Ubuntu 18.04 2018-07-06 Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04 2018-07-06 Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05 Cài đặt Firewall với UFW trên Ubuntu 18.04 2018-07-05 Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05 Cài đặt MongoDB trên Ubuntu 18.04 2018-06-07