Skip to main content

🐬 Cài Đặt MySQL trên Ubuntu 20.04

📋 Chuẩn Bị

Yêu Cầu Hệ Thống

  • Ubuntu 20.04 LTS
  • Quyền sudo
  • Kết nối internet

🚀 Các Bước Cài Đặt

1. Cài Đặt MySQL Server

a. Cài đặt phiên bản mới nhất

# Cập nhật package index
sudo apt update

# Cài đặt MySQL Server
sudo apt install mysql-server

# Khởi động MySQL service
sudo systemctl start mysql.service

b. Cài đặt phiên bản cụ thể

# Thêm MySQL APT repository
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb

# Chọn phiên bản MySQL mong muốn trong menu cấu hình
# Ví dụ: MySQL 8.0, 5.7

# Cập nhật package index
sudo apt update

# Cài đặt phiên bản MySQL cụ thể
sudo apt install mysql-server=8.0.32-1ubuntu20.04
# hoặc
sudo apt install mysql-server=5.7.42-1ubuntu20.04

c. Khóa phiên bản MySQL

# Khóa phiên bản MySQL để tránh tự động cập nhật
sudo apt-mark hold mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
tip

Để xem các phiên bản MySQL có sẵn:

apt-cache policy mysql-server

d. Bỏ khóa phiên bản (nếu cần)

# Bỏ khóa phiên bản MySQL
sudo apt-mark unhold mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

2. Cấu Hình Bảo Mật Chi Tiết

a. Chạy Script Bảo Mật MySQL

sudo mysql_secure_installation

Trong quá trình này, bạn sẽ được hỏi các câu hỏi sau:

  1. Cấu hình VALIDATE 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:
  1. Chọn Mức Độ Bảo Mật Mật Khẩu
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:
  1. Các Bước Bảo Mật Khác
  • Xóa anonymous users
  • Vô hiệu hóa remote root login
  • Xóa test database
  • Reload privilege tables
tip

Khuyến nghị trả lời "Y" (Yes) cho tất cả các câu hỏi bảo mật để đảm bảo mức độ an toàn cao nhất

b. Kiểm Tra Cấu Hình

# Kiểm tra phương thức xác thực của users
SELECT user, host, plugin FROM mysql.user;

# Kiểm tra cấu hình charset
SHOW VARIABLES LIKE "chara%";

Kết quả mong đợi cho user:

+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | auth_socket |
+------------------+-----------+-----------------------+

Kết quả mong đợi cho charset:

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

3. Kiểm Tra Phiên Bản

# Kiểm tra phiên bản MySQL đã cài đặt
mysql --version

# Hoặc từ trong MySQL shell
SELECT VERSION();

4. Kiểm Tra Cài Đặt

a. Tạo Database và Table Test

# Tạo database test
CREATE DATABASE test_database;

# Tạo bảng test
CREATE TABLE test_database.test_table (
id INT,
name VARCHAR(50),
address VARCHAR(50),
PRIMARY KEY (id)
);

# Thêm dữ liệu test
INSERT INTO test_database.test_table(id, name, address)
VALUES(1, "CentOS", "Hiroshima");

# Kiểm tra dữ liệu
SELECT * FROM test_database.test_table;

# Xóa database test sau khi kiểm tra xong
DROP DATABASE test_database;

✅ Kiểm Tra Cài Đặt

1. Kiểm Tra Status Service

# Kiểm tra trạng thái MySQL
systemctl status mysql.service

Kết quả mong đợi:

● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled)
Active: active (running)
...

2. Kiểm Tra Kết Nối

# Kết nối với user mới tạo
mysql -u username -p

⚙️ Cấu Hình Thêm

1. Cho Phép Remote Access (nếu cần)

Chỉnh sửa file cấu hình MySQL:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tìm và sửa dòng:

bind-address = 0.0.0.0

Khởi động lại MySQL:

sudo systemctl restart mysql

2. Tối Ưu Hiệu Suất Ban Đầu

Các tham số cơ bản trong mysqld.cnf:

# Bộ nhớ đệm
innodb_buffer_pool_size = 1G

# Kích thước file log
innodb_log_file_size = 256M

# Số lượng kết nối tối đa
max_connections = 100

🔍 Xử Lý Sự Cố

1. Không Thể Kết Nối

  • Kiểm tra status service
  • Xác nhận thông tin đăng nhập
  • Kiểm tra firewall
# Kiểm tra log
sudo tail -f /var/log/mysql/error.log

2. Lỗi Phân Quyền

  • Xác nhận user tồn tại
  • Kiểm tra quyền đã cấp
SHOW GRANTS FOR 'username'@'host';

📚 Tài Liệu Tham Khảo

🔄 Nâng Cấp/Hạ Cấp Phiên Bản

1. Nâng cấp lên phiên bản mới

# Backup database trước khi nâng cấp
sudo mysqldump --all-databases > all_databases.sql

# Gỡ cài đặt phiên bản hiện tại
sudo apt remove mysql-server mysql-client mysql-common

# Cài đặt phiên bản mới
sudo apt install mysql-server=<phiên_bản_mới>

# Khôi phục database
sudo mysql < all_databases.sql

2. Hạ cấp xuống phiên bản cũ

warning

Hạ cấp MySQL có thể gây mất tương thích dữ liệu. Hãy backup cẩn thận trước khi thực hiện!

# Backup database
sudo mysqldump --all-databases > all_databases.sql

# Gỡ cài đặt phiên bản hiện tại
sudo apt remove mysql-server mysql-client mysql-common

# Xóa data directory
sudo rm -rf /var/lib/mysql

# Cài đặt phiên bản cũ
sudo apt install mysql-server=<phiên_bản_cũ>

# Khôi phục database (nếu tương thích)
sudo mysql < all_databases.sql