Sao lưu MySQL không ngừng hoạt động trên ngân sách


14

Kịch bản sao lưu MySQL hiện tại của tôi là sao chép db của chúng tôi sang máy chủ thứ hai và chạy mysqldump trên máy chủ đó để loại bỏ bất kỳ thời gian chết nào khỏi khóa bảng hoặc hàng. Điều này đang hoạt động tốt nhưng chi phí $ 150 mỗi tháng cho máy chủ thứ hai (lưu trữ tại Úc đắt hơn rất nhiều so với Hoa Kỳ.)

Tôi đã đọc rất nhiều câu hỏi ở đây về vấn đề này, hầu hết mọi người cần trợ giúp với các bản sao lưu theo lịch trình và không có gì không phải là thứ tôi cần. Tôi cần phải mysqldump (tốt nhất là cứ sau 4 giờ) mà không có thời gian chết. Db là ~ 7GB không nén, vì vậy mysqldump có thể mất một chút thời gian tùy thuộc vào máy chủ.

Tôi đã cân nhắc sao chép vào cùng một máy, nhưng tôi không muốn nô lệ ăn vào bộ nhớ rất cần thiết. Tôi không chắc mình có thể hạn chế sử dụng bộ nhớ trên cơ sở mỗi db không? Dù bằng cách nào, điều này sẽ đặt tải lên máy chủ trong khi nó hủy db.

Tôi mới đọc http://www.zmanda.com/quick-mysql-backup.html này và có vẻ tốt, $ 300 mỗi năm là ok, điều đó giúp tôi tiết kiệm rất nhiều.

Thật không may, tôi không thể sao chép sang RDS của Amazon nhưng tôi có thể sao chép sang phiên bản vi mô RC2 nhưng việc sao chép sẽ diễn ra qua mạng và ping là ~ 220ms.

Tôi thấy một vài người ở đây nói về ảnh chụp nhanh LVM có thể là một lựa chọn tốt. Tôi không biết nhiều về tùy chọn này tho.

Ý kiến ​​sẽ được đánh giá rất cao.


Trang web này là gì? Đưa ra một mô tả về những gì nó làm
jamespo

Bạn có thể mua máy chủ với giá rẻ hơn rất nhiều so với $ 150 một tháng. 7GB không giống như nhiều dữ liệu. Bạn có thể mua các máy chủ 128 MB dùng một lần với giá chỉ 1,50 đô la một tháng và các máy chủ 1GB ấn tượng hơn với giá khoảng 20 đô la. Vì không cần bộ đệm truy vấn, bạn có thể dễ dàng xử lý nhiều lần ghi với GB RAM và máy chủ có ổ SSD.
Xeoncross

Ảnh chụp nhanh LVM sẽ không cho hình ảnh nhất quán trừ khi bạn tắt máy chủ trước. Bạn có thể thực hiện các ảnh chụp nhanh - và cố gắng xây dựng lại các tệp - nhưng nó có rủi ro.
symcbean

Câu trả lời:


10

Nếu bạn sử dụng bảng innodb, bạn có thể sử dụng

http://www.percona.com/docs/wiki/percona-xtrabackup:start

Điều đó sẽ khiến một cơ sở dữ liệu của bạn có thể được nhập bởi các công cụ của họ mà không bị khóa. Tôi tin rằng nếu bạn có bảng myisam, nó khóa những cái đó.


Tôi có một số bảng MyISAM nhưng chúng không được sử dụng thường xuyên, vì vậy khóa chúng là ổn. Cảm ơn các bình luận, sẽ kiểm tra xem.
Christian

Percona đá btw!
Christian

5

Nếu bạn đang sử dụng innodb hoặc một phụ trợ khác có giao dịch đầy đủ, bạn có thể sử dụng mysqldump --single-transaction .... Tôi đã sử dụng điều này trên cơ sở dữ liệu khá lớn (~ 100GB) với kết quả tốt; nếu cơ sở dữ liệu đang tải nặng thì có thể mất hàng giờ nhưng nó vẫn hoạt động mà không khóa các bảng của bạn. Bản sao nói chung là tốt hơn nhưng đôi khi bạn muốn có một tệp kết xuất tốt đẹp. Hãy nhớ rằng bạn cũng có thể kết xuất một nô lệ sao chép mysql.

Từ trang mysqldump (lưu ý các cảnh báo về các hoạt động sẽ rò rỉ vào giao dịch):

 ·   --single-transaction

   This option sends a START TRANSACTION SQL statement to the server
   before dumping data. It is useful only with transactional tables
   such as InnoDB, because then it dumps the consistent state of the
   database at the time when BEGIN was issued without blocking any
   applications.

   When using this option, you should keep in mind that only InnoDB
   tables are dumped in a consistent state. For example, any MyISAM or
   MEMORY tables dumped while using this option may still change
   state.

   While a --single-transaction dump is in process, to ensure a valid
   dump file (correct table contents and binary log coordinates), no
   other connection should use the following statements: ALTER TABLE,
   CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A
   consistent read is not isolated from those statements, so use of
   them on a table to be dumped can cause the SELECT that is performed
   by mysqldump to retrieve the table contents to obtain incorrect
   contents or fail.

Joshua, tôi nhận thấy lỗi chính tả của bạn về 'bản thân mình' và lưu ý rằng tôi thấy rất khó để gõ 'chính mình' vì tôi chỉ cần gõ mysql một cách tự nhiên. Tôi hiện đang làm một mysqldump 4 giờ trên máy nô lệ. giao dịch đơn lẻ có vẻ là một lựa chọn tốt, cảm ơn!
Christian

Doh. Bắt đẹp. :)
Joshua Hoblitt

Tôi không nghĩ rằng mysqldump là một lựa chọn tốt trên cơ sở dữ liệu lớn như vậy. Nếu phải mất hàng giờ để đổ, có thể mất vài tuần để khôi phục. Kiểm tra thời gian khôi phục của bạn và các tài nguyên cần thiết để hoàn thành nó!
tước Schwartz

Cảm ơn Baron, phải mất một chút thời gian để khôi phục - không phải vài tuần, nhưng vẫn còn một thời gian đáng kể. Tôi sẽ thấy mất bao lâu khi tôi nhận được máy chủ mới của mình. Có thể một bản sao của các tập tin sẽ làm việc để có hiệu quả hơn nhiều.
Christian

2

Tôi không thấy nhiều vấn đề khi sao chép kết nối có độ trễ cao với VPS giá rẻ ở Mỹ Độ trễ cao không thực sự là vấn đề lớn. Bản sao được thiết kế để có thể bắt kịp nhanh chóng ngay cả khi một nô lệ tụt lại hàng giờ , tức là nó có thể hoạt động không đồng bộ.

Miễn là bạn có thể chịu được băng thông lớn như vậy trong gói lưu trữ tại Úc.

Dưới đây là một phản hồi chi tiết hơn nhiều về việc độ trễ cao có quan trọng không


1
Tôi sẽ không biết nó sẽ sử dụng bao nhiêu băng thông. Có lẽ tôi nên theo dõi lưu lượng giữa các hộp tôi có bây giờ để xem mức độ sử dụng.
Christian

1
Bạn có thể "thất vọng" khi cố gắng chạy mysql trên EBS. Tôi đặc biệt khuyên bạn nên kiểm tra hiệu suất trước khi thử sử dụng nó để nhân rộng.
Joshua Hoblitt

Cảm ơn vì điều đó, chắc chắn sẽ có cảm giác về nó trước khi tôi bắt đầu dựa vào nó - nếu đây là cách tiếp cận tôi thực hiện.
Christian

1

Trên thực tế, chỉ có thời gian để thực sự xuất cơ sở dữ liệu sẽ là thời gian chết. Làm điều đó trong một khoảng thời gian đủ chậm và không nên có bất kỳ vấn đề nào. Một bộ phận CNTT trên ngân sách đó thực sự mong đợi là gì?

Bạn sẽ có thể mysqldump một cơ sở dữ liệu 7GB trong 5-10 phút MAX, tắt khóa đọc / ghi và thời gian chết sẽ kết thúc. Sau đó, bạn có thể tìm thấy cách hiệu quả nhất về băng thông cho tệp 7GB đến máy chủ mới (đọc: CAO CẤP). Bạn có nhiều thời gian để chuyển tập tin và nhập vào MySQL trên máy chủ mới. Sau đó, nhập thông tin masterlog và bắt đầu sao chép. Nên là một miếng bánh!

Tài liệu về MySQL thật tuyệt vời : http://dev.mysql.com/doc/refman/5.0/en/replication.html


Và tôi có nghĩa là thêm, nhân rộng không sử dụng nhiều băng thông. Không có nghi ngờ gì một cuộc gọi tốt hơn mysqldump-ing cứ sau bốn giờ !!!
Lu-ca

Ai đã đề cập đến bộ phận CNTT? Đây chỉ là trang web của tôi. :) Và tôi hiện đang sao chép để sao lưu nhưng không chắc cách tiếp cận tốt nhất của nó ở mức $ 150 p / m. Như đã nêu, tùy chọn của một ví dụ vi EC2 là có.
Christian

@Christian p / m là gì? Tôi không biết nó là gì, nhưng 150 đô la cho một p mỗi m có vẻ đắt 8- |
TehShrike

@TehShrike, p / m = mỗi tháng. Lưu trữ Úc có giá cao hơn rất nhiều so với lưu trữ tại Mỹ. Ngoài ra, tôi đã cố gắng giữ máy chủ thứ hai trên cùng một mạng để tăng tốc độ và chuyển không được tính vào phụ cấp băng thông.
Christian

1

Tôi không chắc chắn tôi có thể hạn chế sử dụng bộ nhớ trên cơ sở mỗi db

Tất nhiên bạn có thể - bạn chỉ cần chạy nô lệ với một /etc/my.cnf khác

Bạn thậm chí có thể thực hiện các công cụ để thao tác ưu tiên lập lịch / mối quan hệ CPU trên chủ và nô lệ bằng cách sử dụng đẹp / renice và tasket (giả sử đó là máy chủ Linux).

nhưng việc sao chép sẽ diễn ra trên mạng và ping là ~ 220ms

Độ trễ khá nhiều không liên quan - điều quan trọng là băng thông - và băng thông cơ sở dữ liệu (giả sử bạn không sao chép dữ liệu phiên) là một số bậc có độ lớn nhỏ hơn băng thông HTTP.

Tôi cần [tạo một bản sao lưu nhất quán của cơ sở dữ liệu] (tốt nhất là cứ sau 4 giờ) mà không có thời gian chết

Nhưng các chiến lược bạn thảo luận không cho phép phục hồi bất cứ lúc nào như lúc đó.

Tôi nghĩ rằng tùy chọn rẻ nhất sẽ là nô lệ trên cùng một máy - và nếu nó ảnh hưởng xấu đến hiệu suất vượt quá những gì bạn có thể cấu hình lại thì hãy nâng cấp gói lưu trữ hiện tại.

Bạn cũng có thể xem xét việc chạy một nô lệ bị ngắt kết nối: bật nhật ký bin trên máy chủ hiện tại. Nhận một bản sao lưu, khôi phục bản sao lưu trên một máy cục bộ, sau đó sao chép nhật ký bin khi chúng được xoay và cuộn chúng về phía trước trên DBMS cục bộ .


Phản ứng tốt đẹp, cảm ơn vì điều đó. Máy chủ mới mà tôi đang tìm kiếm sẽ có đủ bộ nhớ để cho phép một nô lệ trên cùng một máy, nhưng tôi thực sự thích ý tưởng về các binlog được sao chép / cuộn về phía trước. Cảm ơn một lần nữa!
Christian

1

Đề xuất của tôi:

1 - giữ tài khoản / máy chủ thứ hai của bạn và thực hiện sao chép vào cơ sở dữ liệu trong tài khoản / máy chủ ban đầu của bạn.

2 - dừng sao chép vào tài khoản / máy chủ thứ hai.

3 - hiệu suất màn hình trong vài ngày. Hãy chắc chắn rằng bạn theo dõi nó đủ lâu để bao gồm các khoảng thời gian bận rộn nhất của bạn.

4 - sẵn sàng chuyển sang thiết lập cũ của bạn nếu có vấn đề lớn về hiệu suất. Đây là lý do tại sao bạn giữ tài khoản thứ hai.

5 - mua thêm dung lượng / nâng cấp máy chủ trong tài khoản gốc của bạn. Điều này sẽ rẻ hơn so với trả tiền cho hai máy chủ tôi tin.

6 - hủy tài khoản thứ hai.

Chúc may mắn!

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.