Postgresql перенос базы данных на другой жесткий диск

Автор admiral62, 29 августа 2016, 16:55:35

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

admiral62

В Debian 8.0 установил Postgresql 9.4 стандартным способом через apt-get install. Все запустилось и работает. Теперь нужно базу данных разместить на другом диске, ввиду того, что база большая, а диск на котором установлена система и Postgresql малый.
По этой ссылке http://infostart.ru/public/89592/ товарищ советует остановить сервер, перенести папку с базой данных на примонтированный диск, создать символьную ссылку на перенесенную папку, запустить сервер.
Все делаю по этой инструкции, сервер запускается, но подключиться клиентом psql не получается, пишет: "не удалось подключиться к серверу: в соединении отказано он действительно работает локально и принимает соединения через доменный сокет "/var/run/postgresql/.s.PGSQL.5432"?
Коллеги, подскажите, что нужно сделать?

ogost

нужно разрешить удаленные подключения.
Нагуглено: тыц
По ссылке конечно же секурность никакая, это только для демонстрации возможностей.

endru

admiral62, покажи вывод команды ls -la в директории где находится симлинк.

admiral62

#3
Цитата: endru от 30 августа 2016, 06:41:40
admiral62, покажи вывод команды ls -la в директории где находится симлинк.
/var/lib/postgresql/9.4/main# ls -la
итого 84
drwx------ 17 postgres postgres 4096 авг 30 08:48 .
drwxr-xr-x  3 postgres postgres 4096 авг 29 15:00 ..
lrwxrwxrwx  1 root     root       16 авг 30 08:48 base -> /mnt/raid10/base
drwx------  2 postgres postgres 4096 авг 30 08:48 global
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_clog
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_dynshmem
drwx------  4 postgres postgres 4096 авг 26 18:04 pg_logical
drwx------  4 postgres postgres 4096 авг 26 18:04 pg_multixact
drwx------  2 postgres postgres 4096 авг 30 08:48 pg_notify
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_replslot
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_serial
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_snapshots
drwx------  2 postgres postgres 4096 авг 30 08:48 pg_stat
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_stat_tmp
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_subtrans
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_tblspc
drwx------  2 postgres postgres 4096 авг 26 18:04 pg_twophase
-rw-------  1 postgres postgres    4 авг 26 18:04 PG_VERSION
drwx------  3 postgres postgres 4096 авг 26 18:04 pg_xlog
-rw-------  1 postgres postgres  107 авг 29 21:43 postgresql.auto.conf
-rw-------  1 postgres postgres  133 авг 30 08:48 postmaster.opts
-rw-------  1 postgres postgres   92 авг 30 08:48 postmaster.pid


А вот права на папку в директории куда перенес базы
drwx------ 5 postgres   postgres    4096 авг 26 18:04 base


Изменил владельца симлинка, перезапустил postgresql, но все равно psql не подключается
lrwxrwxrwx  1 postgres root       16 авг 30 08:48 base -> /mnt/raid10/base

endru

Поменяй владельца симлинка на postgres:
chown postgres postgres /var/lib/postgresql/9.4/main/base
Некоторое ПО проверяет принадлежит ли файл/директория пользователю, и если (даже если есть полные права для other) владельцем является другой пользователь, могут возникать ошибки при работе.
Но маловероятно что это поможет. показывай конфиг сервера:
grep -v "^#" /путь/до/файла.конфига
плюс смотри логи в /var/log/

admiral62

#5
Цитата: ogost от 30 августа 2016, 06:22:42
нужно разрешить удаленные подключения.
Удаленные подключения разрешены, listen_addresses='*', в pg_hba.conf удаленные подключения разрешены, более того, с windows машины pgadmin3 спокойно подключается к базе, когда не переношу базу и не делаю симлинк.
Также заметил, что если закоментировать Local для пользователя postgres или изменить на md5 при подключении psql возникает такая же ситуация, когда переношу базы.
# Database administrative login by Unix domain socket
local   all             postgres                                trust
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
#local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32           md5
host    all             all             192.168.75.24/24            md5


Cообщение объединено 30 августа 2016, 10:06:32

Цитата: endru от 30 августа 2016, 09:18:47Но маловероятно что это поможет. показывай конфиг сервера:
data_directory = '/var/lib/postgresql/9.4/main'         # use data in another directory
                                        # (change requires restart)
hba_file = '/etc/postgresql/9.4/main/pg_hba.conf'       # host-based authentication file
                                        # (change requires restart)
ident_file = '/etc/postgresql/9.4/main/pg_ident.conf'   # ident configuration file
                                        # (change requires restart)

external_pid_file = '/var/run/postgresql/9.4-main.pid'                  # write an extra PID file
                                        # (change requires restart)

                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
                                        # (change requires restart)
                                        # (change requires restart)
                                        # (change requires restart)
                                        # (change requires restart)


ssl = true                              # (change requires restart)
                                        # (change requires restart)
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'          # (change requires restart)
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'         # (change requires restart)

                                        # 0 selects the system default
                                        # 0 selects the system default
                                        # 0 selects the system default


shared_buffers = 128MB                  # min 128kB
                                        # (change requires restart)
                                        # (change requires restart)
                                        # (change requires restart)
dynamic_shared_memory_type = posix      # the default is the first option
                                        # supported by the operating system:
                                        #   posix
                                        #   sysv
                                        #   windows
                                        #   mmap
                                        # use none to disable dynamic shared memory

                                        # in kB, or -1 for no limit

                                        # (change requires restart)

                                        # (change requires restart)
                                        # off, local, remote_write, or on
                                        # supported by the operating system:
                                        #   open_datasync
                                        #   fdatasync (default on Linux)
                                        #   fsync
                                        #   fsync_writethrough
                                        #   open_sync
                                        # (change requires restart)
                                        # (change requires restart)


                                # (change requires restart)
                                # placeholders: %p = path of file to archive
                                #               %f = file name only
                                # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
                                # number of seconds; 0 disables

                                # (change requires restart)

                                # (change requires restart)

                                # comma-separated list of application_name
                                # from standby(s); '*' = all

                                        # (change requires restart)
                                        # when reading WAL from archive;
                                        # -1 allows indefinite delay
                                        # when reading streaming WAL;
                                        # -1 allows indefinite delay
                                        # 0 disables
                                        # query conflicts
                                        # communication from master
                                        # in milliseconds; 0 disables


                                        # JOIN clauses

                                        # stderr, csvlog, syslog, and eventlog,
                                        # depending on platform.  csvlog
                                        # requires logging_collector to be on.

                                        # into log files. Required to be on for
                                        # csvlogs.
                                        # (change requires restart)

                                        # can be absolute or relative to PGDATA
                                        # can include strftime() escapes
                                        # begin with 0 to use octal notation
                                        # same name as the new log file will be
                                        # truncated rather than appended to.
                                        # But such truncation only occurs on
                                        # time-driven rotation, not on restarts
                                        # or size-driven rotation.  Default is
                                        # off, meaning append to existing files
                                        # in all cases.
                                        # happen after that time.  0 disables.
                                        # happen after that much log output.
                                        # 0 disables.


                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   log
                                        #   notice
                                        #   warning
                                        #   error

                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   info
                                        #   notice
                                        #   warning
                                        #   error
                                        #   log
                                        #   fatal
                                        #   panic

                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   info
                                        #   notice
                                        #   warning
                                        #   error
                                        #   log
                                        #   fatal
                                        #   panic (effectively off)

                                        # and their durations, > 0 logs only
                                        # statements running at least this number
                                        # of milliseconds


log_line_prefix = '%t [%p-%l] %q%u@%d '                 # special values:
                                        #   %a = application name
                                        #   %u = user name
                                        #   %d = database name
                                        #   %r = remote host and port
                                        #   %h = remote host
                                        #   %p = process ID
                                        #   %t = timestamp without milliseconds
                                        #   %m = timestamp with milliseconds
                                        #   %i = command tag
                                        #   %e = SQL state
                                        #   %c = session ID
                                        #   %l = session line number
                                        #   %s = session start timestamp
                                        #   %v = virtual transaction ID
                                        #   %x = transaction ID (0 if none)
                                        #   %q = stop here in non-session
                                        #        processes
                                        #   %% = '%'
                                        # e.g. '<%u%%%d> '
                                        # than the specified size in kilobytes;
                                        # -1 disables, 0 logs all temp files
log_timezone = 'W-SU'


stats_temp_directory = '/var/run/postgresql/9.4-main.pg_stat_tmp'


                                        # requires track_counts to also be on.
                                        # their durations, > 0 logs only
                                        # actions running at least this number
                                        # of milliseconds.
                                        # (change requires restart)
                                        # vacuum
                                        # analyze
                                        # (change requires restart)
                                        # before forced vacuum
                                        # (change requires restart)
                                        # autovacuum, in milliseconds;
                                        # -1 means use vacuum_cost_delay
                                        # autovacuum, -1 means use
                                        # vacuum_cost_limit


                                        # only default tablespace


datestyle = 'iso, dmy'
timezone = 'W-SU'
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia (historical usage)
                                        #   India
                                        # You can create your own file in
                                        # share/timezonesets/.
                                        # encoding

lc_messages = 'ru_RU.UTF-8'                     # locale for system error message
                                        # strings
lc_monetary = 'ru_RU.UTF-8'                     # locale for monetary formatting
lc_numeric = 'ru_RU.UTF-8'                      # locale for number formatting
lc_time = 'ru_RU.UTF-8'                         # locale for time formatting

default_text_search_config = 'pg_catalog.russian'


                                        # (change requires restart)
                                        # (change requires restart)


                                        # directory 'conf.d'



А также postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by ALTER SYSTEM command.
listen_addresses = '*'


admiral62

#7
Вопрос решен, проблема была в том, что нужно было в профиль postgres записать переменные окружения PATH и PGDATA.

На свежеустановленном postgresql 9.4 нужно сделать следующее манипуляции (может кому пригодится моя инструкция):
1. разрешить локальные подключения, для чего войти в терминал под пользователем postgres:
        a) в терминале под рутом выполнить
su - postgres       
2. запустить клиентское приложение psql командой psql
3. изменится вид приглашения командной строки
4. в версии 9.4 и более в клиенте psql выполнить команду для разрешения подключений со всех адресов
ALTER SYSTEM SET listen_addresses TO '*';       
5. открыть файл
nano /etc/postgresql/9.4/main/pg_hba.conf       
6. вставить строку (ваша сеть или отдельные адреса)
host    all             all             192.168.75.0/24            md5
7. в терминале пользователя postgres выполнить приведенные ниже строчки кода, PGDATA должна ссылаться на папку, где расположен файл postgresql.conf
bash -c "echo 'export PATH=/usr/lib/postgresql/9.4/bin' >> ~/.profile"
bash -c "echo 'export PGDATA=/etc/postgresql/9.4/main' >> ~/.profile"

8. остановить сервер командой в терминале под рутом
/etc/init.d/postgresql stop
9.переместить папку /var/lib/postgresql/9.4/main/base в папку, в которую примонтирован диск
10. сделать симлинк, например в mc стать на перенесенную папку и нажать кнопки ctrl+x,s
11. запустить сервер
/etc/init.d/postgresql start

ВСЕМ СПАСИБО ЗА УЧАСТИЕ!!!

endru


admiral62

Цитата: endru от 31 августа 2016, 04:14:43
Не понял, причем тут переменные для bash?
В нашей ситуации фактически не работал клиент psql (не мог подключиться к базе). Сам сервер при этом работал, с другой машины pgadmin3 подключался нормально.
А именно для клиента psql, а также для pg_ctl и др. оберток как раз и нужны переменные окружения в профиле пользователя операционной системы postgres.