Nhập cơ sở dữ liệu MySQL chậm với mysqldump và SỬ DỤNG .. NGUỒN


8

Tôi có khoảng 12 bảng trong MySQL innoDB, một trong số chúng có 11 triệu bản ghi trong đó.

Tôi đã sử dụng lệnh này để sao lưu mọi thứ:

mysqldump -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz

Và lệnh này để nhập mọi thứ trên máy chủ mới:

USE [DBNAME];
SOURCE [/path_to_file/DBNAME].sql;

Đây là nỗi đau mà tôi phải chịu (thời gian đang tăng lên với mỗi truy vấn!):

nhập mô tả hình ảnh ở đây

Tôi có thể làm gì để tăng tốc mọi thứ? Có vấn đề gì với lệnh mysqldump của tôi?

Câu trả lời:


5

Đối với lệnh dump của bạn , bạn có thể sử dụng như sau

mysqldump --single-transaction --extended-insert -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz

Chèn mở rộng là tốt hơn.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction Tùy chọn Giao dịch đơn lẻ tốt hơn cho việc hủy các bảng InnoDB.

Trong tệp my.cnf của bạn , tạm thời thực hiện các thay đổi sau

http://dev.mysql.com/doc/refman/5.0/en/innodb-parameter.html#sysvar_innodb_doublewrite

innodb_doublewrite = 0

và cũng

http://dev.mysql.com/doc/refman/5.0/en/innodb-parameter.html#sysvar_innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit = 2

Khởi động lại MySQL và sau đó xóa các tùy chọn này sau khi nhập và khởi động lại MySQL.

Bảng nhớ

Nếu toàn bộ cơ sở dữ liệu của bạn có thể vừa với bộ nhớ, bạn có thể thay đổi Engine = InnoDB thành Engine = MEMORY trong tệp kết xuất sql của bạn cho mỗi bảng hoặc chỉ các bảng mất nhiều thời gian nhất để nhập, nhập tệp kết xuất trở lại cơ sở dữ liệu của bạn và sau đó thay đổi động cơ trở lại innodb.

ALTER TABLE name_of_table Engine = InnoDB;

lệnh mysqlimport

http://linux.die.net/man/1/mysqlimport

Tôi đã sử dụng mysqlimport để nhập dữ liệu được sao lưu bằng tùy chọn định dạng tab trong mysqldump. Nó đã được chứng minh nhanh hơn so với việc nhập thông qua lệnh mysql.

Kết xuất cơ sở dữ liệu bằng mysqldump

mysqldump --tab = / some_directory / -u [USERNAME] -p [DBNAME] [TABLENAME]

Nhập dữ liệu vào cơ sở dữ liệu của bạn.

mysqlimport -u [USERNAME] -p [DBNAME] /some_directory/tablename.sql


5

Tải hàng loạt InnoDB có thể rất khó xử nếu bạn không có InnoDB được điều chỉnh đúng.

Dưới đây là các cài đặt bạn cần quan tâm:

Lên đến một nửa của Bộ đệm có thể được sử dụng để chèn số lượng lớn. Điều này đẩy ra dữ liệu lưu trữ. Trong quá trình tải lại mysqldump vào các bảng InnoDB, Buffer Pool trở thành vùng chiến tranh mở giữa dữ liệu InnoDB mới được tải và thay đổi thành các chỉ mục phụ. Trong điều này, ngày càng tăng innodb_buffer_pool_sizeinnodb_log_file_sizelà quan trọng và bắt buộc.

Ngoài ra, hãy chắc chắn rằng những điều này được đặt ra. Một mysqldump nên đặt các biến này thành 0.

UNIQUE_CHECKS=0;
FOREIGN_KEY_CHECKS=0;

Bạn có thể kiểm tra điều đó với một đơn giản head -20trên tệp mysqldump.

Có một khía cạnh nhập khẩu khác: innodb_change_buffering

Theo Tài liệu MySQL , bạn có thể ra lệnh những gì được đệm trong bất kỳ hoạt động DML nào. Để biết rõ hơn về điều này, hãy xem Kiểm soát bộ đệm thay đổi InnoDB .

Tôi khuyên bạn nên cài đặt sau:

[mysqld]
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=5000
innodb_thread_concurrency=0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.