我想自动化使用WP-CLI导入远程数据库的任务。
当前过程是到ssh
服务器,然后export
使用WP-CLI运行to文件,通过scp
或将文件复制到本地目录rsync
,然后import
通过WP-CLI将文件复制到本地目录。我想在这里利用@alias
和删除尽可能多的步骤。
虽然我想这样的事情是可能的:
echo "$(wp @remote db export -)" | wp @local db import -
在未压缩的数据库大小> 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
更新
基于@davemac,看起来此过程可以轻松简化为
wp db import - <<< $(wp db export -);
现在我只需要考虑MU-Site的表和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多站点-将远程站点导出到本地导入而无需文件:
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 -
类似的