MySQL 'In Place' 升級實踐,從5.1到5.7

來源:互聯網
上載者:User

標籤:升級   mysql   in place   5.1-5.7   

接上篇翻譯的文章:使用‘In place‘ 方法直接從5.0升級至5.7,在此記錄我實踐的過程。

1、環境準備

    資料庫A

    版本:5.1

    字元集:latin1

    引擎:MyISAM

    資料庫量:約220G

    表資料量:約600

    伺服器:centos6.5

2、升級過程

已經搭建好5.1版本資料的從庫,等主從同步之後,開始升級從庫

  • 在第一次升級時遇到問題,執行mysql_upgrade顯示表損壞。

         我們在升級前,首先檢查並修複表(MyISAM引擎)。     

 ./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p -r  -A
  • 停主從,記錄當前位置點         

stop slave;show slave status;

          記錄下當前的位置點,並在設定檔中配置主從不隨資料庫啟動

          650) this.width=650;" src="https://s2.51cto.com/wyfs02/M01/98/49/wKioL1k5eySBGGVYAAA_w1ir-Gk031.png-wh_500x0-wm_3-wmp_4-s_2944313875.png" title="13267474-ba54-4bcb-87b5-f6184041b9c4.png" alt="wKioL1k5eySBGGVYAAA_w1ir-Gk031.png-wh_50" />

  • 關閉5.1版本資料庫

          650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/98/49/wKioL1k5ezCA7OQFAAAWRCrQagA480.png-wh_500x0-wm_3-wmp_4-s_1836053518.png" title="26359a4c-c297-4978-8c71-a6a591fa566a.png" alt="wKioL1k5ezCA7OQFAAAWRCrQagA480.png-wh_50" />        

/etc/init.d/mysqld stop orcd /usr/local/mysql51./bin/mysqladmin -uroot --socket=/var/lib/mysql.sock -p‘<PASSWORD>‘ shutdown
  • 修改5.7版本設定檔(具體哪些參數發生了變化,請閱讀文檔,upgrading to 5.1, upgrading to 5.5, upgrading to 5.6 or upgrading to 5.7。

      我注釋掉了以下幾項:    

<InnoDB相關,注釋掉undo有關的配置,因為undo檔案只能在初始化時建立,也可將innodb_undo_tablespaces設定為0,為了方便,將會有問題的配置注釋,使用預設配置>#innodb_data_file_path          = ibdata1:1024M:autoextend#innodb_file_per_table          = 1 #innodb_undo_directory          = <DATADIR>#innodb_undo_logs             = 128  #innodb_undo_tablespaces         = 3   #innodb_undo_log_truncate        = 1#innodb_max_undo_log_size        = 1G複製相關#gtid_mode                  = on#enforce_gtid_consistency        = true#master_info_repository         = TABLE#relay_log_info_repository       = TABLE#slave_parallel_workers         = 2<修改以適應5.1版本>binlog_checksum               = NONEsql_mode                   =‘NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION‘
  • 設定檔修改完成後,進入5.7版本檔案夾,開啟資料庫,注意使用--skip-grant-tables

       

cd  /usr/local/mysql57./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=.  --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &
  • NOTE:如果沒有問題則啟動完成,我遇到的問題是, mysqld_safe 需要在檔案夾(/usr/local/mysql57 )內執行

  • 運行mysql_upgrade     

./bin/mysql_upgrade -uroot --socket=/var/lib/mysql.sock
  • 簡單說一下升級的過程,mysql_upgrade首先檢查系統庫並修複,檢查並安裝sys庫,performance庫。但並沒有移除5.1預設的test庫。然後開始檢查業務庫,修複不相容的列。我在測試中主要碰到的提示為:       

Note     : TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format.

      upgrade 修複該問題的sql為:

ALTER TABLE `<DB>`.`<TABLE>`  FORCE

      由於5.6.6後修改了TIME/TIMESTAMP/DATETIME的一些行為,因此需要進行升級,關於具體哪些變化請移步官檔

      碰到的錯誤

        1. 存在損壞的表,無法升級。升級前需要先repair table,注意應使用5.1版本

        2. 表不支援升級  

Error: Unable to open underlying table which is differently defined        or of non-MyISAM type or doesn‘t exist檢查報錯的表引擎為MRG-MYISAM。需要手動重新建立,去主庫匯出建表語句,先刪掉5.7的表,再執行建立表語句即可
  • 重啟資料庫

          運行過mysql_upgrade 之後,再次登入就要求輸入密碼了。      

./bin/mysqladmin -uroot -h<HOST> -P<PORT> -p  shutdown./bin/mysqld_safe --defaults-file=../my.cnf --datadir=<DATADIR> --basedir=.  --port=< PORT> --socket=/var/lib/mysql.sock --skip-grant-tables &

          650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/98/49/wKioL1k5e02R6d2yAAAp42Sp1Mk740.png-wh_500x0-wm_3-wmp_4-s_549106543.png" title="baa29b7e-52cc-451e-982f-ed5b465983a2.png" alt="wKioL1k5e02R6d2yAAAp42Sp1Mk740.png-wh_50" />

  • 再次檢查        

./bin/mysqlcheck -uroot -h<HOST> -P<PORT> -p  -A

           使用的資料庫未使用觸發器,預存程序等,因為在這步就沒有報錯了。如果有使用,可以根據提示資訊,決定是修複還是重建

          檢查主從是否正常開啟。

          650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/98/49/wKiom1k5e17x3wItAABMUAyAfsg017.png-wh_500x0-wm_3-wmp_4-s_4290432077.png" title="8b9f4264-1744-4dbd-b8cc-71e3f5b648b1.png" alt="wKiom1k5e17x3wItAABMUAyAfsg017.png-wh_50" />

          根據報錯資訊,應該為relay log記錄的問題,我們重啟下主從。      

stop slave;start slave;

這時主從已經恢複正常了,尋找網上的解決方案是reset slave,如果重啟不管用的話只能重搭了,還好升級前記錄了位置點。 

  • 現在資料庫已經能夠提供使用了,整個過程中  check 消耗大約1小時,upgrade 消耗了4小時左右。之後將與‘dump’升級方式進行對比。後面還需要一些資料檢查的工作,由於對資料內容不瞭解,就沒有繼續進行。    

                                                      

本文出自 “Amnesiasun” 部落格,請務必保留此出處http://amnesiasun.blog.51cto.com/10965283/1933652

MySQL 'In Place' 升級實踐,從5.1到5.7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.