การย้ายข้อมูล postgresql ไปยังไดรฟ์อื่น


20

ฉันใช้ AWS เป็นสภาพแวดล้อมคลาวด์ของฉัน ฉันติดตั้ง PostgreSQL บนไดรฟ์เดียวกันกับไดรฟ์ข้อมูลอินสแตนซ์รูทของฉัน ฉันได้แนบและติดตั้งไดรฟ์ที่สองกับอินสแตนซ์ของฉัน ตอนนี้ฉันต้องการย้ายข้อมูล PostgreSQL ทั้งหมดไปยังไดรฟ์อื่น ฉันยังอยู่ในโหมดการพัฒนาดังนั้นฉันสามารถลบข้อมูลเก่าได้ถ้ามันทำให้การถ่ายโอนง่ายขึ้น ณ จุดนี้ วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?

PostgreSQL tablespace เป็นสิ่งที่ฉันควรดูหรือไม่


1
เทเบิลสเปซเป็นหนทางไปหากคุณต้องการย้ายส่วนหนึ่งของฐานข้อมูลไปยังไดรฟ์อื่น
Erwin Brandstetter

คำตอบนี้ชี้ให้เห็นว่าไม่tablespacesควรใช้ฮาร์ดไดรฟ์ภายนอก: dba.stackexchange.com/a/62037/41823ไม่แน่ใจว่าฉันเข้าใจความเสี่ยงหรือไม่หากคุณใส่ข้อมูลลงในภายนอกแล้ว
Statwonk

คำตอบ:


19

ต่อไปนี้ควรทำ:

  1. ปิด PostgreSQL
  2. ตรวจสอบให้แน่ใจว่า PostgreSQL ไม่ทำงานอีกต่อไป
  3. ตรวจสอบว่า PostgreSQL หยุดทำงานจริงๆ
  4. คัดลอกไดเรกทอรีข้อมูลเก่าไปยังไดรฟ์ใหม่
    ซึ่งมักจะกำหนดผ่านพารามิเตอร์ commandline ( -D) สำหรับบริการของคุณหรือผ่านPGDATAตัวแปรสภาพแวดล้อม
  5. อัปเดตการกำหนดค่า PostgreSQL ของคุณ (บริการ, var สภาพแวดล้อม) เพื่อชี้ไปยังไดเรกทอรีข้อมูลใหม่
  6. หากคุณคัดลอกข้อมูลเปลี่ยนชื่อไดเรกทอรีข้อมูลเก่าเพื่อให้แน่ใจว่า PostgreSQL ไม่สามารถค้นหาได้อีกต่อไป ด้วยวิธีนี้คุณจะได้รับข้อความแสดงข้อผิดพลาดหากคุณไม่ได้รับการกำหนดค่าที่ถูกต้อง
  7. เริ่มบริการ
  8. หากทุกอย่างทำงานได้ดีคุณสามารถลบไดเรกทอรีเก่าได้

ในจุดที่ 4 คุณหมายถึง 'ปกติแล้วสิ่งนี้จะถูกกำหนดผ่านพารามิเตอร์ commandline ... '
codecool

@codecool: มีหลายวิธีที่จะนิยามสิ่งนี้ โดยปกติจะเป็นส่วนหนึ่งของคำนิยามบริการ แต่ขึ้นอยู่กับระบบปฏิบัติการการกระจายและการเปลี่ยนแปลงส่วนบุคคลของคุณ
a_horse_with_no_name

สิ่งนี้ใช้ได้ แต่ฉันใช้ regedit แทนที่จะเป็นบรรทัดคำสั่งสำหรับ Windows ต๊าย ดิสก์ของฉันกำลังจะหมดพื้นที่ แต่ตอนนี้ฉันมีมันทำงานอย่างปลอดภัยที่อื่นที่มีพื้นที่เพียงพอ
ร่องลึก

นี่คือการโพสต์บล็อกทีละขั้นตอนที่ดีพร้อมรายละเอียดเฉพาะล่าสุดสำหรับ Ubuntu ทั่วไปและรุ่น 9.5 DB: digitalocean.com/community/tutorials/…
JaakL

4
  1. หยุดบริการ postgresql
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. ส่งออก PGDATA = destination_data_directory
  5. เปลี่ยนไดเรกทอรีข้อมูลเป็น destination_data_directory ภายใน postgresql.conf
  6. pg_ctl เริ่มต้น

ฉันดีใจที่คุณจำchownคำสั่งสำหรับโฟลเดอร์ใหม่
RolandoMySQLDBA

0

นี่คือคำอธิบายวิธีย้ายฐานข้อมูล PostgreSQL ที่มีอยู่ไปยังตำแหน่งใหม่ (โฟลเดอร์พาร์ติชัน) บน Arch Linux (กระบวนการนี้ควรคล้ายกับการแจกแจง Linux อื่น ๆ )

pg_dumpallเป็นเครื่องมือสำหรับการเขียน (ทิ้ง) ฐานข้อมูล PostgreSQL ทั้งหมดของคลัสเตอร์เป็นไฟล์สคริปต์ไฟล์เดียว ... ทำได้โดยเรียกpg_dumpใช้ฐานข้อมูลแต่ละรายการในคลัสเตอร์ ...

ตัวอย่างเช่น:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

คุณต้อง:

  • pg_dumpallฐานข้อมูลส่งออก ( )
  • สร้างไดเรกทอรีว่างใหม่
  • แก้ไขไฟล์ postgresql.conf
  • รีสตาร์ทเซอร์วิสเซิร์ฟเวอร์ postgres
  • โหลดข้อมูลเก่าจากไฟล์ดัมพ์ลงในฐานข้อมูลใหม่

สรุปคำสั่ง

ฉันกำลังออกจาก shell prompt (hostname ... ) เพื่ออธิบายว่าฉันอยู่ไหนในขณะที่ดำเนินการต่อ

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

ตัวอย่าง

ดูโพสต์บล็อกประกอบของฉัน, วิธีการย้ายฐานข้อมูล PostgreSQL ที่มีอยู่บน Arch Linux , สำหรับรหัสความคิดเห็นและผลลัพธ์. -


อ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.