2011-12-13 28 views
5

Tôi có ~ 80 GB MySql DB.MySql - tạo bản sao với thời gian ngừng hoạt động tối thiểu

Tôi muốn tạo một bản sao trên DB đó trong khi có DB hiện tại làm chủ và thiết lập một nô lệ cho nó.

Câu hỏi chính của tôi là làm thế nào tôi có thể di chuyển dữ liệu (tất cả 80GB) của nó từ bậc thầy sang nô lệ mới với thời gian ngừng hoạt động tối thiểu nhất có thể, tốt nhất là không.

suy nghĩ ban đầu của tôi là dừng DB (sau khi lấy vị trí nhật ký), và sau đó sao chép các tệp từ lib mysqldata, sau đó khởi động lại máy chủ nhưng chỉ sao chép các tệp sẽ mất ~ 2 giờ.

bất kỳ suy nghĩ nào?

+0

Đây là hướng dẫn tôi đã viết về cách thực hiện một nô lệ hoàn hảo chỉ với một vài giây của bảng khóa thời gian chết ... đặc biệt là nếu bạn có rất nhiều dữ liệu MyISAM ... http://www.marcpope.com/article.php?story=2013060316014742 –

Trả lời

6

On July 8, 2011 I addressed a similar question. I wrote scripts that would zap binary logs and starting performing an rsync.

On June 16, 2011, I wrote a post contrasting doing an rsync versus using XtraBackup.

On May 23, 2011, I discussed what considerations to make when doing this kind of backup.

Thay vì phát minh lại bánh xe và viết lại trong thông tin mà tôi đã viết trong những bài viết, tôi chỉ đơn giản là cung cấp các liên kết đến bài đăng của riêng tôi giải quyết câu hỏi này.

Vui lòng đọc kỹ chúng.

Hãy thử!

caveat

Các thời gian chết chỉ trong thuật toán rsync của tôi là khi sau khi bạn đã thực hiện nhiều rsyncs theo quy định, bạn shutdown mysql, thực hiện một rsync hơn, và sau đó khởi động mysql.

Tôi muốn làm rõ lý do của việc tắt máy:

Khi bạn tắt máy mysql:

  • Tất cả MyISAM mở bảng được đóng cửa, còn có một tiêu đề mà đánh dấu bao nhiêu xử lý tập tin đang mở vào bảng MyISAM. Đó phải là số không (0) cho bảng được OK. Nếu không, một bảng MyISAM đóng có giá trị khác không trong trường tiêu đề này đánh dấu bảng là bị lỗi và cần sửa chữa bảng. Tắt mysql làm sạch tất cả những điều đó.

  • Tất cả các bảng InnoDB có trang dữ liệu hoặc trang chỉ mục trong Vùng đệm được đánh dấu là cần phải được xóa sạch vào đĩa. Thực hiện tắt máy sẽ kích hoạt toàn bộ Bể đệm. Đương nhiên, lớn hơn các hồ bơi và cao hơn số lượng các trang bẩn, các hồ bơi đệm thời gian xả sẽ lâu hơn. Để rút ngắn giai đoạn tắt máy của mysqld, hãy chạy SET GLOBALinnodb_max_dirty_pages_pct= 0; trước khi thực hiện bất kỳ rsyncs nào. Tất cả các giao dịch được hoàn thành (hoặc cam kết hoặc quay lại).

0

Tôi nghĩ bạn có một số hiểu lầm.

  1. trước khi nó bắt đầu, bạn phải kích hoạt nhị phân log trên tổng thể
  2. khởi động lại mysql trên tổng
  3. đăng nhập để làm chủ
  4. khóa tất cả các bảng từ ghi
  5. kỷ lục chủ vị trí nhị phân
  6. sao chép dữ liệu nhị phân từ bản chính (bản sao TRỰC TIẾP * .MYI, * .MYD ... v.v., bạn có thể sao chép sang một vị trí khác trong cơ sở dữ liệu chính)
  7. sau khi sao chép xong, loại bỏ wri te khóa
  8. dữ liệu scp để nô lệ (phụ thuộc vào khoảng cách mạng)
  9. thiết lập thông tin tổng thể có liên quan vào nô lệ (vị trí bản ghi nhị phân, và nhớ để vô hiệu hóa nhị phân log)
  10. bắt đầu nô lệ

Sau đó , nó sẽ có sự chậm trễ rất lớn đối với nô lệ,
và nô lệ sẽ cố gắng bắt kịp với chủ tự động,
khi nó bắt kịp, nô lệ của bạn đã sẵn sàng!

Vì vậy, thời gian ngừng hoạt động chỉ khi bạn khóa bảng và sao chép dữ liệu nhị phân vào một vị trí khác trong cơ sở dữ liệu chính của bạn.

tài liệu: - http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html

0

Tôi đã tìm thấy công cụ sau để được trợ giúp và hiệu quả tuyệt vời. Tác giả hiện đang làm việc cho facebook và được sử dụng để làm việc cho dema ở Nhật Bản. Nó khá dễ dàng để thiết lập và bạn sẽ đạt đến 4 9 của HA. ;-)

MHA tool for MySQL replication high availability

tôi phải nói rằng mặc dù cụm MySQL là tốt hơn, lol ;-)

Các vấn đề liên quan