程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 具體講授平安進級MySQL的辦法

具體講授平安進級MySQL的辦法

編輯:MySQL綜合教程

具體講授平安進級MySQL的辦法。本站提示廣大學習愛好者:(具體講授平安進級MySQL的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是具體講授平安進級MySQL的辦法正文


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.     直接進級:裝置好新版本數據庫後,應用曾經存在的數據文件夾,同時運轉mysql_upgrade劇本來進級。
  2.     SQL 導出: 從一個較老版本的mysql把數據導出,然後恢復到新版本的數據庫中。(應用mysqldump對象)。
  3. 比擬之下,第二種方法更平安些,然則這也會使得進級的進程要慢一些。

    實際上講,最平安的方法是:

    •     導出一切用戶的權限
    •     導出一切數據並恢復到新版本數據庫中
    •     恢復用戶權限到新數據庫中


    上面是根本的操作步調(在開端之前最好停滯有關數據庫操作的運用).

    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)。這將比擬有用處置手冊上所說的進級轉變。

    MySQL的進級預防辦法:

    MySQL的進級預防辦法是進級的一個根本部門。在你進級之前,確保你在新的MySQL版本中完全測試了一切的運用功效。這對主要版本之間的進級尤其主要,對主要版本之間的逾越進級也很主要(例如,從MySQL5.1進級到MySQL5.6)。

    確保你賣力浏覽了刊行解釋,而且你清晰一切轉變。你可以從以下鏈接中獲得Oracle MySQL 5.5和5.6的刊行解釋:

    http://dev.mysql.com/doc/relnotes/mysql/5.5/en/

    http://dev.mysql.com/doc/relnotes/mysql/5.6/en/

    Percona Server有零丁的刊行解釋,按下面說的次序可以參看以下鏈接:

    http://www.percona.com/doc/percona-server/5.5/release-notes/release-notes_index.html
    http://www.percona.com/doc/percona-server/5.6/release-notes/release-notes_index.html

    假如你籌劃進級到 Oracle MySQL 5.6 或許 Percona Server 5.6,我建議你起首檢討以下曾經存在的症結bugs。以下是你須要留意的一些bugs:

    http://bugs.mysql.com/bug.php?id=66546
    http://bugs.mysql.com/bug.php?id=68953
    http://bugs.mysql.com/bug.php?id=69444
    http://bugs.mysql.com/bug.php?id=70922
    http://bugs.mysql.com/bug.php?id=72794
    http://bugs.mysql.com/bug.php?id=73820


    進級的條理構造:

    這也是每次MySQL進級的症結。你須要依據一個進級條理構造來做你的每次進級。建議的順序構造是:起首進級 dev/QA servers,然後進級 staging server,最初進級到 production servers上。現實上,你可以減少進級的措施,一步一步進級到你想要的版本,每步都可以充足地測試本來的運用。

    一旦你對在test servers, staging servers等上運轉的進級覺得滿足後,你便可以在你的production servers長進行進級了。在正本情況下,我建議你先進級MySQL slaves(一個接一個的)最初進級MySQL master。現實上,你可以先進級一個slaves,讓它在平安情況下運轉幾天,同時不雅察細心不雅察它的運轉情形。假如你的辦事器中沒有正本情況的設置,那末照樣值得樹立一個正本情況來測試新版的MySQL的。一旦你對進級成果覺得滿足,你可以進級其他的slaves,最初進級master。

    Percona軟件包贊助你MySQL進級:

    在MySQL進級中,Percona Toolkit 都能贊助你。Percona Toolkit 的一些對象將會起到很年夜的感化。

    pt-upgrade 是個中的一個對象。它使你能測試新版MySQL實例能否可以或許到達像老版本處置一些特定查詢的時刻一樣的速度。新版本能夠有一些實質上的轉變,由於MySQL的查詢優化器從5.1到5.6曾經有了嚴重轉變,還稀有據統計能夠刷新,是以查詢籌劃會轉變。你可以在手冊中看到更多優化器的轉變。

    pt-query-digest 是另外一個能給你極年夜贊助的對象。你可以屢次運轉你的slow query log,以比擬確認在如今的版本和新版本之間的表示差異。

    你也能夠從MySQL的Percona Cloud Tools中取得贊助,這是一個托管辦事,可認為一切MySQL的應用供給查詢機能剖析。如今你可以避免費注冊這個辦事,由於如今這項辦事在停止地下測試。Percona Cloud Tools在很多同類產物中,能讓你可視化的不雅察到每次MySQL進級後的查詢表示。

    再次重申,激烈建議你每次更新MySQL前備份數據。Percona XtraBackup就是一款收費、開源的(就像一切Percona軟件一樣)。這是一個熱備份對象,它許可你在線備份數據而不影響你對數據庫的讀寫操作,並且它備份數據時發生很小的影響。 
    結論:

    一次MySQL進級看起來是個簡略的義務,但現實上並沒有那末簡略。我試圖在這篇文章中最年夜限制籠罩一切有關MySQL進級中你能夠碰到的情形。再次強調,我建議你在運用更新的版本之前,先測試一下你的運用在新版本中的後果。不然,能夠會使你的運用瓦解,或許獲得的不是進步查詢效力而是下降查詢效力。最初,我建議你預備一個升級籌劃或辦法,以防你進級以後湧現弗成預感的毛病。在成績湧現的時刻,有一個計劃好的升級法式將會極年夜的削減你的運用復工期。等待你鄙人面揭橥評論和發問。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved