четверг, 14 февраля 2019 г.

Замена паролей на резервном сервере 1С перенос данных

Сохранение данных на рабочем сервере:

Сохранение базы demo:

$ sudo /bin/su postgres -c "pg_dump -Fc demo"  > /home/user/demo_2019-03-14_23-00-11.dump


Сохранение базы zik:

$ sudo /bin/su postgres -c "pg_dump -Fc zik"  > /home/user/zik_2019-03-14_23-00-11.dump


Скачиваем файлы.


Подключаем резервный сервер, в процессе или предварительно поменяв пароли.



1. Начнем с пароля usr1cv8
это пароль нам собственно неинтересен, поэтому логично сделать
usr1cv8 резервным паролем sudo
$ sudo usermod -aG sudo usr1cv8

$ sudo passwd usr1cv8
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
passwd: password updated successfully

или

$ sudo echo -e "password\npassword\n" | sudo passwd usr1cv8


Пароль usr1cv8 не на что не влияет
Проверка:
$ su usr1cv8

Изменение пароля postgresql
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'password';"

После изменения пароля:


Необходимо изменить параметры подключения для каждой информационной базы:

Администратора информационной базы и его пароль взять из информационной базы,
например "Григорьянц А.А. (системный администратор)", может состоять из нескольких слов:







Может быть удобнее, чем менять пароли для баз, удалить кластер сервера 1с
и зарегистрировать базы по новой:

sudo /bin/su usr1cv8 -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/*"

Если  задействована папка conf , почистить /home/usr1cv8/.1cv8/1C/1cv8/ вручную.


Сменим пароль user

sudo echo -e "password\npassword\n" | sudo passwd user

Меняем настройки для dhcp:

$ sudo nano /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp1s0
iface enp1s0 inet dhcp
#iface enp1s0 inet static
#address 192.168.0.43
#netmask 255.255.255.0
#gateway 192.168.0.1
#dns-nameservers 8.8.8.8
#auto enp1s0

Сохранить

Обратить внимание  NetBIOS-имена компьютеров  могут быть до 15 символов.
Soc-1c-test-239k не будет адресоваться по имени, нужно прописывать hosts на клиентах.

$ sudo nano /etc/hosts

127.0.0.1       localhost Soc-1c-test-239k
#192.168.0.43       test
#192.168.0.43    Soc-1c-test-239k




Сохранить.

$ sudo nano /etc/hostname

#test
Soc-1c-test-239k

Сохранить.


При замене hostname

Если  задействована папка conf , почистить /home/usr1cv8/.1cv8/1C/1cv8/ вручную.

либо грохнуть целиком:

sudo /bin/su usr1cv8 -c "rm -rf /home/usr1cv8/.1cv8/1C/1cv8/*"


После гроханья

$ sudo service srv1cv83 stop
$ sudo service srv1cv83 start
$ ss -tlnp | grep :15


Посмотреть базы:
$ sudo /bin/su postgres -c "psql -l"
Грохнуть лишние:

$ sudo /bin/su postgres -c "dropdb demo"
$ sudo /bin/su postgres -c "dropdb zik"
$ sudo /bin/su postgres -c "dropdb demotest" 
$ sudo /bin/su postgres -c "dropdb demotest1"

$ sudo /bin/su postgres -c "psql -l"

Создадим базу demo:
$ sudo /bin/su postgres -c "createdb --username postgres -T template0 demo"

Загрузим demo:
$ sudo /bin/su postgres -c "pg_restore -d demo /home/user/demo_2019-03-14_23-00-11.dump"


Размер базы demo 
$ sudo su -c "psql -d demo -c \"select pg_size_pretty( pg_database_size('demo'))\"" postgres


Подключим базу demo:

  
Создадим базу zik:
$ sudo /bin/su postgres -c "createdb --username postgres -T template0 zik"  

Загрузим zik:
$ sudo /bin/su postgres -c "pg_restore -d zik /home/user/zik_2019-03-14_23-00-11.dump"


Размер базы demo 
$ sudo su -c "psql -d zik -c \"select pg_size_pretty( pg_database_size('zik'))\"" postgres

Подключим базу zik:


Остается настроить backup

Настраиваем:
Скрипт backup postgres 9.6 pg_probackup

$ nano /home/user/backup-pgpro.sh

Вставить текст ниже:

#!/bin/sh
#set -e
#sudo su - postgres
BACKUP_DIR='/backup'
COPY_DIR='/backup/copy'
LOG_DIR='/backup'
LOG_ERR_FILE='err.txt'
INSTANCE='main'
COPY_ID=''
FLAG_BACKUP=false
FLAG_VALIDATE=false
sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_ERR_FILE"
sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_ERR_FILE.rotation"
sudo /bin/su - postgres -c "rm -f $LOG_DIR/pg_probackup.log"
sudo /bin/su - postgres -c "rm -f $LOG_DIR/pg_probackup.log.rotation"


#if  false ; then
if  true ; then
    sudo systemctl stop  srv1cv83.service

    # Создание полной автономной резервной копии:
    echo "INFO: Начинаем создание полной автономной резервной копии!"
    LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Начинаем создание полной автономной резервной копии!"`
    sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"
    sudo /bin/su postgres -c "pg_probackup-9.6 backup -B $BACKUP_DIR \
        --instance $INSTANCE -b FULL --stream --compress \
        --log-directory=$LOG_DIR \
        --log-level-file='info' \
        --error-log-filename=$LOG_ERR_FILE"

    if [ ! -f $LOG_DIR/$LOG_ERR_FILE ]; then
        FLAG_BACKUP=true
        # нет файла
        echo "INFO: Создание полной автономной резервной копии $COPY_ID успешно завершено!" 
        LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Создание полной автономной \
                резервной копии $COPY_ID успешно завершено!"`
        sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"

    else
        FLAG_BACKUP=false
        # проверку не проводил
        # не знаю как смоделировать
        # ошибку
        #echo "Файл существует!"
        echo "закончилось неудачей!"
        cat $LOG_DIR/$LOG_ERR_FILE
    fi

    sudo systemctl start  srv1cv83.service
fi


if $FLAG_BAKUP ; then
    # Поскольку мы не знаем идентификатор резервной копии
    # возьмем последнюю копию, но ее нужно проверить
    COPY_ID=$(sudo /bin/su postgres -c "ls /backup/backups/main -1 | tail -1")
    #echo $COPY_ID

    # без ошибки
    #COPY_ID='PNJKHE'
    # с ошибкой
    #COPY_ID='PNKVZY'
    #COPY_ID='PNMWOY'
    # короткий
    #COPY_ID='PNJKHE'

    #sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_ERR_FILE"
    #sudo /bin/su - postgres -c "rm -f $LOG_DIR/$LOG_ERR_FILE.rotation"

    sudo /bin/su - postgres -c "pg_probackup-9.6 validate -B $BACKUP_DIR \
        --instance $INSTANCE \
        -i $COPY_ID \
        --log-level-file='info' \
        --log-directory=$LOG_DIR \
        --error-log-filename=$LOG_ERR_FILE"

    if [ ! -f $LOG_DIR/$LOG_ERR_FILE ]; then
        #echo "Файл не существует!"
        FLAG_VALIDATE=true
        echo "INFO: Резервная копия $COPY_ID прошла валидацию!"
        LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Резервная копия $COPY_ID прошла валидацию!"`
        sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"
        #DATA=`date +"%Y-%m-%d_%H-%M-%S"`
        #sudo /bin/su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
        #     $BACKUP_DIR/backups/$INSTANCE/$COPY_ID \
        #     -C $BACKUP_DIR/backups/$INSTANCE"
    else
        #echo "Файл существует!"
        cat $LOG_DIR/$LOG_ERR_FILE
        echo "INFO: Резервная копия $COPY_ID не прошла валидацию удаляем!"
        LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Резервная копия $COPY_ID не прошла валидацию удаляем!"`
        sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"

        sudo /bin/su postgres -c "pg_probackup-9.6 delete -B $BACKUP_DIR \
            --instance $INSTANCE \
            -i $COPY_ID \
            --log-directory=$LOG_DIR \
            --log-level-file='info' \
            --error-log-filename=$LOG_ERR_FILE"
        FLAG_VALIDATE=false
    fi
fi

#с полными путями
#if $FLAG_VALIDATE ; then
#   DATA=`date +"%Y-%m-%d_%H-%M-%S"`
#   sudo /bin/su postgres -c "cd $BACKUP_DIR/backups/$INSTANCE; \
#       tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz \
#       $BACKUP_DIR/backups/$INSTANCE/$COPY_ID"
#fi

if $FLAG_VALIDATE ; then
   DATA=`date +"%Y-%m-%d_%H-%M-%S"`
   sudo /bin/su postgres -c "cd $BACKUP_DIR/backups/$INSTANCE; \
       tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz $COPY_ID > /dev/null"
   echo "INFO: Создан файл $COPY_DIR/pg_pro-$DATA.tar.gz"
   LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Создан файл $COPY_DIR/pg_pro-$DATA.tar.gz"`
   sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"

fi



echo "Очистить каталог резервных копий в соответствии с политикой их сохранения"
echo "INFO: Очищаем каталог резервных копий в соответствии с политикой их сохранения"
LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Очищаем каталог резервных копий в соответствии с политикой их сохранения"`

sudo /bin/su postgres -c "pg_probackup-9.6 delete -B $BACKUP_DIR \
     --instance $INSTANCE --expired \
     --log-directory=$LOG_DIR \
     --log-level-file='info' \
     --error-log-filename=$LOG_ERR_FILE"

DAY=90 #(или ваше число дней)
sudo su -c "find /backup/copy -type f -mtime +$DAY -exec rm -f {} \;"


# full vacuum
#if  false ; then
if  true ; then
    echo "INFO: Начинаем full vacuum"
    LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Начинаем full vacuum"`
    sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"
    sudo /bin/su postgres -c "/usr/bin/vacuumdb -zfa >> $LOG_DIR/pg_probackup.log"
fi

LOGINFO=`date +"%Y-%m-%d %H:%M:%S MSK: INFO: Завершение работы"`
sudo /bin/su postgres -c "echo $LOGINFO  >> $LOG_DIR/pg_probackup.log"

sudo /bin/su postgres -c "echo 'backup-pgpro' | mutt -s 'backup-pgpro'  f1@vt.com -a $LOG_DIR/pg_probackup.log"

Сохранить.


Однократный запуск

$ time sudo sh backup-pgpro.sh


Запуск по расписанию:

$ sudo -i
# crontab -e
Добавить в конец (сработает в 22:40):
# каждые день в 22.40




40 22 * * * sh /home/user/backup-pgpro.sh
Сохранить.

Смотреть задания:
# crontab -l


Настраиваем:
Скрипт бэкапа postgres pg_dump


$ nano backup-sql.sh
Вставить текст ниже:

#!/bin/sh
# crontab -e
# mkdir -p /home/user/backup/yandex
set -e

BACKUP_DIR="/backup/copy"
DIR_YANDEX="/home/user/backup/yandex"
echo "====================================================================" > $BACKUP_DIR/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop  srv1cv83.service
echo "состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_NAME=`date +"%Y-%m-%d_%H-%M-%S"`
echo "$DATA Size database file: " >> $BACKUP_DIR/backup.log
sudo du -h -s /var/lib/postgresql/9.6/main/base  >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# делаем  backup
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     # Записываем информацию в лог с секундами
     echo "$DATA Начало backup базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     # Бэкапим базу данных demo и сразу сжимаем
     echo "$DATA Начало backup базы ${DB_NAME}"
     sudo /bin/su postgres -c "pg_dump -Fc ${DB_NAME}"  > $BACKUP_DIR/${DB_NAME}_$DATA_NAME.dump
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     if [ $? -ne 0 ]
     then
         echo "$DATA Ошибка завершения backup для базы ${DB_NAME}"
         echo "$DATA Ошибка завершения backup для для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
         exit
     else
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}"
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     fi
     echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
done

# запускаем сервер 1С
echo "Запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
echo "Состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
echo "Закончено"

# посылаем сообщение
sleep 2
#echo "backup" | mutt -s "backup"  f1@vt.com -a $BACKUP_DIR/backup.log

Сохранить.

Однократный запуск:
$ sudo sh backup-sql.sh

Запуск по расписанию:

$ sudo -i
# crontab -e
Добавить в конец (сработает в 23:20):
# каждые день в 23.20



20 23 * * * sh /home/user/backup-sql.sh
Сохранить.

Смотреть задания:
# crontab -l

Сохранение резервных копий на backup сервере:





Сброс пароля в 1с (MSSQL/PostgreSQL)

$ nano backup1с.sh
Вставить текст ниже:

#!/bin/bash
rsync --recursive -v --ignore-existing /backup/copy backup@172.31.2.1::soc_1c date

Сохранить.




Комментариев нет:

Отправить комментарий