私たちはvbulletin 5データベースをRDS /Auroraにインポートして、これを取得しようとしています:
行5733のエラー1118(42000):行サイズが大きすぎます(> 8126)。一部の列をTEXTまたはBLOBに変更するか、ROW_FORMAT = DYNAMICまたはROW_FORMAT = COMPRESSEDを使用すると役立つ場合があります。現在の行形式では、768バイトのBLOBプレフィックスがインラインで格納されます。
これは、失敗している挿入のテーブル構造です。
DROP TABLE IF EXISTS `language`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `language` (
`languageid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(50) NOT NULL DEFAULT '',
`userselect` smallint(5) unsigned NOT NULL DEFAULT '1',
`options` smallint(5) unsigned NOT NULL DEFAULT '1',
`languagecode` varchar(12) NOT NULL DEFAULT '',
`charset` varchar(15) NOT NULL DEFAULT '',
`imagesoverride` varchar(150) NOT NULL DEFAULT '',
`dateoverride` varchar(50) NOT NULL DEFAULT '',
`timeoverride` varchar(50) NOT NULL DEFAULT '',
`registereddateoverride` varchar(50) NOT NULL DEFAULT '',
`calformat1override` varchar(50) NOT NULL DEFAULT '',
`calformat2override` varchar(50) NOT NULL DEFAULT '',
`logdateoverride` varchar(50) NOT NULL DEFAULT '',
`locale` varchar(20) NOT NULL DEFAULT '',
`decimalsep` char(1) NOT NULL DEFAULT '.',
`thousandsep` char(1) NOT NULL DEFAULT ',',
`phrasegroup_global` mediumtext,
`phrasegroup_cpglobal` mediumtext,
`phrasegroup_cppermission` mediumtext,
`phrasegroup_forum` mediumtext,
`phrasegroup_calendar` mediumtext,
`phrasegroup_attachment_image` mediumtext,
`phrasegroup_style` mediumtext,
`phrasegroup_logging` mediumtext,
`phrasegroup_cphome` mediumtext,
`phrasegroup_promotion` mediumtext,
`phrasegroup_user` mediumtext,
`phrasegroup_help_faq` mediumtext,
`phrasegroup_sql` mediumtext,
`phrasegroup_subscription` mediumtext,
`phrasegroup_language` mediumtext,
`phrasegroup_bbcode` mediumtext,
`phrasegroup_stats` mediumtext,
`phrasegroup_diagnostic` mediumtext,
`phrasegroup_maintenance` mediumtext,
`phrasegroup_profilefield` mediumtext,
`phrasegroup_thread` mediumtext,
`phrasegroup_timezone` mediumtext,
`phrasegroup_banning` mediumtext,
`phrasegroup_reputation` mediumtext,
`phrasegroup_wol` mediumtext,
`phrasegroup_threadmanage` mediumtext,
`phrasegroup_pm` mediumtext,
`phrasegroup_cpuser` mediumtext,
`phrasegroup_accessmask` mediumtext,
`phrasegroup_cron` mediumtext,
`phrasegroup_moderator` mediumtext,
`phrasegroup_cpoption` mediumtext,
`phrasegroup_cprank` mediumtext,
`phrasegroup_cpusergroup` mediumtext,
`phrasegroup_holiday` mediumtext,
`phrasegroup_posting` mediumtext,
`phrasegroup_poll` mediumtext,
`phrasegroup_fronthelp` mediumtext,
`phrasegroup_register` mediumtext,
`phrasegroup_search` mediumtext,
`phrasegroup_showthread` mediumtext,
`phrasegroup_postbit` mediumtext,
`phrasegroup_forumdisplay` mediumtext,
`phrasegroup_messaging` mediumtext,
`phrasegroup_inlinemod` mediumtext,
`phrasegroup_hooks` mediumtext,
`phrasegroup_cprofilefield` mediumtext,
`phrasegroup_reputationlevel` mediumtext,
`phrasegroup_infraction` mediumtext,
`phrasegroup_infractionlevel` mediumtext,
`phrasegroup_notice` mediumtext,
`phrasegroup_prefix` mediumtext,
`phrasegroup_prefixadmin` mediumtext,
`phrasegroup_album` mediumtext,
`phrasegroup_socialgroups` mediumtext,
`phrasegroup_advertising` mediumtext,
`phrasegroup_tagscategories` mediumtext,
`phrasegroup_contenttypes` mediumtext,
`phrasegroup_vbblock` mediumtext,
`phrasegroup_vbblocksettings` mediumtext,
`phrasegroup_vb5blog` mediumtext,
`vblangcode` varchar(12) NOT NULL DEFAULT '',
`revision` smallint(5) unsigned NOT NULL DEFAULT '0',
`phrasegroup_ckeditor` mediumtext NOT NULL,
`phrasegroup_cpcms` mediumtext NOT NULL,
`phrasegroup_navbarlinks` mediumtext NOT NULL,
PRIMARY KEY (`languageid`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
これは失敗している[〜#〜] insert [〜#〜]です: https://Gist.githubusercontent.com/ tobsn/a7e573f0df69f483023b/raw/7ae033b921474a2081f5f97a5c348bb08b02d56c/gistfile1.txt
テーブルをInnoDBに設定し、innodb_log_file_sizeしかし、この構成変数はRDSではアクセスできないようです。フィールドをtext、longtext、およびblobに変換しようとしましたが、どれも問題を解決しませんでした。
ありがとうございました!
さて、これを調査して20〜30程度の可能性のある解決策を試した後、私はそれを機能させることができませんでした。したがって、考えられるすべてのソリューションでインポートが失敗します。
私はAuroraインスタンスを終了し、MySQLインスタンスを作成しました。すぐに問題なくインポートされました。インポートまたはログのサイズ制限は、はるかに高いデフォルトに設定されており、データを制限しません。 Amazonは、Auroraではこれまでのところ、Auroraでのこの制限を変更しないと述べたと伝えられています。 MySQLのもう一方の側では、先ほど言ったように、すでにかなり高い制限を設定して、それを編集可能なパラメータにしました。
TLDR:設定したフィールドタイプに関係なく、Auroraは常にフィールドが大きすぎるため、RDS MySQLを使用します。
間違ったデザイン。もう1つのフレーズが必要な場合は、コストのかかる操作である_ALTER TABLE
_を使用する必要があります。
代わりに...
PRIMARY KEY(languageid, phrasegroup)
を使用して、新しい3列のテーブルPhraseGroups
を作成します。 L * P行が含まれます。L=言語の数、P =フレーズグループの数。 phrasegroup
はVARCHAR(44)
で、「グローバル」、「フォーラム」、「スタイル」、「ユーザー」などを含みます。さらに、languageid
(_AUTO_INCREMENT
_以外)とMEDIUMTEXT
。DROP
そのテーブルのすべてのphrasegroup
列。これにより、テーブルlanguage
に、_thousand_sep
_などの言語に関するメタ情報が残ります。これはよりクリーンなスキーマになり、8126の制限を完全に回避します。
(そして、それはMyISAMまたはInnoDBで機能します。任意のROW_FORMAT)
しかし、LOAD
の準備ができているファイルがあるので、そこに到達する方法は次のとおりです。具体的には_ENGINE=MyISAM
_を使用してテーブルを作成しますが、「raw」のような名前を付けます。次に、私の3つのステップを実行します。ステップ3は、_CREATE TABLE languages... SELECT ... FROM raw;
_として実行する方がよい場合があります。
MyISAMエンジンで「テーブルの作成」を表示しますが、エラーはInnoDBから発生しているため、変更したか、RDSで変更しました。
から manual :
「MySQLの古いバージョンで作成されたテーブルは、アンテロープファイル形式を使用します。これは、ROW_FORMAT = REDUNDANTおよびROW_FORMAT = COMPACTのみをサポートします。これらの形式では、MySQLは、BLOB、VARCHAR、およびTEXT列の最初の768バイトをクラスター化インデックスレコードに格納します。主キー768バイトのプレフィックスの後に、残りの列値を含むオーバーフローページへの20バイトのポインターが続きます。
つまり、これらの形式を使用すると、TEXT列のバリアントごとに行サイズが768バイト増加する可能性があります。実際の行のデータが合計で8kの制限を超えると、エラーが発生します。これは、フィールドにそれほど短くないテキストが多数ある場合に発生し、1つの長いテキストはトリガーされません。
ROW_FORMATを、プレフィックスをインラインに保持しないものに変更するか、テーブルを2つ以上に分割して、それぞれに適切な数のblob/text列を含めることができます。
代わりにMyISAMを使用することもできますが、RDSがそれを十分にサポートしているかどうかはわかりません。