|

На сегодняшний день разработчики Alfresco приводят в официальной документации два варианта создания резервных копий сервера альфреско. информация об этом написано здесь: http://docs.alfresco.com/5.0/concepts/backup-intro.html
Резервное копирование
Я приведу пример скрипта, который себя отлично зарекомендовал на серверах Ubuntu Linux и предназначен для создания резервной копии всех данных сервера Alfresco Community ECM.
Скрипт выполняет так называемое "холодное" копирование, которое, по своей сути, заключается в остановке сервера и архивировании всех файлов, за исключением журналов событий (логов) системы альфреско. Затем скрипт проверяет количество резервных копий, при необходимости, удаляет более старые версии архива.
Стоит обратить внимание, на то, что скрипт выполняет создание архивной резервной копии на том же сервере, без выполнения процедуры перемещения.
Я считаю, что скрипт должен выполнять только конкретную задачу, таким образом обеспечивается наибольшая стабильность и возможность распределения функций.
Ниже приведено само содержимое скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #!/bin/bash # Backup of Alfresco echo "############################" echo "# script BackUp Alfresco #" echo "############################" echo "Start script - $(date +%d.%m.%Y) ($(date +%H.%M:%S))" # Configuration: TIMESTAMP=$( date +%Y%m%d%H%M%S ) # Создание временной метки DUMP_NUM=10 # Число бэкапов AL_FOLDER="/opt/alfresco-5.0.d" # Расположение Alfresco # Function - Stop Alfresco al_stop() { sudo service alfresco stop # Если Alfresco не останавливается, # необходимо завершить работу скрипта, # чтобы не повредить индексы данных ! if [ "$?" != "0" ]; then echo "Alfresco Stop FAILED - STOP SCRIPT!" exit 1; fi } # Function - Start Alfresco al_start() { sudo service alfresco start } # Проверка наличия аргумента в командной строке # запуска скрипта if [ -d "$1" ]; then # Если указана папка, то сохранять в нее TARGET_FOLDER="$1" else # Если не указана, то сохранять в папку по умолчанию TARGET_FOLDER="/opt/BackUps" fi #---------------------------------------- # 1 - Begin by stopping Alfresco #---------------------------------------- al_stop echo "SERVER STOP" echo "." #---------------------------------------- # 2 - Deleting temps folders #---------------------------------------- echo "Deleting temps folder..." sudo rm -r /opt/alfresco-5.0.d/tomcat/logs/* sudo rm -r /opt/alfresco-5.0.d/tomcat/work/* sudo rm -r /opt/alfresco-5.0.d/tomcat/temp/* echo "Temps folder deleted." #------------------------------------------ # 3 - Create backup #------------------------------------------ echo "##################" echo "# Start BackUp #" echo "##################" echo "Start backup - $(date +%d.%m.%Y) ($(date +%H.%M:%S))" # Создание резервной копии с временной меткой BACKUP_FILE="alfresco_back_${TIMESTAMP}.tar" sudo tar zcf $TARGET_FOLDER/$BACKUP_FILE $AL_FOLDER # Удаление дубликатов if [ -f "$TARGET_FOLDER/$BACKUP_FILE" ]; then echo "BACKUP SUCCESSFUL" SUCCESS=1 fi echo "################" echo "# BackUp end #" echo "################" echo "End backup - $(date +%d.%m.%Y) ($(date +%H.%M:%S))" #------------------------------------------ # 4 - Start the Alfresco service #------------------------------------------ al_start echo "Alfresco service started." echo "Started Alfresco - $(date +%d.%m.%Y) ($(date +%H.%M:%S))" #------------------------------------------ # 5 - Remove backups older than DUMP_NUM days #------------------------------------------ if [ "$SUCCESS" = 1 ]; then sudo find /opt/BackUps/ -type f -mtime +7 -exec rm {} ; fi |
Приведенный код скрипта предназначен для использования совместно с планировщиком заданий cron, о котором я писал здесь. Использоваться в журнале планировщика он может одним из приведенных ниже способов:
1 2 3 | # Backup Alfresco 02 18 * * * sh /root/backUpiT.sh /opt/BackUps >> /root/backUpiT.log 02 18 * * * sh /root/backUpiT.sh /opt/BackUps >> /root/backUpiT.log >/dev/null 2>&1 |
Восстановление
Далее я приведу пример ручного восстановления из полученной резервной копии. Для этого этого необходимо последовательно выполнять слеждующие команды.
Для перехода в папку и распаковки архива:
1 2 | cd ~ sudo tar xf 20160824193433.tar -C /opt/ |
Для перемещения из архивной папки:
1 | sudo mv alfresco-5.0.d/ /opt/ |
Для назначения необходимых прав на запуск СУБД:
1 2 3 | cd /opt/alfresco-5.0.d/ sudo chown -R postgres alf_data sudo chown -R postgres postgresql |
Для проверки функицонирования СУБД:
1 2 3 4 | cd postgresql/ sudo rm -r postgresql.log sudo service alfresco start postgresql sudo service alfresco stop postgresql |
Для очистки кэша и логов:
1 2 | cd /opt/alfresco-5.0.d/tomcat/ sudo rm -r webapps/alfresco/ webapps/share/ webapps/solr4/ logs/* work/* temp/* |
Для запуска сервиса:
1 | sudo service alfresco start |
Другие примеры скриптов
Далее, для сравнения, приведу примеры других скриптов, которые тоже могут показаться интересными.
1) Скрипт холодного резервного копирования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #!/bin/bash # This script perform cold full backup Alfresco CMS echo Time backup started = $(date +%T) before="$(date +%s)" # Live sync before stopping Alfresco to minimize sync time with the services down # Comment out the following 2 lines if you want to try single cold-sync only echo "Syncronize beafore backup ..." rsync -aHK --delete /opt/alfresco/ /opt/backup/alfresco before2="$(date +%s)" # Stop Alfresco Services echo Time befor stop Alfresco services = $(date +%T) echo "Stop Alfresco services ..." /opt/alfresco/alfresco.sh stop sleep 10 echo Time after stop Alfresco services = $(date +%T) # Sync to backup directory echo "Syncronize to backup directory ..." rsync -aHK --delete /opt/alfresco/ /opt/backup/alfresco # Start Alfresco Services echo Time befor start Alfresco services = $(date +%T) echo "Start Alfresco services ..." cd /opt/alfresco/tomcat/logs /opt/alfresco/alfresco.sh start echo Time after start Alfresco services = $(date +%T) # Calculates and outputs amount of time the server was down for after="$(date +%s)" elapsed="$(expr $after - $before2)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo Server was down: "$hours hours $minutes minutes $seconds seconds" cp /opt/alfresco/properties.ini /opt/backup/alfresco/alfresco_version.txt # Display Alfresco services status echo Displaying Alfresco services status... /opt/alfresco/alfresco.sh status # Create archive of backed-up directory for offsite transfer echo "Create archive of backed-up directory for offsite transfer..." tar -zcf /opt/alfresco.tar.gz -C /opt/backup/alfresco . # Transfer backup to FTP server echo "Transfer backup archive to ftp server ..." cd /opt curl -T /opt/alfresco.tar.gz ftp://user:@server # Delete archive rm /opt/alfresco.tar.gz # Outputs the time the backup finished echo Time backup finished = $(date +%T) # Calculates and outputs total time taken after="$(date +%s)" elapsed="$(expr $after - $before)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo Time taken: "$hours hours $minutes minutes $seconds seconds" |
2) Скрипт для горячего резервного копирования с использованием rsync демона на удаленной машине:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #!/bin/bash echo Time backup started = $(date +%T) ### Time when backup is started before="$(date +%s)" ######################## # Set environment: ######################## # Optional hostname to adhere to pg_hba policies. Will default to "localhost" if none specified. HOSTNAME="localhost" #Optional port to connect to database. Will default to "5432" if none specified. PGPORT="5432" # Optional username to connect to database as. Will default to "postgres" if none specified. USERNAME="postgres" # PG password export PGPASSWORD= # This dir will be created if it doesn't exist. This must be writable by the user the script is running as. BACKUP_DIR="/opt/backup/sql/" # Optional database name to connect. Will default to "alfresco" if none specified. DATABASE="alfresco" ### Transfer env ########### # remote host for transfering RHOST="" # Remote user for connect to remote host RUSER= # Sourse directory for bakuping FILE_FROM=/opt/alfresco/alf_data/ # SQL dump share on remote host SQL_DUMP=sql_dump # Share on remote host to content files SHARE_DIR_TO=alf_data ################### # SQL Backup # ################### echo "Start SQL backup ..." ## Initialise defaults: if [ ! $HOSTNAME ]; then HOSTNAME="localhost" fi; if [ ! $USERNAME ]; then USERNAME="postgres" fi; if [ ! $PGPORT ]; then PGPORT="5432" fi; if [ ! $DATABASE ]; then DATABASE="alfresco" fi; ## Dump Database /opt/alfresco/postgresql/bin/pg_dump -h "$HOSTNAME" -p "$PGPORT" -U "$USERNAME" -Fc "$DATABASE" > "$BACKUP_DIR"alfresco.dump ############################################################# # File directory backup and transfer backupset (content+sql)# ############################################################# echo Transfer DB dump ... rsync -auvHK --delete "$BACKUP_DIR" $RUSER@$RHOST::$SQL_DUMP echo Time after Backup and transfer DB = $(date +%T) # Sync to backup directory echo "Backup and transfer File directory ..." rsync -auvHK --delete --exclude='postgresql*' $FILE_FROM $RUSER@$RHOST::$SHARE_DIR_TO echo Time after backup and transfer File directory = $(date +%T) echo Backup finished. ########################################## # Calculates and outputs total time taken# ########################################## after="$(date +%s)" elapsed="$(expr $after - $before)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo Time taken: "$hours hours $minutes minutes $seconds seconds" |
3) Скрипт для восстановления. Подразумевается, что имя и IP уже установлены в значения как у боевого сервера, а файлы копировались rsync-ом сразу в alf_data, т.е. их восстанавливать не надо:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #!/bin/bash # This script automate restore Alfresco CMS after remote backup via rsync. Restore procedure include next steps: # 1. Restore the database from the database backups and update statistics for all tables in the Alfresco # schema (consult your DBA for the details on how to do this, as it varies from database to database). # 2. Start Alfresco # Changes: # 24.01.2013: Start AlexG # 1. Restore the database from the database backups and update statistics for all tables in the Alfresco # schema (consult your DBA for the details on how to do this, as it varies from database to database). ###################### # Restore SQL Backup # ###################### ## Set environment: # Optional hostname to adhere to pg_hba policies. Will default to "localhost" if none specified. HOSTNAME="localhost" #Optional port to connect to database. Will default to "5432" if none specified. PGPORT="5432" # Optional username to connect to database as. Will default to "postgres" if none specified. USERNAME="postgres" export PGPASSWORD= # This dir will be created if it doesn't exist. This must be writable by the user the script is running as. BACKUP_DIR="/opt/backup/sql/" # Optional database name to connect. Will default to "alfresco" if none specified. DATABASE="alfresco" ## Initialise defaults: if [ ! $HOSTNAME ]; then HOSTNAME="localhost" fi; if [ ! $USERNAME ]; then USERNAME="postgres" fi; if [ ! $PGPORT ]; then PGPORT="5432" fi; if [ ! $DATABASE ]; then DATABASE="alfresco" fi; # Start POSTGRESQL su - postgres -c "/opt/alfresco/postgresql/bin/pg_ctl start -w -D /opt/alfresco/alf_data/postgresql" ## Restore Database dump /opt/alfresco/postgresql/bin/pg_restore -h "$HOSTNAME" -p "$PGPORT" -U "$USERNAME" -c -d "$DATABASE" "$BACKUP_DIR"alfresco.dump # Stop POSTGRESQL su - postgres -c "/opt/alfresco/postgresql/bin/pg_ctl stop -D /opt/alfresco/alf_data/postgresql" echo Time after Restore Backup SQL = $(date +%T) # 2. Start Alfresco echo Time befor start Alfresco services = $(date +%T) echo "Start Alfresco services ..." cd /opt/alfresco/tomcat/logs /opt/alfresco/alfresco.sh start echo Time after start Alfresco services = $(date +%T) |
Ниже я приведу интересные ссылки. На этих ресурсах можно найти дополнительную инфомрацию не только по резервному копированию, но и по системе Alfresco в целом.
http://www.passivepress.com/2013/how-to-back-up-alfresco-step-by-step-with-script/
http://www.ossportal.ru/
Последний ресурс в настоящее время уже не поддерживается, но тем не менее является очень источником знаний для администраторов системы Alfresco.
Дополнение.
Проводя эксперименты с оптимизацией системы резервного копирования, в том числе испытывая различные архиваторы, выяснилось что архиватор 7-zip для резервного копирования систем Linux/Unix не подходит! 7-zip не сохраняет значения владельца/группы для файлов (ссылка).
Кроме этого, если требуется выполнять работы с резервными копиями в среде Microsoft Windows, но наиболее удобным будет использование стандартного архиватора ZIP, который отлично себя зарекомендовал как в среде Linux, так и Windows. А кроме того в отличие от архивов tar, позволяет извлекать отдельные файлы.
Вы также можете ознакомиться с другими статьями:

12th Сен 2016
|
Теги:
|