MySQL升級是非常必要的. 我們在Percona Support上列出了關于MySQL升級最佳實踐的各種問題.這篇文章推薦了一些不同情況下升級MySQL的方法.
為什么MySQL升級是必須的? 原因有很多,比如:為了使用新增的特性,基于性能方面的考量, 修復的bug. 但是在沒有充分的測試以前就應用到你的應用中是非常危險的, 因為升級可以能會讓你的應用不能正常運作- 也可能引起性能的問題. 此外, 我建議你關注MySQL的發布信息和Percona Server - 看看最近的版本有什么變化. 也許在在最新的版本中已修復了某個你正在煩惱的問題.
通過SQL Dump升級主版本:
把Percona Server從5.1升級到5.5版本或者是從5.5升級到5.6版本的升級模式同樣適用于Oracle MySQL.
首先, 主版本升級并不是說可以不做任何準備,或者沒有任何風險. 在升級之前你需要閱讀相關的“升級”文檔,比如:MySQL5.1到MySQL5.5的升級文檔,MySQL5.5到MySQL5.6的升級文檔.在這些文檔里面你需要特別注意“Incompatible Change”部分,并檢查你是否會受到這些變化的影響.它們可能是配置參數名字變更, 去掉舊的參數,引入新的參數等- 你需要根據這些變化在my.cnf文件做相應的變更.Percona Server 5.5需要特別注意的文檔在這里, Percona Server 5.6需要特別注意的文檔在這里.
現在,你有幾種可行的方式升級,其中一種較靈活,另一種則依賴你當前系統的拓撲結構和數據庫數據大小 - 這種方法比前一種更安全。我們看個例子從 Percona Server 5.5 升級到 Percona Server 5.6,來具體看一下彼此的升級過程。
通常情況下,有兩中升級方式:
相比之下,第二種方式更安全些,但是這也會使得升級的過程要慢一些。
理論上講,最安全的方式是:
導出所有用戶的權限 導出所有數據并恢復到新版本數據庫中 恢復用戶權限到新數據庫中
下面是基本的操作步驟(在開始之前最好停止有關數據庫操作的應用).
1) 獲取用戶和權限信息. 該操作會備份所有用戶的權限.
| $ wget percona.com/get/pt-show-grants;$ perl pt-show-grants --user=root --ask-pass --flush > /root/grants.sql |
2) dump 5.5數據庫實例的所有信息(除去mysql, information_schema 和performance_schema數據庫).
| $ mysql -BNe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'performance_schema', 'information_schema')" | tr 'n' ' ' > /root/dbs-to-dump.sql$ mysqldump --routines --events --single-transaction --databases $(cat /root/dbs-to-dump.sql) > /root/full-data-dump.sql |