Перенести базу postgresql linux

Перенос базы PostgreSQL с сервера на сервер

Не простая операция, если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп загрузить в нужном месте :).

Фокусы, которые тут не работают

Базы mySQL я иногда экспортирую не с помощью скрипта, а копирую файлы данных. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Копирование сработает, если основные версии серверов совпадает.

В случае postgresql подобный фокус не работает. Вы можете подсмотреть папку с базами данных в конфигурации (вам поможет вот такая команда)

В примере папка с базами: -D /var/lib/postgresql/9.3/main

Названия таблиц и баз вы здесь не увидите в явном виде. Копирование файлов будет бесполезно.

Самый главный админ

Первое, что надо усвоить — операции с postgresql удобно выполнять с правами postgresql же суперадмина. На юзера root PSQL чихал и не признает его авторитета. По умолчанию, супер-юзер имеет имя postgres.

Посмотреть список баз данных

Чтобы узнать какие базы у вас есть в наличии можно использовать команду:

В консоль будет выведен список баз данных, информация о владельце каждой базы, привилегиях.

Если вы и так знаете название базы данных, и вас есть реквизиты доступа к ней (взятые, к примеру, в настройках подключения вашего сайта или программы), то знакомство со списком баз можно пропустить.

Получение дампа базы postgresql

Для создания дампа базы служит команда pg_dump. Мы направим её вывод в файл через gzip.

myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.

-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.

: пропускает команды для установки владельца таблиц, видов и т.д.

-F — формат вывода данных custom, tar, plane text.

-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.

-C, —create — добавляет команду для создания БД, я покажу как создать её вручную.

-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).

Есть и более мощная команда, которая выгружает сразу все базы:

Источник

Перенос базы Postgresql на другой диск

Перенос базы Postgresql на другой диск

Жил был сервис, и была у него база, и жила она в /var/lib/postgresql на основном диске. И стала база занимать почти весь диск.

Читайте также:  Batch script in linux

Ну и мы не лыком шиты, перенесем ее на отдельный диск.

План такой:

  • Добавляем новый диск
  • Монтируем его в какую-то папку
  • Переносим туда БД
  • Тут, возможно, мы захотим жить в новой директории — тогда поменяем конфиг.
  • Прячем текущую папку /var/lib/postgresql
  • Монтируем наш диск вместо старой папки

Готовим диск

Представим, что мы уже добавили диск в гипервизоре и видим его в выводе lsblk :

admin@host.infra.domain.local:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 99.2M 1 loop /snap/core/10908 loop1 7:1 0 99.2M 1 loop /snap/core/10859 sda 8:0 0 550G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 550G 0 part / sdb 8:16 0 1000G 0 disk  

Теперь разметим его с помощью parted :

parted /dev/sdb mklabel gpt unit s mkpart primary ext4 0% 100% quit 

Отформатируем раздел в ext4:

Монтируем диск

Сначала создадим левую папку, куда мы примонтируем новый раздел и будем перекидывать базу mkdir /tempdb .

Дальше посмотрим UUID нашего раздела. Даем команду blkid :

/dev/sda2: UUID="b651b0ae-ef1d-11e9-be07-005056926860" TYPE="ext4" PARTUUID="1cd39f87-c0cd-f24d-baff-a39ff152be09" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9" TYPE="ext4" PARTLABEL="primary" PARTUUID="4d0987b3-0010-434c-aac4-b42ba2a75582" 

Вот же он: /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9"

Теперь добавляем строку в файл /etc/fstab , можно руками через vi/nano, можно echo-м:

echo 'UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /tempdb ext4 defaults 0 0' >> /etc/fstab 

После этого делаем mount -a . Раздел примонтирован в новую папку.

Перенос базы

Сначала остановим сервис systemctl stop postgresql , чтобы во время копирования не записывались свежие данные.

Начинаем копировать данные:

rsync -arv /var/lib/postgres/ /tempdb 

и ждем. У меня база на 500Гб копировалась два часа, но всё зависит от железа, самой базы, фазы луны и дня недели.

На этом этапе мы можем изменить путь к базе в конфигурационном файле postgresql и запустить сервис, всё будет работать. Для этого редактируем файл /etc/postgres/10/main/postgresql.conf и меняем пусть к директории в строке:

data_directory = '/tempdb/10/main' 

Но если мы не хотим менять папку в конфиге Постгреса, то нужно спрятать старую базу, ведь мы не хотим ее сразу удалять, вдруг понадобится.

mkdir /var/oldpostgres && mv /var/lib/postgres/ /var/oldpostgres 

Теперь проверим, что мы не напутали с папками и /var/lib/postgresql на месте. Если нет - mkdir /var/lib/postgresql .

Размонтируем диск umount /tembdb , а затем заходим в nano /etc/fstab и редактируем строку с подключением. Нам нужно изменить точку монтирования. Должно получиться так:

UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /var/lib/postgresql ext4 defaults 0 0 

Делаем mount -a и пробуем запустить сервис systemctl start postgresql .

Проверяем

Как проверить? Ну например netstat -tulpn | grep 5432 , и если у вас постгрес на стандартном порту, должен быть вывод, вроде:

tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 225199/postgres tcp6 0 0 . 5432 . * LISTEN 225199/postgres 

Можно попробовать зайди в базу sudo -u postgres psql :

psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)) Type "help" for help. postgres=# 

Если всё ок, можно удалить старую базу, чтобы освободить место в корне.

💡 Если вам нравятся мои посты, то подписывайтесь также:

Источник

How to Import and Export a PostgreSQL Database

From time to time you may need to export or import a PostgreSQL database. For example, you might be moving the database from one hosting provider to another, importing a database from a third party for repair or migrations, or you may be taking a backup of the database.

This knowledgebase article covers the various ways to import and export a PostgreSQL database.

How to export a PostgreSQL database

Method #1 Use the pg_dump application

The pg_dump command will allow you to export a PostgreSQL database to a file. To export using this method, follow the steps below:

Step 1: Connect to your web hosting account via SSH. If you are not familiar with how to do this, click here to review our KB article on the topic.

Step 2: Enter the following command using your keyboard and at the end, press enter/return on your keyboard. Be sure to replace the ‘username’ with your cPanel default account username and replace ‘dbname’ with the name of the database you wish to export.

pg_dump -U username dbname > dbexport.pgsql

You will be prompted for your default cPanel user account password in order to complete the export.

Your database will be downloaded with the name dbexport.pgsql. You can change the name of the database to anything you want after saving the file, but don’t change the extension.

You may receive an error message, similar to the ones below, when running this command.

pg_dump: SQL command failed pg_dump: Error message from server: ERROR: permission denied for schema topology pg_dump: The command was: LOCK TABLE topology.topology IN ACCESS SHARE MODE

These errors occur because some server database templates include PostGIS with restricted access permissions.

To export a PostgreSQL database without this data, type the following command instead of the command listed in step 2:

pg_dump -U username dbname -N topology -T spatial_ref_sys > dbexport.pgsql

Method #2 Use phpPGAdmin

Step 1: Login to your cPanel. There’s a lot of ways to do this, but the sure fire easiest way is to login to your Client Area, then open your cPanel.

Step 2: Scroll down to the Databases section and open phpPgAdmin.

Step 3: When phpPgAdmin opens, expand the Servers area from the left hand side, then expand PostgreSQL, and then click the name of the database you wish to export.

Step 4: From the menu at the top, click the Export button.

Under the Format column, select Structure and data. Under the Options column, in the Format list box, select SQL.

Then beneath Options, select Download.

The file will be saved to your computer.

Tired of experiencing issues with your site? Get the best and fastest hosting support with ChemiCloud! 🤓 Check out our web hosting plans!

How to import a PostgreSQL database

Before you can import a PostgreSQL database, you must create a new database in cPanel and assign a user to it.

You should import all of your PostgreSQL databases as the primary PostgreSQL user, aka the username assigned to your cPanel account. If you import PostgreSQL databases as a regular user, you will be unable to see or manipulate the data properly using phpPgAdmin.

After you have imported the data as the primary PostgreSQL user, you can grant a regular user access to the database. Then you won’t need to use the primary domain username and password in scripts that access the database.

Method # 1: Use the psql application

Step 1: Using SCP, SFTP, FTP, or the cPanel File Manager > Upload File tool, upload the database you want to import to your hosting account.

Step 2: Connect to your web hosting account via SSH. If you are not familiar with how to do this, click here to review our KB article on the topic.

Step 3: Enter the following command, then press enter/return on your keyboard. Replace ‘username’ with your cPanel username and replace ‘dbname’ with the name of the database you wish to import:

The ‘dbname’ database should now contain all the data that was in the database file you uploaded.

Method # 2: Use phpPgAdmin

To import a PostgreSQL database using phpPgAdmin, follow the steps below:

Step 1: Login to your cPanel. There’s a lot of ways to do this, but the sure fire easiest way is to login to your Client Area, then open your cPanel.

Step 2: Scroll down to the Databases section and open phpPgAdmin.

Step 3: From the left side of phpPgAdmin, expand the Servers area, then expand PostgreSQL, then click the name of the database you want to import data into.

Next click SQL from the row of options at the top of the page.

A white box will appear. You are able to enter text into this box, but you won’t need to. Instead, click the “Choose File” button beneath the text box.

When the file picker opens, choose the .postgresql file you wish to upload.

Then click Execute to instruct phpPgAdmin to import the data in that file into the database.

Additional Information

The official documentation for PostgreSQL can be very handy sometimes.

Find official PostgreSQL documentation here.

Источник

Перемещение базы данных postgresql в Ubuntu 18.04 LTS

postgresql ubuntu

При установке на Ubuntu zabbix-server база данных по умолчанию пишется в папку /var/lib/postgresql. Со временем база растёт и поднимается вопрос переноса её на другой раздел диска. Перенесём базу данных в /opt/postgresql.

Требования

  • ОС Ubuntu 18.04 LTS. Или Ubuntu 16.04.
  • Работаем из-под root.
  • Сервер PostgreSQL
  • Сервер zabbix. Не обязательно.

Подготовка

Проверим где находится текущая БД postgresql.

sudo -u postgres psql psql (9.5.14) Type "help" for help. postgres=# SHOW data_directory; data_directory ------------------------------ /var/lib/postgresql/9.5/main (1 row)

БД находится в папке /var/lib/postgresql/9.5/main.

Для переноса БД нам понадобится rsync:

Убедимся что существует директория /opt.

Остановка сервисов

service zabbix-server stop systemctl stop postgresql

Проверка статуса postgresql.

systemctl status postgresql

Ищем строку "Stopped PostgreSQL RDBMS."

Перенос файлов базы данных

rsync -av /var/lib/postgresql /opt

После переноса переименуем старую папку, на всякий случай:

mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

Настройка конфигурации postgresql

Правим файл postgresql.conf:

vim /etc/postgresql/9.5/main/postgresql.conf

Изменяем значение data_directory:

data_directory = '/opt/postgresql/9.5/main'

Запуск сервисов

systemctl start postgresql

Проверяем где находится текущая БД postgresql.

sudo -u postgres psql psql (9.5.14) Type "help" for help. postgres=# SHOW data_directory; data_directory ------------------------------ /opt/postgresql/9.5/main (1 row)

БД находится в папке /opt/postgresql/9.5/main.

service zabbix-server start

Удаление ненужных файлов

rm -Rf /var/lib/postgresql/9.5/main.bak

Источник

Оцените статью
Adblock
detector