Chỉnh sửa năm 2016: gần đây chúng tôi đã phát hành gh-ost
, sửa đổi câu trả lời của tôi để phản ánh nó.
Ngày nay có một số công cụ cho phép bạn thực hiện bảng thay đổi trực tuyến cho MySQL. Đây là:
- chỉnh sửa 2016: gh-ost :Công cụ di chuyển giản đồ không cần kích hoạt của GitHub (tuyên bố từ chối trách nhiệm:Tôi là tác giả của công cụ này)
- oak-online- bảng thay đổi , như một phần của openark-kit (tuyên bố từ chối trách nhiệm:Tôi là tác giả của công cụ này)
- pt-online-schema- thay đổi , như một phần của Bộ công cụ Percona
- thay đổi giản đồ trực tuyến của Facebook cho MySQL
Hãy xem xét "bình thường" `ALTER TABLE`:
Một bảng lớn sẽ mất nhiều thời gian để ALTER
. innodb_buffer_pool_size
là quan trọng, và các biến khác cũng vậy, nhưng trên một bảng rất lớn, chúng đều không đáng kể. Nó chỉ mất thời gian.
MySQL làm gì với ALTER
một bảng là tạo một bảng mới với định dạng mới, sao chép tất cả các hàng, sau đó chuyển qua. Trong thời gian này, bảng hoàn toàn bị khóa.
Xem xét đề xuất của riêng bạn:
Nó có thể sẽ hoạt động kém nhất trong tất cả các tùy chọn. Tại sao vậy? Vì bạn đang sử dụng bảng InnoDB nên INSERT INTO tablename_tmp SELECT * FROM tablename
thực hiện một giao dịch. một rất lớn Giao dịch. Nó sẽ tạo ra nhiều tải hơn so với ALTER TABLE
bình thường .
Hơn nữa, bạn sẽ phải tắt ứng dụng của mình tại thời điểm đó để ứng dụng không ghi (INSERT
, DELETE
, UPDATE
) vào bàn của bạn. Nếu đúng như vậy - toàn bộ giao dịch của bạn là vô nghĩa.
Những gì các công cụ trực tuyến cung cấp
Không phải tất cả các công cụ đều hoạt động như nhau. Tuy nhiên, những điều cơ bản được chia sẻ:
- Họ tạo một bảng "bóng" với giản đồ đã thay đổi
- Họ tạo và sử dụng trình kích hoạt để truyền các thay đổi từ bảng gốc sang bảng ma
- Họ từ từ sao chép tất cả các hàng từ bảng của bạn sang bảng bóng. Họ làm như vậy theo từng phần:giả sử 1.000 hàng cùng một lúc.
- Họ làm tất cả những điều trên trong khi bạn vẫn có thể truy cập và thao tác trên bảng gốc.
- Khi hài lòng, họ hoán đổi cả hai, sử dụng
RENAME
.
Bộ openark-kit công cụ đã được sử dụng cho 3,5 năm nay. Công cụ Percona mới ra đời được vài tháng, nhưng có thể sẽ được thử nghiệm nhiều hơn so với công cụ cũ. Công cụ của Facebook được cho là hoạt động tốt cho Facebook, nhưng không cung cấp giải pháp chung cho người dùng bình thường. Bản thân tôi chưa sử dụng nó.
Chỉnh sửa năm 2016: gh-ost
là một giải pháp không cần kích hoạt, giúp giảm đáng kể tải ghi chính trên trang chủ, tách tải ghi di chuyển khỏi tải bình thường. Nó có thể nghe được, có thể kiểm soát được, có thể kiểm tra được. Chúng tôi đã phát triển nó trong nội bộ GitHub và phát hành nó dưới dạng mã nguồn mở; chúng tôi đang thực hiện tất cả quá trình di chuyển sản xuất của mình qua gh-ost
hôm nay. Xem thêm tại đây
.
Mỗi công cụ đều có những hạn chế riêng, hãy xem kỹ tài liệu.
Cách bảo thủ
Cách bảo tồn là sử dụng bản sao Chủ động-Thụ động Chủ-Chính, thực hiện ALTER
trên máy chủ dự phòng (thụ động), sau đó chuyển đổi vai trò và thực hiện ALTER
một lần nữa trên những gì từng là máy chủ hoạt động, bây giờ chuyển sang bị động. Đây cũng là một lựa chọn tốt, nhưng yêu cầu một máy chủ bổ sung và kiến thức sâu hơn về sao chép.