Categories: WordPress

StaticPressをMySQL5.6の環境で導入しようとしたら詰まった話

WordPressのページをHTML生成できるStaticPressを導入しようとしたところ、
MySQL 5.6を使っていたがためのエラーが出たので、その時のメモです。

まず、StaticPressをインストールして有効化したあとに、
早速StaticPressのページで再構築ボタンを押下しました。

終了とすぐに表示されたのですが、https://blog.mogmet.com/static/にアクセスしてもページが出ませんでした。

おや?と思ってエラーログ見たらこんなエラーが出ていました。

WordPress \xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc: DROP command denied to user ‘ユーザ名’@’ホスト名’ for table ‘wp_urls’ for query truncate table `wp_urls` made by do_action(‘wp_ajax_static_press_init’), call_user_func_array, static_press->ajax_init, static_press->insert_all_url, static_press->get_urls, dbrc_wpdb->query, dbrc_wpdb->dbcr_query, referer: https://blog.mogmet.com/wp-admin/admin.php?page=static-press

※16進数のところは「データベースエラー」と書いてあります。

セキュリティ上の観点からユーザにdrop権限を与えていなかったので、しょうがないのでwp_urlsだけ権限を与えることにしました。

GRANT DROP on `スキーマ名`.wp_urls TO 'ユーザ名'@'ホスト名';

再度、再構築を実施したがまたしてもエラーが発生。

WordPress \xe3\x83\x87\xe3\x83\xbc\xe3\x82\xbf\xe3\x83\x99\xe3\x83\xbc\xe3\x82\xb9\xe3\x82\xa8\xe3\x83\xa9\xe3\x83\xbc: Field ‘file_name’ doesn’t have a default value for query insert into wp_urls (`type`,`url`,`last_modified`,`enable`,`create_date`) values (‘static_file’,’/wp-content/uploads/images/phpinfos.jpg’,’2013-07-21 01:45:20′,’1′,’2014-04-19 10:00:21′) made by do_action(‘wp_ajax_static_press_init’), call_user_func_array, static_press->ajax_init, static_press->insert_all_url, static_press->update_url, dbrc_wpdb->query, dbrc_wpdb->dbcr_query, referer: https://blog.mogmet.com/wp-admin/admin.php?page=static-press

確かにテーブル定義をみてもfile_nameはNOT NULLで定義されているのにINSERT文にはfile_nameへのINSERTがありませんでした。

定義がだめなのかなと思いましたがひとつ思い当たる節がありました。

■ mysql 5.6 はDefault not null のカラムにnullが来た時にエラーを返すが、5.5以下はその型のデフォルト値を入れてくれる。■ 5.6でもnullが来た時デフォルト値を入れる方法 /usr/my.cnf の一番下の行をコメントアウトしmysql再起動 #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 参考) http://d.hatena.ne.jp/oranie/20130402/1364906656
mysql 5.5以下と5.6の違い - Ryusuke Fuda's Tech Blog - Ryusuke Fuda's Tech Blog

mysql 5.6 はDefault not null のカラムにnullが来た時にエラーを返すが、5.5以下はその型のデフォルト値を入れてくれる。

これだ!!
ということでsql_modeはしょうがなくなくなく5.5への挙動にもどしました。
my.cnfとかに以下を記述してmysqlを再起動します。

sql_mode=''

設定項目に書いても反映されない場合は直接sql_modeを書き換えてしまいましょう。

mysql> set global sql_mode='';

確認する場合は以下を実行します。

mysql> show variables like 'sql_mode';

sql_modeの変更ができた後に再構築ボタンを押下したら問題なく動きました。

ちなみにソーシャルボタンなどをおけるプラグインSharebarも似たような挙動だったので、この設定でおそらくうまく追加などができるはずです。

めでたしめでたし。

mogmet

View Comments

  • Your article gave me a lot of inspiration, I hope you can explain your point of view in more detail, because I have some doubts, thank you.

  • Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

Share
Published by
mogmet