Windows で MySQL 5.7.17 圧縮バージョンをインストールするときに遭遇する落とし穴

Windows で MySQL 5.7.17 圧縮バージョンをインストールするときに遭遇する落とし穴

まず、Windows 64 ビット用の最新の MySQL 5.7.17 コミュニティ圧縮バージョンをダウンロードします。

公式ダウンロードアドレス: http://dev.mysql.com/downloads/mysql/

次に、インストール ディレクトリ (C:\Prog\MySQL\ など) に解凍します。次に、my-default.ini を my.ini にコピーし、my.ini を次のように変更します。

[mysql]
デフォルトの文字セット=utf8mb4

[mysqld]
ベースディレクトリ = C:\Prog\MySQL
データディレクトリ = C:\Prog\MySQL\data
ポート = 3306
最大接続数=200
文字セットサーバー=utf8mb4
照合サーバー=utf8mb4_general_ci
デフォルトのストレージエンジン=INNODB
結合バッファサイズ = 128M
ソートバッファサイズ = 2M
読み取りバッファサイズ = 2M 
sql_mode=NO_ENGINE_SUBSTITUTION、STRICT_TRANS_TABLES

次に、「管理者」として cmd を開きます - 「管理者」は非常に重要です。インストール ディレクトリに入り、MySQL サービスをインストールします。

C:\Prog\MySQL\bin>mysqld インストール
サービスが正常にインストールされました。

次に、MySQL サービスを開始します。

ネットスタートMySQL

最初はとても簡単だと思ったのですが、間違いであることが判明しました。

Windows システムの「サービス」を通じて起動された場合、プロンプトは次のようになります。

この問題は本当にイライラさせられました。長い間調べた結果、次のことがわかりました。

Noinstall パッケージを使用して MySQL をインストールした場合は、データ ディレクトリを初期化する必要がある場合があります。

  • MySQL 5.7.7 より前の Windows ディストリビューションには、MySQL データベース内に事前初期化されたアカウントのセットを含むデータ ディレクトリが含まれています。
  • 5.7.7 以降、Noinstall パッケージを使用して実行される Windows インストール操作には、データ ディレクトリは含まれません。データ ディレクトリを初期化するには、セクション 2.10.1.1「mysqld を使用してデータ ディレクトリを手動で初期化する」の手順に従ってください。

詳細については、次の 2 つのリンクを参照してください。

2.3.5.4 データディレクトリの初期化

2.10.1.1 mysqld を使用してデータディレクトリを手動で初期化する

理由がわかったので、データ ディレクトリを手動で初期化してみましょう。

mysqld --defaults-file=C:\Prog\MySQL\my.ini --initialize-insecure 

次に、順番に:

ネットスタートMySQL
mysql -u ルート -p

見慣れたmysql>が表示されます。

これが同様の問題に遭遇した人々の役に立つことを願っています。その理由は、圧縮パッケージ バージョン 5.7.7 以降では、データ ディレクトリの初期化を手動で行う必要があるように変更されたためです。

すべての人に当てはまるテクニックは存在せず、途中で穴を埋めていく必要があります。

私の環境:

  • Windows 10 64ビット
  • MySQL Community Server 5.7.17 for Windows (x86、64 ビット)、ZIP アーカイブ

(区切り線、上記MySQL 5.7.17がインストールされています。)

最後に、MySQL をテストするための SQLAlchemy を作成しました。

「SQLAlchemy 操作 MySQL テスト」

sqlalchemy から create_engine、テーブル、列、整数、メタデータをインポートします
sqlalchemy.dialects.mysqlからCHARをインポート
sqlalchemy.sqlからインポートを選択

ENGINE = create_engine('mysql+pymysql://root:@127.0.0.1:3306/test?charset=utf8mb4')

CONN = ENGINE.connect()

USERINFO = テーブル('userinfo',
  メタデータ()、
  列('id'、整数、主キー=True、自動増分=True)、
  列('name'、CHAR(24、文字セット='utf8mb4'))、
  mysql_charset = 'utf8mb4')

USER = select([USERINFO])

結果 = CONN.execute(USER)

結果の行:
 print(行名)

結果.close()
CONN.close()

結果が出力されるとアラームが発生することがわかります。

警告: (1366、「行 480 の列 'VARIABLE_VALUE' の文字列値 '\xD6\xD0\xB9\xFA\xB1\xEA...' が正しくありません」)

何が起こっているのか?すべての文字セット設定を n 回確認すれば問題はないはずです...

数え切れないほどの思考と実験を経て、何を発見しましたか?何を見つけましたか? '% charac%'; のような変数を表示する限り、アラームが表示されることがわかりました。

この警告を見てみましょう:

まさにそれじゃないですか?これはMySQLのバグでしょうか? !ああ、神様!

よし! MySQL 5.6.35に戻ります!

警報が消えました!

次に、データベースを再構築し、テーブルを作成して、プログラムをテストします。

これは問題なく、最終的に MySQL 5.6.35 に戻りました。

静かに Python を書いてください。誰も喧嘩しませんし、フロントエンド開発者のような喧嘩もありません。何年も平和で、Python も平和です。

最後に、Visual Studio Code を高く評価したいと思います。

要約する

上記はこの記事の全内容です。私の経験が、同じ問題に遭遇した友人の役に立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることもできます。

以下もご興味があるかもしれません:
  • Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)
  • MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明
  • MySQL 5.7 にアップグレードした後に開発者が注意しなければならない落とし穴

<<:  JavaScript におけるイベント委譲メカニズムと深いコピーと浅いコピーの簡単な分析

>>:  Centos7にnginxをインストールする方法

推薦する

MySQL トランザクション自動コミット自動コミット操作

MySQL のデフォルトの動作モードは自動コミット モードです。つまり、明示的にトランザクションを開...

MYSQL での Truncate の使用法の詳細な説明

この記事のガイド: テーブル内のデータを削除するには、削除と切り捨ての 2 つの方法があります。TR...

DockerにTomcat8をインストールする方法

1. dockerでtomcat8をインストールする1. Docker HubでTomcatイメージ...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...

DockerにFastDFSをインストールする方法

画像をプルする docker pull season/fastdfs:1.2トラッカーを開始 doc...

JavaScriptのURLオブジェクトとは何かについて話しましょう

目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...

Windows10にmysql5.7.18をインストールするチュートリアル

このチュートリアルでは、MySQL 5.7.18のインストールと設定方法を参考までに紹介します。具体...

Vue 3 で Vue Router リンクを拡張する方法

序文<router-link> タグは、Vue アプリ内のさまざまなページ間を移動するた...

MySQL の一般的な SQL ステートメントの概要

1. mysqlエクスポートファイル: SELECT `pe2e_user_to_company`....

進捗バーのネイティブ JavaScript 実装

進捗バーを実装するためのJavaScriptの具体的なコードは参考までに。具体的な内容は次のとおりで...

XHTML 入門チュートリアル: XHTML タグ

XHTML タグの紹介<br />おそらく、前のセクションで、XHTML ファイルと通常...

JavaScriptで継承を実装するいくつかの方法

目次構造継承(callで実装)プロトタイプチェーン継承(プロトタイプチェーンの助けを借りて実装)複合...

TypeScript デコレータ定義

目次1. コンセプト1.1 定義1.2 デコレータファクトリー1.3 デコレータの組み合わせ1.4 ...

デザイナーはコーディングを学ぶ必要がありますか?

多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...

HTML ウェブページのメタビューポート属性の説明

HTML メタビューポート属性の説明ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウ...