コアサーバー(V1)の新サーバーへのマイグレーションで絵文字など、4Bコード(utf8mb4)を含む記事の更新でエラーが発生し、phpMyAdmin で SQL が使用不可の件

update 最終更新日:2023年6月7日 at 4:30 PM

アイキャッチ画像に示すように、コアサーバー(V1)において、新サーバーへのマイグレーション後、絵文字などの4Bコード(utf8mb4)を含む記事を更新すると、以下のエラーが表示され記事が更新できなくなりました

更新に失敗しました。データベースの投稿を更新できませんでした。

この現象は、サーバー移転などにより、WordPress のDBのコード体系に不整合が生じることで、発生する障害のようです。
そこで、止むを得ずコアサーバーのサポートへ連絡し、マイグレーション前のDBで修復を依頼しました。しかし、期待も空しく、結果は NG でした。

以下は、MariaDB 10.6 へリストアした WordPress のDBテーブルです。
コアサーバーのサポートによるリストア、 UpdraftPlus プラグインによるリストア、双方とも同様の結果でした。
phpMyAdmin で確認したところ、以下のように、DBの照合順序において uft8mb3_general_ci と uft8mb4_general_ci が混在しており、コード体系に整合性が取れていませんでした。

WordPress 4.2 以降でサポートされた絵文字入力を有効化するには、最低限、wp_posts, wp-postmeta などのテーブルの文字コードと照合順序が uft8mb4 に設定されている必要があるため、以下の SQL にてテーブルの文字コードセットと照合順序を変更してみました。

ALTER TABLE テーブル名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

しかし、それでも、結果は NG でした。


そこで、更に色々と試行錯誤したところ、以下の方法により、無事、DBの修復ができました!
絵文字を入力し、更新もできるようになりました。🎊 😄

サーバー移転後における WordPress のDB修復

先ずは、WordPressをインストールしたディレクトリにある wp-config.php において「DB_CHARSET」の定義を確認します。もし、以下のように定義されていない場合は当該行を修正します。

/** データベースのテーブルを作成する際のデータベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );

上記の設定を確認した後、以下の手順で DB の修復操作を実施します。

1.「phpMyAdmin」にログイン ⇒ 変更したいデータベース名を選択
2.ヘッダーの「操作」タブを選択 ⇒ 「照合順序」と書かれている箇所を見る。
3.照合順序で “utf8mb4_general_ci” を指定し「実行」をクリック

ここでは、全てのテーブルのカラム内の照合順序を変更し、文字コード変換も同時に実行します。

なお、この処理を実施する場合、予め、必ずDBのバックアップをとるようお願いします。また、あくまでも自己責任で行って下さい。

参考までにですが、以下の記事も併せてご覧ください。

2022.06.13 追記

phpMyAdmin で SQL が使用不可

移転先のコアサーバー(V1)において、新サーバーでは、 phpMyAdmin に制限が設けられているようです。phpMyAdmin については、取りあえず最近版 phpMyAdmin version 5.2.0 にはアップデートしておきました。
phpMyAdmin にログインすると、以下のワーニングが表示されます。

phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。
代わりにデータベースの操作タブを使って設定することもできます。

これは、 phpMyAdmin の環境保管領域が設定されていないため、拡張機能が使えないという事を意味します。そのため CREATE DATABASE, DROP DATABASE, ALTER TABLE, など、DBとテーブル操作を扱う一部の SQL が無効になるようです。
その直接の原因は、 MySQL から他のDB、即ち MariaDB への移行に伴い phpMyAdmin の環境保管領域が消えてしまった事によるものです。
実は、この件につきましては、私の記憶が定かではないので、何とも言えないのですが、実は初めから環境保管領域は無かったのかもしれません。😓

この問題は、phpMyAdmin がインストールされたディレクトリ「phpmyadmin/sql/」より “create_tables.sql” をインポートし、環境保管領域のDB「mysql」を作成し、 “config.inc.php” を編集すれば解決するらしいのですが、 phpMyAdmin でこのファイルを読み込むと以下のエラーとなります。

どうやら、新サーバーの環境では環境保管領域のDB作成に関するアクセス権限がないようなので、この方法では対応できませんでした。基本的には、上記の方法は、SUモードで phpMyAdmin へログインして処理する手順のようです。
但し、サーバー管理者により、 pma ユーザのアカウントが予め登録されてるのならば、コンパネから、拡張機能用データベースを作成し、 “create_tables.sql” と “config.inc.php” に記述された拡張機能用データベース名を適切な名前に変更し、ファイルを上書きし処理すれば環境保管領域のDBが作れる場合もあるようです。

しかしながら、コアサーバーの環境では、いずれのケースにも当てはまらないため、コアサーバー(V1)では、 phpMyAdmin 内で、SQL は使えないという事で諦めます。(但し、操作タグからの DB操作は可能)

なお、 phpMyAdmin にログインした際に「設定ファイルが秘密のパスフレーズを必要とするようになりました」というエラーも表示されていましたが、これは、 “config.inc.php” を開き、 blowfish_secret に任意の文字列で32バイトの非公開パスフレーズを設定し、ファイルを修正することで対処できました。

なお、本件に関しましては、本日、以下のようにコアサーバーのサポートへ問合せをしました。

投稿日:2022/06/13
マイグレーション後のコアサーバー(V1)では、phpMyAdminでSQLが使えないのは仕様ですか?

経緯は、以下リンク先の関連記事に書いておりますが、コアサーバー(V1)のマイグレーション後において、phpMyAdminで、環境保管領域が設定されていないため、いくつかの拡張機能が無効になっています。よって、 SQL が一切使えない状況となっております。

SQL を使えるようにするためには、 phpMyAdminの環境保管領域を作成する必要があります。そのためには、phpMyAdmin がインストールされたディレクトリ「phpmyadmin/sql/」より “create_tables.sql” をインポートし、環境保管領域のDB「mysql」を作成し、 “config.inc.php” を編集すれば解決すると思うのですが、“create_tables.sql” をインポートすると、”権限が無い” とのエラーが出てしまいます。(添付画像)
従って、こちらではどうすることもできません。

三浦

お問い合わせ詳細(573074) | お問い合わせフォーム (value-domain.com)

以下の通り、本件に関する回答がコアサーバーのサポートからありました。

どうやら、 phpMyAdmin の環境保管領域のサポートは無いようです。
サポートの方は、私の質問の意味を完全に理解されているとは思えませんが、技術部門の意を汲むのならば、DBの作成はコンパネから出来るので、SQLクエリの操作は、プログラムから実行してくれという事ですかね。
phpMyAdmin において、 SQLクエリへの使用を制限するのは、きっと、コアサーバーにおけるセキュリティ上の方針かと思います。
コアサーバーに関しては、サポートのスキルが低く、技術部門へのメッセンジャーの役割しか果たしていないため、質問への回答が遅いこと、時に意味不明なテンプレートの回答しか返って来ないこともあるので、サポートには期待せず、なるべく自己解決できるような人がコアサーバーを利用されるのが良いでしょう。
取りあえず、私のサーバーにおいて、運営上の支障は特に無いため、本件はこれでクローズとします。

2022.06.16 追記
前回のサポート担当の回答が曖昧な内容であったため、再度、細かく質問したところ、コアサーバーの担当者より、以下の正式回答を得ています。
要するに、権限が与えられていない DB操作に関しては、コアサーバーのコンパネ上から、ならびに phpMyAdmin の操作タグからでの運用となるようです。

お問い合わせの件について案内させていただきます。
コアサーバーV1につきまして、リニューアル前/後も同様にお客様でご利用のデータベースユーザー名に対してデータベースの操作権限は付与しておりません。
そのため、phpMyAdminの「CREATE」「ALTER」につきまして「CREATE DATABASE」文、「ALTER DATABASE」文となります場合、実行することはできかねてしまいます。

このエントリーをはてなブックマークに追加
X(ポスト)

コメントを残す