Tôi nghĩ điều tương tự đọc phần tài liệu đó, tôi tìm thấy thêm thông tin:
4.5.4. mysqldump - Một chương trình Database Backup http://dev.mysql.com/doc/en/mysqldump.html
Đối với các bảng InnoDB, mysqldump cung cấp một cách để làm cho một trực tuyến sao lưu:
shell> mysqldump --all-databases --single-transaction > all_databases.sql
sao lưu này có được một khóa đọc toàn cầu trên tất cả các bảng (sử dụng FLUSH TABLES VỚI READ LOCK) ở đầu bãi chứa. Ngay sau khi khóa này được mua, các tọa độ nhật ký nhị phân được đọc và khóa được giải phóng. Nếu các câu lệnh cập nhật dài đang chạy khi câu lệnh FLUSH được phát hành, máy chủ MySQL có thể bị trì hoãn cho đến khi các câu lệnh đó kết thúc. Sau đó, bãi chứa trở thành khóa miễn phí và không làm phiền đọc và ghi trên các bảng. Nếu bản cập nhật tuyên bố rằng máy chủ MySQL nhận được ngắn (về thời gian thực hiện ), thời gian khóa ban đầu không được chú ý, thậm chí với nhiều cập nhật.
Có một cuộc xung đột với các tùy chọn --opt
và --single-transaction
:
--opt
Tùy chọn này là viết tắt. Nó giống như chỉ định --thêm-thả-bảng --thêm khóa --tạo-tùy chọn --disable-keys --extended-insert --lock-tables --quick --set-charset. Nó sẽ cung cấp cho bạn một hoạt động đổ nhanh và tạo 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.
Tùy chọn --opt được bật theo mặc định. Sử dụng --skip-opt để tắt nó.
Nếu tôi hiểu chính xác câu hỏi của bạn, bạn muốn dữ liệu thực tế và DDL (Ngôn ngữ định nghĩa dữ liệu), vì nếu bạn chỉ muốn DDL bạn sẽ sử dụng --no-data
. Thông tin thêm về vấn đề này có thể được tìm thấy tại địa chỉ:
http://dev.mysql.com/doc/workbench/en/wb-reverse-engineer-create-script.html
Sử dụng tùy chọn --databases với mysqldump nếu bạn muốn tạo cơ sở dữ liệu cũng như tất cả các đối tượng của nó. Nếu không có câu lệnh dbATE DATABASE CREATE DATABASE trong tệp kịch bản lệnh của bạn, bạn phải nhập cơ sở dữ liệu đối tượng vào lược đồ hiện có hoặc, nếu không có lược đồ, một lược đồ chưa được đặt tên mới được tạo.
Theo đề nghị của The Definitive Guide to MySQL 5 By Michael Kofler tôi sẽ đề nghị các tùy chọn sau:
--skip-opt
--single-transaction
--add-drop-table
--create-options
--quick
--extended-insert
--set-charset
--disable-keys
Ngoài ra, không được nhắc đến là --order-by-primary
Ngoài ra nếu bạn đang sử dụng tùy chọn --databases
, bạn cũng nên sử dụng --add-drop-database
đặc biệt nếu kết hợp với điều này answer Nếu bạn đang sao lưu cơ sở dữ liệu được kết nối trên các mạng khác nhau, bạn có thể cần sử dụng tùy chọn --compress
.
Vì vậy, một lệnh mysqldump (mà không sử dụng --compress
, --databases
, hoặc --add-drop-database
tùy chọn) sẽ là:
mysqldump --skip-opt --order-by-primary --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset -h db_host -u username --password="myPassword" db_name | mysql --host=other_host db_name
tôi loại bỏ các tham chiếu đến --disable-keys
đã được đưa ra trong cuốn sách vì nó là không có hiệu quả với InnoDB như Tôi hiểu rôi. Các MySql manual bang:
Đối với mỗi bảng, bao quanh các câu lệnh INSERT với/* 40000 ALTER TABLE KEYS tbl_name DISABLE /; và/! 40000 ALTER BẢNG tbl_name CÁC BẬT CÓ THỂ * /; các câu lệnh. Điều này làm cho tải tệp kết xuất nhanh hơn vì các chỉ mục được tạo sau khi tất cả các hàng được chèn vào. Tùy chọn này chỉ có hiệu lực đối với các chỉ mục không phải của các bảng MyISAM.
Tôi cũng thấy báo cáo lỗi này http://bugs.mysql.com/bug.php?id=64309 trong đó có ý kiến về đáy từ Paul DuBois who also wrote a few books mà tôi không có tài liệu tham khảo về vấn đề cụ thể này khác so với những bình luận được tìm thấy trong đó báo cáo lỗi.
Bây giờ để tạo ra các "Cuối cùng Sao lưu" Tôi sẽ đề nghị xem xét một cái gì đó dọc theo dòng của shell script này
- https://github.com/red-ant/mysql-svn-backup/blob/master/mysql-svn.sh
Hi, do thực tế rằng, trong tháng, không ai đăng một cách để ngăn chặn các kịch bản tôi giả định rằng không phải là có thể. Tôi chấp nhận câu trả lời của Bill là tốt. –
http: // stackoverflow.com/a/21870537/1815624 – CrandellWS