17 апреля 2019 г.
15 апреля 2019 г.
Простенькая репликация postgres
Имеем в наличии:
Два сервера под управлением Astra Linux 1.5 с postgres 9.2 на борту
Настроена боевая база на мастере.
srv - master - 192.168.10.1
srv2 - slave - 192.168.10.2
Нужно:
1. Репликация
2. Балансировка
Делаем.
Первым шагом настраиваем реплику
На мастере:
В файле pg_hba.conf добавляем запись
host replication postgres 192.168.10.2/32 trust
В файле postgresql.conf:
max_wal_senders = 1 # количество подключаемых резервных серверов
max_keep_segments = 256 # Количество хранимых сегментов. Необходимо подобрать такое количество, чтобы резервных сервер успевал все забирать. Я влепил 256 (макс), чтобы за сутки wal не затирались
wal_level = hot_standby # hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер
checkpoint_segments = 16 # Можно увеличить количество сегментов в wal-логе
На слейве
Создаем директорию, куда будет литься реплика
mkdir -p /DATA/main/
Добавляем локали ru_RU.UTF-8, en_US.UTF-8, для чего необходимо раскоментировать их в файле /etc/locale.gen. и выполнить команду:
locale-gen
Проверяем наличие в системе нужной локали
locale -a
Сносим старый кластер:
pg_dropcluster 9.2 main --stop
Создаем новый кластер с нужной локалью:
pg_createcluster --locale=ru_RU.UTF-8 -d /DATA/main 9.2 main
Удаляем оттуда все
rm -r /DATA/main/*
Запускаем pg_basebackup
pg_basebackup --host=192.168.10.1 --port=5432 --username=postgres -D "/DATA/main/"
После выполнения меняем владельца файлов даты
chown -R postgres /DaTA/main/
Стартуем кластер на слейве.
Если не стартуется в файле psotgresql.conf, на слейве, поменять
log_destination = 'stderr' на log_destination = 'syslog'
и искать ошибку в syslog
Два сервера под управлением Astra Linux 1.5 с postgres 9.2 на борту
Настроена боевая база на мастере.
srv - master - 192.168.10.1
srv2 - slave - 192.168.10.2
Нужно:
1. Репликация
2. Балансировка
Делаем.
Первым шагом настраиваем реплику
На мастере:
В файле pg_hba.conf добавляем запись
host replication postgres 192.168.10.2/32 trust
В файле postgresql.conf:
max_wal_senders = 1 # количество подключаемых резервных серверов
max_keep_segments = 256 # Количество хранимых сегментов. Необходимо подобрать такое количество, чтобы резервных сервер успевал все забирать. Я влепил 256 (макс), чтобы за сутки wal не затирались
wal_level = hot_standby # hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер
checkpoint_segments = 16 # Можно увеличить количество сегментов в wal-логе
На слейве
Создаем директорию, куда будет литься реплика
mkdir -p /DATA/main/
Добавляем локали ru_RU.UTF-8, en_US.UTF-8, для чего необходимо раскоментировать их в файле /etc/locale.gen. и выполнить команду:
locale-gen
Проверяем наличие в системе нужной локали
locale -a
Сносим старый кластер:
pg_dropcluster 9.2 main --stop
Создаем новый кластер с нужной локалью:
pg_createcluster --locale=ru_RU.UTF-8 -d /DATA/main 9.2 main
Удаляем оттуда все
rm -r /DATA/main/*
Запускаем pg_basebackup
pg_basebackup --host=192.168.10.1 --port=5432 --username=postgres -D "/DATA/main/"
После выполнения меняем владельца файлов даты
chown -R postgres /DaTA/main/
Стартуем кластер на слейве.
Если не стартуется в файле psotgresql.conf, на слейве, поменять
log_destination = 'stderr' на log_destination = 'syslog'
и искать ошибку в syslog
Видеодрайверы для astra linux
Скачать драйвера для AL 1.6
1. 340
2. 390
3. 490
Все версии подписаны ключом
Установка драйверов для AL 1.6
Скачать архив с нужной версией драйвера.
Очистить и обновить файл /etc/X11/xorg.conf;
rm /etc/X11/xorg.conf
dpkg-reconfigure xserver-xorg
Распаковать полученный архив:
tar xzf nvidia-graphics-drivers-{340,390,410}.tar.gz
Перейти в созданный при распаковке каталог и установить драйверы:
cd nvidia-graphics-drivers-{340,390,410} && sudo dpkg -i *.deb
Запретить запуск драйверов nouveau, изменив конфигурационные файлы (операция требует привилегий суперпользователя), а именно:
добавить в файл /etc/modprobe.d/blacklist.conf строчки
blacklist nouveau
options nouveau modeset=0
и закомментировать в файле /etc/initramfs-tools/modules строчку nouveau modeset=1
#nouveau modeset=1
после чего выполнить команду
update-initramfs -u -k all
Вышеуказанные действия можно выполнить следующим сценарием от имени суперпользоваетеля:
echo blacklist nouveau >> /etc/modprobe.d/blacklist.conf
echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist.conf
sed -i -e "s/^[[:space:]]*nouveau[[:space:]]\+modeset[[:space:]]*=[[:space:]]*1/#nouveau modeset=1/" /etc/initramfs-tools/modules
update-initramfs -u -k all
Перезагрузить компьютер.
Удаление драйверов для AL 1.6
Для удаления драйверов Nvidia и восстановления работы драйверов Nouveau следует выполнить следующие действия:
Очистить и обновить файл /etc/X11/xorg.conf;
rm /etc/X11/xorg.conf
dpkg-reconfigure xserver-xorg
Удалить все пакеты драйверов Nvidia:
apt remove --purge --yes --force-yes nvidia*
apt remove --purge --yes --force-yes libnvidia*
apt remove --purge --yes --force-yes xserver-xorg-video-n*
for nvdeb in `dpkg -l | grep nvidia`; do
apt remove --purge --yes --force-yes $nvdeb
done
Восстановить оригинальные версии GL библиотек mesa и символических ссылок:
apt install --reinstall --yes --force-yes xserver-xorg-core libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2 libgles2-mesa libglew2.0 libglewmx1.13 libglu1-mesa libglvnd0 libglx-mesa0 libglx0
Удалить модули ядра Nvidea:
for nvdriver in `find /lib/modules -type f -name "nvidia*"`; do
echo "$nvdriver"
mv -f $nvdriver ${nvdriver}-$$-backup
done
depmod -a
Удалить (или закомментировать) строки в файле /etc/modprobe.d/blacklist.conf, запрещающие запуск драйверов nouveau:
# blacklist nouveau
# options nouveau modeset=0
Раскомментировать в файле /etc/initramfs-tools/modules строку
nouveau modeset=1
и выполнить команду
update-initramfs -u -k all
После этого перезагрузить машину.
Скачать драйвера для AL 1.5
1. 387.12
2. 384.47
3. 375.20
4. 367.35
5. 361.28
6. 340.98
7. 304.137
8. 340.98
9. 390.77
10. 390.87
Модули для ядря generic-4.2.0-24, работают только с драйвером 387.12
Скачать
Установка драйверов для AL 1.5
Удаление драйверов для AL 1.5
FixMe
Проблема с расширениями OpenGL на мандатных уровнях, отличных от нулевого c проприетарными драйверами Nvidia (Astra Linux SE 1.4/1.5)
В каталог /etc/X11/fly-dm положить файл Xsetup
Содержимое файла Xsetup
Включение дискретной карты Nvidia на ноутбуках с гибридной графикой
Если требуется использовать только один видеоадаптер, проверьте BIOS ноутбука, возможно в BIOS есть опция, отключающая один из чипов. Либо используйте следующее решение.
Установите драйвер Nvidia. Проприетарный драйвер не поддерживает динамического переключения между картами, поэтому для включения карты Nvidia измените или создайте файл (если отсутствует) /etc/X11/xorg.conf со следующим содержимым:
PCI адрес находится в начале строки: BusID "PCI:01:00.0". Строка с адресом будет выглядеть так:
BusID "PCI:01:0:0"
Затем создайте файл /usr/local/bin/nvidia_switch.sh:
Добавьте скрипт в файл /etc/X11/fly-dm/Xsetup :
1. 340
2. 390
3. 490
Все версии подписаны ключом
Установка драйверов для AL 1.6
Скачать архив с нужной версией драйвера.
Очистить и обновить файл /etc/X11/xorg.conf;
rm /etc/X11/xorg.conf
dpkg-reconfigure xserver-xorg
Распаковать полученный архив:
tar xzf nvidia-graphics-drivers-{340,390,410}.tar.gz
Перейти в созданный при распаковке каталог и установить драйверы:
cd nvidia-graphics-drivers-{340,390,410} && sudo dpkg -i *.deb
Запретить запуск драйверов nouveau, изменив конфигурационные файлы (операция требует привилегий суперпользователя), а именно:
добавить в файл /etc/modprobe.d/blacklist.conf строчки
blacklist nouveau
options nouveau modeset=0
и закомментировать в файле /etc/initramfs-tools/modules строчку nouveau modeset=1
#nouveau modeset=1
после чего выполнить команду
update-initramfs -u -k all
Вышеуказанные действия можно выполнить следующим сценарием от имени суперпользоваетеля:
echo blacklist nouveau >> /etc/modprobe.d/blacklist.conf
echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist.conf
sed -i -e "s/^[[:space:]]*nouveau[[:space:]]\+modeset[[:space:]]*=[[:space:]]*1/#nouveau modeset=1/" /etc/initramfs-tools/modules
update-initramfs -u -k all
Перезагрузить компьютер.
Удаление драйверов для AL 1.6
Для удаления драйверов Nvidia и восстановления работы драйверов Nouveau следует выполнить следующие действия:
Очистить и обновить файл /etc/X11/xorg.conf;
rm /etc/X11/xorg.conf
dpkg-reconfigure xserver-xorg
Удалить все пакеты драйверов Nvidia:
apt remove --purge --yes --force-yes nvidia*
apt remove --purge --yes --force-yes libnvidia*
apt remove --purge --yes --force-yes xserver-xorg-video-n*
for nvdeb in `dpkg -l | grep nvidia`; do
apt remove --purge --yes --force-yes $nvdeb
done
Восстановить оригинальные версии GL библиотек mesa и символических ссылок:
apt install --reinstall --yes --force-yes xserver-xorg-core libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2 libgles2-mesa libglew2.0 libglewmx1.13 libglu1-mesa libglvnd0 libglx-mesa0 libglx0
Удалить модули ядра Nvidea:
for nvdriver in `find /lib/modules -type f -name "nvidia*"`; do
echo "$nvdriver"
mv -f $nvdriver ${nvdriver}-$$-backup
done
depmod -a
Удалить (или закомментировать) строки в файле /etc/modprobe.d/blacklist.conf, запрещающие запуск драйверов nouveau:
# blacklist nouveau
# options nouveau modeset=0
Раскомментировать в файле /etc/initramfs-tools/modules строку
nouveau modeset=1
и выполнить команду
update-initramfs -u -k all
После этого перезагрузить машину.
Скачать драйвера для AL 1.5
1. 387.12
2. 384.47
3. 375.20
4. 367.35
5. 361.28
6. 340.98
7. 304.137
8. 340.98
9. 390.77
10. 390.87
Модули для ядря generic-4.2.0-24, работают только с драйвером 387.12
Скачать
Установка драйверов для AL 1.5
sudo dpkg -i nvidia-drivers-astra-smolensk-1.5*.deb
Удаление драйверов для AL 1.5
sudo dpkg --purge nvidia-drivers-astra-smolensk*.debFixMe
Проблема с расширениями OpenGL на мандатных уровнях, отличных от нулевого c проприетарными драйверами Nvidia (Astra Linux SE 1.4/1.5)
В каталог /etc/X11/fly-dm положить файл Xsetup
Содержимое файла Xsetup
#! /bin/sh# Xsetup - run as root before the login dialog appears #xconsole -geometry 480x130-0-0 -notify -verbose -fn fixed -exitOnFail -file /dev/xconsole & if [ -x /usr/sbin/pdp-flbl ]; then find /dev/dri -type c -exec /usr/sbin/pdp-flbl :::ehole {} \; find /dev -name nvidia* -type c -exec /usr/sbin/pdp-flbl :::ehole {} \; /usr/sbin/pdp-flbl -R :::ehole /proc/driver/nvidia \;fi /usr/bin/fly-dm-set-dpi.shВключение дискретной карты Nvidia на ноутбуках с гибридной графикой
Если требуется использовать только один видеоадаптер, проверьте BIOS ноутбука, возможно в BIOS есть опция, отключающая один из чипов. Либо используйте следующее решение.
Установите драйвер Nvidia. Проприетарный драйвер не поддерживает динамического переключения между картами, поэтому для включения карты Nvidia измените или создайте файл (если отсутствует) /etc/X11/xorg.conf со следующим содержимым:
Section "Module" Load "modesetting"EndSectionSection "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:X:Y:Z" Option "AllowEmptyInitialConfiguration"EndSectionГде "BusID" "PCI:X:Y:Z" - PCI адрес карты Nvidia. Чтобы узнать адрес, введите команду:
lspci | grep -E "VGA|3D"
01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:139b] (rev a2) PCI адрес находится в начале строки: BusID "PCI:01:00.0". Строка с адресом будет выглядеть так:
BusID "PCI:01:0:0"
Затем создайте файл /usr/local/bin/nvidia_switch.sh:
xrandr --setprovideroutputsource modesetting NVIDIA-0xrandr --autoxrandr --dpi 96
Необходимо сделать файл исполняемым:
chmod +x /usr/local/bin/nvidia_switch.sh
#! /bin/sh# Xsetup - run as root before the login dialog appears#xconsole -geometry 480x130-0-0 -notify -verbose -fn fixed -exitOnFail -file /dev/xconsole &/usr/local/bin/nvidia_switch.shif [ -x /usr/sbin/pdp-flbl ]; then find /dev/dri -type c -exec /usr/sbin/pdp-flbl :::ehole {} \;; fi/usr/bin/fly-dm-set-dpi.shПерезагрузите компьютер.3 апреля 2019 г.
Основные команды PostgreSQL (psql, pg_dump, pg_restore)
Все команды запускаются под пользователем postgres (postgresql-суперпользователь)
Просмотр списка и путей к конфигурационным файлам
Бекап и восстановление таблиц
В PostgreSQL есть две утилиты для бекапа
Создание бекапа базы mydb, в сжатом виде
Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД
Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments
Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.
Создание резервной копии с сжатием в gz
Список наиболее часто используемых опций:
Бекап всех баз данных используя команду
Восстановление всего бекапа с остановкой на первой ошибке
Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью
Восстановление резервной копии БД, сжатой gz
Начиная с версии 9.2 можно восстановить только структуру таблиц с помощью опции
Обслуживание таблицы
Перенос директории с данным (data directory)
Узнать текущий путь
Очищение таблицы
Очищение таблицы tablename и обнуление счетчика с ID.
Удаление NULL у поля
Утилиты
pgcli утилита командной строки с авто-дополнениям и подсветкой синтаксиса.
Установка
$ su - postgres
psql -l - список баз данных.psql -d dbname - подключение к БД dbname.psql -f file.sql - выполнение команд из файла file.sql.psql -U postgres -d dbname -c "CREATE TABLE test(some_id serial PRIMARY KEY, some_text text);" - выполнение команды в базе dbname.psql -d dbname -H -c "SELECT * FROM test" -o test.html - вывод результата запроса в html-файл.Просмотр списка и путей к конфигурационным файлам
psql > SELECT name, setting FROM pg_settings WHERE category = 'File Locations';
# или список всех конфигурационных параметров
psql > show all;
Список активных соединений с информацией о: pid процесса, выполняющегося запроса, пользователя, базы данных.
psql > SELECT * FROM pg_stat_activity;
Создание индексов
# primary key
psql > ALTER TABLE tableName ADD PRIMARY KEY (id);
# unique index
psql > CREATE UNIQUE INDEX indexName ON tableName (columnNames);
Команды psql
\c dbname - подсоединение к БД dbname.\l - список баз данных.\dt - список всех таблиц.\d table - структура таблицы table.\du - список всех пользователей и их привилегий.\dt+ - список всех таблиц с описанием.\dt *s* - список всех таблиц, содержащих s в имени.\i FILE - выполнить команды из файла FILE.\o FILE - сохранить результат запроса в файл FILE.\a - переключение между режимами вывода: с/без выравнивания.Бекап и восстановление таблиц
В PostgreSQL есть две утилиты для бекапа
pg_dump и pg_dumpall. pg_dump используется для бекапа одной базы, pg_dumpall для бекапа всех баз и сервера в целом (необходимо запускать под postgresql-суперпользователем).Создание бекапа базы mydb, в сжатом виде
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb
Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb
Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb
Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.
pg_dump -a -t table_name -f file_name database_name
Создание резервной копии с сжатием в gz
pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c > mydb.gz
Список наиболее часто используемых опций:
-h host - хост, если не указан то используется localhost или значение из переменной окружения PGHOST.-p port - порт, если не указан то используется 5432 или значение из переменной окружения PGPORT.-u - пользователь, если не указан то используется текущий пользователь, также значение можно указать в переменной окружения PGUSER.-a, --data-only - дамп только данных, по-умолчанию сохраняются данные и схема.-b - включать в дамп большие объекты (blog'и).-s, --schema-only - дамп только схемы.-C, --create - добавляет команду для создания БД.-c - добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).-O - не добавлять команды для установки владельца объекта (таблиц, видов и т.д.).-F, --format {c|t|p} - выходной формат дампа, custom, tar, или plain text.-t, --table=TABLE - указываем определенную таблицу для дампа.-v, --verbose - вывод подробной информации.-D, --attribute-inserts - дамп используя команду INSERT с списком имен свойств.Бекап всех баз данных используя команду
pg_dumpall.pg_dumpall > all.sql
# проверка бекапа
grep "^[\]connect" all.sql
\connect db1
\connect db2
В PostgreSQL есть две утилиты для восстановления базы из бекапа.- psql - восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
- pg_restore - восстановление сжатых бекапов (tar);
psql -h localhost -U someuser -d dbname -f mydb.sql
Восстановление всего бекапа с остановкой на первой ошибке
psql -h localhost -U someuser --set ON_ERROR_STOP=on -f mydb.sql
Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью
CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановитьpg_restore --dbname=mydb --jobs=4 --verbose mydb.backup
Восстановление резервной копии БД, сжатой gz
gunzip mydb.gz
psql -U postgres -d mydb -f mydb
Начиная с версии 9.2 можно восстановить только структуру таблиц с помощью опции
--section# создаем БД
CREATE DATABASE mydb2;
# восстанавливаем
pg_restore --dbname=mydb2 --section=pre-data --jobs=4 mydb.backup
Обслуживание таблицы
VACUUM ANALYZE table;
REINDEX DATABASE dbName;
REINDEX TABLE tabName;
Перенос директории с данным (data directory)
Узнать текущий путь
# способ 1
$ su - postgres
$ psql
psql > SHOW data_directory;
# способ 2
$ ps ax | grep 'postgres -D'
Создадим новую директорию, назначим пользователя и инициализируемmkdir -p /pathto/postgresql/data
chown -R postgres:postgres /pathto/postgresql
su - postgres
initdb -D /pathto/postgresql/data
Теперь надо подправить файл с сервисом, который стартует postgresql# под arch linux
sudo vim /etc/systemd/system/multi-user.target.wants/postgresql.service
Environment=PGROOT=/pathto/postgresql/
PIDFile=/pathto/postgresql/data/postmaster.pid
Очищение таблицы
Очищение таблицы tablename и обнуление счетчика с ID.
TRUNCATE TABLE tablename RESTART IDENTITY CASCADE;
CASCADE нужен на случай если tablename связана с другой таблицей.Удаление NULL у поля
ALTER TABLE movies ALTER COLUMN year DROP NOT NULL;
Утилиты
pgcli утилита командной строки с авто-дополнениям и подсветкой синтаксиса.
Установка
pip install pgcli
Запускpgcli -U postgres -W dbname
Быть честным, стащил отсюда
Подписаться на:
Сообщения (Atom)