Назад | Перейти на главную страницу

Postgresql - останавливает прослушивание после монтирования тома в каталог данных

У меня временная потребность в базе данных postgresql объемом 180 ГБ. В целях экономии у меня есть это на дешевом дисковом сервере 40 ГБ, и я хочу смонтировать том 200 ГБ в каталог данных postgresql.

Моя проблема: после того, как я остановил postgresql, смонтировал том, скопировал содержимое, обновил postgresql.conf, запустил postgresql, он перестает слушать 5432

Мой вопрос: почему это происходит?

Мой порядок действий:

  1. netstat и посмотрите, что postgres прослушивает 5432 для любых удаленных подключений

    root@foobar:/etc/postgresql/9.5/main# netstat -tulpen
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
    tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      112        44384       25831/postgres  
    tcp        0      0 0.0.0.0:3451            0.0.0.0:*               LISTEN      0          94839       15010/sshd      
    tcp6       0      0 :::5432                 :::*                    LISTEN      112        44385       25831/postgres  
    tcp6       0      0 :::3451                 :::*                    LISTEN      0          94848       15010/sshd
    

затем

  1. остановить postgresql
  2. создайте новый каталог / mnt / что угодно
  3. смонтировать / dev / xvdb в / mnt / любой /
  4. Скопируйте содержимое '/var/lib/postgresql/9.5/main/' в новый том '/ mnt / something'

  5. Отредактируйте postgresql.conf и измените "каталог данных" на новый том ..

    data_directory = '/mnt/whatever'         # use data in another directory
                                             # (change requires restart)
    hba_file = '/etc/postgresql/9.5/main/pg_hba.conf'       # host-based authentication file
                                             # (change requires restart)
    ident_file = '/etc/postgresql/9.5/main/pg_ident.conf'   # ident configuration file
                                             # (change requires restart)
    
  6. Запустить postgresql

  7. netstat и обнаруживаем, что postgresql больше не слушает 5432

    root@foobar:/# netstat -tulpen
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
    tcp        0      0 0.0.0.0:3451            0.0.0.0:*               LISTEN      0          94839       15010/sshd       
    tcp6       0      0 :::3451                 :::*                    LISTEN      0          94848       15010/sshd
    

Сначала я подумал, что это что-то в postgresql.conf что я испортил разрешение удаленных подключений, но после повторной сборки сервера несколько раз, проходящих через этот процесс, он определенно прослушивает 5432 полностью, пока я не смонтирую новый том.
Postgresql отлично работает удаленно, пока я не смонтирую том и не обновлю каталог данных в conf. Кроме того, он не будет слушать даже после того, как я отключу том и восстановлю резервную копию оригинала. postgresql.conf. Мне кажется, что что-то делаю в маунте ломается.
Я установил правило, разрешающее 5432 в IPtables, но это не исправляет (и помните, удаленные соединения работают нормально до монтирования, поэтому я не думаю, что это брандмауэр).

Какие-либо предложения?

Я предполагаю, что это какой-то lsof вещь, но я застрял.

5) Скопируйте содержимое '/var/lib/postgresql/9.5/main/' в новый том '/ mnt / something'

Наиболее вероятной причиной, по которой PostgreSQL после этого сразу же выходит из строя при запуске, является то, что на этом этапе не сохраняются точные разрешения / владельцы копируемых файлов и каталогов. Если вы используете cp, обязательно добавьте -p вариант.

7) Запустите postgresql

8) netstat и обнаружите, что postgresql больше не слушает 5432

Кажется, вы ищете проблему с сетью, но не слушаете порт 5432, скорее всего, из-за того, что PostgreSQL завершился сразу после ошибки после шага № 7. Как упоминалось в комментариях, проверьте журналы postgresql: причина, по которой он не запускается, должна быть явно написана там. Обычно журналы находятся в /var/log/postgresql/ (учитывая упомянутые пути, похоже, что это система Debian).