Làm cách nào để sao lưu cơ sở dữ liệu mysql, nhưng với mức độ ưu tiên thấp?


15

Tôi muốn sao lưu cơ sở dữ liệu, nhưng vào ban ngày khi có tải trên máy chủ. Điều quan trọng là bản sao lưu không ảnh hưởng đến apache và các cơ sở dữ liệu khác đang chạy trên cùng một máy chủ.

Có thể sử dụng lệnh mysqldump , nhưng chạy lệnh ở mức ưu tiên thấp.

Tôi có thể làm cái này như thế nào?

Cập nhật: Có vẻ như chỉ đơn giản là sử dụng tốt với mysqldump không hoạt động kể từ khi mysqldump tạo ra một quy trình mới.


bạn đã nhìn vào mysqlhotcopy chưa?

@fsb mysqlhotcopy hỗ trợ những gì OP muốn?
Tomas

Câu trả lời:


8

Nếu bạn có một máy chủ dự phòng xung quanh có thể đối phó với tải ghi của máy chủ, bạn có thể thiết lập sao chép vào máy chủ đó, sau đó sao lưu từ máy chủ nô lệ. Điều này cũng có lợi thế là bạn có thể dừng sao chép trong khi thực hiện sao lưu và có được một ảnh chụp nhanh dữ liệu nhất quán trên tất cả các cơ sở dữ liệu hoặc tất cả các bảng trong một cơ sở dữ liệu mà không ảnh hưởng đến máy chủ cơ sở dữ liệu. Đây là thiết lập tôi luôn khuyên dùng để sao lưu MySQL nếu bạn có tài nguyên.

Là một phần thưởng tuyệt vời, giờ đây bạn có một nô lệ chỉ đọc mà bạn có thể sử dụng cho các truy vấn chạy chậm.


Thật không may, tùy chọn này có vẻ như là công việc nhiều nhất, nhưng tôi đoán đó là tùy chọn thực sự duy nhất nếu tôi muốn tác động tối thiểu đến máy chủ chính.
andyuk

2
Đó gần như là cách duy nhất để có được một bản sao lưu được cách ly đúng cách nếu bạn không muốn tác động đến các hoạt động. Vì làm chậm mysqldumpsẽ làm cho khóa dài bị giữ hoặc các bảng không đồng bộ.
Dan Carley

15

Andy, bây giờ tôi đoán bạn đã có nhiều thời gian để tìm giải pháp. Gần đây tôi đã đưa ra một giải pháp cho việc này rất hiệu quả với tôi tại các bảng tính và hình dung tôi sẽ chia sẻ nó.

cux là một công cụ xử lý luồng có mục đích chung như UNIX dd, thường được sử dụng trong các đường ống được xây dựng bằng dòng lệnh. Điều làm cho cux trở nên hữu ích đối với chúng tôi là nó cho phép bạn chỉ định băng thông tối đa cho tất cả đầu vào. Điều này có nghĩa là bạn có thể giới hạn IO đĩa của lệnh mysqldump của bạn bằng một lệnh đơn giản như sau:

mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql

Giả sử bạn đang sao lưu cơ sở dữ liệu sử dụng tất cả các bảng InnoDB, lệnh trên sẽ an toàn (sẽ không ảnh hưởng đến các truy vấn khác) và sẽ thực hiện mysqldump của bạn trong khi giới hạn đĩa của nó chỉ đọc một megabyte mỗi giây. Điều chỉnh băng thông với tham số -t thành bất kỳ giá trị nào sẽ cho phép môi trường của bạn thực hiện sao lưu mà không ảnh hưởng đến trải nghiệm của khách hàng.


Chỉ cần thử nghiệm và tôi làm việc như một nét duyên dáng! Cảm ơn đã chia sẻ Brandon!
sucotronic

4

FWIW bạn cũng sẽ có thể làm điều này với pv ( http://linux.die.net/man/1/pv )

mysqldump - giao dịch đơn lẻ --quick -u -p | pv --rate-giới hạn 1m> đích (hoặc | nc hoặc | tar cfj backup.bz2 -)

Điều thú vị ở đây là các tùy chọn khác nhau để theo dõi tiến trình và tùy chọn -R cho phép bạn chuyển các tùy chọn cho một quy trình đã chạy, ví dụ; --rate-giới hạn để thay đổi tốc độ truyền.


1

nếu bạn sử dụng innodb, bạn có thể thử xtrabackup với tùy chọn --thrption .

bạn cũng có thể nhìn vào ionice và chạy mysqldump với nó.

hoặc có thể bạn muốn kích hoạt đăng nhập nhị phân trong mysql và chạy toàn bộ kết xuất một lần mỗi tuần / đêm, trong khi sao chép nhật ký bin vào vị trí an toàn cứ sau 1-2 giờ. và .. nô lệ chỉ đọc cho mục đích chỉ sao lưu là một tùy chọn.


0

Nếu bạn đang chạy nó trên Linux hoặc một biến thể * nix khác, bạn có thể thực hiện với các thao tác sau:

đẹp -n ## mysqldump

Điều này sẽ cung cấp cho nó một ưu tiên lập lịch trình thấp hơn. Phạm vi lập lịch ưu tiên từ -20 (ưu tiên cao nhất) đến 19 (ưu tiên thấp nhất) mặc định cho đẹp là 10 nếu đối số -n bị bỏ qua ..


0

cron.d / mysql_dump:

17 22 * * * backup touch /home/backup/all_databases.sql && chmod 600 /home/backup \ 
/all_databases.sql && ionice -n 7 /usr/bin/mysqldump -u root -ppassword --opt --all- \
databases > /home/backup/all_databases.sql && nice -n 20 bzip2 -f \
/home/backupall_databases.sql

ionice cho ưu tiên I / O và tốt cho ưu tiên cpu.

Chạy vmstat 5, kiểm tra cột có WA. Giá trị cao có nghĩa là CPU đang chờ I / O. Sử dụng ionice, nếu nó chỉ tải CPU, sử dụng tốt.

Phản hồi để cập nhật:

Có vẻ bạn đúng. Nó gọi mysql mà không được đề cập. Tôi đoán bạn có thể sử dụng renice cho điều này và đặt giá trị tốt đẹp sau khi nó được chạy.

Tôi không có một cơ sở dữ liệu đủ lớn để kết xuất atm để tạo một tập lệnh hữu ích cho bạn.

Nhân rộng, như liên kết của bạn đề xuất, là một cách để đi. Tái tạo, dừng và đổ, trên máy chủ anthoer.


0

Đặt dữ liệu MySQL của bạn lên LV và sử dụng công việc mylvmbackup có tính năng chụp ảnh nhanh và xử lý các tệp dữ liệu MySQL. Bằng cách này, bạn không khóa các bảng, giảm thiểu tác động lên các ứng dụng của bạn để chỉ tải IO.


0

Bạn luôn có thể cố gắng không chạy nó trong giờ cao điểm. Dù bạn sử dụng mức độ ưu tiên nào, bãi rác vẫn sẽ yêu cầu khóa trên tất cả các bảng của bạn.


Điều đó không đúng: nếu các bảng là InnoDB, không có khóa nào được đặt trên chúng để đọc.
dr01
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.