溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

‘In Place’ 幫助MySQL5.0直接升級至5.7

發(fā)布時間:2020-06-01 16:44:42 來源:網絡 閱讀:273 作者:三月 欄目:數(shù)據(jù)庫

下文主要給大家?guī)怼甀n Place’ 幫助MySQL5.0直接升級至5.7,希望這些內容能夠帶給大家實際用處,這也是我編輯‘In Place’ 幫助MySQL5.0直接升級至5.7這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

'In Place' 升級比'Dump'升級要快,因為你省去了導入數(shù)據(jù)的步驟。這樣節(jié)省了時間,但升級前的備份就更加重要,因為你就是在原始目錄上執(zhí)行升級操作。你使用相同的數(shù)據(jù)文件,你就不能使用一些需要重建數(shù)據(jù)庫才能使用的新功能,比如創(chuàng)建undo tablespaces(在5.6.3版本引入)或將已經存在的表改到獨立表空間中(innodb_file_per_table 在5.6.6開始支持)。

我使用如下步驟進行升級:

  1. 啟動5.0.96版本實例,導入sakila schema數(shù)據(jù)。為了簡單,使用 --no-defaults。

    $ cd <mysql 5.0.96 basedir>
    $ ./scripts/mysql_install_db --no-defaults --datadir=<DATADIR> --basedir=.
    $ ./bin/mysqld_safe --no-defaults --datadir=<DATADIR> --basedir=. --port=<PORT> --socket=<SOCKET> &
    $ ./bin/mysql -uroot --socket=<SOCKET> --execute="create database sakila;"
    $ ./bin/mysql -uroot --socket=<SOCKET> --execute="source sakila-schema.sql" --database=sakila
    $ ./bin/mysql -uroot --socket=<SOCKET> --execute="source sakila-data.sql" --database=sakila
  2. 關閉數(shù)據(jù)庫服務。這是你備份數(shù)據(jù)庫的好時間。然后,進入新版本MySQL的文件夾,啟動數(shù)據(jù)庫。使用相同的數(shù)據(jù)目錄,所以你的所有數(shù)據(jù)都在<DATADIR>中

    $ cd <mysql 5.0.96 basedir>
    $ ./bin/mysqladmin -uroot --socket=<SOCKET> shutdown
    $ cd <mysql 5.7.9 basedir>
    $ ./bin/mysqld_safe --no-defaults --datadir=<DATADIR> --basedir=. 
    --port=< PORT> --socket=<SOCKET>  --skip-grant-tables  &

    請注意,當?shù)谝淮螁?.7版本數(shù)據(jù)庫時,必須使用 --skip-grant-tables。

  3. 運行 mysql_upgrade。這樣會升級所有的系統(tǒng)表和檢查用戶庫。

    $ ./bin/mysql_upgrade -uroot --socket=<SOCKET>
  4. 導入幫助表(可選)

    $ ./bin/mysql -uroot --socket=<SOCKET> --execute="source ./share/fill_help_tables.sql" mysql
  5. 重啟MySQL服務

    $ ./bin/mysqladmin -uroot --socket=<SOCKET> shutdown
    $ ./bin/mysqld_safe --no-defaults --datadir=<DATADIR> --basedir=. 
    --port=<PORT> --socket=<SOCKET> &
  6. 運行mysqlcheck檢查數(shù)據(jù)庫狀態(tài)

    $ ./bin/mysqlcheck -uroot --socket=<SOCKET> --all-databases

如果從5.0.96升級,這種升級方法可能需要重建一些表或觸發(fā)器。在本文使用的sakila 條件下,我收到了下面的警告信息:

Warning  : Triggers for table `sakila`.`customer` have no creation context
Warning  : Triggers for table `sakila`.`film` have no creation context
Warning  : Triggers for table `sakila`.`payment` have no creation context
Warning  : Triggers for table `sakila`.`rental` have no creation context

由于觸發(fā)器存儲的元數(shù)據(jù)的更改,需要重載。我使用下面的步驟重建觸發(fā)器:

  1. 使用mysqldump導出觸發(fā)器

    $ ./bin/mysqldump --socket=<SOCKET> -uroot --triggers --no-create-db --no-data --no-create-info --all-databases > addtriggers.sql
  2. 生成一個sql去刪掉存在的觸發(fā)器。排除sys庫,因為上面的mysqldump不會導出sys庫中的觸發(fā)器。

    mysql> SELECT CONCAT('DROP TRIGGER ', TRIGGER_SCHEMA, '.', 
                     TRIGGER_NAME, ';')
              FROM INFORMATION_SCHEMA.TRIGGERS
              WHERE trigger_schema not in ('sys') 
              INTO OUTFILE 'droptriggers.sql';
  3. 刪掉存在的觸發(fā)器

    $ ./bin/mysql --socket=<SOCKET> -uroot --execute="source droptriggers.sql"
  4. 重載觸發(fā)器

    $ ./bin/mysql --socket=<SOCKET> -uroot --execute="source addtriggers.sql"
  5. 運行mysqlcheck

    $ ./bin/mysqlcheck -uroot --socket=<SOCKET> --all-databases

使用上面的步驟從5.0.96、5.1.73、5.5.46和5.6.27 升級到5.7.9,均是成功的。使用mysqlcheck,統(tǒng)計所有庫的表、列和程序的數(shù)量,運行基礎的select/insert/update/delete 語句并執(zhí)行、調用用戶函數(shù)和存儲過程來進行驗證。

(注:在這篇文章寫的時候,還不支持5.5到5.7版本的復制,在5.7.13版本時,修復了該bug)

對于以上關于‘In Place’ 幫助MySQL5.0直接升級至5.7,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續(xù)關注我們的行業(yè)資訊,相信你會喜歡上這些內容的。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI