プログラムが mysql に接続できない問題の解決策: 1. mysql サービスが正常かどうかを確認し、運用保守を見つけてネットワークの問題を確認します; 2. "max_allowed_packet" の値を大きくします; 3. . 「net_read_timeout」値を増やします。 ;4. 「connect_timeout」値を増やします。
推奨: 「mysql ビデオ チュートリアル 」
プログラムが接続できない問題の概要mysql
MySQL に接続できない場合、通常 4 種類のエラー レポートがあります:
1:Can't connect to MySQL server 2:Lost connection to MySQL server 3:Sorry, due to line fault, temporarily unable to browse, we are dealing with. 4:MySQL server has gone away
1: MySQL サーバーに接続できません
考えられる理由:
1、mysql サーバーが起動していません
2、ネットワークがブロックされています (iptables、selinux、ネットワークの不安定性)
対応する解決策:
1、DBA が最初に確認します mysql サービスは正常ですか?
2. mysql サービスが正常な場合は、運用保守に連絡してネットワークの問題を確認します。
2: MySQL サーバーへの接続が失われました
このようなエラー レポートが発生する可能性のある状況は 4 つあります:
1、ネットワークの問題
##2、クエリの結果セットが大きすぎます (クエリなど)クライアントによって開始された数百万の結果を返します3 データベースに接続するときに、connect_timeout 設定時間が短すぎるため、エラーが報告されます。この理由がエラーの原因である場合は、SHOW GLOBAL STATUS を使用できます。 LIKE 'Aborted_connects' を使用して、値が増加したかどうかを確認します。4、クエリには BLOB タイプがあり、max_allowed_packet パラメータの制限を超えていますこれら 4 つの状況に対応する解決策:1. ネットワークに問題がないか運用保守を監視します##2. net_read_timeout 値を増やす
3, connect_timeout 値を増やす
##4, max_allowed_packet 値を増やします。##3: 申し訳ありませんが、回線障害のため、一時的に参照できなくなりました。現在対処中です。
このエラーはネイティブの mysql エラーではなく、何も見つかりませんでした。インターネット上にも同様の情報があります。現在、このエラーが発生する状況は 3 つあります:
#1、ネットワークに問題があります2. データベース接続が多すぎます3. データベースのアカウントとパスワードが間違っています4: MySQL サーバーが消えました次の 12 の状況により、このようなエラー レポートが発生する可能性があります: 1、デフォルトの wait_timeout 値は 8 時間です。アイドル状態の接続がこの値を超えると、接続は強制終了されます。2、dba 手動 kill3、顧客クライアント アカウントには、mysql に接続する権限がありません。 server4、mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) または mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...) Functionを使用するなど、クライアントの TCP/IP 接続がタイムアウトします。
5、クライアントが自動再接続を無効にすると、6、クエリ ステートメントが正しくありません7、クエリ ステートメントが長すぎて、max_allowed_packet の制限を超えます8、 1 つの挿入または置換ステートメントで更新される行が多すぎる9、ドメイン名の解決が失敗する10、ファイアウォールがポート 3306 をブロックする 11. スレッドが複数の子プロセスをフォークします。複数の子プロセスが接続を共有すると、エラーが報告されます 12. mysql サーバーがハングします MySQL サーバーが消えたと報告されるエラー理由の比較 多くの場合、この問題は対処できます1、運用保守a、ファイアウォールルールの確認#b、DNSサーバーに異常はないか
dの3つの観点から, php.ini で mysql に接続するためのパラメータを適切に設定します
connect_timeout、デフォルトは 60s
mysqli.reconnect、デフォルトは off
2,DBA
a, mysql サービスと接続数に異常がないことを確認します
b, 適切な wait_timeout 値を設定します
c, サーバーに適切な max_allowed_packet 値を設定します側
d、アカウントの権限が正しいことを確認します
3、開発
a、mysql
b の代わりに mysqli を使用することをお勧めします。できるだけ長い接続を使用しないようにしてください
#c,mysqli.ping() は、接続が切断された後に自動的に再接続できます。mysql.ping() は、mysql5.0.3## 以降、自動再接続をサポートしていません。 #d. 子プロセス間でデータベース接続を共有しないでください
gamiss を例として、max_allowed_packet と timeout に関連するパラメータを見てみましょう:
>show variables like 'max_allowed_packet'; +--------------------+------------+ | Variable_name | Value | +--------------------+------------+ | max_allowed_packet | 1073741824 | +--------------------+------------+ >show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 60 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 120 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 86400 | | lock_wait_timeout | 31536000 | | net_read_timeout | 120 | | net_write_timeout | 120 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | thread_pool_idle_timeout | 60 | | wait_timeout | 86400 | +-----------------------------+----------+
これらを見てみましょうデータベースに接続できないことに関連するタイムアウト パラメーター:
connect_timeout: in リンクを取得するとき、ハンドシェイクを待機するタイムアウト期間は、通常、デフォルトで 10 秒です。ネットワーク不良による接続の輻輳を避けるため、 , この値は適切に増やすことができます。オンライン構成は 60 秒です。
wait_timeout/interactive_timeout: connection スリープ状態を維持するためのタイムアウト。デフォルトは 28800 (8 時間)、現在は 24 時間に調整されています
net_read_timeout: サーバーがクライアントのデータ送信を待機するタイムアウト、デフォルトは 60 秒、オンラインは 120 秒
net_write_timeout: サーバーがクライアントにデータを書き込むためのタイムアウト時間、デフォルトは 60 秒、オンライン値は 120 秒です。
max_allowed_packet パラメータをもう一度見てください。max_allowed_packet のデフォルト値は 1M (1048576)、最大値は 1G (1073741824) です。現在のオンライン値はすでに上限.
上記の構成から、これらのパラメータの設定が比較的大きいことがわかります。通常の状況では、データベースはプログラムに接続できません。データベースはパラメータとは何の関係もないはずです。データベース自体の構成。この問題は別の方向から解決する必要があります。
以上がプログラムが mysql に接続できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。