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 ヘッダーの実装コードを修正

推薦する

MySQLの文字タイプは大文字と小文字を区別します

デフォルトでは、MySQLの文字タイプは大文字と小文字を区別しません。つまり、name='A...

Vue 仮想 DOM クイックスタート

目次仮想DOM仮想DOMとは何か仮想DOMの役割Vue の仮想 DOM vノードvNodeとはvNo...

MySQL で誤って削除したテーブル データを回復する方法 (必読)

バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...

JS ES の新機能、変数分離割り当て

目次1. 配列の分離割り当て1.1 配列分離割り当てとは何ですか? 1.2 配列分離割り当てに失敗し...

CSSがページのレンダリングをブロックするかどうかについての簡単な説明

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

JavaScript で Priority Queue を実装する

目次1. 優先キューの紹介2. 優先キューのカプセル化1. 優先キューの紹介通常のキューに要素が挿入...

MySQL テーブルとデータベースでデータを分割する方法

目次1. 縦方向のスライス1.1 垂直データベース1.2 垂直テーブル分割2. 水平(横断)セグメン...

Element UI で自動サイズ調整テキストエリアの高さを設定する方法

Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...

...

Tomcat プロセスの CPU 使用率が高い場合の解決策

目次場合コンテキスト切り替えのオーバーヘッド?要約するCPU は多くの場合、システム パフォーマンス...

vmware16 仮想マシンに共有フォルダを設定する方法

1. 仮想マシンに共有フォルダを設定します。 1. 処理する仮想マシンを選択し、右クリックして設定...

複数のプロジェクトをデプロイする Docker nginx の例

前提条件1. ローカルコンピュータとサーバーにDockerがインストールされています。ダウンロード方...

Vue+echarts でプログレスバーのヒストグラムを実現

この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...

MySQL データベースの show processlist コマンドの使用の分析

実際のプロジェクト開発では、多数のクエリや挿入、特にマルチスレッド挿入など、データベースに大きな負荷...

MySQLのlike演算子の詳細

1. はじめに不明な値または部分的に既知の値をフィルタリングする場合は、like 演算子を使用でき...