使用WP-CLI本地导入远程数据库的最快方式(步骤最少)

时间:2016-08-13 作者:jgraup

我想使用WP-CLI.

当前流程是ssh ,并运行export 使用文件WP-CLI, 通过将文件复制到本地目录scprsync, 然后import 通过WP-CLI访问该文件。我想利用@alias 并在此处删除尽可能多的步骤。

虽然我认为这样的事情是可能的:

echo "$(wp @remote db export -)" | wp @local db import -
如果DB大小>5GB未压缩,这似乎是一个更可行的选择:

DB_EXPORT=$(echo "$(wp @remote db export -)" | gzip | base64 -w0); echo "$DB_EXPORT" | base64 -d | gunzip | wp @local db import -

不幸的是,我可能达到了终端的极限,或者应该清理这个调用的结构,因为我的窗口似乎挂起了。

是否有其他解决方案可以删除scp 从这个过程中?这里还有其他我可以使用的命令吗?我已经从这里的示例中删除了多站点,但这也是需要考虑的问题,它可能是别名的一部分。

理想情况下,我希望将来能有这样的事情:

wp @local db import @remote


当前示例设置使用@alias 具有Basic Vagrant box.

~/.wp-cli/config.yml

@basic:
    ssh: basic.dev/var/www/wordpress/

~/.ssh/config

Host basic.dev
    HostName basic.dev
    User vagrant
    IdentityFile ~/sites/basic.dev/.vagrant/machines/default/virtualbox/private_key
<小时>

Updates

基于@davemac 看起来这个过程很容易简化为

wp db import - <<< $(wp db export -);
现在我只需要考虑MU Site的tables and site_url

wp @basic db export --tables=$(wp @basic db tables --url=http://basic.dev/site/ --format=csv) - | gzip > basic-dev-site.sql.gz

blog_id=$(wp @basic eval --url=http://basic.dev/site/ \'echo get_current_blog_id();\');

prefix=$(wp @basic eval --url=http://basic.dev/site/ \'global $wpdb; echo $wpdb->prefix;\')

site_url=$(wp @basic eval "echo site_url();")
使用search-replace - 谢谢@WestonRuter

sql=$(wp search-replace $(wp eval "echo site_url();" | cut -d ":" -f2) "//new-site.com" --network --skip-columns=guid --export); printf "%s" "$sql"

WP multisite-将远程站点导出到本地导入,无需文件:

wp @remote db export --tables=$remote_tables - | sed "s#$remote_prefix#$local_prefix#g" | sed "s#$remote_site_domain#$local_site_domain#g" | wp @local db import -

<人力资源>

Similiar

1 个回复
SO网友:davemac

自从WP-CLI 0.24.0 你现在可以use aliases 这使您能够非常轻松地导入远程数据库。

通过使用别名,可以针对另一个WP-CLI安装运行WP-CLI命令。该安装可能是远程计算机。

考虑到这一点,我破解了一个bash别名,该别名将几个WP-CLI命令链接在一起,以将远程WP数据库拉入本地站点。在这种情况下,我有一个本地wp cli。yml文件,其中我将@prod设置为生产站点的别名(使用SSH别名)。

pullprod() {
    # make a backup of the current local database
    wp db export _db.sql
    wp db reset --yes
    # get current directory name, used for database and URL
    current=${PWD##*/}
    # connect to remote site and ssh the remote database down to our local directory
    wp @prod db export - > $current.sql
    echo "copying of remote database to $current directory complete."
    wp db import
    # database is now imported so we can delete it
    rm -rf $current.sql
    # get the remote site URL, remove the http:// for our search replace
    production_url=$(wp @prod eval \'$full_url=get_site_url();$trimmed_url=str_replace("http://", "", $full_url); echo $trimmed_url;\')
    wp search-replace "$production_url" "$current.localhost"
    echo "All done, enjoy!"
}
Apullprod 当前WP站点中的命令将执行您所需的操作,同时设置别名(也可以自动设置别名)。

它可以工作,但我的下一个任务是改进如何获取$production\\u url变量,因为目前我正在从本地文件中提取它。

相关推荐

如何终止WP-CLI执行?

我正在Windows 10和XAMPP上试用WP-CLI。我可能不理解它是如何工作的,因为我认为从XAMPP控制面板停止Apache会停止命令行上的WP-CLI脚本执行。我在一个插件类中有一个长时间运行的脚本,其中有一个进度条。我开始运行它,然后决定进行一些修改。我从控制面板上停止了Apache和MySQL,进度条一直在运行。脚本似乎没有停止运行。WP-CLI是否;“运行”;是自己的服务器吗?是否可以终止WP-CLI中所有正在运行的进程?