instancia - postgresql en la nube
¿Cómo puedo mover datos postgresql a otro directorio en Ubuntu sobre Amazon EC2? (3)
Detener el servidor.
Copie el datadir conservando los permisos: use cp -aRv
.
Entonces (lo más fácil, ya que evita la necesidad de modificar initscripts) simplemente mueva el datadir viejo a un lado y enlace simbólico la ruta anterior a la nueva ubicación.
Hemos estado ejecutando postgresql 8.4 por bastante tiempo. Al igual que con cualquier base de datos, estamos llegando lentamente a nuestro umbral de espacio. Agregué otro disco EBS de 8 GB y lo monté en nuestra instancia y lo configuré para que funcione correctamente en un directorio llamado / files
Dentro de / archivos, creé manualmente
Corrígeme si me equivoco, pero creo que todos los datos postgresql se almacenan en /var/lib/postgresql/8.4/main
Hice una copia de seguridad de la base de datos y ejecuté sudo /etc/init.d/postgresql stop. Esto detiene el servidor postgresql. Traté de copiar y pegar el contenido de /var/lib/postgresql/8.4/main en el directorio / files pero resultó ser un MESS ENORME. debido a permisos de archivos Tuve que entrar y modificar el contenido de esa carpeta solo para poder copiarlos y pegarlos. Algunos archivos no se copiaron completamente debido a los permisos de raíz. Modifiqué el parámetro data_directory en postgresql.conf para apuntar al directorio de archivos
data_directory = ''/files/postgresql/main''
y ejecuté sudo /etc/init.d/postgresql restart y el servidor no pudo iniciarse. De nuevo, probablemente debido a problemas de permisos. Amazon EC2 solo le permite acceder al servicio como ubuntu de manera predeterminada. Solo puede acceder a la raíz desde el terminal, lo que hace que todo sea mucho más complicado.
¿Hay una manera paso a paso mucho más limpia y más eficiente de hacer esto?
Gracias por la respuesta aceptada. En lugar del enlace simbólico, también puede usar un enlace de montaje . De esta forma es independiente del sistema de archivos. Si desea utilizar un disco duro dedicado para la base de datos, también puede montarlo normalmente . al directorio de datos.
Hice lo último. Estos son mis pasos si alguien necesita una referencia. Ejecuté esto como una secuencia de comandos en muchas instancias de AWS.
# stop postgres server
sudo service postgresql stop
# create new filesystem in empty hard drive
sudo mkfs.ext4 /dev/xvdb
# mount it
mkdir /tmp/pg
sudo mount /dev/xvdb /tmp/pg/
# copy the entire postgres home dir content
sudo cp -a /var/lib/postgresql/. /tmp/pg
# mount it to the correct directory
sudo umount /tmp/pg
sudo mount /dev/xvdb /var/lib/postgresql/
# see if it is mounted
mount | grep postgres
# add the mount point to fstab
echo "/dev/xvdb /var/lib/postgresql ext4 rw 0 0" | sudo tee -a /etc/fstab
# when database is in use, observe that the correct disk is being used
watch -d grep xvd /proc/diskstats
Una clarificación. Es el AMI particular que usó y que establece ubuntu como el usuario predeterminado, esto puede no aplicarse a otras AMI.
Básicamente, si está intentando mover datos manualmente, es probable que deba hacerlo como usuario root, y luego asegúrese de que esté disponible para el usuario con el que se ejecuta postgres.
También tiene la opción de tomar una instantánea del volumen y aumentar el tamaño del volumen creado a partir de la instantánea. Luego puede reemplazar el volumen en su instancia con el nuevo volumen (probablemente tendrá que cambiar el tamaño de la partición para aprovechar todo el espacio).