MySQL 8.0 アップグレード体験

MySQL 8.0 アップグレード体験

序文

最近は Fighting プロジェクトで忙しく、執筆が少し滞ってしまいましたが、これは本当によくありません。

たまたま MySQL5.7.33 から MySQL8.0.x にアップグレードする必要に迫られたので、落とし穴を避けるためにアップグレード プロセス全体を記録しました。

背景の概要: ローカル Docker コンテナで使用される MySQL は 5.7.33 (イメージ システムは Ubuntu 16.04 を使用) ですが、新しいプロジェクトではオンラインで MySQL 8.0 を使用します。オンラインからエクスポートされた SQL ファイル (テーブル構造 + データ) には、下位バージョンの MySQL では使用されない文字エンコードが含まれています。インポートするとエラーが発生します。発生した文字セット エラーは次のとおりです。

 - 不明な照合順序: 'utf8mb4_0900_ai_ci'

しばらく探した後、落ち着いて 2 つのアイデアを思いつきました。1 つは私が自滅的な解決策と呼ぶもので、もう 1 つは過激な解決策です。

名前が示すように、耳をふさぎベルを盗むことは本質的な問題を解決するのではなく、文字セットを一括で置き換えることによって、つまり、ファイル内のすべての utf8mb4_0900_ai_ci を utf8_general_ci に置き換えることによってエラーを解決します。

2 番目の方法は、文字セットをサポートできるように、オンライン MySQL バージョンとの一貫性を保つことです。

そこで、2 番目の方法を使用して、Docker コンテナ内の MySQL をアップグレードし、同時に新しいイメージをパッケージ化しました。

アップグレード プロセスは少し面倒ですが、ロジックは明確です。

1. まず、既存のバージョンの MySQL を完全にアンインストールします。

次のコマンドを使用できます。

#mysqlデータファイルを削除する sudo rm -R /var/lib/mysql/
#mysql設定ファイルを削除する sudo rm -R /etc/mysql/

#mysql を自動的にアンインストールします (サーバーとクライアントを含む)
sudo apt-get autoremove mysql* --purge
sudo apt-get apparmor を削除します

互換性がない可能性があるため、構成ファイルを必ず削除してください。

2. deb をダウンロードし、MySQL 8.x をインストールします。

公式サイト https://dev.mysql.com/repo/apt からダウンロードできます。

最新の deb ダウンロードを選択します。URL は次のとおりです。
https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb を参照してください。次のように、コマンドの後に wget コマンドを使用してダウンロードします。

https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb を実行します。


ダウンロードが完了したら、dpkg コマンドを使用して apt ソースを更新し、インストールします。完全なコマンドは次のとおりです。

dpkg -i mysql-apt-config_0.8.20-1_all.deb
apt-getアップデート
apt-get install -y mysql-server

最後のコマンド実行中に、ルート パスワードといくつかの基本設定を入力するように求められます。その後、インストールを完了できます。

UbuntuにはMySQLがインストールされているので、起動方法は次のとおりです。

サービスmysql開始

コマンドを使用して、プロセスの実行ステータスを表示できます。正常な場合、出力は次のようになります。

/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

3. ユーザーを作成し、権限を設定します。

MySQL 8.0.x を実際に使用すると、ユーザー認証が以前のバージョンと若干異なり、次の 3 つのステップに分ける必要があることがわかります。

  1. ユーザーを作成します。
  2. 権限を割り当てます。
  3. 権限を更新します。

具体的な SQL ステートメントは次の通りであり、順序は厳密です。

'176serTTc8Cg' によって識別されるユーザー 'freephp'@'%' を作成します。

GRANT オプションを使用して、dev_database.* のすべての権限を 'freephp'@'%' に付与します。

権限をフラッシュします。

上記の SQL について説明します。最初の文では、パスワードが 176serTTc8Cg の freephp という名前のユーザーを作成します。% は、どのホストでも接続できることを意味します。

2 番目の文は、dev_database のすべての権限をユーザー freephp に付与することを意味します。

3 番目の文は、新しく作成された権限が有効になるように、権限をすぐに更新することです。

これで冒険は完了です。MySQL 8.0 の新機能についてはまだ調査する必要があります。それについては次回お話しします。

要約する

これで、MySQL 8.0 アップグレードの落とし穴に関するこの記事は終了です。MySQL 8.0 アップグレードの落とし穴の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する
  • MySql5.x を MySql8.x にアップグレードする方法と手順

<<:  HTML でスクロールバーを非表示にしたり削除したりする方法

>>:  Reactスロットの使い方

推薦する

MySqlのインストールとログインの詳細な説明

LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...

NestJsはMongooseを使用してMongoDBを操作する

最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高く...

Vue 初心者ガイド: 最初の Vue-cli スキャフォールディング プログラムの作成

1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

タブステータスバーの切り替え効果を実現するための js と jQuery

今日は、タブ バーをクリックして切り替えるという目的を実現するために、js と jQuery を使用...

MySQL データベースのインポートとエクスポートのデータ エラーの解決例の説明

データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...

Docker 階層化パッケージを使用して Spring Boot を設定する方法

Spring Boot プロジェクトでは、Docker コンテナ、jar、war の階層化パッケージ...

VMware仮想マシンの起動時に黒い画面が表示される問題を解決する

# VMware ハードディスクの起動優先順位を調整するステップ 1: 電源をオンにすると、BIOS...

MySQLデータベースのnullに関する知識ポイントのまとめ

MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...

適応レイアウトの処理について(フロートとマージンネガティブマージンを使用)

適応型レイアウトは、実際のアプリケーションでますます一般的になっています。今日は、主にフローティング...

Element UI を使用してページにページング ナビゲーション バーを追加する方法

必要ページング バーを追加します。これにより、ページにジャンプしたり、ページ番号に従って特定のページ...

動的画像読み込み技術の応用とjquery.lazyloadプラグインの使用例

アプリケーション例ウェブサイト http://www.uhuigou.net画像の動的読み込みは目新...

MySQL の自動増分主キーに関する詳細な説明

目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...

WeChatアプレットコンポーネントライフサイクルの落とし穴の記録

通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...

トランジションコンポーネントのアニメーション効果を使用した Vue サンプルコード

トランジションドキュメントアドレスは、フェードインとフェードアウト効果を実現するための背景ポップアッ...