オンラインマニュアルの手順をベースにMySQLのアップデート手順を確認し、実際にyumを使ってアップデートを行いました。アップデートの手順、注意点をまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
・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)
・すべてのデータベースをダンプに含めるには、–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
●エラーのコメント
# 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