Có nhiều lý do khác nhau để nâng cấp cơ sở dữ liệu của bạn. Đó có thể là áp dụng các bản sửa lỗi bảo mật, sử dụng các tính năng mới, giải quyết các vấn đề về khả năng tương thích hoặc chỉ để giữ cho hệ thống của bạn luôn được cập nhật. Nâng cấp này có thể là một nâng cấp lớn hoặc một nâng cấp nhỏ và tùy thuộc vào công nghệ, có những cách tiếp cận khác nhau để thực hiện công việc này, nhưng nếu bạn cần hệ thống của mình hoạt động mọi lúc mà không có thời gian chết, thì thực hiện nâng cấp luân phiên có thể là lựa chọn tốt nhất .
Trong blog này, chúng ta sẽ thấy một số cân nhắc cần xem xét trước khi nâng cấp và cách thực hiện nâng cấp lần lượt trên MySQL.
Nâng cấp Nhỏ so với Chính
Nói chung, các nâng cấp nhỏ là an toàn theo cách bạn có thể dễ dàng hạ cấp hoặc khôi phục nó và phải tương thích với các gói và tính năng trước đó.
Nâng cấp phiên bản chính liên quan đến một số rủi ro như loại bỏ gói cơ sở dữ liệu, tính tương thích của cấu hình và trình kết nối, các tính năng không dùng nữa và hơn thế nữa.
Vì vậy, ngay cả khi việc kiểm tra là quan trọng đối với cả hai trường hợp, trong trường hợp nâng cấp lớn, đó là điều bắt buộc nếu bạn muốn tránh các vấn đề nghiêm trọng cho doanh nghiệp của mình.
Trước khi nâng cấp
Bây giờ, chúng ta hãy xem một số cân nhắc trước khi nâng cấp để tránh các sự cố trong tương lai.
Bản sao lưu
Sao lưu luôn quan trọng và thậm chí nhiều hơn nếu bạn muốn nâng cấp cơ sở dữ liệu của mình. Nếu có sự cố và các tùy chọn khôi phục thảm họa khác không thành công, bạn sẽ cần một bản sao lưu để khôi phục cơ sở dữ liệu của mình. Vì vậy, trước khi bắt đầu tác vụ, hãy sao lưu đầy đủ (vật lý hoặc / và logic) cơ sở dữ liệu hiện tại của bạn và giữ nó an toàn cho đến khi đảm bảo mọi thứ hoạt động bình thường trong vài ngày / tuần.
Xem lại Các tính năng không được dùng nữa
Nếu bạn đang sử dụng một tính năng không còn được dùng trong phiên bản mới, ứng dụng của bạn có thể bị lỗi và bạn sẽ cần khôi phục hệ thống của mình, điều này sẽ tạo ra thời gian chết (tùy thuộc vào cách tiếp cận) và mất thời gian. Kiểm tra tính năng không dùng nữa và so sánh chúng với tính năng bạn đang sử dụng sẽ tránh được lần nâng cấp không thành công này.
Thử nghiệm
Điều này quan trọng không chỉ đối với việc nâng cấp mà còn đối với bất kỳ thay đổi nào trong cơ sở dữ liệu hoặc ứng dụng của bạn. Có một môi trường thử nghiệm tái tạo môi trường sản xuất có thể tiết kiệm thời gian của bạn và tránh các sự cố không mong muốn trong quá trình nâng cấp hoặc thay đổi cơ sở dữ liệu.
Khôi phục
Trong bất kỳ nâng cấp nào, điều quan trọng là phải chuẩn bị sẵn sàng khôi phục để sử dụng nếu cần để cơ sở dữ liệu của bạn hoạt động càng sớm càng tốt. Nếu không, nó có thể ảnh hưởng đến RTO (Mục tiêu thời gian khôi phục) của bạn trong trường hợp bạn cần tạo lại cụm từ một bản sao lưu hoặc một tùy chọn kế hoạch khôi phục khác.
Xin lưu ý rằng đôi khi không thể hạ cấp, vì vậy bạn nên có một kế hoạch phụ trong trường hợp cần khôi phục các thay đổi của mình.
Kiểm tra nhà cung cấp
Tùy thuộc vào nhà cung cấp và phiên bản, bạn có thể sử dụng lệnh mysqlcheck để thực hiện kiểm tra sơ bộ cài đặt hiện tại của mình và xác nhận rằng bạn đã sẵn sàng sử dụng.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Đây là lần kiểm tra đầu tiên cần thực hiện trước khi nâng cấp và nó sẽ kiểm tra xem có không:
- Các bảng sử dụng các kiểu dữ liệu hoặc hàm đã lỗi thời
- Tệp mồ côi
- Trình kích hoạt có bộ định nghĩa bị thiếu hoặc trống hoặc bối cảnh tạo không hợp lệ
Bạn cần kiểm tra thêm một số điều nhưng để tránh đăng blog quá rộng, bạn có thể tham khảo tài liệu MySQL chính thức về việc này.
Nâng cấp Rolling thủ công cho MySQL
Có các cách tiếp cận khác nhau để thực hiện nâng cấp luân phiên. Nó có thể được đặt tại chỗ, sử dụng sao chép, hoặc thậm chí kết hợp chúng. Trong mọi trường hợp, nếu bạn muốn tránh thời gian chết, bạn không nên thực hiện các thay đổi trong ứng dụng của mình trong quá trình nâng cấp. Đối với điều này, bạn có thể thêm Bộ cân bằng tải trước cơ sở dữ liệu của mình. Ứng dụng của bạn sẽ kết nối với Load Balancer của bạn và nó sẽ chuyển hướng lưu lượng đến các nút có sẵn.
Giả sử bạn có Bản sao MySQL với 1 nút chính và 2 nút phụ, và 1 nút HAProxy phía trước chúng:
Một cách đơn giản để thực hiện nâng cấp theo cách thủ công trên môi trường này có thể là:
- Tắt một nút phụ khỏi HAProxy của bạn
- Đảm bảo rằng bạn không có lưu lượng truy cập trên nút phụ này
- Nâng cấp nút phụ theo cách thủ công
- Kiểm tra trạng thái sao chép để đảm bảo rằng nó được cập nhật
- Tắt nút chính trong HAProxy của bạn
- Đảm bảo rằng bạn không có lưu lượng truy cập trên nút chính của mình
- Quảng cáo nút phụ được nâng cấp
- Bật nó trong HAProxy của bạn
- Xác nhận rằng trang cái mới đang nhận được lưu lượng truy cập
- Định cấu hình lại nô lệ thứ hai của bạn để sao chép từ bản chính mới
- Vô hiệu hóa nô lệ thứ hai khỏi HAProxy của bạn
- Đảm bảo rằng bạn không có lưu lượng truy cập trên nút phụ này
- Nâng cấp nút phụ theo cách thủ công
- Kiểm tra trạng thái sao chép để đảm bảo rằng nó được cập nhật
- Bật nó trong HAProxy của bạn
- Xác nhận rằng nút phụ đang nhận được lưu lượng truy cập (nếu cần)
- Định cấu hình lại trang cái cũ của bạn để sao chép từ trang cái mới
- Nâng cấp nút chính cũ theo cách thủ công
- Kiểm tra trạng thái sao chép để đảm bảo rằng nó được cập nhật
- Bật nó trong HAProxy của bạn
- Xác nhận rằng máy chủ cũ (hiện là máy chủ) đang nhận lưu lượng truy cập (nếu cần)
Như bạn có thể thấy, ngay cả theo cách đơn giản hóa, tác vụ này đòi hỏi nhiều bước và có nghĩa là có nhiều khả năng xảy ra sự cố hơn.
Bản nâng cấp ClusterControl Rolling cho MySQL
Cách tốt nhất để giảm khả năng bị lỗi là tự động hóa tất cả (hoặc gần như tất cả) các bước này. Sử dụng ClusterControl, bạn có thể thực hiện một đợt nâng cấp nhỏ cho cụm MySQL của mình chỉ với một vài cú nhấp chuột.
Để thực hiện việc này, hãy đi tới ClusterControl -> Chọn Cụm -> Quản lý -> Nâng cấp, tại đây bạn sẽ thấy tùy chọn Nâng cấp.
Nâng cấp trực tuyến và được thực hiện trên một nút tại một thời điểm. Nút sẽ bị dừng, phần mềm sẽ được cập nhật và sau đó nút sẽ được khởi động lại. Nếu một nút không thể nâng cấp, quá trình sẽ bị hủy bỏ.
Nếu bạn chọn tùy chọn Nâng cấp, bạn sẽ thấy xác nhận về phiên bản sẽ được nâng cấp:
Và bạn chỉ cần nhấn vào Nâng cấp để xác nhận công việc này. Sau đó, bạn có thể theo dõi quá trình nâng cấp trong Phần Hoạt động ClusterControl:
Đồng thời, ClusterControl sẽ định cấu hình lại Bộ cân bằng tải của bạn để gửi lưu lượng đến các nút có sẵn.
ClusterControl chỉ hỗ trợ các nâng cấp nhỏ, bởi vì, như chúng tôi đã đề cập trước đây, nâng cấp lớn là một nhiệm vụ rủi ro đòi hỏi phải thử nghiệm và nghiên cứu để đảm bảo rằng ứng dụng của bạn sẽ hoạt động tốt trên phiên bản chính mới.
Kết luận
Nâng cấp là nhiệm vụ quan trọng ở tất cả các công ty và có thể gặp rủi ro nếu bạn không thực hiện các biện pháp phòng ngừa nhất định và thực hiện đúng tất cả các bước nâng cấp.
Trong blog này, chúng tôi đã đề cập đến một số cân nhắc cần lưu ý trước khi nâng cấp cơ sở dữ liệu của bạn và chúng tôi đã chỉ ra sự khác biệt giữa thực hiện tác vụ này theo cách thủ công và sử dụng ClusterControl, giúp bạn giảm thiểu khả năng bị lỗi.