このブログは、数回に分けて記載したいと思っています。
と、いうのは、
最初の、サーバー環境からのローカル環境のセットアップが中々大変だからです。
理由は、v8.5.6からv8.5.7への移行に際してエクスポート➡インポートがうまく動作しないことです。
調べてると、根本の理由は、テーブルのレイアウトが変更されたことでした。
- Fieldが削除されている
- Field名が変更されている
等で、インポート中にエラーになります。
エラーメッセージは、以下の様な内容です。
MySQL のメッセージ:
「ドキュメント #1054 - 列 'ak_job_posting_department' は 'field list' にはありません。」
下のTableの例では、削除されたFieldの内容が、
エクスポート側で、NULLまたは0、の値であったため、
個別のインポート用にSQL文を修正することで問題なさそうです。
INSERT INTO `CollectionSearchIndexAttributes` (`cID`, `ak_meta_title`, `ak_meta_description`, `ak_meta_keywords`, `ak_desktop_priority`, `ak_is_desktop`, `ak_icon_dashboard`, `ak_exclude_nav`, `ak_exclude_page_list`, `ak_header_extra_content`, `ak_tags`, `ak_is_featured`, `ak_exclude_search_index`, `ak_exclude_sitemapxml`
, `ak_job_posting_department`, `ak_job_location`, `ak_exclude_subpages_from_nav`, `ak_thumbnail`, `ak_blog_entry_topics`, `ak_project_topics`, `ak_project_client`, `ak_project_tasks`, `ak_project_skills`, `ak_og_image`) VALUES
(1, ~~~~~~~~~ ;
を
INSERT INTO `CollectionSearchIndexAttributes` (`cID`,`ak_meta_title`,`ak_meta_description`,
`ak_meta_keywords`,`ak_desktop_priority`,`ak_is_desktop`,`ak_icon_dashboard`,`ak_exclude_nav`,
`ak_exclude_page_list`,`ak_header_extra_content`,`ak_tags`,`ak_is_featured`,`ak_exclude_search_index`,
`ak_exclude_sitemapxml`) VALUES
(1, ~~~~~~~~~ ;
に修正。
ただ、これだけじゃあ無さそうなので、一度にインポートできません。
エラー発生都度、内容を確認しながら行うしかなさそうです。
(この後に分かったことは
- 削除されたFieldに、有効な値(0やNULL以外)がセットされているもの
- 同じ位置のField名が新バージョンでは変更されているもの
)がありました。
1.については、他のTableに移行したことが発見出来たら、
他のTableのInsert文を変更する必要がでてきます。
(もし他のTableに該当のFieldが見つからなければ、
無視して旧FieldはDrop(移行しない)するしかないでしょう。
この場合、開発サイトにどの様な影響が出るか?リスク含みとなります。)
2.については、Fieldの属性(Type)と桁数が、同じであれば、Insert文のField名を、
新しいField名にリネーム(変更)して、
INSERT INTO を個別に実行することにします(こちらのリスクは低いかと考えています)
なんと、このTableは10個もFieldが無くなっている!!!
テーブル:CollectionSearchIndexAttributes
# | Field | Type | ※ |
---|---|---|---|
01 | cID | int(10) | 主 |
02 | ak_meta_title | longtext | |
03 | ak_meta_description | longtext | |
04 | ak_meta_keywords | longtext | |
05 | ak_desktop_priority | decimal(14,4) | |
06 | ak_is_desktop | tinyint(1) | |
07 | ak_icon_dashboard | longtext | |
08 | ak_exclude_nav | tinyint(1) | |
09 | ak_exclude_page_list | tinyint(1) | |
10 | ak_header_extra_content | longtext | |
11 | ak_tags | longtext | |
12 | ak_exclude_page_list | tinyint(1) | |
13 | ak_exclude_search_index | tinyint(1) | |
14 | ak_exclude_sitemapxml | tinyint(1) | |
15 | ak_job_posting_department | NULL | 削 |
16 | ak_job_location | NULL | 削 |
17 | ak_exclude _subpages_from_nav |
0 | 削 |
18 | ak_thumbnail | 0 | 削 |
19 | ak_blog_entry_topics | NULL | 削 |
20 | ak_project_topics | NULL | 削 |
21 | ak_project_client | NULL | 削 |
22 | ak_project_tasks | NULL | 削 |
23 | ak_project_skills | NULL | 削 |
24 | ak_og_image | 0 | 削 |
主は、主Key
削は、削除されたField
このTableの例では、
将来使う予定であったField(値に、0やNullがセットされていた為)が、
今後も使用しないFieldとなった為、削除した様に思われる。
(多分、通常のバージョンアップでは、この辺りのSQL文は考慮されているものと考えられる)
と、いう訳で移行も、
このブログも長期戦になりますので、別の記事にしたいと考えています。
移行後のイメージ
下の画像は、別の開発環境のイメージです。
ConcreteCMSのv9.0.2を新規インストールで、
Theme:Atomikのフルサイト状態です。
2022/04/27追記
要検討事項
新たな、課題がみつかりました。
それは、v8.5.7になって削除されたFieldの内、v8.5.6時点のFieldに有効な値(0やNullでない)が含まれているTableが見つかったからです。
以下に、新たに見つけたTableの内容を(異なる記述方法で)記載します。
テーブル:UserSearchIndexAttributes
# | Field (v8.5.6) | Type | ※ |
---|---|---|---|
1 | uID | int(10) unsigned | PrimaryKey |
2 | ak_profile_private _messages_enabled |
tinyint(1) | |
3 | ak_profile_private _messages_notification_enabled |
tinyint(1) | |
4 | ak_nick_name | longtext | v8.5.7#N/A |
5 | ak_bio | longtext | v8.5.7#N/A |
6 | ak_Restaurant | longtext | v8.5.7#N/A |
7 | ak_Sport | longtext | v8.5.7#N/A |
8 | ak_Photo_studio | longtext | v8.5.7#N/A |
PrimaryKeyは、主Key
v8.5.7#N/Aは、削除されたField
但し、このTableのFieldの(ak_nick_name)値は,
0やNullでなく、「有効な値」が格納されています。
ak_nick_nameはField名からして重要ではなさそうですが、
他のTableで、同様なもの(有効な値が、格納されたFieldが削除されたもの)が見つかった場合は➡
本環境のv8.5.6から、ローカルの開発環境v8.5.7への移行方歩を考え直す必要がありそうです。➡
同じトピックの次の記事 ➡