Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thay đổi bảng InnoDB MySQL lớn

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à:

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cập nhật SQl từ bảng Tên ngẫu nhiên

  2. MySQL Chọn N hàng đầu

  3. Cách xuất cơ sở dữ liệu bằng phpMyAdmin

  4. Làm cách nào để xóa tất cả các ký tự số không phải chữ cái khỏi một chuỗi trong MySQL?

  5. 10 mẹo hữu ích về điều chỉnh hiệu suất MySQL