Hướng dẫn dùng mysqldump để xuất, nén và khôi phục cơ sở dữ liệu MySQL bằng các lệnh thực tế. Bạn cũng sẽ biết cách sao lưu từ xa và kiểm tra tệp dump.
Sao lưu cơ sở dữ liệu thường xuyên giúp bạn chủ động hơn khi cần chuyển máy chủ, cập nhật hệ thống hoặc khôi phục dữ liệu sau sự cố. Với , bạn có thể xuất cấu trúc và dữ liệu MySQL thành tệp SQL để lưu trữ hoặc nhập lại trên một máy chủ khác. Bài viết dưới đây hướng dẫn các lệnh sao lưu MySQL và khôi phục MySQL thường dùng, kèm những lưu ý để hạn chế lỗi và bảo vệ dữ liệu.
Quản trị viên chuẩn bị sao lưu cơ sở dữ liệu MySQL trên máy chủ
mysqldump là tiện ích dòng lệnh đi kèm MySQL, cho phép xuất cơ sở dữ liệu thành các câu lệnh SQL. Tệp kết quả thường chứa lệnh tạo bảng, dữ liệu và một số đối tượng cơ sở dữ liệu khác. Khi cần phục hồi, bạn dùng chương trình mysql để chạy tệp SQL đó trên máy chủ đích.
Trước khi thực hiện, hãy chuẩn bị:
Quyền truy cập máy chủ hoặc môi trường có thể chạy lệnh MySQL.
Tên người dùng, mật khẩu và tên cơ sở dữ liệu cần sao lưu.
Dung lượng lưu trữ phù hợp với kích thước dữ liệu.
Quyền cần thiết để đọc dữ liệu và xuất các đối tượng liên quan.
Kiểm tra tiện ích có sẵn bằng lệnh:
mysqldump --version
Nếu hệ thống báo không tìm thấy lệnh, có thể máy chủ chưa cài bộ công cụ MySQL client hoặc thư mục chứa chương trình chưa nằm trong biến môi trường PATH. Tên gói cài đặt khác nhau tùy hệ điều hành và phiên bản MySQL hoặc MariaDB, vì vậy hãy kiểm tra hướng dẫn phù hợp với môi trường của bạn.
Trong ví dụ, thay db_user bằng tài khoản MySQL và ten_database bằng tên cơ sở dữ liệu thực tế. Tùy chọn -p khiến chương trình yêu cầu nhập mật khẩu sau khi chạy. Cách này an toàn hơn việc ghi mật khẩu trực tiếp trong dòng lệnh, nơi mật khẩu có thể bị lưu trong lịch sử shell hoặc hiển thị trong danh sách tiến trình.
Cách sao lưu MySQL bằng mysqldump
Minh họa xuất dữ liệu MySQL thành tệp sao lưu bằng mysqldump
Nhập mật khẩu khi được yêu cầu. Dấu > chuyển nội dung xuất ra vào tệp ten_database.sql trong thư mục hiện tại. Nếu tệp đã tồn tại, nội dung cũ có thể bị ghi đè, nên hãy chọn tên tệp riêng cho mỗi lần sao lưu.
Bạn có thể đặt tên kèm ngày để dễ nhận biết thời điểm tạo bản sao lưu:
Với cơ sở dữ liệu đang hoạt động và dùng InnoDB, có thể thêm --single-transaction để tạo bản dump nhất quán trong một giao dịch mà không khóa bảng theo cách thông thường. Tùy chọn --quick giúp đọc dữ liệu theo từng hàng thay vì tải toàn bộ dữ liệu vào bộ nhớ. Ví dụ:
--single-transaction phù hợp với các bảng hỗ trợ giao dịch như InnoDB. Nếu cơ sở dữ liệu có bảng dùng engine không hỗ trợ giao dịch hoặc ứng dụng vẫn ghi vào các bảng đó trong lúc xuất, cần cân nhắc phương án khóa hoặc tạm dừng ghi để bảo đảm bản sao lưu nhất quán.
Để xuất thêm thủ tục lưu trữ và sự kiện, có thể dùng:
Các tùy chọn này giúp đưa những đối tượng tương ứng vào tệp dump. Hãy xác nhận tài khoản MySQL có đủ quyền và phiên bản công cụ hỗ trợ các tùy chọn cần dùng. Triggers thường được xuất mặc định, nhưng ghi rõ tùy chọn giúp lệnh dễ đọc hơn.
Muốn sao lưu nhiều cơ sở dữ liệu trong cùng một tệp, dùng --databases:
Lệnh xuất toàn bộ có thể bao gồm những cơ sở dữ liệu hệ thống. Hãy kiểm tra phạm vi sao lưu và quyền của tài khoản trước khi sử dụng, đặc biệt khi định nhập tệp này lên máy chủ khác.
Với dữ liệu lớn, nén trực tiếp đầu ra giúp giảm dung lượng lưu trữ:
Nếu lệnh cần chạy lâu, hãy kiểm tra dung lượng ổ đĩa còn trống và bảo đảm phiên làm việc không bị ngắt giữa chừng. Sau khi hoàn tất, kiểm tra tệp có kích thước hợp lý và có thể đọc được. Với tệp nén, dùng gzip -t ten_database.sql.gz để kiểm tra tính toàn vẹn của luồng nén.
Khôi phục MySQL từ tệp sao lưu
Minh họa khôi phục dữ liệu MySQL từ tệp sao lưu
Trước khi nhập dữ liệu, xác định tệp dump được tạo theo cách nào. Nếu tệp chỉ chứa một cơ sở dữ liệu, hãy tạo cơ sở dữ liệu đích trước, trừ khi quy trình của bạn đã tạo sẵn:
mysql -u db_user -p -e "CREATE DATABASE ten_database;"
Sau đó nhập tệp vào cơ sở dữ liệu đó:
mysql -u db_user -p ten_database < ten_database.sql
Lệnh sẽ yêu cầu mật khẩu rồi chạy lần lượt các câu lệnh trong tệp. Nếu tệp được tạo bằng --databases hoặc --all-databases, thông tin tên cơ sở dữ liệu và lệnh chuyển cơ sở dữ liệu thường đã nằm trong dump. Khi đó có thể nhập mà không chỉ định tên ở cuối lệnh:
mysql -u db_user -p < nhieu_database.sql
Với tệp đã nén bằng gzip, giải nén và chuyển trực tiếp dữ liệu cho mysql:
gunzip -c ten_database.sql.gz | mysql -u db_user -p ten_database
Không nên nhập tệp dump vào cơ sở dữ liệu đang có dữ liệu quan trọng mà chưa kiểm tra nội dung. Tệp có thể chứa lệnh tạo bảng hoặc chèn dữ liệu trùng, dẫn đến lỗi hoặc thay đổi dữ liệu hiện tại. Nếu cần thay thế dữ liệu cũ, hãy sao lưu trạng thái hiện tại trước và xác nhận rõ cơ sở dữ liệu đích.
Khi chuyển dữ liệu sang máy chủ khác, hãy kiểm tra phiên bản MySQL, bộ ký tự, collation và quyền người dùng. Một số câu lệnh hoặc tính năng có thể khác nhau giữa các phiên bản. Tài khoản dùng để khôi phục cũng cần quyền tạo bảng, ghi dữ liệu và tạo các đối tượng có trong dump. Thông tin tài khoản ứng dụng không phải lúc nào cũng được tạo lại chỉ bằng cách nhập một tệp sao lưu cơ sở dữ liệu.
Sao lưu từ máy chủ từ xa và kiểm tra kết quả
Nếu máy chủ MySQL cho phép kết nối mạng, có thể chỉ định host và cổng khi xuất dữ liệu:
Thay db.example.com bằng địa chỉ máy chủ thực tế. Kết nối từ xa cần được cấu hình và giới hạn quyền phù hợp; không mở cổng cơ sở dữ liệu công khai nếu không cần thiết. Nếu không thể kết nối trực tiếp, bạn có thể chạy lệnh trên máy chủ chứa MySQL rồi chuyển tệp về máy cá nhân qua kênh truyền được bảo vệ, chẳng hạn SSH.
Sau khi sao lưu, nên xác nhận lệnh kết thúc thành công, tệp được tạo đúng vị trí và dung lượng không bất thường. Có thể xem vài dòng đầu bằng head để kiểm tra tệp SQL có nội dung, nhưng không nên coi việc đọc được tệp là bằng chứng duy nhất cho thấy có thể khôi phục.
Cách kiểm tra đáng tin cậy hơn là thử nhập bản sao lưu vào một cơ sở dữ liệu thử nghiệm hoặc môi trường tách biệt. Sau khi nhập, kiểm tra các bảng, số lượng dữ liệu quan trọng và những đối tượng như thủ tục, sự kiện nếu hệ thống có sử dụng. Thử khôi phục định kỳ giúp phát hiện sớm tệp hỏng, thiếu quyền hoặc khác biệt phiên bản trước khi xảy ra sự cố thật.
Để tự động hóa, có thể đặt lệnh sao lưu trong cron hoặc công cụ lập lịch phù hợp, đồng thời xây dựng quy tắc giữ lại và xóa các bản cũ. Tránh để tệp dump chứa dữ liệu nhạy cảm ở thư mục công khai. Hãy giới hạn quyền đọc tệp, mã hóa khi lưu trữ hoặc truyền đi nếu cần, và bảo vệ thông tin đăng nhập MySQL.
Lỗi thường gặp khi dùng mysqldump
Access denied: kiểm tra tên người dùng, mật khẩu, host kết nối và quyền của tài khoản. Một số đối tượng yêu cầu quyền bổ sung.
Không tìm thấy lệnh: cài công cụ client phù hợp hoặc dùng đường dẫn đầy đủ đến mysqldump.
Thiếu dung lượng: kiểm tra ổ đĩa trước khi xuất; cân nhắc nén hoặc lưu tệp sang vị trí có đủ chỗ.
Lỗi khi nhập: xem thông báo lỗi để xác định câu lệnh, quyền, phiên bản hoặc đối tượng gây ra vấn đề. Không bỏ qua lỗi rồi mặc định rằng dữ liệu đã được khôi phục đầy đủ.
Bản sao lưu không nhất quán: xác nhận loại storage engine và chọn phương án phù hợp với hoạt động ghi dữ liệu trong thời gian xuất.
Kết luận
mysqldump là cách trực tiếp để sao lưu MySQL thành tệp SQL và khôi phục bằng chương trình mysql. Hãy chọn đúng phạm vi dữ liệu, bảo vệ tệp dump, kiểm tra kết quả và thử khôi phục định kỳ. Nếu cần một môi trường máy chủ để triển khai ứng dụng và quản lý cơ sở dữ liệu, bạn có thể tham khảo các gói VPS của VibeVPS, trong đó VPS AMD EPYC Gen 3 có giá từ 81.000đ/tháng. Hãy chọn cấu hình phù hợp với nhu cầu thực tế và luôn duy trì bản sao lưu độc lập.