aws RDS 版本升級最佳實踐的探討
這篇文章其實在草稿箱中存在了挺長的一段時間,去年10月就已經開始寫了,但是由於工作上的其他事情的干擾,一直還沒寫完。所以你可以看到我畫的圖中,now其實是指2018年10月(OCT)。
趁著休假,把這個文章終於寫完了。
1. aws RDS 的升級週期說明:
根據亞馬遜的文件 Amazon RDS FAQs 上的說明,aws RDS的大版本,至少能支援3年,小版本至少會支援1年。
根據和aws的交流得知,一般社群基本版本釋出約5個月之後,aws會發布基於aws的RDS。
因此,aws的RDS升級週期是,待社群版本釋出後,約5個月,aws釋出對應的版本,每個大版本至少支援3年,每個小版本至少支援1年。
2. aws RDS的版本過期的後果:
根據亞馬遜的文件 Amazon RDS FAQs 上的說明,當某個大版本或者小版本,過了亞馬遜的服務支援期,亞馬遜會提前提醒客戶(大版本提前6個月提醒,小版本提前3個月提醒),在提醒期過後,aws會強制自動升級資料庫到最新的版本(即使客戶選擇的是關閉了自動小版本升級)。升級的過程,應用程式無法連線資料庫,造成業務影響。

3. 內部升級步驟解析:
即:
a). 在升級前,做一次快照,注意這個快照的時間,和資料庫的大小的有關。 b). 進行slow shutdown,即set global innodb_fast_shutdown=0然後進行shutdown。由於設定了slow shutdown,因此dirty buffer會刷到磁碟上+insert buffer 也會刷到磁碟上(即system tablespace,ibdata1中)+full purge(即清理無用的undo頁) c). 將mysql掛載到新的儲存引擎下,並且禁止遠端網路訪問; d). 執行mysql_upgrade程式,升級資料字典。 e). 執行RDS特殊的一些指令碼,以便升級RDS封裝的表和儲存過程。 f). 重啟例項,開放網路遠端連線。
4.升級路線:

5.升級最佳實踐:
5.1. 大版本升級:
a). 先建立2個replica例項; b). 升級其中一個例項到高版本,此時,還保持著主從的同步關係; c) .建立dms例項,配置好源和目標的endpoint,和建立好task,注意建立task時選擇changes only,並且取消 Start task on create的勾勾。 d). 業務中斷開始,將新建的replica例項提升為主庫; d). 點選dms的task中的start ,等待其完成全量資料庫的對比,開始準備同步增量資料; e). 切換應用連線到高版本的資料庫;
5.2. 小版本升級:
方法一:
a). 先建立replica例項,或直接使用現有的replica例項;
b). 升級replica例項到高版本,此時,還保持著主從的同步關係;
c). 業務中斷開始,將高版本的replica例項提升為主庫;
d). 切換應用連線到高版本的資料庫。應用的連線串配置,可以提前配置好,重啟應用即可;

aws mysql minor version upgrade best practise.pdf
方法二:
a). 先升級replica例項到高版本,這是所有aws升級到必要前提,即必須先升級從庫;
b). 中斷業務和資料庫之間的連線,開始升級主庫;
c). 將主庫升級到高版本;
d). 恢復應用連線;
aws mysql minor version upgrade best practise_2.pdf
6.總結:
(1). 根據上面的所述,規定今後MySQL的新安裝版本的為5.7.23;
(2). 在一年內,對於之前MySQL 5.5版本,小版本統一過渡到5.5.61,MySQL 5.6版本,小版本統一過渡到5.6.41。這個可以避免MySQL的小版本因為不被支援導致強制升級,並且這2個版本的下一次強制升級時間,至少是在2019年9月之後。(pg類似指導思路);
(3). 在一年內,對於之前的MySQL 5.5版本升級到5.6版本;在兩年內,對於MySQL 5.6版本,升級到5.7版本;在兩到三年內,統一到MySQL 8.0版本。解決由於多版本共存,導致運維難度增加的問題。(pg類似指導思路);
(4). 後續的版本升級,將會按照1年一升小版本,3年一升大版本的進度推進,以符合aws RDS的版本支援規則。