Mục lục

    Cách Cài Đặt MySQL Trên Ubuntu 20.04

    Đăng bởi: Hoàng Thị Anh Thư

    Ngày đăng: 12 tháng 9 năm 2022

    description image

    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:

    sudo apt update
    

    Sau đó, cài đặt gói mysql-server:

    sudo apt install mysql-server
    

    Đảm bảo rằng server đang chạy bằng cách sử dụng lệnh systemctl start:

    sudo systemctl start mysql.service
    

    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.

    **Warning:** Kể từ tháng 7 năm 2022, lỗi sẽ xảy ra khi bạn chạy tập lệnh `mysql_secure_installation` mà không có một số cấu hình khác. Lý do là tập lệnh này cố gắng đặt mật khẩu cho tài khoản MySQL gốc của cài đặt nhưng theo mặc định trên cài đặt Ubuntu, tài khoản này không được định cấu hình để kết nối bằng mật khẩu. 
    Trước tháng 7 năm 2022, tập lệnh này không thành công sau khi cố gắng đặt mật khẩu tài khoản gốc và tiếp tục với phần còn lại của lời nhắc. Tuy nhiên, khi viết script này, script sẽ trả về lỗi sau khi bạn nhập và xác nhận mật khẩu.
    

    Chạy tập lệnh bảo mật với sudo:

    sudo mysql_secure_installation
    

    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:

    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
    

    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:

    Please set the password for root here.
    
    
    New password:
    
    Re-enter new password:
    

    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:

    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 đó 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:

    sudo mysql
    
    **Note:** Nếu bạn đã cài đặt MySQL bằng một hướng dẫn khác và bật xác thực mật khẩu cho root bạn sẽ cần sử dụng một lệnh khác để truy cập MySQL shell. Lệnh sau sẽ chạy MySQL client của bạn với các đặc quyền người dùng thông thường và bạn sẽ chỉ có được các đặc quyền của admin trong cơ sở dữ liệu bằng cách xác thực:
    
    mysql -u root -p
    

    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:

    CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
    

    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:

    mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
    
    **Note:** Một số phiên bản PHP gây ra sự cố với `caching_sha2_password`. Nếu bạn định sử dụng cơ sở dữ liệu này với một ứng dụng PHP – ví dụ: phpMyAdmin – bạn có thể muốn tạo một người dùng sẽ xác thực với plugin `mysql_native_password` cũ hơn, nhưng vẫn bảo mật, thay vào đó:
    
    mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    
    Nếu không chắc chắn, bạn luôn có thể tạo người dùng xác thực bằng `caching_sha2_plugin` và thay đổi nó thành `ALTER` bằng câu lệnh sau:
    
    mysql> ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    

    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:

    mysql> 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à người dùng được phép thực hiện trên databasetable đượ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, ALTERDROP cơ sở dữ liệu, bảng và người dùng, cũng như quyền INSERT, UPDATEDELETE 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:

    mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
    

    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.

    **Warning: Một số người dùng có thể muốn cấp cho người dùng MySQL của họ đặc quyền `ALL PRIVILEGES`, đặc quyền này sẽ cung cấp cho họ các đặc quyền siêu người dùng rộng rãi tương tự như đặc quyền của người dùng root, như sau:
    
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
    
    Không nên coi nhẹ việc cấp các đặc quyền rộng rãi 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 cơ sở dữ liệu trên máy chủ.
    

    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 USERGRANT trước đó:

    mysql> FLUSH PRIVILEGES;
    

    Sau đó, bạn có thể thoát khỏi máy khách MySQL:

    mysql> exit
    

    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:

    mysql -u sammy -p
    

    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ó.

    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: 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ể 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:

    sudo mysqladmin -p -u sammy version
    

    Bạn sẽ thấy đầu ra tương tự 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 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é!

    0 câu trả lời