Tôi đang tìm cách sao chép cơ sở dữ liệu PostgreSQL sản xuất vào một máy chủ phát triển. Cách nhanh nhất, dễ nhất để thực hiện việc này là gì?Sao chép cơ sở dữ liệu PostgreSQL sang một máy chủ khác
Trả lời
Bạn không cần phải tạo ra một file trung gian. Bạn có thể làm
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
hoặc
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
sử dụng psql
hoặc pg_dump
để kết nối với một máy chủ từ xa.
Với cơ sở dữ liệu lớn hoặc kết nối chậm, việc bán một tệp và chuyển tệp nén có thể nhanh hơn.
Như Kornel nói không có nhu cầu để đổ vào một tập tin trung gian, nếu bạn muốn làm việc nén bạn có thể sử dụng một đường hầm nén
pg_dump -C dbname | bzip2 | ssh [email protected] "bunzip2 | psql dbname"
hoặc
pg_dump -C dbname | ssh -C [email protected] "psql dbname"
nhưng giải pháp này cũng đòi hỏi để có được một phiên ở cả hai đầu.
pg_dump the_db_name > the_backup.sql
Sau đó, sao chép sao lưu vào máy chủ phát triển của bạn, khôi phục với:
psql the_new_dev_db < the_backup.sql
Một số đã nói với tôi điều này có thể gây ra sự cố ? –
@rmbarnes: Nếu có vấn đề - chúng phải được sửa. Nếu không có kiến thức chi tiết những gì "Một số một" đã làm - không ai có thể xác nhận cũng không bác bỏ yêu cầu này. –
Sử dụng cờ --no-owner với pg_dump. Điều này bỏ qua vấn đề và chỉnh sửa đầu tiên của bài đăng này đã sử dụng nó - nhưng sau đó tôi nghĩ bạn có thể cần độ trung thực chính xác hơn cho cơ sở dữ liệu gốc. – unmounted
Sử dụng pg_dump, và sau đó psql hoặc pg_restore - tùy thuộc cho dù bạn chọn -Fp hoặc tùy chọn -Fc để pg_dump.
Ví dụ về sử dụng:
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
tôi phải vật lộn khá nhiều và cuối cùng là phương pháp mà cho phép tôi để làm cho nó làm việc với Rails 4 được:
trên máy chủ cũ của bạn
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
tôi đã phải sử dụng người dùng postgres linux để tạo ra bãi chứa. tôi cũng đã phải sử dụng -c để buộc tạo ra cơ sở dữ liệu trên máy chủ mới. --inserts nói với nó để sử dụng INSERT() Cú pháp mà nếu không sẽ không làm việc cho tôi :(
sau đó, trên máy chủ mới, simpy:
sudo su - postgres
psql new_database_name < dump.sql
để chuyển các tập tin giữa máy chủ dump.sql Tôi chỉ đơn giản sử dụng "con mèo" để in nội dung và hơn "nano" để tạo lại nội dung đó sao chép nội dung.
Ngoài ra, ROLE tôi đang sử dụng trên hai cơ sở dữ liệu khác nhau nên tôi phải thay thế tất cả chủ sở hữu tên trong bãi chứa.
pg_basebackup
dường như là thứ cách tốt hơn để làm điều này ngay bây giờ, đặc biệt là cho các cơ sở dữ liệu lớn.
Bạn có thể cung cấp thêm chi tiết trong câu trả lời của mình, chẳng hạn như ví dụ? – Magnilex
Điều này chỉ hoạt động khi cả hai máy đều có cùng phiên bản PG. –
Rất có thể bạn sẽ sử dụng phiên bản cơ sở dữ liệu khác nhau để phát triển và sản xuất. Lần trước tôi có một số cuộc trò chuyện khó chịu với một trong những đồng đội của tôi khi cô ấy đang cố gắng gửi một vấn đề mà một số mã không hoạt động với PG 9.6 trong khi chúng tôi đã sử dụng 9.5 sản xuất tại thời điểm đó. Sao lưu cơ sở nhanh hơn nhiều. Sau đó pg_upgrade là cách để đi nếu cần. – Zorg
Chạy lệnh này với tên cơ sở dữ liệu, bạn muốn sao lưu, để lấy dump của DB.
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
Bây giờ hãy scp tệp kết xuất này vào máy từ xa mà bạn muốn sao chép DB.
eg. scp mydbnamedump.sql [email protected]:~/some/folder/
Trên máy từ xa chạy lệnh sau trong ~/some/folder để khôi phục DB.
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
Nếu bạn đang tìm kiếm để di chuyển giữa các phiên bản (ví dụ bạn được cập nhật postgres và đã 9.1 chạy trên localhost: 5432 và 9,3 chạy trên localhost: 5434), bạn có thể chạy:
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
Kiểm tra các migration docs.
Tôi được yêu cầu nhập mật khẩu (myuser91/postgres) nhiều lần, có cách nào để tôi chỉ cần nhập mật khẩu một lần không? –
@MartinWeber Tạo một tệp pgpass theo tài liệu này https://www.postgresql.org/docs/9.4/static/libpq-pgpass.html –
Hãy để tôi chia sẻ tập lệnh shell Linux để sao chép dữ liệu bảng của bạn từ một máy chủ sang một máy chủ PostgreSQL khác.
Reference taken from this blog:
Linux Bash Shell Script cho việc di chuyển dữ liệu giữa PostgreSQL Servers:
#!/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"
tôi chỉ di chuyển dữ liệu; hãy tạo một bảng trống tại máy chủ cơ sở dữ liệu đích/thứ hai của bạn.
Đây là tập lệnh tiện ích. Hơn nữa, bạn có thể sửa đổi kịch bản để sử dụng chung một cái gì đó như bằng cách thêm tham số cho host_name, database_name, table_name và những người khác
- 1. Sao chép bảng từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 2. SQL Server 2005, cách sao chép Sơ đồ cơ sở dữ liệu sang máy chủ khác
- 3. Sao chép cơ sở dữ liệu SQL Server Express sang một máy tính khác
- 4. Cách sao chép các khung nhìn từ một cơ sở dữ liệu sang cơ sở dữ liệu khác
- 5. Sao chép một cột từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 6. SQL Server Sao chép các bảng từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 7. Sao chép dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong Oracle
- 8. Cách sao chép bảng từ một cơ sở dữ liệu mysql sang cơ sở dữ liệu mysql khác
- 9. Sao chép bảng vào một cơ sở dữ liệu khác nhau trên một Máy chủ SQL khác nhau
- 10. Cách sao chép cơ sở dữ liệu máy chủ sql từ máy chủ này sang máy chủ khác mà không có bất kỳ bản sao lưu nào
- 11. Sao chép dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang một bảng khác
- 12. Sao chép các hàng giữa các cơ sở dữ liệu trong máy chủ SQL
- 13. Sao chép các bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong SQL Server
- 14. sao chép mysql - máy chủ nô lệ trên một cơ sở dữ liệu
- 15. Làm thế nào để sao chép cơ sở dữ liệu trong sử dụng cơ sở dữ liệu khác trong django?
- 16. Làm thế nào để sao chép dữ liệu từ cơ sở dữ liệu/bảng này sang cơ sở dữ liệu/bảng khác
- 17. Sao chép cơ sở dữ liệu mysql từ máy chủ từ xa sang máy tính cục bộ
- 18. Làm thế nào để sao chép cơ sở dữ liệu từ máy tính này sang máy tính khác?
- 19. Có cách nào để sao chép tất cả dữ liệu trong cơ sở dữ liệu mysql sang cơ sở dữ liệu khác không? (phpmyadmin)
- 20. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác
- 21. Sao chép tệp từ một máy chủ sang một máy chủ khác
- 22. Tôi muốn sao chép bảng chứa từ một cơ sở dữ liệu và chèn vào bảng cơ sở dữ liệu khác
- 23. Các chiến lược sao chép dữ liệu từ cơ sở dữ liệu MySQL trực tiếp đến máy chủ dàn dựng
- 24. Tài liệu cơ sở dữ liệu Postgresql
- 25. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 26. Sao chép toàn bộ nội dung cơ sở dữ liệu (lược đồ và dữ liệu)
- 27. Sao chép cơ sở dữ liệu trong postgres
- 28. Cơ sở dữ liệu sao chép để dự phòng sử dụng một cơ sở dữ liệu miễn phí và Java với mùa xuân & Hibernate ứng dụng web
- 29. Java, cách thay đổi cơ sở dữ liệu hiện tại sang cơ sở dữ liệu khác?
- 30. Làm cách nào để sao chép bản ghi dữ liệu giữa hai bản sao của cơ sở dữ liệu SQLServer
Không cần tệp trung gian - bạn có thể sử dụng đường hầm SSH nén hoặc đơn giản là pipe: pg_dump | bzip2 | ssh "bunzip2 | pg_restore" – Kornel
Nếu bạn sử dụng bzip2, hãy tắt nén ssh để tăng tốc độ truyền tải! – lzap
Lệnh ssh đã được nén theo mặc định. Trong ví dụ khi sử dụng nén ssh, tôi không sử dụng bzip2 và khi sử dụng bzip2 tôi không sử dụng nén ssh. – Ferran