ホームページ php教程 php手册 MySQL を使用するときによくある間違い

MySQL を使用するときによくある間違い

Jun 21, 2016 am 09:09 AM
connect mysql mysqld nbsp

mysql|エラー

MySQL サーバーが消えたというエラー
このセクションでは、クエリ中にサーバーへの接続が失われたことに関連するエラーについても説明します。

「MySQL サーバーが消えました」エラーの最も一般的な理由は、サーバーがタイムアウトして接続が閉じられたことです。デフォルトでは、何も起こらなければ 8 時間後にサーバーは接続を閉じます。 mysqld の起動時に wait_timeout 変数を設定することで、時間制限を変更できます。

mysqladmin version を実行して稼働時間を確認することで、MySQL が停止していないことを確認できます。

スクリプトをお持ちの場合は、別のクエリを発行してカスタマー サービスに自動再接続を実行させるだけです。

この場合、通常は次のエラー コードが表示されます (表示される内容は OS 関連です):

CR_SERVER_GONE_ERROR クライアントはサーバーに質問を送信できません。
CR_SERVER_LOST サーバーへの書き込み時に、クライアントはエラーを起こしませんでしたが、質問に対する完全な回答 (またはまったく回答) を取得できませんでした。

間違ったクエリまたは大きすぎるクエリをサーバーに送信した場合にも、これらのエラーが発生する可能性があります。 mysqld が大きすぎるパケットまたは異常なパケットを受信すると、クライアントがエラーを起こしたと判断し、接続を閉じます。より大きなクエリが必要な場合 (たとえば、より大きな BLOB カラムを処理している場合)、 -O max_allowed_pa​​cket=# オプション (デフォルトは 1M) を使用して mysqld を起動し、クエリ制限を増やすことができます。過剰なメモリはオンデマンドで割り当てられるため、mysqld は、より大きなクエリを発行する場合、または mysqld がより大きな結果行を返さなければならない場合にのみ、より多くのメモリを使用します。

[ローカル] MySQL サーバーに接続できませんエラー
MySQL クライアントは 2 つの異なる方法で mysqld サーバーに接続できます: Unix ソケット、ファイル システム内のファイル (デフォルトは「/tmp/mysqld.sock」) を使用します。 ); または TCP/IP、ポート番号を介して接続します。 Unix ソケットは TCP/IP より高速ですが、同じコンピュータ上のサーバーに接続する場合にのみ使用できます。ホスト名を指定しない場合、または特別なホスト名 localhost を指定した場合は、Unix ソケットが使用されます。

エラー (2002) に接続できません... は通常、システム上で MySQL サーバーが実行されていないこと、または mysqld サーバーに接続しようとしているときに間違ったソケット ファイルまたは TCP/IP ポートを使用していることを意味します。

まず、サーバー上に mysqld という名前のプロセスがあることを (ps を使用して) 確認します。 mysqld プロセスがない場合は、プロセスを開始する必要があります。 「4.15.2 MySQL サーバーの起動時の問題」を参照してください。

mysqld プロセスが実行されている場合は、次のさまざまな接続を試してサーバーを確認できます (もちろん、ポート番号とソケットのパス名はインストール環境で異なる場合があります):

shell> mysqladmin version
shell> mysqladmin variables
shell> ; mysqladmin -h `hostname` バージョン変数
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'hostname' version
shell> sock バージョン

hostname コマンドでは、前方引用符「'」の代わりにバックティック「`」が使用されていることに注意してください。これにより、ホスト名の出力 (つまり、現在のホスト名) が mysqladmin コマンドに置き換えられます。

「ローカル MySQL サーバーに接続できません」エラーの考えられる理由は次のとおりです:

mysqld が実行されていません。
MIT-pthread を使用するシステム上で実行されています。ネイティブ スレッドのないシステムで実行されている場合、mysqld は MIT-pthreads パッケージを使用します。 「4.2 MySQL でサポートされるオペレーティング システム」を参照してください。ただし、MIT-pthreads は Unix ソケットをサポートしていないため、このようなシステムでは、サーバーに接続するときに常にホスト名を明示的に指定する必要があります。次のコマンドを使用してサーバーへの接続を確認してみてください:
shell> mysqladmin -h `hostname` version

mysqld で使用される Unix ソケット (デフォルトは「/tmp/mysqld.sock」) が削除されました。 MySQL ソケットを削除する cron タスク (たとえば、「/tmp」ディレクトリから古いファイルを削除するタスク) がある場合があります。 mysqladmin バージョンをいつでも実行して、mysqladmin が使用しようとしているソケットが実際に存在することを確認できます。この場合、解決策は、「mysqld.sock」を削除せずに cron ジョブを削除するか、次のコマンドを使用して MySQL の構成中に別のソケットの場所を指定することです。 with-unix-socket-path=/path/to/socket

--socket=/path/to/socket オプションを使用して、safe_mysqld を起動し、MySQL クライアントを起動する前に環境変数 MYSQL_UNIX_PORT を設定することもできます。これがソケット パスです。 --socket=/path/to/socket オプションを使用して mysqld サーバーを起動できます。サーバーのソケット パス名を変更する場合は、新しいパスについても MySQL クライアントに通知する必要があります。これは、環境を設定することによって行われます。変数 MYSQL_UNIX_PORT をソケットのパス名に指定するか、次のコマンドでソケットのパス名を指定することができます:

shell> --socket=/path/to/version

Linux を使用していますが、スレッドが停止しています (コア ダンプされています)。この場合、他の mysqld スレッドを強制終了する必要があります (たとえば、新しい MySQL サーバーを起動する前に、mysql_zap スクリプトを使用できます)。 「18.1 MySQL がクラッシュし続ける場合の対処方法」を参照してください。
「some_hostname で MySQL サーバーに接続できません」というエラーが表示された場合は、次の手順を試して問題の内容を確認できます:

telnet your-host-name tcp-ip-port-number を実行して Enter キーを押します。サーバーが正常に動作しているかどうかを数回確認してください。このポートで MySQL サーバーが実行されている場合は、実行中の MySQL サーバーのバージョン番号を含む応答を取得する必要があります。 「telnet: リモート ホストに接続できません: 接続が拒否されました」のようなエラーが表示された場合は、使用中のポートで実行されているサーバーがありません。
ローカルマシン上の mysqld デーモンに接続し、mysqladmin 変数を使用して、mysqld が使用するように構成されている TCP/IP ポート (変数ポート) を確認してみます。
mysqld サーバーが --skip-networking オプションを使用して起動されていないことを確認してください。
ホスト '...' はブロックされていますエラー
次のようなエラーが発生した場合:

多くの接続エラーのため、ホスト 'hostname' がブロックされています。
'mysqladmin flash-hosts' でブロックを解除します

これは、mysqld がホスト「hostname」に対する多数 (max_connect_errors) の接続要求が中断されました。 max_connect_errors 回のリクエストが失敗した後、mysqld は何か問題 (ハッカー攻撃など) が発生したと判断し、誰かが mysqladmin flash-hosts コマンドを実行するまでサイトへのそれ以上の接続をブロックします。

デフォルトでは、mysqld は 10 回の接続エラーが発生するとホストをブロックします。次のようにサーバーを起動することで簡単に調整できます:

shell>safe_mysqld -O max_connect_errors=10000 &

特定のホストでこのエラー メッセージが表示された場合は、まず TCP を確認する必要があることに注意してください。 IP接続で? TCP/IP 接続が機能していない場合、max_connect_errors 変数の値を増やしても問題は解決しません。

接続数が多すぎるエラー
MySQL に接続しようとしたときに「接続数が多すぎます」というエラーが表示された場合は、max_connections 件の顧客が mysqld サーバーに接続したことを意味します。

デフォルト (100) よりも多くの接続が必要な場合は、より大きな max_connections 変数値を使用して mysqld を再起動する必要があります。

mysqld は実際には (max_connections+1) 個のクライアント接続を許可していることに注意してください。最後の接続は、プロセス権限を持つユーザーのために予約されています。この権限を通常のユーザー (必要のないユーザー) に与えないことで、この権限を持つ管理者はログインして SHOW PROCESSLIST を使用して、何が問題になったのかを調べることができます。 「7.21 SHOW 構文(テーブルおよびカラム情報の取得)」を参照してください。

メモリ不足エラー
クエリを発行し、次のようなエラーが発生した場合:

mysql: 行 42、'malloc.c' でメモリ不足です
mysql: 8136 バイト (8k) が必要で、メモリが使用中です: 12481367 バイト (12189k)
エラー 2008: MySQL クライアントがメモリ不足になりました

このエラーは MySQL クライアント mysql を指していることに注意してください。このエラーの理由は単純に、クライアントにすべての結果を保存するのに十分なメモリがないことです。

この問題を解決するには、まずクエリが正しいかどうかを確認してください。これほど多くの行を返すのは合理的でしょうか?その場合は、mysql --quick を使用できます。これは、mysql_use_result() を使用して結果セットを取得します。これにより、クライアントの負担が減ります (サーバーの負担が増えるだけです)。

パケットが大きすぎるエラー
MySQL クライアントまたは mysqld サーバーが max_allowed_pa​​cket バイトより長いパケットを取得すると、パケットが大きすぎるエラーを発行して接続を終了します。

mysql クライアントを使用している場合は、mysql --set-variable=max_allowed_pa​​cket=8M でより大きなバッファを指定することでクライアントを起動できます。

最大パッケージ サイズを指定できない別のクライアント (DBI など) を使用している場合は、サーバーの起動時にパッケージ サイズを設定する必要があります。 mysqld コマンド ライン オプションを使用して、max_allowed_pa​​cket をより大きなサイズに設定できます。たとえば、完全長の BLOB をテーブルに保存する場合は、--set-variable=max_allowed_pa​​cket=24M オプションを使用してサーバーを起動する必要があります。



テーブルがいっぱいですエラー
このエラーは、メモリ内の一時テーブルが tmp_table_size バイトよりも大きくなった場合に発生します。この問題を回避するには、mysqld の -O tmp_table_size=# オプションを使用して一時テーブルのサイズを増やすか、問題のクエリを発行する前に SQL オプション SQL_BIG_TABLES を使用します。 「7.25 SET OPTION 構文」を参照してください。

--big-tables オプションを使用して mysqld を起動することもできます。これは、すべてのクエリに SQL_BIG_TABLES を使用するのとまったく同じです。


クライアントエラーでコマンドが同期していません
コマンドが同期していない場合は、クライアントコードでこのコマンドを実行できません。クライアント関数を間違った順序で呼び出しています。

これは、たとえば、mysql_use_result() を使用していて、mysql_free_result() を呼び出す前に新しいクエリを実行しようとした場合に発生する可能性があります。また、mysql_use_result() または mysql_store_result() の間でデータを返す 2 つのクエリを実行しようとした場合にも発生する可能性があります。

ユーザーエラーを無視します
次のエラーが発生した場合:

ユーザーのパスワードが間違っています: 'some_user@some_host'; ユーザーを無視しています

これは、mysqld が起動したとき、または権限テーブルを再度ロードしたときに、ユーザー テーブルに 1 つのパスワードが見つかったことを意味します。無効なパスワード。その結果、エントリは権限システムによって単純に無視されます。

この問題の考えられる原因と修正:

古いユーザー テーブルを持つ新しいバージョンの mysqld を実行している可能性があります。これを確認するには、mysqlshow mysql user を実行して、パスワード フィールドが 16 文字未満かどうかを確認します。その場合は、scripts/add_long_password スクリプトを実行して状況を修正できます。
ユーザーのパスワードは古い (8 文字長) ですが、--old-protocol オプションを使用して mysqld を起動しませんでした。ユーザー テーブル内のユーザーを新しいパスワードで更新するか、--old-protocol を使用して mysqld を再起動します。
PASSWORD() 関数を使用してユーザーテーブルにパスワードを指定しませんでした。 mysql を使用して、ユーザー テーブル内のユーザーを新しいパスワードで更新します。必ず PASSWORD() 関数を使用してください:
mysql> update user set password=PASSWORD('your password')
Where user='XXX';

Table 'xxx' doesn't own error
エラーが発生した場合テーブル 'xxx' が存在しないか、ファイルが見つかりません: 'xxx' (errno: 2)。これは、現在のデータベースに xxx という名前のテーブルが存在しないことを意味します。

MySQL はデータベースとテーブルの保存にディレクトリとファイルを使用するため、データベース名とテーブル名は大文字と小文字が区別されることに注意してください。 (Win32 では、データベース名とテーブル名は大文字と小文字が区別されませんが、クエリ内のすべてのテーブルへの参照では同じ大文字と小文字を使用する必要があります。)

SHOW TABLES を使用して、現在のデータベースにどのテーブルがあるかを確認できます。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

MySQLをCentos7にインストールする方法 MySQLをCentos7にインストールする方法 Apr 14, 2025 pm 08:30 PM

MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin

See all articles