使用WP-CLI和/或Search-Replace-DB迁移多站点

时间:2020-08-16 作者:mjones

我有一个Wordpress 5.5/PHP7.3多站点生产站点安装,我正在尝试将其迁移到本地LAMP开发环境,以便进行编辑。

The Problem: 就是在运行Search Replace DB脚本或WP Cli多站点迁移脚本时。一个子网站完美地加载到新的开发域上,同时主网站和具有相同主题的子网站成功加载,但主题似乎已中断(基于visual composer)。可能还有其他非视觉错误。

我已经下载了所有文件,正确配置了LAMP virtualhost,并通过PHPMYADMIN将数据库导入到我的本地LAMP环境中(NOTE: 在导出生产数据库之前,我网络停用了Yoast SEO插件)。

我的多站点有以下URL需要更改:

1)示例。组织-->;本地主机。实例组织机构

2)网络研讨会。实例组织-->;网络研讨会。本地主机。实例组织机构

3)博客。实例组织-->;博客本地主机。实例org(映射到“otherdomainname.org”的域)--完美无瑕

ERROR MESSAGES:

尽管网络停用了Yoast SEO插件,但在按照建议导出到产品之前,我在执行Search Replace DB时收到以下错误:

The dry-run option was selected. No replacements will be made.

The table "tclrx_2_cleantalk_sfw" has no primary key. Changes will have to be made manually.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

    
2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

2: Erroneous data format for unserializing \'ActionScheduler_IntervalSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

This is usually caused by a plugin storing classes as a serialised string which other PHP classes can\'t then access. It is not possible to unserialise this data because the PHP can\'t access this class. P.S. It\'s most commonly a Yoast plugin that causes this error. Your changes will still have taken place within the rest of the database.

The table "tclrx_7_cleantalk_sfw" has no primary key. Changes will have to be made manually.

2: Erroneous data format for unserializing \'ActionScheduler_NullSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_SimpleSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_SimpleSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_NullSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_NullSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_NullSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_SimpleSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_SimpleSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'ActionScheduler_SimpleSchedule\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

The table "tclrx_cleantalk_sfw" has no primary key. Changes will have to be made manually.

syntax error, unexpected \'\\\' (T_NS_SEPARATOR), expecting \'{\'

2: Erroneous data format for unserializing \'FS_Plugin\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833

2: Erroneous data format for unserializing \'WP_User\' in /var/www/html/example.org/DP-Search-Replace-DB/srdb.class.php on line 833
当执行Search Replace DB时(不是干运行),我遇到了上面描述的问题:主题被破坏,可能还有其他非视觉错误。

因此,此时我安装了WP Cli并运行了以下多站点兼容迁移脚本found here:

# Bash script: Search/replace production to development url (multisite compatible)
#!/bin/bash
if $(wp --url=example.org core is-installed --network); then
    wp search-replace --url=example.org \'example.org\' \'localhost.example.org\' --recurse-objects --network --skip-columns=guid --skip-tables=wp_users
else
    wp search-replace \'example.org\' \'example.org\' --recurse-objects --skip-columns=guid --skip-tables=wp_users
fi
它成功执行,但生成以下错误:

Warning: Skipping an uninitialized class "Stripe\\ApplePayDomain", replacements might not be complete.
Warning: Skipping an uninitialized class "FS_Plugin", replacements might not be complete.
Warning: Skipping an uninitialized class "FS_Plugin", replacements might not be complete.
+------------------------+-----------------------+--------------+------+
| Table                  | Column                | Replacements | Type |
+------------------------+-----------------------+--------------+------+
| wp_2_commentmeta    | meta_key              | 0            | SQL  |
| wp_2_commentmeta    | meta_value            | 0            | SQL  |
| wp_2_comments       | comment_author        | 0            | SQL  |
| wp_2_comments       | comment_author_email  | 0            | SQL  |
| wp_2_comments       | comment_author_url    | 0            | SQL  |
| wp_2_comments       | comment_author_IP     | 0            | SQL  |
| wp_2_comments       | comment_content       | 0            | SQL  |
| wp_2_comments       | comment_approved      | 0            | SQL  |
| wp_2_comments       | comment_agent         | 0            | SQL  |
| wp_2_comments       | comment_type          | 0            | SQL  |
| wp_2_links          | link_url              | 0            | SQL  |
| wp_2_links          | link_name             | 0            | SQL  |
| wp_2_links          | link_image            | 0            | SQL  |
| wp_2_links          | link_target           | 0            | SQL  |
| wp_2_links          | link_description      | 0            | SQL  |
| wp_2_links          | link_visible          | 0            | SQL  |
| wp_2_links          | link_rel              | 0            | SQL  |
| wp_2_links          | link_notes            | 0            | SQL  |
| wp_2_links          | link_rss              | 0            | SQL  |
| wp_2_options        | option_name           | 0            | SQL  |
| wp_2_options        | option_value          | 48           | PHP  |
| wp_2_options        | autoload              | 0            | SQL  |
| wp_2_postmeta       | meta_key              | 0            | SQL  |
| wp_2_postmeta       | meta_value            | 2            | PHP  |
| wp_2_posts          | post_content          | 889          | SQL  |
| wp_2_posts          | post_title            | 0            | SQL  |
| wp_2_posts          | post_excerpt          | 0            | SQL  |
| wp_2_posts          | post_status           | 0            | SQL  |
| wp_2_posts          | comment_status        | 0            | SQL  |
| wp_2_posts          | ping_status           | 0            | SQL  |
| wp_2_posts          | post_password         | 0            | SQL  |
| wp_2_posts          | post_name             | 0            | SQL  |
| wp_2_posts          | to_ping               | 0            | SQL  |
| wp_2_posts          | pinged                | 0            | SQL  |
| wp_2_posts          | post_content_filtered | 0            | PHP  |
| wp_2_posts          | post_type             | 0            | SQL  |
| wp_2_posts          | post_mime_type        | 0            | SQL  |
| wp_2_term_taxonomy  | taxonomy              | 0            | SQL  |
| wp_2_term_taxonomy  | description           | 0            | SQL  |
| wp_2_termmeta       | meta_key              | 0            | SQL  |
| wp_2_termmeta       | meta_value            | 0            | SQL  |
| wp_2_terms          | name                  | 0            | SQL  |
| wp_2_terms          | slug                  | 0            | SQL  |
| wp_7_commentmeta    | meta_key              | 0            | SQL  |
| wp_7_commentmeta    | meta_value            | 0            | PHP  |
| wp_7_comments       | comment_author        | 0            | SQL  |
| wp_7_comments       | comment_author_email  | 0            | SQL  |
| wp_7_comments       | comment_author_url    | 0            | SQL  |
| wp_7_comments       | comment_author_IP     | 0            | SQL  |
| wp_7_comments       | comment_content       | 0            | SQL  |
| wp_7_comments       | comment_approved      | 0            | SQL  |
| wp_7_comments       | comment_agent         | 0            | SQL  |
| wp_7_comments       | comment_type          | 0            | SQL  |
| wp_7_links          | link_url              | 0            | SQL  |
| wp_7_links          | link_name             | 0            | SQL  |
| wp_7_links          | link_image            | 0            | SQL  |
| wp_7_links          | link_target           | 0            | SQL  |
| wp_7_links          | link_description      | 0            | SQL  |
| wp_7_links          | link_visible          | 0            | SQL  |
| wp_7_links          | link_rel              | 0            | SQL  |
| wp_7_links          | link_notes            | 0            | SQL  |
| wp_7_links          | link_rss              | 0            | SQL  |
| wp_7_options        | option_name           | 0            | SQL  |
| wp_7_options        | option_value          | 13           | PHP  |
| wp_7_options        | autoload              | 0            | SQL  |
| wp_7_postmeta       | meta_key              | 0            | SQL  |
| wp_7_postmeta       | meta_value            | 91           | PHP  |
| wp_7_posts          | post_content          | 22           | SQL  |
| wp_7_posts          | post_title            | 0            | SQL  |
| wp_7_posts          | post_excerpt          | 0            | SQL  |
| wp_7_posts          | post_status           | 0            | SQL  |
| wp_7_posts          | comment_status        | 0            | SQL  |
| wp_7_posts          | ping_status           | 0            | SQL  |
| wp_7_posts          | post_password         | 0            | SQL  |
| wp_7_posts          | post_name             | 0            | SQL  |
| wp_7_posts          | to_ping               | 0            | SQL  |
| wp_7_posts          | pinged                | 0            | SQL  |
| wp_7_posts          | post_content_filtered | 0            | PHP  |
| wp_7_posts          | post_type             | 0            | SQL  |
| wp_7_posts          | post_mime_type        | 0            | SQL  |
| wp_7_term_taxonomy  | taxonomy              | 0            | SQL  |
| wp_7_term_taxonomy  | description           | 0            | SQL  |
| wp_7_termmeta       | meta_key              | 0            | SQL  |
| wp_7_termmeta       | meta_value            | 0            | SQL  |
| wp_7_terms          | name                  | 0            | SQL  |
| wp_7_terms          | slug                  | 0            | SQL  |
| wp_blogmeta         | meta_key              | 0            | SQL  |
| wp_blogmeta         | meta_value            | 0            | SQL  |
| wp_blogs            | domain                | 3            | SQL  |
| wp_blogs            | path                  | 0            | SQL  |
| wp_commentmeta      | meta_key              | 0            | SQL  |
| wp_commentmeta      | meta_value            | 24           | PHP  |
| wp_comments         | comment_author        | 0            | SQL  |
| wp_comments         | comment_author_email  | 0            | SQL  |
| wp_comments         | comment_author_url    | 0            | SQL  |
| wp_comments         | comment_author_IP     | 0            | SQL  |
| wp_comments         | comment_content       | 11           | SQL  |
| wp_comments         | comment_approved      | 0            | SQL  |
| wp_comments         | comment_agent         | 21           | SQL  |
| wp_comments         | comment_type          | 0            | SQL  |
| wp_links            | link_url              | 0            | SQL  |
| wp_links            | link_name             | 0            | SQL  |
| wp_links            | link_image            | 0            | SQL  |
| wp_links            | link_target           | 0            | SQL  |
| wp_links            | link_description      | 0            | SQL  |
| wp_links            | link_visible          | 0            | SQL  |
| wp_links            | link_rel              | 0            | SQL  |
| wp_links            | link_notes            | 0            | SQL  |
| wp_links            | link_rss              | 0            | SQL  |
| wp_options          | option_name           | 0            | SQL  |
| wp_options          | option_value          | 33           | PHP  |
| wp_options          | autoload              | 0            | SQL  |
| wp_postmeta         | meta_key              | 0            | SQL  |
| wp_postmeta         | meta_value            | 31           | PHP  |
| wp_posts            | post_content          | 488          | SQL  |
| wp_posts            | post_title            | 0            | SQL  |
| wp_posts            | post_excerpt          | 0            | SQL  |
| wp_posts            | post_status           | 0            | SQL  |
| wp_posts            | comment_status        | 0            | SQL  |
| wp_posts            | ping_status           | 0            | SQL  |
| wp_posts            | post_password         | 0            | SQL  |
| wp_posts            | post_name             | 0            | SQL  |
| wp_posts            | to_ping               | 0            | SQL  |
| wp_posts            | pinged                | 0            | SQL  |
| wp_posts            | post_content_filtered | 0            | PHP  |
| wp_posts            | post_type             | 0            | SQL  |
| wp_posts            | post_mime_type        | 0            | SQL  |
| wp_registration_log | email                 | 6            | SQL  |
| wp_registration_log | IP                    | 0            | SQL  |
| wp_signups          | domain                | 0            | SQL  |
| wp_signups          | path                  | 0            | SQL  |
| wp_signups          | title                 | 0            | SQL  |
| wp_signups          | user_login            | 0            | SQL  |
| wp_signups          | user_email            | 2            | SQL  |
| wp_signups          | activation_key        | 0            | SQL  |
| wp_signups          | meta                  | 0            | PHP  |
| wp_site             | domain                | 1            | SQL  |
| wp_site             | path                  | 0            | SQL  |
| wp_sitemeta         | meta_key              | 0            | SQL  |
| wp_sitemeta         | meta_value            | 10           | PHP  |
| wp_term_taxonomy    | taxonomy              | 0            | SQL  |
| wp_term_taxonomy    | description           | 0            | SQL  |
| wp_termmeta         | meta_key              | 0            | SQL  |
| wp_termmeta         | meta_value            | 0            | SQL  |
| wp_terms            | name                  | 0            | SQL  |
| wp_terms            | slug                  | 0            | SQL  |
| wp_usermeta         | meta_key              | 0            | SQL  |
| wp_usermeta         | meta_value            | 9            | PHP  |
| wp_users            | user_login            | 0            | SQL  |
| wp_users            | user_nicename         | 0            | SQL  |
| wp_users            | user_email            | 5            | SQL  |
| wp_users            | user_url              | 0            | SQL  |
| wp_users            | user_activation_key   | 0            | SQL  |
| wp_users            | display_name          | 0            | SQL  |
+------------------------+-----------------------+--------------+------+
Success: Made 1709 replacements.
这两种准不同的db迁移方法导致了完全相同的错误,因此我显然遗漏了一些东西。

有什么建议吗?

1 个回复
SO网友:mjones

接受我脸上的一点鸡蛋。哑哑错误。

尽管有来自WP Cli和Search Replace DB的错误消息,上述迁移还是100%成功。我的主题被打破的原因和其他奇怪的问题。。我忘了重新启用已重新命名的插件文件夹;plugins\\u temp\\u disabled(插件温度已禁用);,同时排除其他问题。晚安,我发现了这个问题。我强烈建议使用WP Cli迁移多站点或单站点wordpress,因为某些插件在迁移过程的关键时刻可能会出现错误。旧skool。。。

相关推荐

如何以经过身份验证的用户身份运行WP-CLI命令?

我写了一个命令wp-cli 调用wp nurse. 它是根据wp doctor 命令,但用于运行WordPress站点运行状况检查。使用浏览器中的工具,当前所有16个测试都通过。但是,当从wp, 只有13项测试成功。ichabod:~ uplime% wp nurse check --all +----------------------+-------------+--------------------------------------------------------+ | na