MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở, thường được sử dụng trong bộ công nghệ LAMP (Linux, Apache, MySQL, PHP/Python/Perl) phổ biến. MySQL dựa trên cơ sở dữ liệu quan hệ và sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) để quản lý và thao tác với dữ liệu.
Quá trình cài đặt MySQL khá đơn giản: bạn chỉ cần cập nhật chỉ mục gói, cài đặt gói mysql-server, sau đó chạy các script bảo mật đi kèm để đảm bảo an toàn cho hệ thống.
sudo apt update sudo apt install mysql-server sudo mysql_secure_installation
Tutorial này sẽ hướng dẫn bạn cài đặt MySQL phiên bản 5.7 trên một máy chủ Ubuntu 18.04. Tuy nhiên, nếu bạn đang muốn cập nhật một cài đặt MySQL hiện có lên phiên bản 5.7, bạn có thể tham khảo hướng dẫn cập nhật MySQL 5.7 thay vì.
Việc cài đặt MySQL trên Ubuntu 18.04 trở nên dễ dàng hơn với một VPS server mạnh mẽ. Sử dụng VPS giúp tối ưu hiệu suất cơ sở dữ liệu, đảm bảo tốc độ và bảo mật. Khám phá các giải pháp VPS server chất lượng tại DataOnline của chúng tôi để bắt đầu ngay hôm nay!
Yêu cầu
Để theo dõi hướng dẫn này, bạn cần:
● Một máy chủ Ubuntu 18.04 được thiết lập theo hướng dẫn thiết lập ban đầu của máy chủ, bao gồm một người dùng không phải root có quyền sudo và một firewall.
Bước 1 – Cài đặt MySQL
Trên Ubuntu 18.04, chỉ phiên bản mới nhất của MySQL mới được bao gồm trong 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, hãy cập nhật chỉ mục gói trên máy chủ của bạn với lệnh apt:
sudo apt update
Sau đó cài đặt gói mặc định:
sudo apt install mysql-server
Đảm bảo rằng máy chủ đang chạy bằng cách sử dụng lệnh systemctl start:
sudo systemctl start mysql.service
Các lệnh trên sẽ cài đặt và khởi động MySQL, tuy nhiên chúng sẽ không yêu cầu bạn đặt mật khẩu hay thay đổi cấu hình gì thêm. Vì điều này khiến cho cài đặt MySQL của bạn trở nên không an toàn, chúng ta sẽ giải quyết vấn đề này ngay trong bước tiếp theo.
Bước 2 – Cấu hình MySQL
Với những cài đặt mới, bạn nên chạy script bảo mật đi kèm. Script này sẽ thay đổi một số cài đặt mặc định kém an toàn như đăng nhập root từ xa và các người dùng mẫu. Trên các phiên bản MySQL cũ hơn, bạn cần khởi tạo thư mục dữ liệu thủ công, nhưng bây giờ việc này được thực hiện tự động.
Chạy script bảo mật:
sudo mysql_secure_installation
Script này sẽ hướng dẫn bạn qua một loạt các câu hỏi để thay đổi các cài đặt bảo mật của MySQL. Câu hỏi đầu tiên sẽ hỏi bạn có muốn thiết lập Validate Password Plugin hay không, công cụ này có thể được sử dụng để kiểm tra độ mạnh của mật khẩu MySQL của bạn.
Bất kể lựa chọn của bạn, câu hỏi tiếp theo sẽ yêu cầu bạn đặt mật khẩu cho người dùng root của MySQL. Hãy nhập và xác nhận một mật khẩu bảo mật theo ý bạn.
Sau đó, bạn chỉ cần nhấn Y
và ENTER
để chấp nhận các mặc định cho tất cả các câu hỏi tiếp theo. Thao tác này sẽ loại bỏ một số người dùng ẩn danh và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa, và nạp các quy tắc mới để MySQL ngay lập tức thực thi các thay đổi bạn đã thực hiện.
Để khởi tạo thư mục dữ liệu của MySQL, bạn sẽ sử dụng mysql_install_db
cho phiên bản trước 5.7.6, và mysqld --initialize
cho phiên bản 5.7.6 trở lên. Tuy nhiên, nếu bạn đã cài đặt MySQL từ bản phân phối của Debian, như đã mô tả ở Bước 1, thì thư mục dữ liệu đã được khởi tạo tự động; bạn không cần phải làm gì thêm. Nếu bạn thử chạy lệnh khởi tạo nữa, bạn sẽ thấy lỗi sau:
Output mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists) . . . 2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
Lưu ý rằng mặc dù bạn đã đặt mật khẩu cho người dùng root của MySQL, nhưng người dùng này vẫn chưa được cấu hình để xác thực bằng mật khẩu khi kết nối vào MySQL shell. Nếu bạn muốn, bạn có thể điều chỉnh cài đặt này bằng cách thực hiện theo Bước 3.
Bước 3 – Điều chỉnh Xác thực người dùng và quyền hạn
Trên các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản sau), người dùng root của MySQL được đặt để xác thực bằng plugin auth_socket theo mặc định thay vì bằng mật khẩu. Điều này mang lại mức độ an toàn và tiện dụng cao hơn trong nhiều trường hợp, nhưng cũng có thể gây phức tạp khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập người dùng này.
Để sử dụng mật khẩu để kết nối đến MySQL với tư cách là root, bạn cần chuyển phương thức xác thực từ auth_socket sang mysql_native_password. Để làm điều này, mở MySQL prompt từ terminal:
sudo mysql
Tiếp theo, kiểm tra phương thức xác thực của từng tài khoản người dùng MySQL với lệnh sau:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output +------------------+-------------------------------------------+-----------------------+-----------+ | 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 người dùng root đang xác thực bằng plugin auth_socket
. Để cấu hình tài khoản root xác thực bằng mật khẩu, hãy chạy lệnh ALTER USER sau. Hãy nhớ thay đổi password
thành một mật khẩu mạnh theo lựa chọn của bạ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 lệnh FLUSH PRIVILEGES
để yêu cầu máy chủ tải lại bảng grant và áp dụng các thay đổi mới:
FLUSH PRIVILEGES;
Kiểm tra lại phương thức xác thực của từng người dùng để 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;
Output +------------------+-------------------------------------------+-----------------------+-----------+ | 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 ví dụ output trên rằng người dùng root của MySQL giờ đây xác thực bằng mật khẩu. Sau khi bạn xác nhận điều này trên máy chủ của mình, hãy thoát khỏi MySQL shell:
exit
Ngoài ra, nếu bạn thấy phù hợp hơn với quy trình làm việc của mình, bạn có thể tạo một người dùng riêng để kết nối với MySQL. Để tạo người dùng như vậy, mở lại MySQL shell:
sudo mysql
Lưu ý: Nếu bạn đã bật xác thực bằng mật khẩu cho root như đã mô tả ở đoạn trên, bạn sẽ cần sử dụng một lệnh khác để truy cập MySQL shell. Lệnh dưới đây sẽ chạy MySQL client với quyền người dùng thông thường, và bạn chỉ có quyền quản trị trong cơ sở dữ liệu sau khi đã xác thực:
mysql -u root -p
Từ đó, tạo một người dùng mới và đặt mật khẩu mạnh cho nó:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Sau đó, cấp quyền cho người dùng mới phù hợp. Ví dụ, bạn có thể cấp quyền truy cập vào tất cả các bảng trong cơ sở dữ liệu cũng như quyền thêm, thay đổi và xóa các quyền của người dùng với lệnh sau:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Lưu ý rằng, vào 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 thay đổi bảng grant bằng các lệnh như INSERT, UPDATE hoặc DELETE. Vì bạn đã tạo một người dùng mới thay vì chỉnh sửa người dùng hiện có, nên FLUSH PRIVILEGES không cần thiết.
Sau đó, hãy 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
Bất kể bạn đã cài đặt nó như thế nào, MySQL nên tự động khởi chạy. Để kiểm tra, hãy xem trạng thái của nó:
systemctl status mysql.service
Bạn sẽ thấy output tương tự như sau:
Output ● 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
sudo mysqladmin -p -u root version
Bạn sẽ thấy output tương tự như sau:
Output 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
Điều này có nghĩa là MySQL đang hoạt động bình thường.
Kết luận
Bạn đã hoàn thành việc cài đặt MySQL cơ bản trên máy chủ của mình và có thể bắt đầu sử dụng hệ quản trị cơ sở dữ liệu này để quản lý các dữ liệu quan trọng. Với MySQL, bạn có thể thực hiện các thao tác như tạo cơ sở dữ liệu, quản lý người dùng, và chạy các truy vấn SQL để thao tác với dữ liệu một cách hiệu quả. Bằng cách sử dụng các công cụ bảo mật đi kèm, bạn cũng đã đảm bảo rằng MySQL của mình hoạt động trong môi trường an toàn và bảo mật.
Từ đây, bạn có thể tiến hành cấu hình thêm các tùy chọn nâng cao, tối ưu hóa hiệu suất, và triển khai các chiến lược sao lưu và phục hồi để đảm bảo dữ liệu luôn được bảo vệ và có thể khôi phục nhanh chóng khi cần thiết. Nếu bạn cần mở rộng hệ thống, MySQL cũng hỗ trợ các tính năng như replication và clustering để đáp ứng nhu cầu về khả năng mở rộng và độ sẵn sàng cao.
Để chạy MySQL mượt mà trên Ubuntu 18.04, một VPS ổn định là yếu tố then chốt. Bạn có thể mua VPS giá rẻ mà vẫn đảm bảo hiệu suất cao. Xem ngay danh mục mua VPS giá rẻ của chúng tôi để tìm gói phù hợp, tiết kiệm chi phí tối đa!