MySQL で lower_case_table_names を記録する際の落とし穴の詳細な説明

MySQL で lower_case_table_names を記録する際の落とし穴の詳細な説明

1 原因

プロジェクトがデータベースを移行して再起動した後、「T_AAAテーブルが存在しません」というエラーメッセージが表示されましたが、テーブルはデータベース内に表示され、データがあります。

2 問題分析

システムとデータベースを再インストールして、システムとデータベースがクリーンであることを確認します。原因となっているシステムとデータベースを排除します。同じ方法を使用して、2 日前と 1 日前のデータ バックアップを復元します。プロジェクトはまだ開始できません。データ コンテンツの原因を排除します。mysqldump を使用して SQL ファイルをエクスポートし、1 日前のデータを復元します。プロジェクトはまだ開始できません。回復方法の原因を排除します。

上記の方法は、基本的に運用保守担当者が参加します。技術ディレクターがプロジェクトエラーの観察に参加した後、突然、テーブル名の大文字と小文字の問題であることがわかりました。テストを通じて最終的に原因が判明しました。
rpm パッケージを使用してデータベースをインストールします。自動初期化中に lower_case_table_names を 0 に設定します。テーブル名は大文字と小文字が区別され、データベースでは小文字、コードでは大文字になります。

3つの解決策

  • 初期化されたデータベース (base_dir、data_dir など) を削除します。
  • データベースを再初期化し、lower_case_table_namesを1に設定します。
  • バックアップデータを復元する

4 結論

MySQL 8.0 以降では、lower-case-table-names パラメータは初期化時にのみ設定でき、my.cnf を変更しても設定できません (my.cnf に設定を追加するとエラーが発生します)。

データベースを初期化するには、MySQL 全体をアンインストールして再インストールする必要はありません。mysqld コマンドを使用するだけで済みます。

base_dir のユーザー グループは mysql である必要があります。Linux でのコマンドは次のとおりです。

chown -R mysql.mysql MySQLデータパス(base_dirなど)

Linuxでディレクトリを再帰的に作成する

mkdir -p mysql/lib/mysql-files

MySQLの再初期化

mysqld -initialize --lower-case-table-names=1

MySQL 8.0以降では、まずユーザーを作成してから権限を付与する必要があります。

'test' で識別されるユーザー 'test'@'%' を作成します。
-- オプションを使用すると、他のユーザーに権限を付与できます。オプションを使用して、test.* のすべての権限を 'test'@'%' に付与します。

これで、MySQL で lower_case_table_names を記録する際の落とし穴に関するこの記事は終了です。MySQL lower_case_table_names に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL 8.0の落とし穴の詳細な説明
  • MySQL 5.7 にアップグレードした後に開発者が注意しなければならない落とし穴
  • MySQL 8.0 の新機能の落とし穴と解決策についての簡単な説明 (要約)
  • MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法
  • MySQL 5.7 の一時テーブルスペースを使用して落とし穴を回避する方法
  • Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)
  • MySQL 8.0.18 圧縮パッケージのインストールと忘れたパスワードのリセット時に遭遇する落とし穴
  • MySql8.0.19 インストールピットレコードを共有する

<<:  16 の XHTML1.0 と HTML の互換性ガイドラインの概要

>>:  純粋な CSS ヘッダーの実装コードを修正

推薦する

JS 配列の重複を排除する 9 つの高度な方法 (実証済みで効果的)

序文一般的な方法はここには記載されていませんが、等しいかどうかを判断するための二重ループや、比較のた...

Web2.0製品と機能の簡単な紹介

<br />Web2.0とは何ですか? Web2.0にはソーシャルネットワーク製品とその...

Reactでパスワード強度検出器を実装する方法

目次序文使用コンポーネントの記述データ構造分析プロセス分析基礎コードの分析他の要約する序文パスワード...

ES6 の Set および WeakSet コレクションの詳細な説明

目次セットは値が重複しない特別なコレクションです。セットコレクション基本API独自の価値判断セットを...

Docker 学習: コンテナ コンテナの具体的な使用方法

コンテナは Docker のもう一つの中心的な概念です。簡単に言えば、コンテナとは、独立して実行され...

MySQL はどのようにしてマスターとスレーブの同期を実現するのでしょうか?

マスタースレーブ同期 (マスタースレーブレプリケーションとも呼ばれる) は、マスタースレーブデータの...

ネイティブJSを使用した遅延読み込みlazyLoadの3つの方法の概要

目次序文方法1: 高コントラスト方法2: getBoundingClientRect() APIを使...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?

FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...

MySQL データのバックアップと復元のサンプル コード

1. データのバックアップ1. mysqldumpコマンドを使用してバックアップするmysqldum...

Docker イメージのプルとタグ操作 pull | tag

Fabric プロジェクトのソースコードを読み直してみたところ、Docker の部分でよくわからな...

Apache をインストールした後、サービスを開始できません (サービスを開始するとエラー コード 1 が表示されます)

目次1. エラーメッセージ2. エラーの原因3. 解決策1. エラーメッセージ1. インストール後、...

CSS テキスト装飾 text-decoration と text-emphasis の詳細な説明

CSS では、テキストは私たちが毎日扱う最も一般的なものの 1 つです。テキストの場合、テキストの装...

Angularルーティングアニメーションと高度なアニメーション機能の詳細な説明

目次1. ルーティングアニメーション2. グループクエリとスタガー1. ルーティングアニメーションル...

MySQL マルチインスタンス インストール ブート自動起動サービス設定プロセス

1.MySQLの複数インスタンスMySQL マルチインスタンスとは、1 台以上のマシン上で複数の M...