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 web server LAMP Stack (Linux, Apache, MySQL, PHP / Python / Perl) . Nó sử dụng cơ sở dữ liệu quan hệ và SQL (Ngôn ngữ truy vấn có cấu trúc) để quản lý dữ liệu của nó.
Cài đặt MySQL trên Ubuntu khá là đơn giản: cập nhật các package của bạn, sau đó cài đặt gói mysql-server
và chạy lệnh bảo mật đi kèm.
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation
Bài viết này sẽ hướng dẫn cài đặt MySQL phiên bản 5.7 trên Ubuntu 18.04 .
Bước 1 – Cài đặt MySQL
Trên Ubuntu 18.04, chỉ có phiên bản mới nhất của MySQL được bao gồm trong APT package theo mặc định. Tại thời điểm viết bài, đó là MySQL 5.7.
Để cài đặt nó, hãy cập nhật các gói trên máy chủ của bạn bằng apt
:
sudo apt update
Sau đó cài đặt gói mặc định:
sudo apt install mysql-server
Dòng lệnh này sẽ cài đặt 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. Bởi vì điều này khiến cho việc 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 trong bước 2.
Bước 2 – Cấu hình MySQL
Để fresh installations, bạn sẽ cầ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 cho những thứ như đăng nhập gốc từ xa(remote root logins) và người dùng mẫu(sample users). Trên các phiên bản cũ hơn của MySQL, bạn cũng cần phải khởi tạo thư mục dữ liệu theo cách thủ công, nhưng việc này được thực hiện tự động bằng cách sau.
Chạy tập lệnh bảo mật:
sudo mysql_secure_installation
Điều này sẽ đưa bạn qua một loạt các lời nhắc nhở, 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ài đặt MySQL của bạn. Lời nhắc đầu tiên sẽ hỏi bạn có muốn cài đặt Plugin xác thực mật khẩu hay không, có thể được sử dụng để kiểm tra độ mạnh mật khẩu MySQL của bạn. 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 của bạn.
Bạn có thể nhấn Y
và sau đó ENTER
để chấp nhận 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 thử nghiệm, vô hiệu hóa đăng nhập gốc từ xa.
Để khởi tạo thư mục dữ liệu MySQL, bạn 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.
Bước 3 – (Optional) Điều chỉnh xác thực và quyền của người dùng
Trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản 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 thay vì bằng mật khẩu. Điều này cho phép một số bảo mật và khả năng sử dụng cao hơn trong nhiều trường hợp, nhưng nó cũng có thể làm phức tạp mọi thứ khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin).
Để sử dụng mật khẩu để kết nối với MySQL với quyền root, bạn sẽ cần chuyển phương thức xác thực của nó từ auth_socket
sang mysql_native_password
. Để làm điều này, hã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 nào mà mỗi tài khoản người dùng MySQL của bạn 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 | *FE8A77A22D490EAEDE9F4402E318F023C476EAD8 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
Để định cấu hình tài khoản root để xác thực bằng mật khẩu, chạy lệnh ALTER USER
sau đây. Hãy chắc chắn thay đổi password
với mật khẩu mạnh mà bạn chọn và lưu ý rằng lệnh này sẽ thay đổi mật khẩu root bạn đã đặt ở Bước 2:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau đó, chạy FLUSH PRIVILEGES;
để báo cho máy chủ tải lại các bảng và đưa các thay đổi mới của bạn vào hiệu lực:
FLUSH PRIVILEGES;
Kiểm tra lại các phương thức xác thực được sử dụng bởi mỗi người dùng của bạn một lần nữa để xác nhận rằng root không còn xác thực bằng cách sử dụng plugin auth_socket
:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *9DB839FF16B82668003976BF5BA0AB42F870745F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *FE8A77A22D490EAEDE9F4402E318F023C476EAD8 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
Bạn có thể thấy trong ví dụ này đầu ra rằng root
user MySQL bây giờ xác thực bằng mật khẩu. Khi bạn xác nhận điều này trên máy chủ của riêng mình, bạn có thể thoát khỏi trình bao MySQL: exit
Để tạo một người dùng mới, hãy mở lại mysql:
sudo mysql
Lưu ý: Nếu bạn đã bật xác thực mật khẩu cho root
thay bằng sử dụng plugin auth_socket
, 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 vỏ MySQL. Sau đây sẽ chạy ứng dụng khách MySQL của bạn với các đặc quyền người dùng thông thường và bạn sẽ chỉ nhận được các đặc quyền của quản trị viên trong cơ sở dữ liệu bằng cách xác thực:
mysql -u root -p
Nhập mật khẩu và Enter.
Sau đó, tạo một người dùng mới và cung cấp cho nó một mật khẩu:
CREATE USER 'ntc'@'localhost' IDENTIFIED BY 'pass';
List ra xem sao:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *9DB839FF16B82668003976BF5BA0AB42F870745F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *FE8A77A22D490EAEDE9F4402E318F023C476EAD8 | mysql_native_password | localhost |
| ntc | *5403678D7E10A9C8DC490C129FAF5C10BF0F95EE | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Tiếp theo là cấp cho người dùng mới của bạn các đặc quyền thích hợp. Ví dụ: bạn có thể cấp đặc quyền người dùng cho tất cả các bảng trong cơ sở dữ liệu, cũng như có thể thêm, sửa và xóa quyền người dùng, bằng lệnh này:
GRANT ALL PRIVILEGES ON *.* TO 'ntc'@'localhost' WITH GRANT OPTION;
Lưu ý rằng, tại thời điểm này, bạn không cần phải 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 cấp bằng cách sử dụng các câu lệnh như INSERT
, UPDATE
hoặc DELETE
. Vì bạn đã tạo mới một người dùng, thay vì sửa đổi một người dùng hiện có, FLUSH PRIVILEGES
là không cần thiết.
Thoát khỏi mysql: exit;
. Cuối cùng, hãy kiểm tra cài đặt MySQL.
Bước 4 – Thử nghiệm MySQL
Bất kể bạn đã cài đặt nó như thế nào, MySQL sẽ bắt đầu chạy tự động. Để kiểm tra điều này, kiểm tra trạng thái của nó.
systemctl status mysql.service
Nếu MySQL không chạy, bạn có thể khởi động nó bằng sudo systemctl start mysql
.
Tạo mới một database tên là wordpress bằng câu lệnh sau:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Show databases xem sao:
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress |
+--------------------+
5 rows in set (0.00 sec)
Cho phép một người dùng mới sẽ được phép truy cập cơ sở dữ liệu này.
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
hoặc tạo mới user và cho truy cập database:
GRANT ALL ON database_name.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Trong bài viết tiếp theo mình sẽ hướng dẫn các bạn cài đặt WordPress với Caddy web server trên Ubuntu 18.04, hãy chờ đón xem nhé.