Khắc phục lỗi Database Write

Build phase database hoặc restore step 2 báo lỗi write.

databasebuild

Database Write Issues

Triệu chứng:

  • Build phase database fail với ER_LOCK_WAIT_TIMEOUT
  • Restore step 2 báo MySQL server has gone away
  • max_allowed_packet too small
  • Got a packet bigger than 'max_allowed_packet' bytes

Fix 1: max_allowed_packet

Restore SQL dump lớn cần max_allowed_packet đủ lớn.

Tăng giá trị này trong cấu hình MySQL. Trên shared hosting, liên hệ support để được tăng. Trên VPS, sửa file my.cnf hoặc mariadb.conf:

[mysqld]
max_allowed_packet = 256M

Sau đó restart MySQL/MariaDB.

Fix 2: User MySQL thiếu privilege

User restore cần ALL PRIVILEGES trên database (gồm CREATE, DROP, INSERT, UPDATE, DELETE, INDEX, REFERENCES, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, TRIGGER, EVENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE).

GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';
FLUSH PRIVILEGES;

Fix 3: Disk full

Database server không ghi được khi disk full. Kiểm tra disk free trên server và xóa các log cũ, bin log không cần (PURGE BINARY LOGS).

Fix 4: MySQL crashed / connection drop

Restart MySQL service. Kiểm tra error log của MySQL/MariaDB để tìm nguyên nhân crash.

Fix 5: innodb_lock_wait_timeout

Restore lớn cần timeout dài hơn:

[mysqld]
innodb_lock_wait_timeout = 600

Fix 6: utf8mb4 collation mismatch

Lỗi Unknown collation: 'utf8mb4_0900_ai_ci' khi restore database từ MySQL 8 sang MariaDB cũ.

Fix 1: Replace collation trong SQL file trước khi import:

sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql

Fix 2: Tạo database đích với collation tương thích:

CREATE DATABASE example_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Tham khảo