今日が一番若い日です!
wordpress

”Error while sending QUERY packet” が出たら

記事内に商品プロモーションを含む場合があります

どうもこんにちは、さんぺい(@3pei_tw)です。

今回はMySQL(MariaDB)の話です。

 

事の発端

そもそもこれ何よ、って疑問に思われる方も多いんじゃないかと思いますが、半年ぐらい前に遡ります。

IFTTTって言う、誰でも簡単にシステム間連携が出来るWEBサービスがあるんですが、あれを使ってWordPressの自動投稿システムを作っていました。

ですがサーバーによって、エラーが出てしまったり、エラー連発しすぎてIFTTTが止まってしまったり、と、なかなかうまくいってませんでした。

 

●エラーが出るパターン このサーバー(VPS)

●エラーが出ないパターン XREAサーバー

 

エラーが出ても一応動いてはいたので、まぁいいかとほったらかしにしてたんですが、連携が止まる度にIFTTTにログインして復旧させるのがそろそろめんどくさく感じてきていまして、この休みを使って調べて見ました

 

エラーの山

エラー対象のvpsをみて、たぶん大量のエラーが出るんだろうな、と考えてはいましたが、やっぱりそうでした(笑

 

↑何が何だかわかりませんよね。すみません。

 

エラーは色々出てましたが、主だったものはこれです

 

PHP Fatal error:  Uncaught Error: Call to undefined function wp_links()

 

”Uncought Error”エラー自体は「WordPressのfunctions.phpにて、存在しない関数を使った場合にでる」と書かれていました。

 

 

通常なら「ああ、自作(正確にはコピペの貼り合わせ)のfunctions.phpが悪いって事なんだろうな」と考えて直し方も分からず途方に暮れるところですが、今回は違いました。

 

●エラーが出ないパターン XREAサーバー

 

があったからです。

同じスクリプトを使っていながらも、サーバによって動いたりエラーになったり、と言う状態だったためです。

 

もうすこし掘り下げると、こう言う場合に出るらしいことがわかりました。

 

①MySQLに送るデータ量が設定より大きすぎる(max_allowed_packet)
②MySQL接続時間が設定内で収まらなかった(wait_timeout)

なんでも①はDefaultで1MBなんだとか。

早速XREAとvpsの差分を見てみるとこんな感じでした

 

①NGなVPS 1MB

②OKなXREA 3MB

 

ちなみに調べ方はこうです

 

show variables like ‘max_allowed_packet’;

※MySQLのモードにした上で実行。

回答はこんな感じ。

1048576は、ほぼ1MBの意味とおなじです。と言う事でDefault値になってました。

これを増やしてみてどうか、ってとこなんでしょうが、増やすのは設定ファイルで行います。

 

設定したのに増えない

設定するのは「my.cnf」って言うMySQL/MariaDBの設定ファイル。ここに

max_allowed_packet=16M

を入れてミッションコンプリートとなる予定でしたが

 

 

 

 

入れたのに変わらない

 

・ちゃんと[mysqld]のところに追記した

・設定後、mysqlをリスタートもさせた

 

のに反映されない

 

答え:他のところで設定されていやがった

”my.cnf”と同じ階層に”my.cnf.d”ってフォルダがありまして、そこのなかで設定されていました。

 

server.cnf
max_allowed_packet = 1M

 

これを#でコメントアウトしてからmysqlを再起動して、無事反映を確認。

そしてIFTTTも

 

 

まとめ

Call to undefined functionが出たらmysqlの設定を疑ってみましょう

・環境によってはmy.cnfが複数あって、単純に追加しただけではうまくいかないかもしれません。

 

ではまた。