[MySQL] Fix lỗi “mysqldump: Error: Can’t create/write to file /tmp/..”‏ trên dịch vụ MySQL

Chẳng là có hôm đang xử lý hệ thống với công việc export database của 1 con server nọ thì gặp phải thông báo lỗi này của “mysqldump” thì thấy đây cũng là 1 cái lỗi khá phổ biến và linh tinh. Nên giờ mình cũng muốn chia sẻ cái cách khắc phục cho cái vấn đề nhỏ xíu xiu này trong bài viết hôm nay.

Lỗi nó sẽ trông như thế này này.

# mysqldump -u mv -p cuongquach > /root/cuongquach.sql
Password:
mysqldump: Error: 'Can't create/write to file '/tmp/#sql_8h9_1.MYI' (Errcode: 13)' when trying to dump tablespaces
mysqldump: Couldn't execute 'show fields from `logs`': Can't create/write to file '/tmp/#sql_3c4_0.MYI' (Errcode: 13) (1)

 
Đọc thông báo lỗi trên thì có thể thấy mysqldump đang cố gắng ghi dữ liệu xuống thư mục /tmp trong quá trình export database nhưng bất thành dù cho mình lưu dữ liệu export ở 1 thư mục khác.

Thậm chí lỗi này còn xảy ra trong MySQL console khi mình sử dụng một số câu lệnh như ‘describe‘. Ví dụ :

mysql> describe logs;
ERROR 1 (HY000): Can't create/write to file '/tmp/#sql_5y7_0.MYI' (Errcode: 13)

 
Nguyên nhân :

Các chương trình dịch vụ MySQL hay 1 số câu lệnh thực thi trong MySQL console luôn cần ghi nội dung các file tạm (temporay file) trong thời gian xử lý hoạt động của chúng vào 1 directory được chỉ định. Mà thông thường mặc định sẽ là directory /tmp/ , nên nếu lúc này user mysql không thể ghi file vào thư mục đó chứng tỏ permission của thư mục /tmp/ đã không đúng mặc định hoặc không cho phép user thao tác ghi (write) trên thư mục đó. Ta sẽ cần phân quyền lại cho chính xác thư mục “/tmp/” này hoặc thư mục tạm được bạn cấu hình cho hoạt động dịch vụ MySQL, ở đây mình sử dụng mặc định /tmp/ làm thư mục tạm cho dịch vụ MySQL nhé.

 
Giải quyết :

Khi mình kiểm tra thì phân quyền của thư mục này là “0755“, không chính xác vì directory /tmp còn có cả đặc tính Sticky Bit và quyền mặc định trên các hệ thống là “777“. Nên bây giờ mình phân quyền lại cho chính xác thì lỗi trên đã được fix. Quyền mặc định của directory “/tmp” là “1777” nhé.

# chmod 1777 /tmp/

 
Rồi sau đó bạn hãy thử lại các chương trình và lệnh trên nhé. Không cần khởi động lại dịch vụ MySQL.

Previous article[MySQL] Hướng dẫn cấu hình đăng nhập MySQL console không cần nhập user-pass
Next article[MySQL] Phân biệt sự khác nhau giữa tiến trình “mysqld” và “mysqld_safe” trên MySQL
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !