Cách sao lưu các bảng cụ thể bằng mysqldump: Hướng dẫn đầy đủ kèm ví dụ và các thực tiễn tốt nhất

1. Giới thiệu

MySQL là một hệ quản trị cơ sở dữ liệu được sử dụng bởi nhiều trang web và ứng dụng. Trong số các công cụ của nó, lệnh “mysqldump” đặc biệt quan trọng khi thực hiện sao lưu hoặc di chuyển cơ sở dữ liệu. Đặc biệt, khi bạn muốn sao lưu chỉ các bảng cụ thể từ một cơ sở dữ liệu lớn, lệnh này trở nên cực kỳ hữu ích.

Trong bài viết này, chúng tôi sẽ giải thích chi tiết cách dump các bảng cụ thể bằng lệnh mysqldump. Hướng dẫn được thiết kế để dễ hiểu cho người mới bắt đầu, đồng thời giới thiệu các tùy chọn mức trung cấp và kỹ thuật sử dụng nâng cao.

2. Cú pháp cơ bản của lệnh mysqldump

Trước tiên, hãy ôn lại cách sử dụng cơ bản của lệnh mysqldump. Lệnh này được sử dụng để dump (sao lưu) cấu trúc và dữ liệu của toàn bộ cơ sở dữ liệu hoặc các bảng cụ thể.

Cú pháp cơ bản

Bằng cách chỉ định tên người dùng, mật khẩu, tên cơ sở dữ liệu và tên bảng như được hiển thị bên dưới, bạn có thể sao lưu một bảng cụ thể.

mysqldump -u username -p database_name table_name > output_file.sql
  • -u : Chỉ định tên người dùng dùng để truy cập cơ sở dữ liệu
  • -p : Chỉ định mật khẩu (bạn sẽ được yêu cầu nhập nó)
  • database_name : Tên của cơ sở dữ liệu cần dump
  • table_name : Bảng cụ thể cần dump
  • > output_file.sql : Chỉ định tệp đầu ra

Các tùy chọn thường dùng

  • --single-transaction : Đảm bảo tính nhất quán giao dịch khi sao lưu các bảng InnoDB
  • --skip-lock-tables : Tránh khóa bảng trong quá trình sao lưu

3. Cách dump các bảng cụ thể

Dump một bảng duy nhất

Để sao lưu chỉ một bảng cụ thể, chỉ định tên bảng sau tên cơ sở dữ liệu. Trong ví dụ sau, chỉ bảng users được dump.

mysqldump -u root -p my_database users > users_dump.sql

Lệnh này lưu cấu trúc và dữ liệu của bảng users trong cơ sở dữ liệu my_database vào users_dump.sql.

Dump nhiều bảng

Nếu bạn muốn sao lưu nhiều bảng cùng lúc, chỉ định các tên bảng cách nhau bằng khoảng trắng.

mysqldump -u root -p my_database users orders products > multiple_tables_dump.sql

Trong ví dụ trên, ba bảng users, ordersproducts được dump đồng thời.

Dump bằng danh sách bảng

Khi dump một số lượng lớn bảng, việc chỉ định thủ công từng tên bảng có thể rườm rà. Trong trường hợp đó, bạn có thể sử dụng lệnh SHOW TABLES hoặc một script để tự động tạo danh sách các bảng cần dump.

mysql -u root -p my_database -N -e "SHOW TABLES LIKE 'hoge%'" > table_list.txt
mysqldump -u root -p my_database `cat table_list.txt` > partial_dump.sql

Phương pháp này cho phép bạn sao lưu hiệu quả chỉ các bảng khớp với mẫu được chỉ định.

4. Các tùy chọn và sử dụng nâng cao

mysqldump cung cấp nhiều tùy chọn cho phép bạn tạo bản sao lưu linh hoạt theo nhu cầu. Dưới đây là một số tùy chọn cho các tình huống cụ thể.

Dump chỉ cấu trúc

Nếu bạn không cần dữ liệu và chỉ muốn sao lưu cấu trúc bảng, sử dụng tùy chọn --no-data.

mysqldump -u root -p my_database --no-data users > users_structure.sql

Lệnh này chỉ dump cấu trúc của bảng users và không bao gồm bất kỳ dữ liệu nào.

Dump chỉ dữ liệu

Ngược lại, nếu bạn muốn dump chỉ dữ liệu bảng, sử dụng tùy chọn --no-create-info.

mysqldump -u root -p my_database --no-create-info users > users_data.sql

Lệnh này loại trừ cấu trúc bảng và chỉ dump dữ liệu.

Dump dữ liệu dựa trên điều kiện cụ thể

Bằng cách sử dụng tùy chọn --where, bạn có thể dump chỉ dữ liệu khớp với các điều kiện cụ thể. Ví dụ, để dump chỉ các hàng mà id lớn hơn 100, sử dụng lệnh sau:

mysqldump -u root -p my_database users --where="id > 100" > users_filtered_dump.sql

Điều này cho phép bạn trích xuất và sao lưu chỉ dữ liệu cần thiết từ một cơ sở dữ liệu lớn.

5. Các ví dụ sử dụng thực tế

Trường hợp sử dụng 1: Sao lưu một bảng duy nhất

Ví dụ, nếu bạn muốn sao lưu chỉ bảng salary trong cơ sở dữ liệu employees, hãy sử dụng lệnh sau:

mysqldump -u root -p employees salary > salary_dump.sql

Trường hợp sử dụng 2: Sao lưu dữ liệu có điều kiện

Để xuất chỉ một phạm vi dữ liệu cụ thể, sử dụng tùy chọn --where. Ví dụ, để sao lưu chỉ các hàng mà id trong bảng users lớn hơn 100:

mysqldump -u root -p my_database users --where="id > 100" > users_partial_dump.sql

6. Lưu ý quan trọng và các thực hành tốt nhất

Vấn đề khóa bảng

Khi sử dụng mysqldump, các bảng có thể bị khóa, ngăn cản các thao tác khác được thực hiện. Điều này có thể đặc biệt gây vấn đề trong các hệ thống sản xuất. Để tránh vấn đề này, nên sử dụng tùy chọn --single-transaction. Đối với các bảng InnoDB, kết hợp nó với tùy chọn --skip-lock-tables sẽ tăng cường độ an toàn hơn.

Xử lý khối lượng dữ liệu lớn

Nếu cơ sở dữ liệu của bạn chứa một lượng dữ liệu rất lớn, quá trình sao lưu có thể mất thời gian dài. Một cách hiệu quả là sử dụng gzip để nén dữ liệu trong thời gian thực.

mysqldump -u root -p my_database | gzip > backup_$(date +%Y%m%d).sql.gz

Lệnh này nén dữ liệu trong quá trình sao lưu, giúp tiết kiệm không gian đĩa.

7. Kết luận

Trong bài viết này, chúng tôi đã giải thích cách xuất các bảng cụ thể bằng lệnh mysqldump. Chúng tôi đã bao phủ mọi thứ từ cách sử dụng lệnh cơ bản đến việc sao lưu có điều kiện, xuất chỉ cấu trúc hoặc chỉ dữ liệu, và thậm chí các kỹ thuật script hiệu quả. mysqldump là một công cụ rất mạnh, và khi được sử dụng đúng cách, nó cho phép bạn thực hiện sao lưu và di chuyển cơ sở dữ liệu một cách mượt mà.

Trong bài viết tiếp theo, chúng tôi sẽ đi sâu hơn vào các tùy chọn mysqldump nâng cao và so sánh nó với các công cụ sao lưu khác.