tohokuaikiのチラシの裏

技術的ネタとか。

WordPress5.5系にUpgradeするとDBアップデートでエラーが出てしまう件

結論から言うと、5.5は関係なかった。

WordPressのcron履歴の取り方が変だった。

There has been a critical error on your website.

Learn more about debugging in WordPress.

とか出た。日本語だと「このサイトで重大なエラーが発生しました」ってやつ。何の手掛かりも無いのでソースコードを追ってみた。

function upgrade_550() {

で引っかかってるっぽい。wp-admin/includes/upgrade.php

もっと追っていくと最後の

<?php
        wp_schedule_single_event( time() + ( 1 * MINUTE_IN_SECONDS ), 'wp_update_comment_type_batch' );

ところ。

function _set_cron_array( $cron ) {

wp-includes/cron.php
をさかのぼっていくと、

function wp_schedule_single_event( $timestamp, $hook, $args = array() ) {

function _set_cron_array( $cron ) {

return update_option( 'cron', $cron );

が詰まっているッぽい。 なんだよ、こんな基本的なもの…

この$cronなんなん?

と思って、ログに吐き出させると、

{i:1522275037;a:3:{s:16:"wp_version_check";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}s:17:"wp_update_plugins";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}s:16:"wp_update_themes";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:10:"twicedaily";s:4:"args";a:0:{}s:8:"interval";i:43200;}}}i:1522297407;a:1:{s:19:"wp_scheduled_delete";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}}i:1522300588;a:1:{s:30:"wp_scheduled_auto_draft_delete";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}}i:1522308843;a:1:{s:25:"delete_expired_transients";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}}i:1522826720;a:1:{s:8:"do_pings";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:2:{s:8:"schedule";b:0;s:4:"args";a:0:{}}}}i:1527828937;a:1:{s:34:"wp_privacy_delete_old_export_files";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{

とかで軽く10Mを越える配列データが入ってた。やべぇやつや。

なんだよこのオプションは…

仕方ないのでDBを見てみる…

select * from wp_options where option_name="cron";
ERROR 2020 (HY000): Got packet bigger than 'max_allowed_packet'

Oh...

既にDBからしてやべぇやつやったのか…

なんかこれまでの運用でやらかしてしまったんかなー…とか思いつつこれ何かなと思うと、WordPressのcronのログっぽい。 いらんわー。消す。

なんか困ってる人もいたみたい。 そりゃ困るよな…

MySQLコマンドから

MariaDB > select option_id from wp_options where option_name="cron";
+-----------+
| option_id |
+-----------+
|        99 |
+-----------+
1 row in set (0.016 sec)

MariaDB > update wp_options set option_value="" where option_id=99;

で、またDB更新させると… できたー。