Cách thiết lập sao chép MySQL với thời gian chết tối thiểu


11

Về cơ bản chúng tôi có một cơ sở dữ liệu MySQL lớn và chúng tôi đang tìm cách sao chép thành một nô lệ (thiết lập nô lệ chính). Các bạn có hướng dẫn từng bước nào về cách thực hiện việc này với thời gian chết tối thiểu trên cơ sở dữ liệu không? Sao lưu cơ sở dữ liệu và chuyển bản sao lưu sang máy chủ nô lệ (thậm chí thông qua mạng riêng) mất khoảng 40 phút hoặc lâu hơn. Khá lâu thời gian chết.

Câu trả lời:


14

Tôi giả sử bạn sử dụng InnoDB làm công cụ lưu trữ. Nếu vậy, bạn cần bật đăng nhập bin . Nếu không phải bây giờ, bạn cần khởi động lại MySQL sau khi sửa đổi my.cnf. Đây là thời gian chết duy nhất, sau đó bạn có thể lấy cơ sở dữ liệu với vị trí binlog mà không chặn cơ sở dữ liệu:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Dựa trên bản sao lưu này, khôi phục dữ liệu trên nô lệ. Sau này, bạn có thể làm theo bất kỳ hướng dẫn sao chép MySQL nào và để nô lệ bắt kịp / chạy cùng với chủ.


Điều gì sẽ xảy ra nếu một số bảng không sử dụng innodb? Và bản sao lưu ở trên vẫn còn hiệu lực nếu tôi sử dụng - cơ sở dữ liệu để kết xuất một tập hợp con của cơ sở dữ liệu thay vì -A?
mathieu

nếu một số bảng không sử dụng innodb thì bản sao lưu có thể không nhất quán. xem tại đây: stackoverflow.com/a/7461466/104398 ; sao lưu sẽ không chứa những cơ sở dữ liệu bị bỏ qua. nếu bạn thiết lập sao chép dựa trên bản sao lưu đó và không lọc những gì được sao chép - bản sao của bạn sẽ bị hỏng ngay khi có một số thao tác trên cơ sở dữ liệu bị bỏ qua.
pQd

Ok, tôi đã chuyển đổi các bảng myisam còn lại của mình thành innodb và đảm bảo rằng chỉ các cơ sở dữ liệu tôi muốn được sao chép / sao lưu.
mathieu

3

để bắt đầu sao chép, bạn cần một bản sao nhất quán của cơ sở dữ liệu của mình trên Slave

bảng của bạn myisam hoặc innodb được hỗ trợ? để tìm hiểu vấn đề

show table status

và nhìn vào cột 'Động cơ'

nếu tất cả các bảng là innodb hơn bạn có thể thực hiện thiết lập thời gian chết bằng 0 bằng cách sử dụng mysqldump - giao dịch đơn lẻ và nhập nó vào nô lệ

nếu các bảng là myisam thì sẽ phải có thời gian chết vì bạn phải khóa các bảng để viết trong khi chúng đang được sao chép. mysqlhotcopy là công cụ giúp bạn điều đó.

cách khác, nếu bạn đang sử dụng LVM (trình quản lý âm lượng logic), bạn có thể dừng cơ sở dữ liệu, chụp ảnh nhanh LVM trong vài giây và bắt đầu lại db. Sau đó, bạn có thể tạo một bản sao nhất quán từ ảnh chụp nhanh.


1

Để thiết lập nô lệ, bạn sẽ cần chụp ảnh dữ liệu và ghi lại vị trí nhật ký nhị phân. Sao lưu cơ sở dữ liệu sẽ không gây ra thời gian chết mặc dù nó sẽ làm giảm hiệu suất, nhưng dù sao bạn cũng đã sao lưu cơ sở dữ liệu rồi phải không? Bạn có thể thấy các nhu cầu sao lưu để khóa một số bảng và điều này có thể gây ra khóa trong ứng dụng của bạn, thực sự cần phải xem cách nó được thực hiện cho điều đó.

Bạn có thể chụp nhanh đĩa? Điều đó sẽ giảm thời gian chết đáng kể nếu bạn có thể thực hiện một hotbackup.

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.