Bạn sẽ thấy điều này gây sốc, nhưng bạn chỉ cần một lựa chọn chính: --opt
--Opt là gì?
Tùy chọn này, được bật theo mặc định, là tốc ký cho sự kết hợp của --add-drop-table --add-lock --create-Tùy chọn --disable-key --extends-insert --lock- frames --quick - bộ ký tự . Nó cung cấp một hoạt động kết xuất nhanh và tạo ra một tệp kết xuất có thể được tải lại vào máy chủ MySQL một cách nhanh chóng.
Vì tùy chọn - -opt được bật theo mặc định , bạn chỉ chỉ định nghịch đảo của nó, --skip-opt để tắt một số cài đặt mặc định. Xem thảo luận về các nhóm tùy chọn mysqldump để biết thông tin về việc bật hoặc tắt một tập hợp con các tùy chọn bị ảnh hưởng bởi --opt.
Vì --opt đã được bật, bạn không cần chỉ định --opt . Mặc dù vậy, bạn có thể cần một số tùy chọn cần thiết không được bao gồm.
Chạy truy vấn này trên cơ sở dữ liệu của bạn
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
Nếu bạn có tất cả các bảng InnoDB, thì bạn cần chỉ định - giao dịch đơn lẻ . Điều này sẽ tự động hủy kích hoạt --lock-bảng và cho phép bạn kết xuất tất cả các bảng trong cùng một thời điểm và cho phép ghi mới đến cùng một lúc.
Nếu bạn có một hoặc nhiều bảng MyISAM, thì bạn cần chỉ định --lock-all-bảng . Điều này sẽ tự động hủy kích hoạt --lock-bảng , hủy kích hoạt --single-giao dịch , khóa tất cả các bảng trên tất cả các cơ sở dữ liệu, sau đó tạo kết xuất. Việc ghi vào bảng InnoDB vẫn có thể xảy ra, nhưng chúng sẽ chỉ được xếp hàng cho đến khi các khóa được giải phóng. Bất kỳ kết nối DB nào đang cố ghi vào bất kỳ bảng MyISAM nào sẽ thực sự bị treo cho đến khi tất cả các khóa được giải phóng.
Chạy truy vấn này: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Nếu Number_Of_Stored_Procedures
lớn hơn 0, sử dụng --routines .
Chạy truy vấn này: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Nếu Number_Of_Triggers
lớn hơn 0, sử dụng --triggers .
CAVEAT : Vui lòng không sử dụng - order-by-sơ cấp để hủy tất cả các cơ sở dữ liệu vì nó có khả năng làm cho các chỉ mục BTREE thay vì bị mất khi tải lại. --order-by-sơ cấp chỉ nên được sử dụng khi kết xuất một bảng riêng lẻ mà bạn biết có khóa chính nguyên và sẽ có nhiều lần quét phạm vi từ ứng dụng của bạn.
Nếu bạn cần các loại sao lưu mysqldump sáng tạo hơn, hãy xem bài viết cũ của tôi Làm thế nào tôi có thể tối ưu hóa một mysqldump của một cơ sở dữ liệu lớn? .
Xin vui lòng đọc tất cả các tùy chọn cho mysqldump .
CẬP NHẬT 2014-12-29 09:44 EST
Tôi đã cập nhật lệnh mysqldump của mình (vui lòng xem chỉnh sửa của tôi). Tôi có một câu hỏi cuối cùng mặc dù. Bạn có nghĩ rằng nó cũng có giá trị sử dụng tất cả các đối số sau đây không? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Nhìn vào bình luận của bạn và chỉnh sửa mới nhất của bạn, hãy xem từng tùy chọn này và xem bạn có cần bất kỳ tùy chọn nào không
- --opt : Tôi đã nói rằng bạn không cần chỉ định nó vì nó được bật theo mặc định.
- --delayed-insert : Tôi cố tình tránh xa điều này với cơ sở dữ liệu InnoDB. Trên thực tế, tôi kiên quyết tránh xa GIAI ĐOẠN này !!! . Vì 1) có thể INSERT DELAYED có thể mất dữ liệu, 2) nó được chuyển đổi thành INSERT cho nô lệ tái tạo MySQL, 3) có một báo cáo lỗi mở về việc sử dụng nó với các trình kích hoạt trở lại trong MySQL 5.6 và không được coi là lỗi , 4 ) nó không được chấp nhận trong MySQL 5.6 và 5) Morgan Tocker (Chuyên gia MySQL nổi tiếng) đã thấy trước sự phản đối của nó vào năm 2012 , bạn nên quên tùy chọn này từng tồn tại. Đừng bao giờ, bao giờ (vô cùng) sử dụng nó !!!
- --complete-insert : Cái này sẽ sử dụng
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
thay cho INSERT INTO tblname VALUES ...
. Điều này có thể làm tăng mysqldump nếu có nhiều cột trong định nghĩa bảng và nhiều hàng trong bảng. Đừng sử dụng nó.
- --add-drop-table : Vì --opt kích hoạt nó cho bạn, bạn không cần chỉ định nó.
- --add-drop-database : Nếu bạn thả --add-drop-database , nó chỉ làm cho
DROP TABLE IF EXISTS
(được thêm bởi --add-drop-table ) đi nhanh hơn. Không sử dụng nó chỉ đơn giản là cho phép DROP TABLE IF EXISTS
xảy ra cho mỗi bảng. Vì vậy, sử dụng --add-drop-cơ sở dữ liệu là vấn đề lựa chọn cá nhân.
- --tz-utc : Nếu bạn có kế hoạch khôi phục dữ liệu cho cùng một máy chủ mà bạn sao lưu từ đó, bạn không cần --tz-utc . Nếu bạn khôi phục dữ liệu sang trung tâm dữ liệu khác theo múi giờ khác và ...
- nếu bạn muốn giữ cùng múi giờ bạn sao lưu, bạn không cần --tz-utc .
- nếu bạn muốn dữ liệu sử dụng múi giờ của một trung tâm dữ liệu mới, bạn cần --tz-utc .
- VÍ DỤ: Giả sử bạn sao lưu cơ sở dữ liệu ở New York. Đó là EST. Nếu bạn có một trung tâm dữ liệu khác ở Seattle, đó sẽ là PST. Nếu bạn muốn Sao lưu New York được khôi phục ở Seattle và bạn muốn dấu thời gian trong cơ sở dữ liệu vẫn đại diện cho New York, bạn không muốn sử dụng --tz-utc .
- --default-character-set
Điều chỉnh chỉnh sửa mới nhất của bạn, đây là điều bạn đặc biệt cần
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Một lần nữa, tôi nói xin vui lòng đọc tất cả các tùy chọn cho mysqldump .