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のグループカウントと範囲集計を実装する2つの方法

1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...

ReactにおけるRefの相互利用の詳細な説明

目次1. まずRefとは何かを説明しましょう2. フックでのrefの使用1. HTMLDomフックで...

Linuxでホスト名を変更する方法

1. 現在のホスト名を表示する [root@fangjian ~]# ホスト名ctl 静的ホスト名:...

CSS3 で背景ぼかしを実現する 3 つの方法 (要約)

1. 通常の背景ぼかしコード: <スタイル> html, 体 { 幅: 100%; 高...

ベスト HTML/CSS デザインおよび開発フレームワーク 15 選を紹介します

プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...

mysql トリガーの作成と使用例

目次トリガーとは何かトリガーを作成するMySQL 作成構文のキーワードの説明: 1. MySQL ト...

Html、sHtml、XHtml の違いのまとめ

たとえば、<u>には終了文字がなく、ブラウザはそれを認識します。 SHTML は Ser...

複数のドメイン名に対する Nginx リバース プロキシを使用した HTTP および HTTPS サービスの実装

現在、Nginx は、Web サービスを提供するために、Windows ベースの IIS と Lin...

Docker コンテナで ASP.NET Core を実行する手順

最近は学ぶべき知識が多すぎて、どれを先に学べばいいのかわかりません。このブログはもともとxamari...

Linux システム修復モード (シングル ユーザー モード)

目次序文1. シングルユーザーモードでの一般的なバグ修正2. シングルユーザーモードでシステムパスワ...

MySQLでよく使われるSQLとコマンドの入力からデータベースの削除、そして終了まで

目次開始と停止データベース関連の操作データベーステーブル関連の操作制約関連デフォルトの制約高度なデー...

知らないかもしれない奇妙で興味深いDockerコマンド

はじめに使えるかもしれないが、あまり使われていない、シンプルで実用的なDockerコマンドをいくつか...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

vue3 再帰コンポーネントカプセル化の全プロセス記録

目次序文1. 再帰コンポーネント2. 右クリックメニューコンポーネント要約する序文今日、プロジェクト...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...