1. プロジェクトの背景
Oracle MySql のセキュリティ脆弱性 CVE-2023-22056 およびその他の脆弱性が公開された後、システムの MYSQL データベースを 5.7 から 8.1 にアップグレードする準備をしています。この記事では、主にアップグレード プロセス中のいくつかの問題を紹介します。
2. アップグレード手順
(1) データベースのバックアップ
navicat を介してデータベースの構造とデータをエクスポートし、アップグレード後に新しいバージョンに復元します。
(2) MySql8.1.X版をインストールする
ダウンロード アドレス: MySQL :: MySQL コミュニティ サーバーをダウンロード
システムサービスは wamp を通じて提供されるため、オリジナルの 5.7 をベースに MySQL8.1 バージョンを追加することが主な計画ですが、ここでは wamp のマルチバージョン mysql の問題を解決する必要があります。
ここでは、MYSQL の圧縮パッケージ バージョンをダウンロードします。
Windows (x86、64 ビット)、ZIP アーカイブ | 8.1.0 | 2億3690万 | |
(mysql-8.1.0-winx64.zip) |
(1) ダウンロードした圧縮パッケージを wamp のインストール パス、つまり X:\XXX\wamp64\bin\mysql ディレクトリに解凍します。すでに 5.7.X ディレクトリがあるので、同様に 8.1.X ディレクトリを作成し、その中に圧縮パッケージを解凍します。
(2) 関連するパスパラメータを変更する
5.7.X ディレクトリにある my.ini および wampserver.conf ファイルを mysql8.1.X ディレクトリにコピーし、my.ini ファイルのパラメータを変更します。
basedir="X:/XXX/wamp64/bin/mysql/mysql8.0.11"
datadir="X:/XXX/wamp64/bin/mysql/mysql8.0.11/data"
lc-messages-dir="X:/XXX/wamp64/bin/mysql/mysql8.0.11/share"
(3) mysql8.1.xの初期化
コマンドライン cmd を使用して mysql8.1.x の下の bin ディレクトリに入り、次のコマンドを実行します。
mysqld --initialize --console
実行後のインターフェースで見つかりました: root@localhost:XXXXXX の一時パスワードが生成されます
これは、mysql の初期化後に生成されたパスワードです。後で MySQL にアクセスするために使用します。ここにコピーする必要があります。!!!
(4) MYSQLサービスをインストールする
wamp の場合は、wamp にサービスをインストールして開始する必要があります
wamp でない場合は、cmd で mysqld -install コマンドを直接実行すると、MySql サービスがオペレーティング システム サービスに追加されます。ただ始めてください。
(5) ログイン認証
wampの場合は、wampでメニューMysqlコンソールを開き、(3)で生成した仮パスワードを使用して以下のコマンドでログインします。
注: 初めてログインした後、コマンドを実行すると次のエラーが報告されます。
エラー 2003 (HY000): 'localhost' 上の MySQL サーバーに接続できません (10061)
これは、一時パスワードを変更する必要があることを通知するものです。その方法は次のとおりです。
mysql> 'XXXXXXXX' で識別されるユーザー 'root'@'localhost' を変更します。
また、次のコマンドを実行して権限を更新する必要があります。
mysql> フラッシュ権限;
変更後、次のコマンドを使用します。 mysql> show Databases;
結果が表示されれば、成功したことを示します。
(3) データベースの復元
新しいMYSQLにデータベースを追加し、(1)でエクスポートしたSQLを新しいデータの下で実行します。
データベースにストアド プロシージャや関数が存在する場合、実行に失敗する可能性があります。その場合は、my.ini の [mysqld] に log_bin_trust_function_creators=1 を追加し、サービスを再起動してから再度インポートする必要があります。
(4) システム接続データベース
ユーザー、ホスト、データベースの権限を設定した後、システムはプログラムを通じてデータベースにアクセスします。現時点では、システムには次の問題が発生します。
1.文字セットの不一致問題
システム统报错:SQLSTATE[HY000] [2054] サーバーはクライアントに不明な文字セットを送信しました。開発者に報告してください
理由: MySQL 8 のデフォルトの文字セットは utf8mb4 であり、システムは utf8 を使用します。
解決策: my.ini ファイルの [mysqld] の下に次の 2 行を追加する必要があります。
文字セットサーバー = utf8mb4
照合サーバー = utf8mb4_unicode_ci
2. ID 認証の問題
システム统报错:SQLSTATE[HY000] [2054] サーバーはクライアントに不明な認証方法を要求しました
理由: MySQL8 のユーザーの認証タイプ (認証タイプ) がデフォルトで sha2 パスワードをキャッシュするため、エラーが発生するため、ユーザー権限の認証方法を mysql_native_password の認証方法に変更する必要があります。
解決策: MYSQL コンソールで 2 つのステップ (1) を実行します。
mysql>「XXXXXXXX」による mysql_native_password で識別されたユーザー「root」@「%」を変更します。
mysql>フラッシュ権限;
(2) my.inファイルの[mysqld]以下に追加
default_authentication_plugin=mysql_native_password