VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
ERROR 2002: ソケット経由で接続できない
(2) は errno 2、「no such file」(そのようなファイルはない)です。
- サーバーが起動していることを確認します:
pgrep mysqldまたはサービスマネージャーを使います。 mysql -h localhostは Unix ソケットを使います。サーバーが別のソケットパスで待ち受けている場合は、それを渡します:mysql -S /path/to/mysql.sock。- ソケットの代わりに TCP を強制するには、
-h localhostではなく-h 127.0.0.1を使います。
ERROR 1045: アクセス拒否
- サーバーがあなたをどのユーザーとみなしているか。
- どのホストから接続したか。MySQL のアカウントは
user@hostの組です。'app'@'localhost'と'app'@'%'は、パスワードも権限も異なる別のアカウントです。 using password: YES/NO— パスワードがそもそも送られたかどうか。NOは多くの場合、クライアントが読み取った環境や構成ファイルにパスワードが見つからなかったことを意味します。
SELECT user, host FROM mysql.user;)、ALTER USER でそのパスワードをリセットします。ユーザー管理を参照してください。
ERROR 1055: ONLY_FULL_GROUP_BY
customer_id がありますが、total の値は多数あり、クエリはどれが欲しいのかを示していません。古い MySQL のバージョンは任意の 1 つを選んでいました。5.7 以降、デフォルトの ONLY_FULL_GROUP_BY モードがこれをエラーにします。これは、もともと誤っていたクエリからあなたを守っているのです。本当の修正は 3 つあります。
sql_mode で ONLY_FULL_GROUP_BY を無効にしても動作しますが、それは誤った答えです。エラーを、静かに任意の結果を返す状態に戻してしまいます。ANY_VALUE() が何を約束し、何を約束しないかについては、MySQL の GROUP BY のパフォーマンスを参照してください。
ERROR 1064: 構文エラー
ERROR 1062: 重複エントリ
- 行が 2 回存在すべきではない場合: 重複キーの生成元を修正します。
- 挿入の代わりに既存の行を更新すべき場合:
INSERT ... ON DUPLICATE KEY UPDATEを使います。Upsert を参照してください。 - 挿入を静かにスキップすべき場合:
INSERT IGNOREを使います。ただし、他のエラーも黙らせてしまうため、控えめに使ってください。
あらゆる MySQL のエラーの読み方
ERROR <number> (<SQLSTATE>): <message> というパターンは 3 つのシグナルを運びます。番号は MySQL 固有で、最良の検索キーです。SQLSTATE のクラスは移植性があります。28000 は認証、42000 はクエリの問題、23000 は制約違反、HY000 は汎用のバケットです。クライアント側のエラー(2002 のような 2xxx)はサーバーに到達していません。サーバー側のエラー(1xxx)は接続が機能していることを意味します。
関連項目
- ユーザー管理 — アクセス拒否エラーの背後にあるアカウントモデル
- MySQL の GROUP BY のパフォーマンス — ONLY_FULL_GROUP_BY と、それを無効にするのが誤った修正である理由
- MySQL GROUP BY — この句の書き方に関するチュートリアルのレッスン
- Upsert — 重複キーエラーを更新に変える
- MySQL チュートリアル用のサーバーをインストールする — 接続エラーと、それを再現するコマンド