मैं एक उत्पादन PostgreSQL डेटाबेस एक विकास सर्वर को कॉपी करने के लिए देख रहा हूँ। ऐसा करने के बारे में सबसे तेज़, सबसे आसान तरीका क्या है?
मैं एक उत्पादन PostgreSQL डेटाबेस एक विकास सर्वर को कॉपी करने के लिए देख रहा हूँ। ऐसा करने के बारे में सबसे तेज़, सबसे आसान तरीका क्या है?
जवाबों:
आपको एक मध्यवर्ती फ़ाइल बनाने की आवश्यकता नहीं है। तुम कर सकते हो
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
या
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
का उपयोग करना psql
या pg_dump
दूरस्थ होस्ट से कनेक्ट करना।
एक बड़े डेटाबेस या धीमे कनेक्शन के साथ, फ़ाइल को डंप करना और फ़ाइल को संपीड़ित करना तेज़ी से हो सकता है।
जैसा कि कोर्नेल ने कहा कि एक मध्यवर्ती फ़ाइल को डंप करने की कोई आवश्यकता नहीं है, यदि आप संकुचित काम करना चाहते हैं तो आप एक संपीड़ित सुरंग का उपयोग कर सकते हैं
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
या
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
लेकिन इस समाधान को भी दोनों सिरों में एक सत्र प्राप्त करने की आवश्यकता है।
नोट: pg_dump
बैकअप के लिए है और psql
बहाल करने के लिए है। तो, इस उत्तर में पहला कमांड लोकल से रिमोट में कॉपी करना है और दूसरा रिमोट से लोकल में है । अधिक -> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?
pg_dump the_db_name > the_backup.sql
फिर बैकअप को अपने डेवलपमेंट सर्वर पर कॉपी करें, इसके साथ रिस्टोर करें:
psql the_new_dev_db < the_backup.sql
Pg_dump , और बाद में psql या pg_restore का उपयोग करें - यह निर्भर करता है कि आप pg_dump को -Fp या -Fc विकल्प चुनते हैं या नहीं।
उपयोग का उदाहरण:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
यदि आप संस्करणों के बीच माइग्रेट करना चाहते हैं (जैसे आपने पोस्टग्रैज अपडेट किए हैं और 9.1 लोकलहोस्ट पर चल रहे हैं: 5432 और 9.3 लोकलहोस्ट पर चल रहे हैं: 5434) आप चला सकते हैं:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
की जाँच करें माइग्रेशन डॉक्स ।
pg_basebackup
अब ऐसा करने का बेहतर तरीका लगता है, खासकर बड़े डेटाबेस के लिए।
आप उसी या पुराने प्रमुख संस्करण वाले सर्वर से डेटाबेस की प्रतिलिपि बना सकते हैं। या अधिक सटीक :
pg_basebackup
उसी या पुराने प्रमुख संस्करण के सर्वर के साथ काम करता है, नीचे 9.1 तक। हालाँकि, वाल स्ट्रीमिंग मोड (-X stream
) केवल सर्वर संस्करण 9.3 और बाद के संस्करण के साथ काम करता है, और--format=tar
वर्तमान संस्करण का टार फॉर्मेट मोड केवल सर्वर संस्करण 9.5 या बाद के संस्करण के साथ काम करता है।
उसके लिए आपको सोर्स सर्वर पर चाहिए:
listen_addresses = '*'
लक्ष्य सर्वर से कनेक्ट करने में सक्षम होना। सुनिश्चित करें कि पोर्ट 5432 उस मामले के लिए खुला है।max_wal_senders = 1
( -X fetch
), 2
के लिए -X stream
(PostgreSQL 12 के मामले में डिफ़ॉल्ट), या अधिक।wal_level = replica
या उच्चतर सेट करने में सक्षम होने के लिए max_wal_senders > 0
।host replication postgres DST_IP/32 trust
में है pg_hba.conf
। यह मशीन pg
से किसी को भी क्लस्टर तक पहुँच देता है DST_IP
। आप अधिक सुरक्षित विकल्प का सहारा लेना चाह सकते हैं।परिवर्तन 1, 2, 3 को सर्वर पुनरारंभ की आवश्यकता है, परिवर्तन 4 को पुनः लोड करने की आवश्यकता है।
लक्ष्य सर्वर पर:
# systemctl stop postgresql@VERSION-NAME
postgres$ pg_basebackup -h SRC_IP -U postgres -D VERSION/NAME --progress
# systemctl start postgresql@VERSION-NAME
डेटाबेस नाम के साथ इस कमांड को चलाएं, आप DB का डंप लेने के लिए बैकअप लेना चाहते हैं।
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
अब इस डंप फ़ाइल को दूरस्थ मशीन पर भेजें जहाँ आप DB की प्रतिलिपि बनाना चाहते हैं।
eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/
रिमोट मशीन पर डीबी को पुनर्स्थापित करने के लिए ~ / कुछ / फ़ोल्डर में कमांड का पालन करें।
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
मैंने काफी संघर्ष किया और अंततः वह विधि जिसने मुझे रेल 4 के साथ काम करने की अनुमति दी:
अपने पुराने सर्वर पर
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
मुझे डंप बनाने के लिए पोस्टग्राउंड लिनक्स उपयोगकर्ता का उपयोग करना पड़ा। मुझे भी नए सर्वर पर डेटाबेस के निर्माण के लिए -c का उपयोग करना पड़ा। --inserts इसे INSERT () सिंटैक्स का उपयोग करने के लिए कहता है जो अन्यथा मेरे लिए काम नहीं करेगा :(
फिर, नए सर्वर पर, simpy:
sudo su - postgres
psql new_database_name < dump.sql
सर्वर के बीच डंप। एससीएल फ़ाइल को स्थानांतरित करने के लिए मैंने केवल सामग्री को प्रिंट करने के लिए "नैनो" का उपयोग किया और सामग्री को कॉपी करने के लिए इसे "नैनो" से फिर से बनाया।
इसके अलावा, दो डेटाबेस पर उपयोग कर रहा था मैं अलग था इसलिए मुझे डंप में सभी मालिक का नाम ढूंढना पड़ा।
अपना डेटाबेस डंप करें: pg_dump database_name_name > backup.sql
अपने डेटाबेस को वापस आयात करें: psql db_name < backup.sql
मुझे अपने टेबल डेटा को एक सर्वर से दूसरे PostgreSQL सर्वर पर कॉपी करने के लिए एक लिनक्स शेल स्क्रिप्ट साझा करने दें।
PostgreSQL सर्वर के बीच डेटा माइग्रेशन के लिए लिनक्स बैश शैल स्क्रिप्ट:
#!/bin/bash
psql \
-X \
-U user_name \
-h host_name1 \
-d database_name \
-c "\\copy tbl_Students to stdout" \
| \
psql \
-X \
-U user_name \
-h host_name2 \
-d database_name \
-c "\\copy tbl_Students from stdin"
मैं सिर्फ डेटा माइग्रेट कर रहा हूं; कृपया अपने गंतव्य / दूसरे डेटाबेस सर्वर पर एक खाली तालिका बनाएँ।
यह एक यूटिलिटी स्क्रिप्ट है। इसके अलावा, आप सामान्य उपयोग के लिए स्क्रिप्ट को संशोधित कर सकते हैं जैसे host_name, database_name, table_name और अन्य के लिए पैरामीटर जोड़कर
स्वीकृत उत्तर सही है, लेकिन यदि आप संवादात्मक रूप से पासवर्ड दर्ज करने से बचना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_host}} -U {{import_db_user}} {{import_db_name}}