Yakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。
26日前投稿

MySQL5.7からMySQL8.0へのインプレースアップグレード

MySQL5.7からMySQL8.0にインプレースでアップグレードする方法を解説した記事。

原文
INPLACE upgrade from MySQL 5.7 to MySQL 8.0 | MySQL Server Blog (English)
原文公開日
2018-06-08
翻訳依頼者
C17de91fbad737faaa06173533ed323d D98ee74ffe0fafbdc83b23907dda3665
翻訳者
C17de91fbad737faaa06173533ed323d kakuka4430
翻訳レビュアー
D98ee74ffe0fafbdc83b23907dda3665 doublemarket
原著者への翻訳報告
未報告


免責事項

この記事はMySQL Server Blogの投稿 INPLACE upgrade from MySQL 5.7 to MySQL 8.0 をユーザが翻訳したものであり、Oracle公式の文書ではありません。

==============================

MySQL 8.0のGA版が4月に発表され、多くの新機能が実装されました。新機能の概要やMySQL8.0での改良点については、こちらの記事で確認できます。

MySQLサーバはINPLACEとLOGICAL、両方のアップグレード方式が使えます。INPLACEアップグレードは、MySQL5.7サーバを停止し、古いバイナリをMySQL8.0のものに置き換えた後に、古いデータディレクトリをそのまま使用してMySQL8.0サーバを立ち上げる方法です。LOGICALアップグレードは、mysqldumpmysqlpumpといったバックアップツールを使用してMySQL5.7からデータをSQLを出力し、インストールしたMySQL8.0に対してインポートする方法です。

MySQL8.0のインストール後にデータをロードする必要がないため、LOGICALアップグレードよりもINPLACEアップグレードの方が高速です。また、LOGICALアップグレードのデータロード中には非互換性に起因したエラーが発生する可能性もあり、その場合出力したSQLファイルを修正する必要があります。

本記事では、MySQL8.0にINPLACEアップグレードするための簡単な手順を説明します。

1. MySQL8.0にアップグレードする最初のステップは、既存のMySQL5.7サーバに対してアップグレードの準備が整っているかチェックすることです。私たちは、この作業がユーザにとって簡単になるよう、MySQL Shell 8.0に付属する形で"Upgrade Checker"を導入しました。この記事では、ツールの実行してアップグレード前にするべき作業があるかどうかを確認する方法について簡単に説明しています。早速、MySQL8.0へのアップグレードをする前に稼働中のMySQL5.7に対してこのツールを実行してみましょう。

npgopala@siv20$ ./mysqlsh root:@localhost:3307 -e "util.checkForServerUpgrade();"
mysqlsh: [Warning] Using a password on the command line interface can be insecure.
The MySQL server at localhost:3307 will now be checked for compatibility issues for upgrade to MySQL 8.0...
MySQL version: 5.7.24 - Source distribution

1) Usage of db objects with names conflicting with reserved keywords in 8.0
  No issues found

2) Usage of utf8mb3 charset
  No issues found

3) Usage of use ZEROFILL/display length type attributes
  No issues found

4) Issues reported by 'check table x for upgrade' command
  No issues found

5) Table names in the mysql schema conflicting with new tables in 8.0
  No issues found

6) Usage of old temporal type
  No issues found

7) Foreign key constraint names longer than 64 characters
  No issues found

No known compatibility errors or issues for upgrading the target server to MySQL 8 were found.
npgopala@siv20$

ツールは修正しなければいけないエラーを出力しませんでした。そのため、古いバイナリを置き換える次のステップに進むことができます。

2. ここで、mysqldumpもしくはmysqlpump のようなバックアップツールを使って、データのバックアップを取得してください。mysqlのシステムデータやログファイルを含んだバックアップを取っておくことで、あなたのデータを守ることはとても大事なことです。

3. MySQL8.0のバイナリはこちらからダウンロードできます。そして、MySQL8.0サーバは古いデータディレクトリを使ってそのまま起動できます。私は以下のようなデフォルト設定で起動しました。

npgopala@siv20:~/workspace1/mysql-trunk/dbg-8.0$ ./runtime_output_directory/mysqld --basedir=/home/npgopala/workspace1/mysql-trunk/dbg-8.0 --datadir=/home/npgopala/data57 --log-error=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql1.log --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --gdb --user=`whoami` --console --lc-messages-dir=./sql/share

4. サーバが起動したら、全てのシステムテーブル、およびユーザが作成したテーブルをチェック+アップグレードするために mysql_upgrade を実行します。

npgopala@siv20$ ./runtime_output_directory/mysql_upgrade  --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --user=root
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv                                 OK
mysql.component                                    OK
mysql.db                                           OK
mysql.default_roles                                OK
mysql.engine_cost                                  OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.global_grants                                OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.password_history                             OK
mysql.plugin                                       OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.role_edges                                   OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Found outdated sys schema version 1.5.0.
Upgrading the sys schema.
Checking databases.
events.event_table                                 OK
events.event_table_2                               OK
foreign_keys.t1                                    OK
foreign_keys.t2                                    OK
foreign_keys.t3                                    OK
foreign_keys.t4                                    OK
foreign_keys.t5                                    OK
foreign_keys.t6                                    OK
foreign_keys.t7                                    OK
foreign_keys.t8                                    OK
partitions.p5_sub                                  OK
sp.t                                               OK
sys.sys_config                                     OK
tablespace.t1                                      OK
tablespace.t2                                      OK
tablespace.t3                                      OK
tablespace.t4                                      OK
test.55_temporal                                   OK
test.child                                         OK
test.geom                                          OK
test.jemp                                          OK
test.jemp_myisam                                   OK
test.opening_lines                                 OK
test.parent                                        OK
test.t_blackhole                                   OK
test.t_blob                                        OK
test.t_blob_myisam                                 OK
test.t_compressed                                  OK
test.t_compressed2                                 OK
test.t_compressed3                                 OK
test.t_dynamic                                     OK
test.t_gen_stored                                  OK
test.t_gen_stored_myisam                           OK
test.t_gen_stored_myisam2                          OK
test.t_index                                       OK
test.t_json                                        OK
test.t_myisam_compressed                           OK
test.t_sc~!@#$%^&*(                                OK
test.vt2                                           OK
triggers.t1                                        OK
triggers.t2                                        OK
view_with_column_names.t1                          OK
Upgrade process completed successfully.
Checking if update is needed.
npgopala@siv20$ 

システムテーブルはアップグレードされ、ユーザが作成したテーブルのチェックも完了しました。

5. mysqlクライアントで接続し、既存のデータが全て残っていることを確認してみましょう

npgopala@siv20$ ./runtime_output_directory/mysql --socket=/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock --port=3307 --user=root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.12 Source distribution

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| events                 |
| foreign_keys           |
| information_schema     |
| mysql                  |
| partitions             |
| performance_schema     |
| sp                     |
| sys                    |
| tablespace             |
| test                   |
| triggers               |
| view_with_column_names |
+------------------------+
12 rows in set (0.00 sec)

mysql> 

6. サーバを停止し、もう一度起動してみます。ログに何もエラーが出力されていないことを確認しましょう。

2018-06-06T09:11:28.167169Z 0 [System] [MY-010116] [Server] /home/npgopala/workspace1/mysql-trunk/dbg-8.0/runtime_output_directory/mysqld (mysqld 8.0.12) starting as process 27147
2018-06-06T09:11:30.261139Z 0 [System] [MY-010931] [Server] /home/npgopala/workspace1/mysql-trunk/dbg-8.0/runtime_output_directory/mysqld: ready for connections. Version: '8.0.12'  socket: '/home/npgopala/workspace1/mysql-trunk/dbg-8.0/mysql.sock'  port: 3307  Source distribution

以上でINPLACEアップグレードは完了です。もし何かしらのエラーでアップグレードが失敗したら、MySQLサーバはデータディレクトリに対する全ての変更を巻き戻します。再度アップグレードを実施する場合は、以下のようにしてください。

  • もしデータディレクトリ内にredoログがある場合は、それらを全て削除する
  • 同じデータディレクトリを使用してMySQL5.7を起動する
  • アップグレード中に出力されたエラーを全て解消する
  • 再度INPLACEアップグレードを実施する

次回の私の記事では、MySQL8.0へのアップグレード中に起こりうるエラーに関して述べたいと思います。MySQL8.0にアップグレードする前には、アップグレードの前提条件アップグレードによる影響のページを確認してください。

アップグレードに関する詳細な説明は、MySQLドキュメントで確認ができます。 MySQLを使って頂き、ありがとうございます!

次の記事
MySQLがメモリー不足の時に何をするか : トラブルシューティングガイド
前の記事
VACUUMがdead rowsを削除しない3つの理由(Cybertec Blogより)

Feed small 記事フィード