MySQL 升級的最佳實務

來源:互聯網
上載者:User

MySQL 升級的最佳實務

MySQL升級是非常必要的. 我們在Percona Support上列出了關於MySQL升級最佳實務的各種問題.這篇文章推薦了一些不同情況下升級MySQL的方法.

為什麼MySQL升級是必須的? 原因有很多,比如:為了使用新增的特性,基於效能方面的考量, 修複的bug. 但是在沒有充分的測試以前就應用到你的應用中是非常危險的, 因為升級可以能會讓你的應用不能正常運作- 也可能引起效能的問題. 此外, 我建議你關注MySQL的發布資訊和Percona Server - 看看最近的版本有什麼變化. 也許在在最新的版本中已修複了某個你正在煩惱的問題.

--------------------------------------分割線 --------------------------------------

Ubuntu 14.04下安裝MySQL

《MySQL權威指南(原書第2版)》清晰中文掃描版 PDF

Ubuntu 14.04 LTS 安裝 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主從伺服器

Ubuntu 12.04 LTS 構建高可用分布式 MySQL 叢集

Ubuntu 12.04下原始碼安裝MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二進位安裝

--------------------------------------分割線 --------------------------------------

通過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,來具體看一下彼此的升級過程。

通常情況下,有兩中升級方式:

  • 直接升級:安裝好新版本資料庫後,利用已經存在的資料檔案夾,同時運行mysql_upgrade指令碼來升級。

  • SQL 匯出: 從一個較老版本的mysql把資料匯出,然後恢複到新版本的資料庫中。(利用mysqldump工具)。

相比之下,第二種方式更安全些,但是這也會使得升級的過程要慢一些。

理論上講,最安全的方式是:

  • 匯出所有使用者的許可權

  • 匯出所有資料並恢複到新版本資料庫中

  • 恢複使用者權限到新資料庫中

下面是基本的操作步驟(在開始之前最好停止有關資料庫操作的應用).

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

3) 停止資料庫

$ service mysql stop
or
$ /etc/init.d/mysql stop

4) 移動舊資料庫(5.5版本)的資料目錄(假設是/var/lib/mysql,此處應該改為你自己的資料目錄)

$ mv /var/lib/mysql/ /var/lib/mysql-55

5) 安裝5.6版本(按照正常安裝流程). 如果你不是用的yum/apt-get方式安裝的,你需要執行 mysql_install_db 和mysql_upgrade兩個命令.

6) 將在1)操作中匯出的使用者資訊匯入到新資料庫中.

mysql -uroot < /root/grants.sql

7) 將2)匯出的資料匯入到新資料庫.

$ mysql -e "SET GLOBAL max_allowed_packet=1024*1024*1024";
$ mysql -uroot -p --max-allowed-packet=1G < /root/full-data-dump.sql;

此時, 所有的表都在MySQL 5.6中重建及重新載入完成,所以所有的二進位檔案對MySQL 5.6可用. 同時也你完成了最乾淨/最穩定的升級過程,你可以恢複你的應用- 這個升級過程和valina MySQL與Percona Server的升級過程是一樣的.甚至你可以把Oracle MySQL升級到Percona Server. 比如: 把Oracle MySQL 5.5升級到Percona Server 5.6. 再次強調: MySQL的升級過程和Percona Server的升級過程是一樣的,只需要將Percona Server 替換成Oracle MySQL即可.

"SQL dump" 也可以稱為邏輯備份.用升級後的MySQL二進位檔案來重建所有的表基本沒有相容問題,從這一方面來說"SQL dump"更安全. 但是對於TB, GB級的大資料來說,這種方法非常的耗時. 另一方面, 備份/重新載入如此大的資料集,比如重建InnoDB表,你需要恢複很多的空閑磁碟,這樣會引起的磁碟磁碟重組最佳化.對於常更新或者刪除的資料來說, 這麼做是有益的.

用In-Place升級小版本:

這種升級方式是在一個主要版本內做小版本升級, 比如把MySQL 5.5.35升級到MySQL 5.5.38或者是把Percona Server 5.6.14升級到最新的Percona Server 5.6.20

這被稱為一個就地升級,你只安裝一個新的二進位包,然後運行mysql_upgrade指令碼,如果必要的話,檢查和更新系統資料表。仍然,就地升級我們強烈推薦檢查新功能的發布說明,bug修複等。Percona Server 5.5 和 Percona Server 5.6 版本資訊可以分別在這兒和那兒找到。

當我們需要升級Percona伺服器時,針對它的Percona-specific的一些特性,對於Percona伺服器我們有額外的文檔描述一些細節,可以在這兒和那兒找到。這也包括完成就地升級過程的和yum/apt的包管理器。

同時,在安全方面你可以升級那些使用較早描述的邏輯轉儲程式,mysqldump或mydumper程式——前者並行備份和恢複和邏輯備份,升級是最安全的方法。

直接升級到最新版本:

跳過5.1版本直接把MySQL從5.0版本升級到5.5版本,或者跳過5.5版本直接從MySQL 5.1升級到5.6.甚至,可以直接從MySQL 5.0升級到MySQL 5.6雖然現在只有少數人還在使用MySQL 5.0版本. 這種同樣使用於Percona Server.

在這裡我們假設跳過5.5版本,把Oracle MySQL或者Percona Server直接從5.1版本升級到5.6版本.

在開始之前,你要意識到這是一個很謹慎的操作,將一步跨過一個重要的MySQL版本。也就是說,這是有風險的。用二進位檔案升級是不建議的,而且這樣直接跨越一個重要版本也是不安全的,所以你絕不能這樣5.0->5.5,5.1->5.6,或者5.0->5.6做。有一個問題是,MySQL版本不是所有改變都前向相容的。新版本中介紹的一些改變可能不僅會影響資料如何處理,還會影響伺服器行為包括SQL語句和MySQL伺服器和內部儲存引擎(此處不知標準否)。另一個問題是MySQL5.0與5.6版本之間的變化,一些預設的設定變數被改變了,這可能會導致結果完全不一樣或者行為完全不同。例如:MySQL5.5的預設儲存引擎是InnoDB,MySQL5.6的儲存引擎InnoDB將可以為每個資料庫表建立單獨資料表空間(separate tablespace),還有GTID複製(GTID replication)也被引入。有太多細節這裡就不一一列舉了,所有這些改變都被描述在MySQL的“升級文檔”中,詳情可以查看升級文檔。

這裡重點提一下,極不推薦跳過一個重要版本來升級。從MySQL5.1升級到5.6不應該一步完成,我建議先從5.1升級到5.5,再從5.5升級到5.6,每步都要運行MySQL自動升級(mysql_upgrade)。這將比較有效處理手冊上所說的升級改變。

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.