VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

CentOS6.10でMySQL5.7からMySQL8へアップデートする手順、注意点

オンラインマニュアルの手順をベースにMySQLのアップデート手順を確認し、実際にyumを使ってアップデートを行いました。アップデートの手順、注意点をまとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

アップグレード時の注意点
・MySQL5.7から8.0へのアップグレードはサポートされているが、5.6以前から5.7をスキップして直接8.0へとアップグレードすることはサポートされていない。
 
・MySQL8.0からMySQL5.7へのダウングレードは、サポートされていない。
→アップグレード前のバックアップを使ってリストアする必要がある。
アップグレード前の事前確認作業
※参考資料
MySQL :: MySQL 8.0 Reference Manual :: 2.10.5 Preparing Your Installation for Upgrade
 
●mysqlcheckコマンドで既存環境をチェック
実行例)
# mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
dbwalk.eng_webana                                  OK
dbwalk.grid_products                               OK
dbwalk.markers                                     OK
dbwalk.stations                                    OK
  :
  :

 
●既存環境のパーティショニングの確認
実行例)

mysql> SELECT TABLE_SCHEMA, TABLE_NAME
    -> FROM INFORMATION_SCHEMA.TABLES
    -> WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
    -> AND CREATE_OPTIONS LIKE '%partitioned%';
Empty set (0.05 sec)

 
●8.0のデータディクショナリで使用されているテーブル名が既存で使用されていないかチェック
実行例)

mysql> SELECT TABLE_SCHEMA, TABLE_NAME
    -> FROM INFORMATION_SCHEMA.TABLES
    -> WHERE LOWER(TABLE_SCHEMA) = 'mysql'
    -> and LOWER(TABLE_NAME) IN
    -> (
    -> 'catalogs',
    -> 'character_sets',
    -> 'check_constraints',
    -> 'collations',
    -> 'column_statistics',
    -> 'column_type_elements',
    -> 'columns',
    -> 'dd_properties',
    -> 'events',
    -> 'foreign_key_column_usage',
    -> 'foreign_keys',
    -> 'index_column_usage',
    -> 'index_partitions',
    -> 'index_stats',
    -> 'indexes',
    -> 'parameter_type_elements',
    -> 'parameters',
    -> 'resource_groups',
    -> 'routines',
    -> 'schemata',
    -> 'st_spatial_reference_systems',
    -> 'table_partition_values',
    -> 'table_partitions',
    -> 'table_stats',
    -> 'tables',
    -> 'tablespace_files',
    -> 'tablespaces',
    -> 'triggers',
    -> 'view_routine_usage',
    -> 'view_table_usage'
    -> );
Empty set (0.01 sec)

 
●64文字以上の外部キー制約名が使用されていないかチェック
実行例)

mysql> SELECT TABLE_SCHEMA, TABLE_NAME
    -> FROM INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_NAME IN
    ->   (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
    ->                INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
    ->    FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
    ->    WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
Empty set (0.02 sec)

 
●InnoDBテーブルスペースにパーティションテーブルがないかチェック
実行例)

mysql> SELECT DISTINCT NAME, SPACE, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
    ->   WHERE NAME LIKE '%#P#%' AND SPACE_TYPE NOT LIKE 'Single';
Empty set (0.01 sec)

 
●”lower_case_table_names”サーバーシステム変数に関するチェック
実行例)

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != LOWER(TABLE_NAME) AND TABLE_TYPE = 'BASE TABLE';
Empty set (0.01 sec)

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != LOWER(TABLE_NAME) AND TABLE_TYPE = 'BASE TABLE';
Empty set (0.00 sec)
アップグレード手順
1)データベースのバックアップ
 
・すべてのデータベースをダンプに含めるには、–all-databases オプションを使用する。
例)
mysqldump -u root -p –add-drop-table –all-databases –force > data-for-upgrade_5.7.sql
 
2)Yumリポジトリの設定
 
①現状の各MySQLリリースシリーズの有効・無効を確認
実行例)
# yum repolist all | grep mysql
mysql-cluster-7.5-community        MySQL Cluster 7.5 Community   disabled
mysql-cluster-7.5-community-source MySQL Cluster 7.5 Community - disabled
mysql-cluster-7.6-community        MySQL Cluster 7.6 Community   disabled
mysql-cluster-7.6-community-source MySQL Cluster 7.6 Community - disabled
mysql-connectors-community         MySQL Connectors Community    enabled:    185
mysql-connectors-community-source  MySQL Connectors Community -  disabled
mysql-tools-community              MySQL Tools Community         enabled:    111
mysql-tools-community-source       MySQL Tools Community - Sourc disabled
mysql-tools-preview                MySQL Tools Preview           disabled
mysql-tools-preview-source         MySQL Tools Preview - Source  disabled
mysql55-community                  MySQL 5.5 Community Server    disabled
mysql55-community-source           MySQL 5.5 Community Server -  disabled
mysql56-community                  MySQL 5.6 Community Server    disabled
mysql56-community-source           MySQL 5.6 Community Server -  disabled
mysql57-community                  MySQL 5.7 Community Server    enabled:    504
mysql57-community-source           MySQL 5.7 Community Server -  disabled
mysql80-community                  MySQL 8.0 Community Server    disabled
mysql80-community-source           MySQL 8.0 Community Server -  disabled

 
②利用するリリースシリーズのリポジトリを有効にする
 
アップデート対象のリリースシリーズが有効になっていたら、そのリリースを無効にして、対象リリースを有効にする。
 
5.7を無効にし、8.0を有効にする
# yum-config-manager –disable mysql57-community
# yum-config-manager –enable mysql80-community
 
3)MySQLのアップグレード
 
①アップグレード、エラー発生
実行例)

# yum update mysql-community-server mysql-community-devel mysql-libs mysql-community-libs-compat

YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base

 
②エラー回避の対応

# echo "https://vault.centos.org/6.10/os/x86_64/" > /var/cache/yum/x86_64/6/base/mirrorlist.txt
# echo "https://vault.centos.org/6.10/extras/x86_64/" > /var/cache/yum/x86_64/6/extras/mirrorlist.txt
# echo "https://vault.centos.org/6.10/updates/x86_64/" > /var/cache/yum/x86_64/6/updates/mirrorlist.txt

 
③再度、アップデート実行
実行例)

# yum update mysql-community-server mysql-community-devel mysql-libs mysql-community-libs-compat

Dependencies Resolved

================================================================================================================
 Package                                 Arch            Version               Repository                  Size
================================================================================================================
Updating:
 mysql-community-devel                   x86_64          8.0.27-1.el6          mysql80-community           14 M
 mysql-community-libs                    x86_64          8.0.27-1.el6          mysql80-community          6.8 M
 mysql-community-libs-compat             x86_64          8.0.27-1.el6          mysql80-community          1.7 M
 mysql-community-server                  x86_64          8.0.27-1.el6          mysql80-community          739 M
Installing for dependencies:
 mysql-community-client-plugins          x86_64          8.0.27-1.el6          mysql80-community          8.1 M
Updating for dependencies:
 mysql-community-client                  x86_64          8.0.27-1.el6          mysql80-community           79 M
 mysql-community-common                  x86_64          8.0.27-1.el6          mysql80-community          832 k

Transaction Summary
================================================================================================================
Install       1 Package(s)
Upgrade       6 Package(s)

Total size: 850 M
Is this ok [y/N]: y
 :
 :
Dependency Installed:
  mysql-community-client-plugins.x86_64 0:8.0.27-1.el6

Updated:
  mysql-community-devel.x86_64 0:8.0.27-1.el6               mysql-community-libs.x86_64 0:8.0.27-1.el6
  mysql-community-libs-compat.x86_64 0:8.0.27-1.el6         mysql-community-server.x86_64 0:8.0.27-1.el6

Dependency Updated:
  mysql-community-client.x86_64 0:8.0.27-1.el6           mysql-community-common.x86_64 0:8.0.27-1.el6

Complete!

 
4)MySQLの再起動
 
# service mysqld restart

8.0.28版以降にアップグレードする際の注意点
1)アップグレード時にGnuPGビルドキーのエラーが発生
 
●エラーのコメント
# yum update mysql-community-server mysql-community-devel mysql-libs mysql-community-libs-compat
  :
The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

 
●エラーの原因
・MySQLのダウンロード可能なパッケージの署名に使用されるGnuPGビルドキーが更新され、以前のGnuPGビルドキーは期限切れになっているため。
 
MySQL Bugs: #106188: The MySQL GPG key seems to be incorrect
 
2)対応方法
 
新しいGnuPGビルドキーをインポートする。
 
①最新のGnuPGビルドキーのURLを確認する
URL:https://repo.mysql.com/
 
②GnuPGビルドキーをインポート
例)
rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
 
MySQL :: A Quick Guide to Using the MySQL Yum Repository
 
3)実行例
 
①既存のパッケージを確認
# rpm -qa | grep mysql
mysql-community-client-8.0.27-1.el6.x86_64
php-mysqlnd-7.3.25-1.el6.remi.x86_64
mysql57-community-release-el6-11.noarch
mysql-community-common-8.0.27-1.el6.x86_64
mysql-community-client-plugins-8.0.27-1.el6.x86_64
mysql-community-libs-compat-8.0.27-1.el6.x86_64
mysql-community-libs-8.0.27-1.el6.x86_64
mysql-community-devel-8.0.27-1.el6.x86_64
mysql-community-server-8.0.27-1.el6.x86_64
 
②GnuPGビルドキーをインポート
# rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
 
③アップデート実行

# yum update mysql-community-server mysql-community-devel mysql-libs mysql-community-libs-compat
 :
 :
================================================================================
 Package                         Arch    Version       Repository          Size
================================================================================
Updating:
 mysql-community-devel           x86_64  8.0.36-1.el6  mysql80-community  2.0 M
 mysql-community-libs            x86_64  8.0.36-1.el6  mysql80-community  1.6 M
 mysql-community-libs-compat     x86_64  8.0.36-1.el6  mysql80-community  1.1 M
 mysql-community-server          x86_64  8.0.36-1.el6  mysql80-community   67 M
Installing for dependencies:
 mysql-community-icu-data-files  x86_64  8.0.36-1.el6  mysql80-community  2.2 M
Updating for dependencies:
 mysql-community-client          x86_64  8.0.36-1.el6  mysql80-community   17 M
 mysql-community-client-plugins  x86_64  8.0.36-1.el6  mysql80-community  3.8 M
 mysql-community-common          x86_64  8.0.36-1.el6  mysql80-community  897 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       7 Package(s)
  :
  :
Dependency Installed:
  mysql-community-icu-data-files.x86_64 0:8.0.36-1.el6

Updated:
  mysql-community-devel.x86_64 0:8.0.36-1.el6
  mysql-community-libs.x86_64 0:8.0.36-1.el6
  mysql-community-libs-compat.x86_64 0:8.0.36-1.el6
  mysql-community-server.x86_64 0:8.0.36-1.el6

Dependency Updated:
  mysql-community-client.x86_64 0:8.0.36-1.el6
  mysql-community-client-plugins.x86_64 0:8.0.36-1.el6
  mysql-community-common.x86_64 0:8.0.36-1.el6

Complete!

 
④アップデート後のパッケージ確認
# rpm -qa | grep mysql
php-mysqlnd-7.3.25-1.el6.remi.x86_64
mysql-community-client-plugins-8.0.36-1.el6.x86_64
mysql57-community-release-el6-11.noarch
mysql-community-server-8.0.36-1.el6.x86_64
mysql-community-libs-8.0.36-1.el6.x86_64
mysql-community-libs-compat-8.0.36-1.el6.x86_64
mysql-community-client-8.0.36-1.el6.x86_64
mysql-community-devel-8.0.36-1.el6.x86_64
mysql-community-icu-data-files-8.0.36-1.el6.x86_64
mysql-community-common-8.0.36-1.el6.x86_64
 
⑤MySQLの再起動
# service mysqld restart

モバイルバージョンを終了