Là một trong những cơ sở dữ liệu miễn phí có sẵn hàng đầu, MySQL là một lựa chọn phổ biến cho nhiều ứng dụng web. Tiếp xúc với Internet, ứng dụng của bạn có thể bị tấn công độc hại. Nếu máy chủ của bạn bị xâm phạm, tốt nhất, bạn cần phải cài đặt lại ứng dụng; tệ nhất, bạn có thể mất dữ liệu của mình. Ngoài ra, bạn có thể gặp phải trường hợp cần di chuyển cơ sở dữ liệu từ máy chủ này sang máy chủ khác.
mysqldump được sử dụng để làm gì?
Công cụ mysqldump giúp bạn giải quyết cả các trường hợp di chuyển và xâm nhập máy chủ. Chức năng cơ bản của nó là lấy cơ sở dữ liệu MySQL và kết xuất nó dưới dạng tệp văn bản. Nhưng không phải bất kỳ tệp văn bản nào; tệp là một tập hợp các câu lệnh SQL. Các câu lệnh này, khi được thực thi, sẽ cấu trúc lại cơ sở dữ liệu về trạng thái chính xác của nó khi thực thi kết xuất.
Sử dụng mysqldump để tạo xuất cơ sở dữ liệu dưới dạng bản sao lưu hoặc khi di chuyển cơ sở dữ liệu sang máy chủ mới. Trong cả hai trường hợp, tệp văn bản sẽ được nhập trở lại vào máy chủ cơ sở dữ liệu MySQL. Nó sẽ thực thi tất cả các câu lệnh SQL trong tệp, điều này sẽ xây dựng lại cơ sở dữ liệu về trạng thái ban đầu. Phần này không sử dụng lệnh mysqldump, nhưng sẽ không thể thực hiện được nếu không có tiện ích này.
Tài liệu MySQL liệt kê các phương pháp khác để tạo sao lưu, nhưng những phương pháp này có nhược điểm:
- Hotcopying cơ sở dữ liệu từ MySQL Enterprise là một cách tuyệt vời để đạt được những bản sao lưu này - nếu bạn không bận tâm đến thẻ giá Enterprise.
- Việc sao chép các thư mục dữ liệu cơ sở dữ liệu có thể khó khăn khi di chuyển giữa các hệ điều hành, vì các điểm đến sẽ khác nhau.
- Xuất sang tệp văn bản được phân tách sẽ cung cấp cho bạn nội dung, nhưng bạn sẽ phải tạo lại cấu trúc.
- Bạn có thể thường xuyên sao lưu cơ sở dữ liệu từ các chương trình GUI như MySQL Workbench. Nhưng đây là một quá trình thủ công; không phải thứ bạn có thể viết kịch bản hoặc đưa vào một công việc hàng loạt.
Cài đặt Công cụ mysqldump
Đối với Windows, hãy xem hướng dẫn của chúng tôi để cài đặt MySQL trên Windows 7 (quá trình cài đặt giống với Windows 10). Trên macOS, hãy xem hướng dẫn của chúng tôi để cài đặt MySQL trên macOS 10.7 (một lần nữa, cũ hơn nhưng vẫn có thể áp dụng). Người dùng hệ thống Linux dựa trên Ubuntu có thể sử dụng lệnh sau để cài đặt ứng dụng khách MySQL và các tiện ích:
sudo apt cài đặt mysql-client
Giải nén MySQL Dump
Sau khi cài đặt, hãy sử dụng mysqldump để nhận bản sao lưu đầy đủ của cơ sở dữ liệu.
mysqldump -h [tên hoặc IP máy chủ DB của bạn] -u [tên người dùng DB] -p [tên cơ sở dữ liệu] > db_backup.sql
Đây là mô tả về các cờ được sử dụng trong lệnh này:
- - h: Cờ này là máy chủ cơ sở dữ liệu. Nó có thể là một tên máy chủ đầy đủ (ví dụ: myhost.domain.com) hoặc một địa chỉ IP. Để trống phần này nếu bạn chạy lệnh trên cùng một máy chủ lưu trữ như máy chủ MySQL.
- - u: Tên người dùng của bạn.
- - p: Nếu bạn bảo mật cài đặt MySQL đúng cách, bạn sẽ cần mật khẩu để kết nối. Cờ không có đối số này nhắc bạn nhập mật khẩu khi bạn thực hiện lệnh. Đôi khi, việc cung cấp mật khẩu trực tiếp làm đối số cho cờ này rất hữu ích, chẳng hạn như trong một tập lệnh sao lưu. Nhưng theo lời nhắc, bạn không nên, vì nếu ai đó có quyền truy cập vào máy tính của bạn, họ có thể lấy mật khẩu này trong lịch sử lệnh.
- > db_backup.sql: Phần này yêu cầu mysqldump hướng đầu ra của nó vào một tệp. Thông thường, lệnh xuất mọi thứ ra bảng điều khiển, có nghĩa là bạn sẽ thấy một số câu lệnh SQL trên màn hình. Biểu tượng > chuyển đầu ra vào tệp văn bản được đặt tên. Nếu tệp này không tồn tại, tệp này sẽ được tạo tự động.
Khi hoàn tất, bạn sẽ có một tệp. SQL. Đây là một tệp văn bản chứa các câu lệnh SQL. Bạn có thể mở nó trong bất kỳ trình soạn thảo văn bản nào để kiểm tra nội dung. Đây là bản xuất từ cơ sở dữ liệu WordPress cho thấy cách các tệp này được kết hợp với nhau.
Tệp được chia thành nhiều phần. Phần đầu tiên thiết lập bảng cho các bình luận WordPress. Phần thứ hai tạo lại nội dung trong các bảng đó (trong ví dụ này, các bản ghi chú thích). Khi bạn nhập lại MySQL dump, lệnh hoạt động thông qua tệp, thực hiện các câu lệnh và xây dựng lại cơ sở dữ liệu theo cách cũ.
Nhập tệp Dump MySQL
Trước khi nhập tệp kết xuất, bạn sẽ cần một cơ sở dữ liệu đã được tạo và tên người dùng và mật khẩu hợp lệ của nó. Bạn cũng phải có tất cả các quyền cho cơ sở dữ liệu. Bạn không cần quyền GRANT, nhưng việc cấp tất cả chúng sẽ dễ dàng hơn.
Tìm hiểu thêm về quyền cơ sở dữ liệu trước khi bạn thay đổi vai trò bảo mật trong cơ sở dữ liệu của mình.
Để nhập lại dữ liệu của bạn, hãy đăng nhập vào máy chủ MySQL bằng lệnh mysql. Nhập use [tên cơ sở dữ liệu]tại dấu nhắc và thay thế tên của cơ sở dữ liệu. Nhập source [tên tệp]và thay thế tên của tệp kết xuất bạn đã lấy trước đó.
Khi bạn hoàn tất, một danh sách thông báo xuất hiện thông báo rằng các câu lệnh SQL đang thực thi. Hãy để ý các lỗi, nhưng nếu bạn có quyền phù hợp, bạn sẽ ổn thôi.
Khi quá trình hoàn tất, bạn sẽ có một bản sao của cơ sở dữ liệu gốc. Để xác minh sự giống nhau giữa các cơ sở dữ liệu, hãy thực hiện một kết xuất khác sau đó so sánh hai kết quả đầu ra. Sử dụng trình chỉnh sửa văn bản hoặc công cụ khác biệt chuyên dụng để so sánh hai tệp.
Có hai điểm khác biệt giữa các tệp này, thể hiện bằng các đường màu đỏ ở trên cùng và dưới cùng của thanh cuộn bên phải. Đầu tiên là dòng chứa tên cơ sở dữ liệu và dòng này khác vì các tệp được đặt tên khác nhau. Thứ hai là dấu thời gian cho tệp kết xuất. Điều này khác vì cơ sở dữ liệu thứ hai được tạo lại sau cơ sở dữ liệu đầu tiên. Nếu không, các tệp hoàn toàn giống nhau, có nghĩa là cơ sở dữ liệu đã tạo ra chúng cũng vậy.
FAQ
Bạn làm cách nào để khắc phục lỗi mysqldump: Truy cập bị từ chối khi sử dụng bảng khóa?
Yêu cầu quản trị viên cơ sở dữ liệu của bạn cấp cho bạn đặc quyền KHÓA. Nếu cách này không giải quyết được sự cố, hãy thử chạy cùng một lệnh mysqldump thêm cờ- single-transaction, chẳng hạn như [ $ mysqldump --single-transaction] [ -u người dùng] [ -p DBNAME] >backup.sql
Bạn có thể sử dụng mệnh đề "ở đâu" với mysqldump không?
Sử dụng mệnh đề WHERE khi tạo bản sao lưu chỉ bao gồm các hàng đáp ứng điều kiện đã cho. Ví dụ: để chỉ kết xuất dữ liệu từ các hàng có cột id lớn hơn 100, hãy nhập "mysqldump my_db_name my_table_name --where=" id > 100 "> my_backup.sql".