この記事では、書き込みエラー、データベース作成の失敗、互換性の問題、テーブル照合エラーなど、MySQL データベースのさまざまな問題の解決方法について詳しく説明します。
データベース書き込みエラー
コピー先サーバーが MySQL 5.7+ で、Duplicator のログに次のようなエラーが表示される場合:ERRORdatabase error write '...' のようなエラーがDuplicatorのログに表示される場合、MySQLをストリクトモードで実行すると問題が発生する可能性があります。この場合、以下のオプションを試してください:
一般的なエラーメッセージ
- DB ERROR:テーブル wp_XYZ の CREATE クエリを取得できませんでした。ファイル内の情報が正しくありません:'./database_store/wp_XYZ.frm'。
- DATABASE ERROR: この関数の宣言とバイナリ・ロギングには、DETERMINISTIC、NO SQL、READS SQL DATAのいずれもありません。
- テーブルxxxのテーブルスペースが存在します。インポートする前にテーブル空間を破棄してください。
解答1
一般的な書き込みエラーについては、いくつかの選択肢があります。順番に試してみてください。最も手っ取り早い解決策は OPTION A ですが、サーバに恒久的に残すためには OPTION B を検討してください。
オプションA
- インストーラーの詳細モードを有効にする。
- Options " Database " Extraction Setingsで、Mode settingsでCustomを選択し、テキストボックスにNO_ENGINE_SUBSTITUTIONと入力する。
- 続けてインストールを完了する。
オプションB
- このファイルをメモ帳で開く:C: \wamp64bin ∮mysql5.7.9 ∮my.ini
- 最後の行をファイルに追加する:
[mysqld]
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION - MySQL サーバを再起動します(格安ホストの場合は、ホスティングプロバイダに問い合わせる必要があります)。
オプションA/Bが機能しない場合は、以下を実行してください:
- rootとしてサーバーにSSH接続し、/etc/mysql/conf.d/disable_strict_mode.cnfファイルを作成する。
[mysqld]
sql_mode=IGNORE_SPACE, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION- を実行して MySQL を再起動する:
$ sudo service mysql restart
解答2
次のエラー・メッセージに関連する作成クエリの書き込み問題を解決します:
EXCEPTION メッセージ:DB ERROR:テーブルwp_XYZのCREATEクエリを取得できませんでした。ファイル内の情報が正しくありません:'./database_store/wp_XYZ.frm'に誤った情報があります。
- 現在のWordPressサイトでデータベースの修復を実行してください。
- インストーラのステップ2 " テーブルタブ " 問題の発生しているテーブルのインポートフラグのチェックを外します。
- または、ステップ1でバックアップを作成する際に、当該テーブルを追加対象から除外する。
解決策3
DATABASE ERROR: This function has none of DETERMINISTIC, NO SQL, READS SQL DATA in its declaration and binary logging is enabled (you want to use the lesssafe log_bin_trust_function_creators variable).
MySQLコンソールで以下を実行するか、mysql.ini設定ファイルに以下を追加する:
SET GLOBAL log_bin_trust_function_creators = 1;
log_bin_trust_function_creators = 1
この設定により、非決定性関数のチェックが緩和されます。非決定性関数とは、データを変更する(つまり、update、insert、deleteステートメントを持つ)関数のことです。
詳細はこちらを参照してください。完全な詳細については、こちらの記事を参照してください。
ホスティングプロバイダーが上記の設定を許可しない場合は、ホスティングプロバイダーに直接連絡するか、ファンクションを書いた開発者と協力して、データベースエンジンの要件で適切に動作するように再評価してもらうことを検討してください。
解答4
インストール中に以下のようなメッセージが表示された場合は、データベース・テーブルの削除プロセスで適切に削除されなかったtablename.ibdファイルのいずれかを削除する必要がある可能性があります。
テーブルxxxのテーブルスペースが存在します。
この問題に対する可能なすべての解決策については、このstack-overflowの記事を参照してください。
データベース作成の失敗
データベースの作成アクションを使用しようとすると、"Unable to create database..."(データベースを作成できません)などのメッセージが表示されます。
ソリューション
"Unable to create database... "は、通常ホストがPHPコードによるデータベースの作成をサポートしていないことを意味します。この場合、ホストが提供するツールを使ってデータベースを作成する必要があります。
ほとんどのホストでは、cpanelを通してこれを行うことができます。新しいデータベースを作成する方法については、ホストにお問い合わせください。Duplicator ProユーザーはcPanel接続タブを使ってcPanelアカウントにログインし、cPanelインストーラーインターフェイスを通してデータベースを作成することができます。または、インポートまたは上書きモードを使用することもできます。
互換性の問題
データベースの非互換性の問題を避けるために、ビルドサーバとインストーラサーバのデータベースのバージョンができるだけ近いことを確認してください。バックアップがインストール先よりも新しいデータベースバージョンで作成された場合、問題が発生する可能性があります。
インストーラを実行するサーバーのバージョン番号が、インストーラがビルドされた場所と同じかそれ以上であることを確認するのが最善です。メジャーバージョンとマイナーバージョンが同じか近い場合 (例えば、[5.7 から 5.6]) は、問題なく移行できるはずです。バージョンのペアが[5.7から5.1]の場合は、非常にシンプルなセットアップでない限り、問題が発生する可能性が高くなります。バージョンが離れすぎている場合は、ホスティングプロバイダと協力して、このサーバの MySQL エンジンをアップグレードしてください。
解決策1:UTF8MB4 FORMAT
現在検出されているMySQLサーバーのバージョンが5.5.3(2010年4月8日リリース)未満の場合、utf8mb4テーブルのサポートは動作しません。utf8mb4フォーマットは、MySQLサーバー5.5.3+でのみサポートされています。WordPressの最近のリリースとの互換性を高め、インストールエラーの問題を回避するために、このサーバーのMySQLサーバーのバージョンをアップグレードすることを強くお勧めします。
解決策2:UTF8入力
データベース接続文字列の一部として非 ASCII 文字が検出され、MySQL サーバーが正しく設定されていない場合、接続できません。この問題は、MySQLのmy.ini設定を更新することで解決できます。
[mysqld]の下にcharacter_set_server=utf8という設定を追加し、データベースサーバーを再起動してください。この値はコメントを外す必要があるかもしれない。
解決策3:MARIA-DB SETUPS
バージョンが10.N.Nの場合、データベース・ディストリビューションはMySQLのMariaDBフレーバーである。ディストリビューションは非常に近いが、微妙な違いがいくつかある。オペレーティングシステムによっては、「5.5.5-10.1.21-MariaDB」のように、両者の相関関係を示すバージョンを報告するものもあります。詳細については、オンラインのMariaDB対MySQL - 互換性ページをご覧ください。
いくつかのメッセージは単なる通知であることに注意してください。インストールプロセスを続行し、インストーラのステップ 3 にあるインストーラレポートとともに、installer-log.txt ファイルを注意深く監視することを強くお勧めします。インストールプロセスでエラーが検出されなかったことを確認するため、これらの場所に通知/警告/エラーがないか必ず確認してください。問題が見つかった場合は、FAQ ページで "インストールレポート上のデータベースエラーや一般的な警告を解決するには?" を参照してください。
解決策4:テーブルを作成する
MySQLとMariaDBでのテーブルの作成は非常によく似ていますが、いくつかの小さな違いがあり、時々(よくあることではありませんが)問題を引き起こすことがあります。それぞれの違いを見るには、こちらの2つのドキュメントを参照してください:
MariaDBにはMySQLにはないオプションがある)そのため、MariaDBでは動作したが、MySQLがサポートしていないテーブルオプションがあるCREATEクエリを実行しようとすると、失敗することがあります。現在のところ、DBダンプから問題のあるテーブルオプションを削除するには、ファイルを手動で検索・置換することで対処しています。
テーブル照合の問題
互換モードと「不明な照合順序」エラーを解決するには?
この問題を解決するには4つの方法がある。オプション1は、この問題を解決する最も迅速で簡単、かつ安全な方法です。
未知の照合順序の概要
不明な照合順序」エラーは、インストールされているMySQLサーバ(ターゲットサーバ)が、バックアップを作成したMySQLエンジンよりも古いことを意味します。などのエラーメッセージが表示されます:
ERRORデータベースエラー write 'Unknown collation: 'utf8mb4_unicode_ci'
は、使用している MySQL バージョンがこのテーブル形式をサポートしていないために発生します。MySQL サーバのバージョン比較は、インストーラの "Test Connection" ボタンをクリックするか、installer-log.txt ファイルを表示することで確認できます。出力は次のようになります:
MYSQL VERSION: このサーバー:5.4.22 - ビルド・サーバー5.7.10
オプション1 - データベース・ソフトウェアの更新
不明な照合順序」問題を修正する最もクリーンで安全な方法は、バックアップが構築されたバージョンと同じか新しいバージョンにターゲットMySQLサーバを更新することです。最も一般的なフォーマットエラーは以下の通りです:
- utf8mb4_unicode_ci: MySQL サーバー 5.5.3+ が必要です。
- utf8mb4_unicode_520_ci: MySQL サーバー 5.6+ が必要です。
ベスト・フィックス:この問題を解決する最も簡単な方法は、必要な照合順序をサポートするMySQLサーバーにアカウントを移動するようホストに依頼することです(上記の例を参照)。エラーメッセージを伝えれば、適切なサーバーに移動してくれます。
ほとんどのホストは、あなたのサイトがある現在のサーバーをアップグレードしませんが、彼らは簡単に新しいサーバーにあなたのアカウントを移動することができるはずです。これは非常に一般的なことで、良いホストであればかなり簡単に対応してくれるはずです。
5.5.3より低いバージョンを使用している場合、MySQLサーバーのバージョンが非常に古いことになります。5.5.3は2010年にリリースされましたので、お使いのMySQLサーバーのバージョンはさらに古いことになります。私たちは、セキュリティとパフォーマンスを向上させ、WordPressコアのアップデートに準拠するために、最新のソフトウェアを使用するようにホストと協力することを強くお勧めします。くだらないホストに時代遅れのソフトウェアを使わせないようにしましょう。
オプション2 - レガシーチェックを有効にする
インストーラーのステップ2のオプションに "Legacy "というタイトルの設定があり、"Apply legacy collation fall-back support for unknown collations types "というラベルがついています。このチェックボックスをオンにすると、レガシー照合順序のフォールバックが適用され、インストールが続行されます。
データベーステーブルを作成する際、使用する MySQL バージョンがテーブルを作成した MySQL バージョンの照合順序タイプをサポートしていない場合があります。このシナリオでは、インストーラはレガシーの照合順序タイプにフォールバックしてテーブルの作成を試みます。この値は、データベースのインストール時にエラーが発生した場合にのみチェックする必要があります。
たとえば、バックアップが MySQL 5.7 で構築され、テーブル照合順序のタイプが 'utf8mb4_unicode_520_ci' である場合、このタイプをサポートしていない古い MySQL 5.5 エンジンでインストーラを実行すると、エラーが発生します。このオプションがチェックされている場合、レガシー設定は 'utf8mb4_unicode_520' を使用しようとし、次に 'utf8mb4' を使用しようとし、次に 'utf8' を使用しようとします。このオプションはほとんどのセットアップで機能しますが、上記のオプション1が推奨される最も安全なオプションです。
オプション3 - 互換モードの実行
Mysqldump 互換性モードは、他のデータベースシステムや古い MySQL サーバーとの互換性が高いデータベース SQL スクリプト出力を生成するのに役立ちます。
The Duplicator はいくつかの互換性モードをサポートしており、これらはすべてプラグインで mysqldump モードが有効になっている場合にのみ使用できます。互換モードは mysqldump オプションを使用してバックアップを構築するときに有効にすることができます。
デュプリケーターは作成プロセス中にのみ互換モードを許可します。テンプレートを作成する時やスケジュールを使用する時には許可されません。このような設定を行う理由は、これらの設定を使用することをやめさせ、本当の問題、つまりデータベースサーバーを更新することを解決するためです。
データベースのアップグレード互換モードは最後の手段としてのみ使用してください。データベースの問題を解決するために推奨される方法は、両方のデータベースサーバーが最新で、バージョン番号が非常に近いことを確認することです(オプション1を参照)。例えば、バックアップを作成したデータベースサーバーが5.7.5である場合、バックアップをインストールしたデータベースサーバーは少なくとも5.7.Nの範囲である必要があります。可能であれば、ホストまたはサーバー管理者にMySQLサーバーを新しいバージョンにアップグレードするよう依頼してください。ホストが最近のバージョンにアップグレードしない場合は、できるだけ高いバージョンにアップグレードするよう依頼してください。
データの保存:インターネット上には、現在のSQLファイルを修正したり、mysqldump互換モードを使用したりする方法を説明した回避策(オプション4)がいくつかありますが、根本的な問題は、データをあるフォーマットで保存しておき、それを変換しようとしていることです。これらのテクニックは、後々データの損失や非互換性の問題につながる可能性があります。正しい方法は、MySQL ソフトウェアをアップグレードすることです。
両方のモードを試してみよう:
- Duplicatorは現在2つの異なるモードをサポートしています:MysqldumpとPHPモードです(設定 " バックアップオプションを参照)。
- もし、文字の問題に直面し、選択肢がなくなってしまった場合は、両方のモードでデータベースを構築し、どちらか一方が問題を解決するかどうか試してみることを検討してもよいだろう。
オプション4 - 手動設定
これらのオプションは上級者向けであり、注意して実行してください。これらのオプションを使用するには、database.sqlスクリプトを更新するか、ソース・データベースのテーブル照合タイプを更新する必要があります。以下は3つの異なるアプローチです。問題に対処するために必要なオプションは1つだけです。
database.sqlを更新する
照合順序が不明」な問題については、以下の手順を試してみてください:
- アーカイブのzipファイルを手動で解凍する。
- database.sqlファイルをメモ帳で開き、照合順序を検索&置換する。例えば
- replace: 'utf8mb4' を 'utf8' に置き換える。
- replace: 'utf8_unicode_520_ci' を 'utf8_general_ci' に置き換える。
次に、サーバー上のinstaller.phpファイルをブラウズし、Advancedを選択して "Manual Extract "をチェックします。
これは、他の照合順序でも試すことができます(例えば、'collation_type_1'を'collation_type_2'に置き換えます)。
ソースデータベースをコードで更新する
このオプションを使用するには、システムをよく理解し、前もってバックアップをとっておく必要がある。このスクリプトは、ビルドサーバー上で照合順序を変更し、ターゲットサーバーでサポートできるようにします。スクリプトの全文は、スタック・オーバーフローのhttp://stackoverflow.com/a/29939906/2808424。
IDEでソースデータベースを更新する
上記のコードを実行するのが面倒な場合は、IDEやGUIツールを使って、SQL文やインターフェイスを使ってテーブルの照合を手動で変更することもできる。繰り返しますが、これらのオプションを使用するには、システムをよく理解し、前もってバックアップを取っておく必要があります。
phpMyAdminのようなIDEを使って照合順序を更新する簡単な手順を以下に示します:
- phpMyAdmin
- SQLステートメント
- MySQLワークベンチ
また、
Duplicatorのための推奨ホスティングプロバイダ?
http://dev.mysql.com/downloads/mysql
https://make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade