MySQL アップグレードのベストプラクティス

MySQL アップグレードのベストプラクティス

MySQL 5.7 には、オンライン DDL、マルチソース レプリケーション、拡張された半同期、テーブルスペース転送、sys ライブラリ、グループ レプリケーションなど、多くの新機能が追加されています。最近、ようやく MySQL を 5.7 にアップグレードする機会があり、とても興奮しています。

MySQL アップグレードの概要

MySQL アップグレードの本質:

データ辞書のアップグレード

データ辞書は、mysql、information_schema、performance_schema、sys schema です。

MySQL をアップグレードするには 2 つの方法があります。

インプレースアップグレード:

マイナーバージョンのアップグレードに適しています。

つまり、現在の MySQL をシャットダウンし、現在のバイナリ ファイルまたはパッケージを置き換え、既存のデータ ディレクトリで MySQL を再起動して、mysql_upgrade を実行します。

機能: データ ファイルに変更はなく、アップグレード速度は高速です。ただし、オペレーティング システム間やメジャー バージョン間 (5.5 -> 5.7) は移行できません。

論理アップグレード:

異なるオペレーティング システム上の MySQL のアップグレードやメジャー バージョン間のアップグレードに適しています。

つまり、mysqldump または mydumper を使用してデータをインポートおよびエクスポートし、バージョン アップグレードを実現します。

特徴: オペレーティングシステムやメジャーバージョンを超えて使用できますが、アップグレード速度が遅く、文字化けなどの問題が発生しやすくなります。

アップグレード前の準備:

事前にバックアップを作成してください。

新しいバージョンの変更点(互換性がなくなったもの、サポートされなくなった機能)について学習します

公式サイトの一般情報 -> MySQL 5.7の新機能

アップグレードに関する注意事項:

新しいバージョンに大きな変更がないか確認する

SQLモードの変更に注意してください

たとえば、MySQL 5.7 では SQL モードが変更されました。サポートされなくなった SQL モードでは、一部の SQL ステートメントが機能しなくなります。この場合、SQL モードをクリアし、操作が完了した後に SQL モードを設定することができます。

アップグレードが成功したら、ビジネスSQLがスムーズに実行できるかどうかを確認します。

プログラム層は正常ですか?

場合によっては、元のプログラミング言語の一部が、データベースの新しいバージョンでサポートされないことがあります。たとえば、以前は PHP 5.1 で PHP4.0 を使用していましたが、5.6 にアップグレードすると、一部の PHP 関数がサポートされなくなりました。

アップグレードが完了したら、必ずオンライン版と同じプログラムを使用してテストし、問題がないか確認してください。

ストレージエンジンの変更

たとえば、将来のバージョン 5.8 では、myisam エンジンはサポートされなくなります。

文字化けした文字セットの問題に注意する

次に、インプレース アップグレード方式を使用して、MySQL 5.6 を MySQL 5.7 にアップグレードします。

インプレースアップグレード

環境:

5.6.15 —>5.7.20

アップグレード前の準備:

バックアップ + 新バージョンの変更点に注意してアップグレード操作を実行してください。

1. 5.7ソフトウェアパッケージをダウンロードして解凍します

# tar -xzvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
# ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7

2. 現在のMySQL(5.6)を閉じます。

# mysql -u root -p -S /data/mysql3308/mysql3308.sock --execute="SET GLOBAL innodb_fast_shutdown=0"
# mysqladmin -u root -p -S /data/mysql3308/mysql3308.sock シャットダウン

3. バイナリ ファイルを置き換える (5.7 は 5.6 を置き換えます)

# cd /usr/local
# mysql5.6 をアップグレードしてください
# mv mysql5.7 mysql

4. 既存のデータディレクトリを使用してMySQLを起動する

# mysqld_safe --user=mysql --socket=/data/mysql3308/mysql3308.sock -p --skip-grant-tables --datadir=/data/mysql3308/data

5. すべてのテーブルが現在のバージョンと互換性があるかどうかを確認し、システムライブラリを更新します。

# mysql_upgrade -uroot -p -S /data/mysql3308/mysql3308.sock
注: mysql_upgrade の機能は、すべてのライブラリ内のすべてのテーブルが現在の新しいバージョンと互換性があるかどうかを確認し、システム ライブラリを更新することです。

6. システムテーブルに加えられた変更が有効になるように再起動します。

# mysqld --defaults-file=/data/mysql3308/my3308.cnf &
# mysql -uroot -p -S /data/mysql3308/mysql3308.sock

この時点でアップグレードは完了です。

質問: MySQL のアップグレードが失敗した場合はどうすればよいですか?

アップグレードする場合、通常はアップグレード用のスレーブ ライブラリが作成されます。アップグレードが失敗しても、マスター ライブラリには影響しません。アップグレードが成功し、テストも成功した場合、他のスレーブ ライブラリも徐々に新しいバージョンにアップグレードされます。最後に、マスター ライブラリがオフラインになり、スレーブ ライブラリが新しいマスター ライブラリに昇格され、古いマスター ライブラリがアップグレードされます。

以下もご興味があるかもしれません:
  • MySQL 5.7.30 のインストールとアップグレードの問題に関する詳細なチュートリアル
  • MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する
  • phpstudy2018 MySQL 5.5 から 5.7 へのアップグレードに関するチュートリアル (画像とテキスト付き)
  • CentOS 7 で MySQL 5.7.23 をアップグレードする際の落とし穴と解決策
  • MySQL 5.7 にアップグレードした後に開発者が注意しなければならない落とし穴
  • phpStudy で MySQL バージョンを 5.7.17 にアップグレードする方法
  • Windows で MySQL 5.6 を 5.7 にアップグレードする方法
  • Windows (x86、64 ビット) で MySQL 5.7.17 無料インストール バージョンをアップグレードするための詳細なチュートリアル
  • MySQL データベースのアップグレードにおけるいくつかの「落とし穴」

<<:  Linux Tensorflow2.0のインストール問題を解決する

>>:  Node.js コード実行をバイパスするためのヒントのまとめ

推薦する

Windows に MySQL をインストールする方法のグラフィック チュートリアル

概要: この記事では主に、Windows 環境に MySQL をインストールする方法について説明しま...

Nodeはkoa2を使用してシンプルなJWT認証方式を実装します

JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...

データベースの削除から逃走までの MySQL の徹底分析_上級編 (I) - データ整合性

1. データ整合性の概要1. データ整合性の概要データの冗長性とは、データベース内に重複したデータが...

JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つ...

MySQL の一般的なツール例の概要 (推奨)

序文この記事では主にMySQLでよく使われるツールに関する関連コンテンツを紹介し、皆さんの参考と学習...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

ApacheのDjangoオンライン展開方法

環境: 1. Windows Server 2016 Datacenter 64 ビット 2. SQ...

MySQL 8.0 再帰クエリの簡単な使用例

序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...

CSS3 境界効果

CSSとは# CSS (Cascading Style Sheets の略) は、「カスケーディング...

React.cloneElement の使い方の詳しい説明

目次cloneElementの役割使用シナリオ新しい小道具を追加するプロップを変更するイベントカスタ...

MySQLテーブルを削除する方法

MySQL でテーブルを削除するのは非常に簡単ですが、削除コマンドを実行するとすべてのデータが消えて...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

RoughViz を使用して Vue.js でスケッチされたチャートを視覚化する方法

導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...

MySQLはJSON内部フィールドを抽出し、数値としてダンプします

目次背景問題分析1. 属性値はJson形式であり、Json操作関数を使用して処理する必要があります。...