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 smallGot 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;