どうもこんにちは、さんぺい(@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が複数あって、単純に追加しただけではうまくいかないかもしれません。
ではまた。
WordPress使ってるなら持っておきたい書籍たち