sieuthicode.com

Thông báo

16

Ưu Đãi Khi Mua Hosting

Mã giảm giá 10% : HOSTING1205
1 năm trước

THÔNG BÁO API

API MBBANK ĐÃ UPDATE VẪN SỬ DỤNG BÌNH THƯỜNG NHÉ
2 năm trước

Thông Báo Khẩn

Chúng tôi đã mã hóa mật khẩu và dữ liệu API. Vui lòng xóa và thêm lại tài khoản của bạn.
2 năm trước

NHẬN FIX TẤT CẢ API

NHẬN FIX TẤT CẢ API TỪ 100K ĐÊN 300K MỌI API
2 năm trước

THÔNG BÁO MỚI

MÃ GIẢM 50% KHI MUA CODE : SINAMI23H
2 năm trước

THÔNG BÁO API

HẠ GIÁ THUÊ API XUỐNG 25K/ THÁNG VÀ HỖ TRỢ ĐẤU APP FREE
3 năm trước

THỐNG BÁO HÓT

FREE HOST USA1 ĐẾN 30/3/2024
3 năm trước

THÔNG BÁO GIẢM GIÁ

GIẢM GIÁ THUÊ CRONS 1S SERVER US VÀ VN XUỐNG 6K
3 năm trước

THÔNG BÁO

Lsgd mbbank sử dụng bth rồi
3 năm trước

Thông báo hot

Ra mắt thêm api seabank
3 năm trước

THÔNG BÁO KHẨN

NÂNG GIÁ THUÊ API LÊN 30K/ THÁNG VÀ HỖ TRỢ ĐẤU WEB APP FREE
3 năm trước

THÔNG BÁO HOT

TẠNG HOSTING FREE 1 NĂM CODE : FREEHOSSTING
3 năm trước

KHUYỄN MÃI

FREE CRONS SEVER 4 (VN) 1S
3 năm trước

THÔNG BÁO KHẨN

GIẢM GIÁ CRONS 1S CHỈ CÒN 5K
3 năm trước

KHUYỄN MÃI NẠP

NẠP TRÊN 100K NHẬN THÊM 10% TRONG HÔM NAY
3 năm trước
SIÊU THỊ CODE / KIẾN THỨC & CÔNG NGHỆ

Cách đặt múi giờ và lịch cron sao lưu MySQL để chạy đúng giờ

Muốn cron sao lưu MySQL chạy đúng giờ, hãy xác định múi giờ mà cron sử dụng trước khi đặt lịch. Đổi giờ trong ứng dụng hoặc trong MySQL không đồng nghĩa lịch cron sẽ đổi theo. Sau đó, cần kiểm tra lần chạy thực tế, ngăn tác vụ chạy chồng và xác nhận bản sao lưu có thể phục hồi.

Hướng dẫn dưới đây dành cho người quản trị website hoặc VPS Linux muốn sao lưu theo giờ Việt Nam, đặc biệt khi máy chủ đang dùng UTC. Các tên cơ sở dữ liệu và đường dẫn trong ví dụ đều là minh họa, cần thay theo môi trường thực tế.

Phân biệt các múi giờ trước khi sửa lịch

Một website có thể đồng thời dùng nhiều múi giờ. Bạn cần phân biệt vai trò của từng lớp để tránh sửa đúng giờ hiển thị nhưng sai lịch chạy.

Phân biệt các múi giờ trước khi sửa lịch
  • Múi giờ hệ điều hành: ảnh hưởng cách máy chủ hiển thị thời gian và thường là cơ sở để cron lập lịch.
  • Múi giờ của cron: thường theo hệ thống, nhưng một số bản triển khai cho phép chỉ định riêng trong crontab.
  • Múi giờ phiên MySQL: ảnh hưởng một số hàm thời gian và cách xử lý kiểu dữ liệu thời gian; không quyết định thời điểm cron khởi chạy.
  • Múi giờ ứng dụng: quyết định giờ hiển thị trên website hoặc lịch do ứng dụng tự quản lý.

Trên máy chủ Linux dùng systemd, kiểm tra bằng các lệnh sau. Nếu môi trường không có timedatectl, dùng date và công cụ quản trị tương ứng.

date '+%Y-%m-%d %H:%M:%S %Z %z'
timedatectl status
crontab -l

Ghi lại múi giờ, độ lệch UTC và trạng thái đồng bộ đồng hồ. Múi giờ đúng nhưng đồng hồ hệ thống sai vẫn khiến tác vụ chạy lệch thời điểm thực tế.

Chọn cách đặt lịch theo giờ Việt Nam

Giữ máy chủ ở UTC và quy đổi giờ chạy

Nếu cron dùng UTC, 02:00 tại Việt Nam tương ứng 19:00 UTC ngày hôm trước. Lịch sao lưu hằng ngày lúc 02:00 giờ Việt Nam có thể biểu diễn như sau trong crontab của người dùng:

0 19 * * * /opt/backup/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Ví dụ giả định bạn đã tạo chương trình sao lưu tại đường dẫn trên và tài khoản chạy cron có quyền ghi log. Không sao chép nguyên đường dẫn nếu máy chủ chưa có các tệp này.

Với lịch theo tuần, phải quy đổi cả ngày. Chẳng hạn, 02:00 thứ Hai tại Việt Nam là 19:00 Chủ nhật theo UTC. Nếu chỉ đổi giờ mà giữ thứ Hai, bản sao lưu sẽ chạy muộn một ngày so với mong muốn.

Chỉ định múi giờ riêng nếu cron hỗ trợ

Một số bản cron hỗ trợ biến CRON_TZ. Khi tài liệu của bản cron đang cài xác nhận có hỗ trợ, bạn có thể khai báo:

CRON_TZ=Asia/Ho_Chi_Minh
0 2 * * * /opt/backup/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Không mặc định mọi môi trường đều hiểu cấu hình này. Đặt TZ cho tiến trình cũng không bảo đảm bộ lập lịch dùng múi giờ đó để xét giờ chạy. Với hosting có bảng điều khiển, hãy xác nhận múi giờ của tính năng cron với nhà cung cấp.

Đổi múi giờ hệ thống khi phù hợp

Nếu máy chủ được quản trị thống nhất theo giờ Việt Nam, bạn có thể cân nhắc đổi múi giờ hệ thống. Tuy nhiên, thay đổi này có thể ảnh hưởng các tác vụ khác và cách đọc log. Cần rà soát toàn bộ lịch, kiểm tra hành vi của dịch vụ cron sau thay đổi và theo dõi lần chạy tiếp theo.

Chọn lịch sao lưu theo dữ liệu và tải thực tế

Không nên chọn giờ sao lưu chỉ vì đó là nửa đêm. Hãy xem lúc nào website ít ghi dữ liệu, ít nhập đơn hàng và không trùng tác vụ nặng như xuất báo cáo. Nếu phục vụ nhiều quốc gia, giờ ít tải có thể không trùng ban đêm tại Việt Nam.

Chọn lịch sao lưu theo dữ liệu và tải thực tế
  • Tần suất: dựa vào lượng dữ liệu có thể chấp nhận mất. Sao lưu mỗi ngày không đáp ứng yêu cầu chỉ mất tối đa một giờ dữ liệu.
  • Thời lượng: đo thời gian sao lưu thực tế và chừa khoảng cách đủ lớn trước lần chạy tiếp theo.
  • Tài nguyên: theo dõi CPU, RAM, I/O đĩa và dung lượng trống trong lúc sao lưu.
  • Lưu giữ: xác định số bản cần giữ, nơi lưu ngoài máy chủ và quyền truy cập.

Ví dụ giả định, website ít đơn ban đêm và chấp nhận mất tối đa một ngày dữ liệu có thể bắt đầu với lịch hằng ngày. Nếu yêu cầu phục hồi chặt hơn, cần xem xét sao lưu thường xuyên hơn hoặc phương án phục hồi theo thời điểm bằng binary log, thay vì chỉ đổi giờ cron.

Chuẩn bị tác vụ MySQL để lịch đúng vẫn có bản sao lưu dùng được

Cron thường có môi trường tối giản, khác phiên SSH tương tác. Vì vậy, hãy dùng đường dẫn tuyệt đối, khai báo rõ thư mục làm việc và thử lệnh bằng đúng tài khoản chạy cron.

Với cơ sở dữ liệu chủ yếu dùng InnoDB, lệnh minh họa sau tạo bản xuất logic:

/usr/bin/mysqldump --defaults-extra-file=/etc/mysql/backup.cnf --single-transaction --quick ten_csdl > /duong-dan-bao-mat/backup.sql

Tệp cấu hình đăng nhập phải có quyền truy cập hạn chế; không đưa mật khẩu vào crontab. Kiểm tra đường dẫn công cụ trên máy trước khi dùng. --single-transaction phù hợp để lấy dữ liệu nhất quán của bảng giao dịch như InnoDB, nhưng không bảo đảm tương tự cho bảng không hỗ trợ giao dịch. Tránh thay đổi cấu trúc bảng trong lúc xuất dữ liệu.

Tác vụ hoàn chỉnh nên ghi vào tệp tạm, kiểm tra mã thoát rồi mới đổi sang tên bản sao lưu chính thức. Nếu cần lưu procedure, function hoặc event, hãy kiểm tra thêm tùy chọn xuất và quyền tương ứng. Không xóa bản cũ trước khi xác nhận bản mới thành công.

Ngăn chạy chồng và xử lý lịch bị bỏ lỡ

Nếu lần sao lưu trước chưa xong, lần tiếp theo có thể tranh chấp tài nguyên hoặc ghi đè tệp. Trên Linux có tiện ích flock, có thể dùng khóa không chờ:

Ngăn chạy chồng và xử lý lịch bị bỏ lỡ
0 19 * * * /usr/bin/flock -n /duong-dan-khoa/mysql-backup.lock /opt/backup/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Đường dẫn khóa phải tồn tại ở thư mục phù hợp và có quyền truy cập đúng. Cần ghi nhận trường hợp không lấy được khóa để phân biệt lần bị bỏ qua với lần thành công.

Cron truyền thống thường không tự chạy bù khi máy chủ tắt đúng giờ hẹn. Nếu cần chạy bù, hãy chọn cơ chế lập lịch có hỗ trợ, chẳng hạn systemd timer được cấu hình phù hợp. Với múi giờ có giờ mùa hè, thời điểm chuyển giờ có thể gây bỏ hoặc lặp lịch tùy bản cron; dùng UTC giúp tránh sự thay đổi theo mùa này.

Kiểm tra kết quả và tìm nguyên nhân khi chạy sai

Sau khi lưu lịch, hãy đặt một tác vụ kiểm tra ngắn ghi thời gian ra tệp rồi gỡ nó sau khi xác nhận. Nếu viết lệnh date trực tiếp trong crontab, lưu ý ký tự % có ý nghĩa đặc biệt trong nhiều bản cron và cần được xử lý đúng.

  1. Đối chiếu thời điểm trong log với giờ Việt Nam và UTC.
  2. Kiểm tra mã thoát, dung lượng tệp và thông báo lỗi của công cụ sao lưu.
  3. Phục hồi thử vào cơ sở dữ liệu riêng, không ghi đè dữ liệu đang hoạt động.
  4. Kiểm tra bảng, dữ liệu mẫu và các đối tượng cần phục hồi.

Các lỗi thường gặp gồm dùng sai crontab, thiếu quyền ghi thư mục, lệnh không nằm trong PATH, đầy đĩa hoặc lỗi xác thực MySQL. Crontab của người dùng có năm trường thời gian rồi đến lệnh; cấu hình hệ thống như /etc/crontab còn có trường người dùng. Nhầm hai định dạng có thể khiến tác vụ không chạy.

Giải đáp các câu hỏi thường gặp

Đổi múi giờ MySQL có làm cron chạy theo không?

Không. Hãy sửa hoặc quy đổi lịch tại bộ lập lịch. Múi giờ MySQL phục vụ xử lý thời gian trong cơ sở dữ liệu.

Tên tệp lệch ngày có phải cron chạy sai?

Chưa chắc. Tiến trình có thể đặt tên theo UTC trong khi bạn đối chiếu theo giờ Việt Nam. Nên thống nhất quy ước tên tệp và ghi thời gian kèm độ lệch UTC trong log.

Có tệp SQL nghĩa là sao lưu thành công chưa?

Chưa. Tệp có thể rỗng hoặc chỉ chứa một phần dữ liệu. Cần kiểm tra mã thoát và phục hồi thử để đánh giá khả năng sử dụng.

Thiết lập một lần chạy thử trước khi áp dụng chính thức

Hãy ghi rõ giờ mong muốn, múi giờ cron, giờ quy đổi và tài khoản thực thi; sau đó chạy thử toàn bộ quy trình, kể cả phục hồi. Nếu cần chọn VPS hoặc hosting cho tác vụ này, bạn có thể tham khảo danh mục liên quan tại sieuthicode.com và xác nhận trước tài nguyên, quyền chạy cron, công cụ MySQL, bảo mật, điều kiện sử dụng và hỗ trợ. Ưu tiên môi trường cho phép kiểm thử tải sao lưu thay vì chỉ chọn theo dung lượng lưu trữ.

Chia sẻ bài viết này