Trang chủTác giảLiên hệ

Nâng cấp version DB RDS MySQL engine

By Nguyễn Huy Hoàng
Published in AWS
July 22, 2021
11 min read

Như các bạn đã biết, kể từ ngày 03-08-2021, RDS sẽ không còn hỗ trợ MySQL 5.6. Nếu như chúng ta đang sử dụng DB MySQL 5.6 mà không chủ động nâng cấp version trước ngày 03-08-2021, RDS sẽ tự động nâng cấp DB MySQL 5.6 của bạn lên MySQL 5.7 trong thời gian bảo trì theo lịch trình từ ngày 03-08-2021 00:00:01 UTC đến 00:00:01 UTC ngày 01-09-2021. Vào ngày 01-09-2021, 00:00:01 UTC, mọi cơ sở dữ liệu Amazon RDS cho MySQL 5.6 còn lại sẽ được nâng cấp lên phiên bản 5.7 bất kể các phiên bản có đang trong thời gian bảo trì hay không. Vì vậy để chủ động thì chúng ta nên tự nâng cấp version MySQL.

Amazon RDS hỗ trợ các nâng cấp tại chỗ cho các phiên bản chính của công cụ cơ sở dữ liệu MySQL:

  • MySQL 5.6 lên MySQL 5.7
  • MySQL 5.7 lên MySQL 8.0

Chú ý:

  • Bạn chỉ có thể tạo các phiên bản DB MySQL phiên bản 5.7 và 8.0 với các instance class DB thế hệ mới nhất và hiện tại, cộng với instance class DB thế hệ trước là db.m3
  • Để thực hiện nâng cấp phiên bản chính cho MySQL DB trên Amazon RDS từ MySQL 5.7 lên MySQL 5.7 trở lên, trước tiên hãy thực hiện bất kỳ bản cập nhật hệ điều hành nào có sẵn. Sau khi hoàn tất cập nhật hệ điều hành, hãy nâng cấp lên từng phiên bản chính: 5.6 lên 5.7 và sau đó là 5.7 lên 8.0.
  • Trong quá trình nâng cấp phiên bản của MySQL, Amazon RDS chạy mysql_upgrade để nâng cấp các bảng nếu cần thiết. Ngoài ra, Amazon RDS làm trống các bảng slow_loggeneral_log trong quá trình nâng cấp phiên bản. Để bảo toàn thông tin log, hãy lưu lại nội dung log trước khi nâng cấp phiên bản chính.
  • Việc nâng cấp phiên bản của MySQL thường hoàn tất trong khoảng 10 phút. Một số nâng cấp có thể mất nhiều thời gian hơn do kích thước instance class DB hoặc vì phiên bản này không tuân theo các nguyên tắc hoạt động nhất định trong Best practices for Amazon RDS

Nâng cấp lên MySQL phiên bản 5.7 có thể bị chậm

MySQL phiên bản 5.6.4 đã giới thiệu một định dạng ngày và giờ mới cho các cột datetime, timetimestamp cho phép các thành phần phân số trong các giá trị ngày và giờ. Khi nâng cấp phiên bản DB lên MySQL phiên bản 5.7, MySQL buộc chuyển đổi tất cả các loại cột ngày và giờ sang định dạng mới.

Do việc chuyển đổi này xây dựng lại các bảng của bạn, có thể mất một khoảng thời gian đáng kể để hoàn thành nâng cấp phiên bản DB. Việc chuyển đổi bắt buộc xảy ra đối với bất kỳ phiên bản DB nào đang chạy phiên bản trước phiên bản MySQL 5.6.4. Nó cũng xảy ra đối với bất kỳ phiên bản DB nào đã được nâng cấp từ phiên bản trước phiên bản MySQL 5.6.4 lên phiên bản khác với phiên bản 5.7.

Nếu phiên bản DB của bạn chạy phiên bản trước phiên bản MySQL 5.6.4 hoặc đã được nâng cấp từ phiên bản trước 5.6.4, bạn nên chuyển đổi các cột ngày giờ, thời gian và dấu thời gian trong cơ sở dữ liệu của mình trước khi nâng cấp phiên bản DB của bạn lên MySQL phiên bản 5.7. Việc chuyển đổi này có thể giảm đáng kể thời gian cần thiết để nâng cấp phiên bản DB lên MySQL phiên bản 5.7. Để nâng cấp các cột ngày và giờ của bạn lên định dạng mới, hãy chạy lệnh ALTER TABLE <table_name> FORCE; cho mỗi bảng có chứa các cột ngày hoặc giờ. Vì việc thay đổi bảng sẽ khóa bảng ở chế độ chỉ đọc, bạn nên thực hiện cập nhật này trong thời gian bảo trì.

alt text

Kiểm tra trước khi nâng cấp từ MySQL 5.7 lên 8.0

MySQL 8.0 bao gồm một số điểm không tương thích với MySQL 5.7. Những điểm không tương thích này có thể gây ra sự cố trong quá trình nâng cấp từ MySQL 5.7 lên MySQL 8.0. Vì vậy, cơ sở dữ liệu của bạn có thể cần một số chuẩn bị để nâng cấp thành công. Sau đây là danh sách chung về những điểm không tương thích này:

  • Không được có bảng nào sử dụng các kiểu dữ liệu hoặc hàm đã lỗi thời.
  • Không được có tệp * .frm.
  • Trigger không được có definer bị thiếu hoặc trống, hoặc bối cảnh tạo không hợp lệ (missing or empty definer or an invalid creation context).
  • Không được có bảng được phân vùng (partitioned table) sử dụng công cụ lưu trữ không hỗ trợ phân vùng gốc (native partitioning support).
  • Không được vi phạm từ khóa hoặc từ dành riêng. Một số từ khóa có thể được đặt trước trong MySQL 8.0 mà trước đó chưa được đặt trước.
  • Không được có bảng nào trong cơ sở dữ liệu hệ thống MySQL 5.7 mysql trùng tên với bảng được sử dụng bởi từ điển dữ liệu MySQL 8.0.
  • Không được có mode SQL lỗi thời nào được xác định trong cài đặt biến hệ thống sql_mode của bạn.
  • Không được có bảng hoặc procedure nào được lưu trữ với các phần tử cột ENUM hoặc SET riêng lẻ có độ dài vượt quá 255 ký tự hoặc 1020 byte.
  • Trước khi nâng cấp lên MySQL 8.0.13 hoặc cao hơn, không được có bảng phân vùng nằm trong không gian bảng InnoDB được chia sẻ.
  • Không được có truy vấn và định nghĩa chương trình được lưu trữ từ MySQL 8.0.12 trở xuống sử dụng các điều kiện ASC hoặc DESC cho các mệnh đề GROUP BY.
  • Cài đặt MySQL 5.7 của bạn không được sử dụng các tính năng không được hỗ trợ trong MySQL 8.0.
  • Không được có tên ràng buộc khóa ngoại dài hơn 64 ký tự.
  • Cần xem xét chuyển đổi các đối tượng sử dụng bộ mã utf8mb3 sang bộ mã utf8mb4 để cải thiện hỗ trợ Unicode. Bộ ký tự utf8mb3 không được dùng nữa. Ngoài ra, hãy cân nhắc sử dụng utf8mb4 cho các tham chiếu bộ ký tự thay vì utf8, vì utf8 hiện là bí danh cho bộ ký tự utf8mb3. Xem thêm.
  • Xem thêm

Các kiểm tra trước này là bắt buộc. Bạn không thể bỏ qua chúng. Kiểm tra trước cung cấp các lợi ích sau:

  • Chúng cho phép bạn tránh thời gian chết ngoài kế hoạch trong quá trình nâng cấp.
  • Nếu có điểm không tương thích, Amazon RDS sẽ ngăn nâng cấp và cung cấp log để bạn tìm hiểu về chúng. Sau đó, bạn có thể sử dụng log để chuẩn bị cơ sở dữ liệu của mình cho việc nâng cấp lên MySQL 8.0 bằng cách loại bỏ các điểm không tương thích.
  • Các kiểm tra trước chạy trước khi phiên bản DB bị dừng để nâng cấp, có nghĩa là chúng không gây ra bất kỳ thời gian chết nào khi chạy. Nếu kiểm tra trước phát hiện thấy điểm không tương thích, Amazon RDS sẽ tự động hủy nâng cấp trước khi phiên bản DB bị dừng. Amazon RDS cũng tạo ra một sự kiện cho sự không tương thích. Để biết thêm thông tin về các sự kiện Amazon RDS, hãy xem Using Amazon RDS event notification

Chú ý: Amazon RDS chỉ chạy tất cả các kiểm tra trước để nâng cấp từ MySQL 5.7 lên MySQL 8.0. Đối với bản nâng cấp từ MySQL 5.6 lên MySQL 5.7, kiểm tra trước được giới hạn để xác nhận rằng không có bảng orphan và có đủ không gian lưu trữ để xây dựng lại bảng. Kiểm tra trước không chạy để nâng cấp lên các bản phát hành thấp hơn MySQL 5.7.

Khôi phục sau khi không nâng cấp được từ MySQL 5.7 lên 8.0

Khi bạn nâng cấp phiên bản DB từ MySQL phiên bản 5.7 lên MySQL phiên bản 8.0, quá trình nâng cấp có thể không thành công. Đặc biệt, nó có thể bị lỗi nếu từ điển dữ liệu chứa các điểm không tương thích mà không được kiểm tra trước nắm bắt. Trong trường hợp này, cơ sở dữ liệu không thể khởi động thành công trong phiên bản MySQL 8.0 mới.Tại thời điểm này, Amazon RDS sẽ khôi phục các thay đổi được thực hiện cho bản nâng cấp. Sau khi khôi phục, phiên bản MySQL DB đang chạy MySQL phiên bản 5.7. Khi nâng cấp không thành công và được khôi phục, Amazon RDS sẽ tạo một sự kiện với ID sự kiện RDS-EVENT-0188.

Thông thường, nâng cấp không thành công vì có sự không tương thích trong metadata giữa cơ sở dữ liệu trong phiên bản DB của bạn và phiên bản MySQL đích. Khi nâng cấp không thành công, bạn có thể xem chi tiết về những điểm không tương thích này trong tệp upgradeFailure.log. Giải quyết các điểm không tương thích trước khi cố gắng nâng cấp lại.

Trong quá trình cố gắng nâng cấp và khôi phục không thành công, phiên bản DB của bạn sẽ được khởi động lại. Mọi thay đổi thông số đang chờ xử lý sẽ được áp dụng trong quá trình khởi động lại và vẫn tồn tại sau khi khôi phục.

Thử nghiệm nâng cấp

Bước 1

Xem lại tài liệu nâng cấp cho phiên bản mới của công cụ cơ sở dữ liệu để xem liệu có vấn đề tương thích nào có thể ảnh hưởng đến cơ sở dữ liệu hoặc ứng dụng của bạn không:

Bước 2

Nếu phiên bản DB của bạn là thành viên của DB parameter group tùy chỉnh, hãy tạo một DB parameter group mới với các cài đặt hiện có của bạn tương thích với phiên bản chính mới. Chỉ định DB parameter group mới khi bạn nâng cấp phiên bản thử nghiệm của mình, để thử nghiệm nâng cấp của bạn đảm bảo rằng nó hoạt động chính xác. Working with DB parameter groups

Bước 3

Tạo snapshot DB của phiên bản DB sẽ được nâng cấp

Bước 4

Khôi phục snapshot DB để tạo một phiên bản DB thử nghiệm mới

Bước 5

Sửa đổi phiên bản DB thử nghiệm mới này để nâng cấp nó lên phiên bản mới, sử dụng một trong các phương pháp được trình bày chi tiết sau đây. Nếu bạn đã tạo một parameter group mới ở bước 2, hãy chỉ định parameter group đó.

Bước 6

Đánh giá bộ nhớ được sử dụng bởi phiên bản đã nâng cấp để xác định xem bản nâng cấp có yêu cầu thêm bộ nhớ hay không.

Bước 7

Chạy càng nhiều bài kiểm tra đảm bảo chất lượng của bạn đối với phiên bản DB được nâng cấp càng tốt để đảm bảo rằng cơ sở dữ liệu và ứng dụng của bạn hoạt động chính xác với phiên bản mới. Thực hiện bất kỳ thử nghiệm mới nào cần thiết để đánh giá tác động của bất kỳ vấn đề tương thích nào mà bạn đã xác định ở bước 1. Kiểm tra tất cả các stored procedures và function.

Bước 8

Nếu tất cả các thử nghiệm đều pass, thì hãy thực hiện nâng cấp trên phiên bản DB production của bạn. Chúng tôi khuyên bạn không cho phép ghi các hoạt động vào phiên bản DB cho đến khi bạn xác nhận rằng mọi thứ đang hoạt động bình thường.

Sử dụng Read Replica để giảm thời gian chết khi nâng cấp cơ sở dữ liệu MySQL

Để nâng cấp cơ sở dữ liệu MySQL trong khi một phiên bản DB đang được sử dụng:

Bước 1

Đăng nhập vào Bảng điều khiển quản lý AWS và mở bảng điều khiển Amazon RDS tại https://console.aws.amazon.com/rds/.

Bước 2

Tạo một Read Replica cho phiên bản MySQL 5.7 của bạn. Quá trình này tạo ra một bản sao có thể nâng cấp của cơ sở dữ liệu của bạn. Các bản Read Replica của instance DB cũng có thể tồn tại.

  • In the console, choose Databases, and then choose the DB instance that you want to upgrade.
  • For Actions, choose Create read replica.
  • Provide a value for DB instance identifier for your read replica and ensure that the DB instance class and other settings match your MySQL 5.7 DB instance.
  • Choose Create read replica.

Bước 3 (Tùy chọn)

Khi Read Replica được tạo và Status hiển thị Available, hãy chuyển đổi Read Replica thành triển khai Multi-AZ và bật backup. Theo mặc định, Read Replica được tạo dưới dạng triển khai Single-AZ với các bản backup bị vô hiệu hóa. Vì bản Read Replica cuối cùng sẽ trở thành instance DB production, nên cách tốt nhất là bật cấu hình triển khai Multi-AZ và bật backup ngay bây giờ.

  • In the console, choose Databases, and then choose the read replica that you just created.
  • Choose Modify.
  • For Multi-AZ deployment, choose Create a standby instance.
  • For Backup Retention Period, choose a positive nonzero value, for example 3 days, and then choose Continue.
  • For Scheduling of modifications, choose Apply immediately.
  • Choose Modify DB instance.

Bước 4

Khi Read Replica được tạo và Status hiển thị Available, nâng cấp Read Replica lên MySQL 8.0:

  • In the console, choose Databases, and then choose the read replica that you just created.
  • Choose Modify.
  • For DB engine version, choose the MySQL 8.0 version to upgrade to, and then choose Continue.
  • For Scheduling of modifications, choose Apply immediately.
  • Choose Modify DB instance to start the upgrade.

Bước 5

Khi quá trình nâng cấp hoàn tất và Status hiển thị Available, hãy xác minh rằng Read Replica vừa được nâng cấp đã cập nhật so với phiên bản MySQL 5.7 DB nguồn. Bạn có thể thực hiện việc này bằng cách kết nối với Read Replica và chạy lệnh SHOW REPLICA STATUS (hoặc SHOW SLAVE STATUS đối với các phiên bản trước MySQL 8.0.23) . Nếu trường Seconds_Behind_Master là 0, thì Read Replica được cập nhật.

Bước 6 (Tùy chọn)

Tạo một Read Replica cho Read Replica của bạn. Nếu bạn muốn instance DB có một Read Replica sau khi nó được nâng cấp thành một instance DB độc lập, bạn có thể tạo Read Replica ngay bây giờ.

  • In the console, choose Databases, and then choose the read replica that you just upgraded.
  • For Actions, choose Create read replica.
  • Provide a value for DB instance identifier for your read replica and ensure that the DB instance class and other settings match your MySQL 5.7 DB instance.
  • Choose Create read replica.

Bước 7 (Tùy chọn)

Cấu hình DB parameter group tùy chỉnh cho Read Replica. Nếu bạn muốn instance DB sử dụng một parameter group tùy chỉnh sau khi nó được nâng cấp thành một instance DB độc lập, bạn có thể tạo DB parameter group ngay bây giờ có thể liên kết nó với Read Replica.

  • Create a custom DB parameter group for MySQL 8.0. For instructions, see Creating a DB parameter group.
  • Modify the parameters that you want to change in the DB parameter group you just created. For instructions, see Modifying parameters in a DB parameter group.
  • In the console, choose Databases, and then choose the read replica.
  • Choose Modify.
  • For DB parameter group, choose the MySQL 8.0 DB parameter group you just created, and then choose Continue.
  • For Scheduling of modifications, choose Apply immediately.
  • Choose Modify DB instance to start the upgrade.

Bước 8

Làm cho Read Replica MySQL 8.0 của bạn thành một phiên bản DB độc lập.

Chú ý: Nên promote Read Replica MySQL 8.0 của bạn trong thời gian bảo trì khi phiên bản MySQL 5.7 DB nguồn của bạn ở chế độ chỉ đọc và tất cả các hoạt động ghi đều bị tạm ngừng. Khi quá trình promote hoàn tất, bạn có thể hướng các hoạt động ghi của mình sang phiên bản MySQL 8.0 DB được nâng cấp để đảm bảo rằng không có hoạt động ghi nào bị mất. Ngoài ra, trước khi promote Read Replica MySQL 8.0, bạn nên thực hiện tất cả các thao tác cần thiết của ngôn ngữ định nghĩa dữ liệu (DDL) trên Read Replica MySQL 8.0 của mình. Một ví dụ là tạo chỉ mục. Cách tiếp cận này tránh các tác động tiêu cực đến hiệu suất của bản sao đọc MySQL 8.0 sau khi nó đã được thúc đẩy.

Để promote một Read Replica, hãy sử dụng quy trình sau:

  • In the console, choose Databases, and then choose the read replica that you just upgraded.
  • For Actions, choose Promote.
  • Choose Yes to enable automated backups for the read replica instance. For more information, see Working with backups.
  • Choose Continue.
  • Choose Promote Read Replica.

Bây giờ bạn có một phiên bản nâng cấp của cơ sở dữ liệu MySQL của mình. Tại thời điểm này, bạn có thể hướng các ứng dụng của mình sang phiên bản MySQL 8.0 DB mới.

Tham khảo


Nguyễn Huy Hoàng

Developer

Related Posts

AWS
Static & Dynamic webpage in Cloudfront (AWS CDN)
August 10, 2021
3 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media