Các Lỗi MySQL Phổ Biến và Cách Khắc Phục

Lỗi 2003: Không kết nối được đến máy chủ MySQL

Khi sử dụng Navicat kết nối từ xa đến MySQL, lỗi 2003 xảy ra do các nguyên nhân chính:

  • Dịch vụ MySQL chưa khởi động
  • Quyền truy cập từ xa chưa được cấp
  • Cổng 3306 bị chặn bởi tường lửa

Khởi động dịch vụ: Mở Run (Win+R), nhập services.msc, tìm dịch vụ MySQL (ví dụ MySQL80), click chuột phải chọn Start.

Cấp quyền truy cập từ xa:

USE mysql; UPDATE user SET host = '%' WHERE user = 'admin_user'; FLUSH PRIVILEGES;

Cấu hình tường lửa Windows: Vào Windows Defender Firewall > Advanced Settings > Inbound Rules > New Rule, chọn Port, nhập 3306.

Lỗi 1251: Giao thức xác thực không hỗ trợ

Lỗi này xảy ra khi client không tương thích với plugin xác thực mới của MySQL 8.x (caching_sha2_password). Giải pháp:

ALTER USER 'admin_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secure_pass123'; FLUSH PRIVILEGES;

Thực hiện trong thư mục bin của MySQL qua Command Prompt.

Lỗi 1045: Truy cập bị từ chối

Lỗi xuất hiện khi nhập mysql -u root -p. Nguyên nhân:

  • Dịch vụ MySQL không chạy
  • Cổng cấu hình trong my.ini sai (ví dụ 3307 thay vì 3306)
  • File my.ini chứa nội dung lỗi
  • Mật khẩu đăng nhập không chính xác

Kiểm tra file my.ini và đảm bảo cổng đúng, sau đó restart dịch vụ.

Lỗi 1064: Cú pháp SQL sai

Khi sử dụng dấu nháy đơn/kép cho tên bảng/cột. MySQL yêu cầu dùng backtick (`) cho các tên trùng từ khóa:

SELECT `employee_name`, `salary` FROM `staff_table` WHERE `id` = 101;

Lỗi 1054: Cột không tồn tại

Lỗi xảy ra khi tên cột không đúng trong bảng. Kiểm tra:

  • Tên cột viết sai chính tả
  • Bảng không tồn tại
  • Cột mới thêm chưa được lưu
  • Có khoảng trắng thừa trong tên cột

Lỗi 1442: Trigger không thể thao tác bảng hiện tại

MySQL cấm INSERT/UPDATE/DELETE trên bảng đang kích hoạt trigger. Giải pháp:

  • UPDATE: Dùng SET trực tiếp
  • INSERT/DELETE: Tạo bảng phụ để thực hiện thao tác

Lỗi 1303: Tạo trigger từ stored routine

Khi dùng Navicat tạo trigger, không cần khai báo CREATE TRIGGER. Chỉ cần chọn chức năng tạo trigger trong giao diện.

Lỗi 1292: Giá trị không hợp lệ

Khi dùng CONCAT() kết hợp chuỗi với số. Thay bằng CONCAT_WS():

SELECT CONCAT_WS('_', 'prefix', 1001, 'suffix') AS formatted_id;

Lỗi 1265: Dữ liệu bị cắt xén

Nguyên nhân:

  • Dữ liệu vượt quá độ dài trường (ví dụ VARCHAR(10) nhập 15 ký tự)
  • Loại dữ liệu không khớp (DECIMAL(10,2) nhập 10.112)
  • Chèn ký tự không hợp lệ

Điều chỉnh cấu trúc bảng hoặc kiểm tra dữ liệu đầu vào.

Lỗi 1130: Host không được phép kết nối

Kiểm tra quyền truy cập từ xa và cấu hình user host trong MySQL.

Lỗi 1366: Không nhận diện chữ tiếng Việt

Do bảng không dùng utf8mb4. Tạo lại database với cấu hình:

CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Lỗi 3780: Khóa ngoại không tương thích

Kiểm tra:

  • Loại dữ liệu của cột khóa chính và khóa ngoại (ví dụ INT vs VARCHAR)
  • Cấu hình collation khác nhau giữa hai bảng

Lỗi 1075: Chỉ một cột AUTO_INCREMENT

Mỗi bảng chỉ được phép một cột AUTO_INCREMENT. Xóa AUTO_INCREMENT khỏi các cột không phải khóa chính.

Lỗi 1833: Xung đột khóa ngoại khi sửa cấu trúc

Thực hiện:

  1. Xóa tất cả khóa ngoại liên quan
  2. Thay đổi cấu trúc bảng
  3. Tạo lại khóa ngoại

Lỗi 1055: GROUP BY không đủ điều kiện

Trong chế độ ONLY_FULL_GROUP_BY, tất cả cột SELECT phải có trong GROUP BY. Sửa bằng cách thêm các cột vào GROUP BY:

SELECT category, SUM(sales) FROM orders GROUP BY category, region;

Lỗi 1093: Cập nhật bảng cùng lúc SELECT

Không thể SELECT và UPDATE cùng một bảng trong một câu lệnh. Giải pháp:

UPDATE table1 SET status = 'processed' WHERE id IN (SELECT id FROM (SELECT id FROM table1 WHERE condition) AS temp);

Lỗi 1052: Cột không rõ ràng

Khi cột tồn tại ở nhiều bảng. Xác định rõ bằng alias:

SELECT t1.name, t2.name FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;

Lỗi 1222: Số lượng cột UNION không khớp

UNION yêu cầu số cột và kiểu dữ liệu giống nhau. Điều chỉnh SELECT để số cột bằng nhau.

Lỗi 1267: Collation không khớp

Thay đổi collation của bảng để đồng nhất:

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_vietnamese_ci;

Thẻ: mysql sql-syntax database-configuration user-permissions firewall-configuration

Đăng vào ngày 22 tháng 6 lúc 04:20