Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhanh nhất để kết xuất và tải cơ sở dữ liệu MySQL InnoDB bằng mysqldump là gì?

Kết xuất một cách nhanh chóng cơ sở dữ liệu đã được cố định:

Sử dụng tùy chọn "-T" với mysqldump dẫn đến rất nhiều tệp .sql và .txt trong thư mục được chỉ định. Điều này nhanh hơn ~ 50% để kết xuất các bảng lớn so với một tệp .sql duy nhất có câu lệnh INSERT (mất ít hơn 1/3 thời gian trên đồng hồ treo tường).

Ngoài ra, có một lợi ích rất lớn khi khôi phục nếu bạn có thể tải nhiều bảng song song và bão hòa nhiều lõi. Trên hộp 8 lõi, con số này có thể chênh lệch gấp 8 lần so với thời gian đồng hồ treo tường để khôi phục kết xuất, bên cạnh những cải tiến về hiệu suất được cung cấp bởi "-T". Bởi vì "-T" làm cho mỗi bảng được lưu trữ trong một tệp riêng biệt, tải chúng song song dễ dàng hơn so với việc chia nhỏ một tệp .sql lớn.

Đưa các chiến lược trên đến cực điểm logic của chúng, người ta có thể tạo một tập lệnh để kết xuất một cơ sở dữ liệu rộng rãi song song. Chà, đó chính xác là những gì Maakit mk -llel-dump (xem http:/ /www.maatkit.org/doc/mk-parallel-dump.html ) và các công cụ khôi phục song song mk là; các tập lệnh perl thực hiện nhiều lệnh gọi đến chương trình mysqldump bên dưới. Tuy nhiên, khi tôi cố gắng sử dụng những thứ này, tôi đã gặp sự cố khi khôi phục hoàn tất mà không có lỗi chính trùng lặp không xảy ra với kết xuất vani, vì vậy hãy lưu ý rằng khoảng thời gian của bạn có thể khác nhau.

Kết xuất dữ liệu từ cơ sở dữ liệu TRỰC TIẾP (dịch vụ có gián đoạn):

Công tắc --single-transaction rất hữu ích để lấy một kết xuất cơ sở dữ liệu trực tiếp mà không cần phải ngắt nó hoặc lấy một kết xuất cơ sở dữ liệu nô lệ mà không cần phải dừng quá trình xử lý.

Đáng buồn thay, -T không tương thích với --single-transaction, vì vậy bạn chỉ nhận được một.

Thông thường, việc thực hiện bãi chứa sẽ nhanh hơn nhiều so với việc khôi phục lại nó. Vẫn còn chỗ cho một công cụ lấy tệp kết xuất nguyên khối đến và chia nó thành nhiều phần để tải song song. Theo hiểu biết của tôi, một công cụ như vậy vẫn chưa tồn tại.

Chuyển kết xuất qua Mạng thường là một chiến thắng

Để lắng nghe kết xuất đến trên một lần chạy trên máy chủ:

nc -l 7878 > mysql-dump.sql

Sau đó, trên máy chủ DB của bạn, hãy chạy

mysqldump $OPTS | nc myhost.mydomain.com 7878

Điều này làm giảm sự tranh cãi của các trục xoay đĩa trên máy chủ từ việc ghi kết xuất vào đĩa, tăng tốc một chút cho kết xuất của bạn (giả sử mạng đủ nhanh để theo kịp, một giả định khá an toàn cho hai máy chủ trong cùng một trung tâm dữ liệu). Ngoài ra, nếu bạn đang tạo một nô lệ mới, điều này sẽ tiết kiệm bước phải chuyển tệp kết xuất sau khi hoàn tất.

Lưu ý - rõ ràng, bạn cần có đủ băng thông mạng để không làm mọi thứ chậm lại một cách khó chịu và nếu phiên TCP bị hỏng, bạn phải bắt đầu lại từ đầu, nhưng đối với hầu hết các kết quả, đây không phải là mối quan tâm lớn.

Cuối cùng, tôi muốn làm rõ một điểm nhầm lẫn phổ biến.

Mặc dù tần suất bạn thấy những cờ này trong các ví dụ và hướng dẫn về mysqldump, chúng vẫn thừa vì chúng được BẬT theo mặc định:

  • --opt
  • --add-drop-table
  • --add-locks
  • --create-options
  • --disable-keys
  • --extended-insert
  • --lock-tables
  • --quick
  • --set-charset .

Từ http://dev.mysql.com/doc/refman/ 5.1 / vi / mysqldump.html :

Trong số những hành vi đó, "--quick" là một trong những hành vi quan trọng nhất (bỏ qua bộ nhớ đệm toàn bộ kết quả được đặt trong mysqld trước khi truyền hàng đầu tiên) và có thể với "mysql" (KHÔNG bật --quick theo mặc định) để tăng tốc đáng kể các truy vấn trả về một tập kết quả lớn (ví dụ:kết xuất tất cả các hàng của một bảng lớn).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHỈ SỐ SPATIAL là gì và khi nào tôi nên sử dụng nó?

  2. PDO mysql:Làm thế nào để biết liệu chèn thành công

  3. nhận các giá trị không tồn tại trong bảng mysql

  4. Cách định dạng số trong MySQL

  5. Cách cài đặt MySQL 8 trên Ubuntu 20.04 LTS