Najszybszy sposób (najmniej kroków) na lokalny import zdalnej bazy danych za pomocą WP-CLI


13

Chciałbym zautomatyzować zadanie importowania zdalnej bazy danych za pomocą WP-CLI .

Bieżącym procesem jest przesłanie sshdo serwera i uruchomienie exportpliku do za pomocą WP-CLI , skopiowanie pliku do lokalnego katalogu za pomocą scplub rsync, a następnie importplik za pośrednictwem WP-CLI. Chciałbym wykorzystać tutaj @aliasi usunąć jak najwięcej kroków tutaj.

Chociaż chciałbym myśleć, że coś takiego jest możliwe:

echo "$(wp @remote db export -)" | wp @local db import -

Przy nieskompresowanym rozmiarze DB> 5 GB wydaje się to bardziej opłacalną opcją:

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

Niestety, mogę przekroczyć limit terminala lub struktura tego połączenia powinna zostać wyczyszczona, ponieważ moje okno po prostu wydaje się zawiesić.

Czy istnieje inne rozwiązanie, w którym mogę usunąć scpten proces? Czy są jeszcze jakieś polecenia, których mogę tutaj użyć? Usunąłem wiele witryn z podanych tutaj przykładów, ale warto też rozważyć, która z nich może być częścią aliasu.

Idealnie byłoby mieć nadzieję na coś takiego w przyszłości:

wp @local db import @remote


Bieżąca przykładowa konfiguracja korzystania @aliasz Basic Vagrant .

~/.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

Aktualizacje

Na podstawie @davemac wygląda na to, że ten proces można łatwo uprościć

wp db import - <<< $(wp db export -);

Teraz muszę tylko wziąć pod uwagę tabele MU-Site i 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();")

Korzystanie search-replace- dzięki @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 - wyeksportuj zdalną witrynę do lokalnego importu bez plików:

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 -


Podobne


Możesz napisać skrypt bash, który jest wywoływany przez zadanie cron do pliku scp / rsync na zdalny serwer. Następnie na zdalnym serwerze możesz mieć inny skrypt bash, uruchamiany za pomocą zadania cron, który obserwuje folder dla pliku kopii zapasowej, a gdy plik już tam będzie, zaimportuje go do zdalnego DB. Jest to podobne do sposobu synchronizacji serwera „w trybie gotowości”.
mosiądz

Dla mnie osobiście nie chciałbym tego robić w zadaniu cron, ponieważ dodaje to kolejną zależność do miksu i jest to po prostu próba zsynchronizowania lokalnego ze zdalnym, gdy nad nim pracuję. „Zdalny” jest jednym z wielu aliasów - tak samo jak lokalny. Innym powodem ograniczenia wywołań funkcji jest to, że lubię one-line / copy / paste / go! wiersze kodu;)
jgraup

Czy próbowałeś zapisać zrzut do pliku tymczasowego zamiast zmiennej?
David

Tak właśnie musisz to zrobić teraz, który wymaga funkcji poza WP-CLI do obsługi przesyłania plików --- i więcej uwierzytelniania na lokalizację.
jgraup,

@jgraup Czy to pytanie zostało rozwiązane?
Ethan Jinks O'Sullivan

Odpowiedzi:


6

Od wersji WP-CLI 0.24.0 możesz teraz używać aliasów, które umożliwiają dość łatwe importowanie zdalnej bazy danych.

Za pomocą aliasów można uruchamiać komendy WP-CLI w stosunku do innej instalacji WP-CLI. Ta instalacja może być maszyną zdalną.

Mając to na uwadze, zhakowałem alias bash, który łączy kilka poleceń WP-CLI w celu wciągnięcia zdalnej bazy danych WP na lokalną stronę. W takim przypadku mam lokalny plik wp-cli.yml, w którym ustawiłem @prod jako alias mojej witryny produkcyjnej (która używa aliasu 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!"
}

pullprodKomenda w obecnym miejscu WP zrobi to, czego potrzebują, a także jak masz alias skonfigurować (które mogą być zautomatyzowane, jak również).

Działa, ale moim następnym zadaniem jest ulepszenie sposobu uzyskiwania zmiennej $ production_url, ponieważ obecnie pobieram ją z pliku lokalnego.


To jest świetne. Szczerze mówiąc, tak naprawdę po prostu szukałem wp @alias db export - > $localfilename.sql. To staje się trochę bardziej skomplikowane dla MU-Witryn, ale jeśli chcesz adres URL produktu, spróbujproduction_url=$(wp @prod eval "echo site_url();"); echo "The URL is $production_url";
jgraup

Co dokładnie robi wp db reset --yes? Ach ... czyści wszystkie tabele, więc nowe pliki mają czystą bazę danych. Reset DB
jgraup

1
Dzięki za to wziąłem technikę adresu URL produktu i zmodyfikowałem ją trochę, aby usunąć http: // z produkcyjnego adresu URL (ponieważ umożliwia to bardziej kompleksowe wyszukiwanie i zamianę)
davemac

1
Zauważ też, że wp search-replaceobsługuje również --exportarg, dzięki czemu można eksportować i wyszukiwać / zamieniać wszystkie naraz: wp-cli.org/commands/search-replace
Weston Ruter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.