您好,登錄后才能下訂單哦!
下文主要給大家?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開始支持)。
我使用如下步驟進行升級:
啟動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
關閉數(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。
運行 mysql_upgrade。這樣會升級所有的系統(tǒng)表和檢查用戶庫。
$ ./bin/mysql_upgrade -uroot --socket=<SOCKET>
導入幫助表(可選)
$ ./bin/mysql -uroot --socket=<SOCKET> --execute="source ./share/fill_help_tables.sql" mysql
重啟MySQL服務
$ ./bin/mysqladmin -uroot --socket=<SOCKET> shutdown $ ./bin/mysqld_safe --no-defaults --datadir=<DATADIR> --basedir=. --port=<PORT> --socket=<SOCKET> &
運行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ā)器:
使用mysqldump導出觸發(fā)器
$ ./bin/mysqldump --socket=<SOCKET> -uroot --triggers --no-create-db --no-data --no-create-info --all-databases > addtriggers.sql
生成一個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';
刪掉存在的觸發(fā)器
$ ./bin/mysql --socket=<SOCKET> -uroot --execute="source droptriggers.sql"
重載觸發(fā)器
$ ./bin/mysql --socket=<SOCKET> -uroot --execute="source addtriggers.sql"
運行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è)資訊,相信你會喜歡上這些內容的。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。