"Fossies" - the Fresh Open Source Software Archive

Member "fsbackup-1.2pl2/scripts/pgsql_backup.sh" (29 Jun 2004, 6005 Bytes) of package /linux/privat/old/fsbackup-1.2pl2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/bin/sh
    2 # Script for backup SQL tables from PostreSQL
    3 # Скрипт для бэкапа данных хранимых в PostgreSQL
    4 #
    5 # http://www.opennet.ru/dev/fsbackup/
    6 # Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
    7 #
    8 # For restore data type:
    9 # Восстановление производится с помощью команды: psql -d template1 -f backupfile
   10 #
   11 
   12 #-------------------
   13 # Name of backup, single word.
   14 # Имя бэкапа.
   15 #-------------------
   16 
   17 backup_name="test_host"
   18 
   19 #-------------------
   20 # Backup method:
   21 # full - backup full DB's structure and data.
   22 # db   - backup full DB's structure and data only for 'backup_db_list' databases.
   23 # notdb- backup full DB's structure and data for all DB's, except 
   24 #        data of 'backup_db_list' databases.
   25 #
   26 # Метод бэкапа:
   27 # full  - полный бэкап всех баз (рекомендуется), 
   28 #    аналог запуска pg_dumpall или mysqldump --all-databases --all
   29 #
   30 # db    - бэкап только указанных в backup_db_list баз данных, записи по 
   31 #     реконструкции баз и таблиц записываются для всех баз на SQL сервере.
   32 # notdb  - бэкап всех баз, кроме указанных в backup_db_list, записи по 
   33 #      реконструкции баз и таблиц записываются для всех баз на SQL сервере.
   34 #          Возможно исключение из бэкапа  выборочных таблиц, тогда формат 
   35 #      списка исключаемых таблиц задается в виде: 
   36 #      "trash_db1 trash_db2:table1 trash_db2:table2"
   37 #          - производим бэкап всех баз, коме базы trash_db1 и таблиц table1 и 
   38 #      table2 базы trash_db2.
   39 #          
   40 #
   41 #-------------------
   42 
   43 backup_method="notdb"
   44 
   45 #-------------------
   46 # List of databases (delimited by spaces)
   47 # Список включаемых или исключаемых из бэкапа баз, через пробел.
   48 # Таблицы указываются в виде: имя_базы:имя_таблицы
   49 #-------------------
   50 
   51 backup_db_list="aspseek trash:cache_table1 trash:cache_table2 mnogosearch"
   52 
   53 
   54 #-------------------
   55 # Auth information for MySQL.
   56 # Имя пользователя и пароль для соединения с Mysql, для PostgreSQL скрипт 
   57 # должен запускаться из-под пользователя с правами полного доступа к базам PostgreSQL.
   58 #-------------------
   59 
   60 backup_mysqluser=""
   61 backup_mysqlpassword=""
   62 
   63 
   64 #-------------------
   65 # Directory to store SQL backup. You must have enought free disk space to store 
   66 # all data from you SQL server.
   67 # Директория куда будет помещен бэкап данных с SQL сервера. 
   68 # Внимание !!! Должно быть достаточно свободного места для бэкапа всех 
   69 # выбранных БД.
   70 #-------------------
   71 
   72 backup_path="/usr/local/fsbackup/sys_backup"
   73 
   74 
   75 #-------------------
   76 # Full path of postgresql programs.
   77 # Путь к программам postgresql 
   78 #-------------------
   79 
   80 backup_progdump_path="/usr/local/pgsql/bin"
   81 
   82 #-------------------
   83 # Extra flags for pg_dump program. 
   84 # -D - Dump data as INSERT commands with  explicit  column names
   85 # Дополнительные параметры для pg_dump
   86 # -D - формировать бэкап данных в виде INSERT комманд, с указанием названий
   87 #      столбцов. Если скорость восстановления из бэкапа и размер бэкапа
   88 #      более важны, и совместимостью с другими СУБД можно пренебречь, 
   89 #      используйте: extra_pg_dump_flag=""
   90 #-------------------
   91 
   92 extra_pg_dump_flag="-D"
   93 
   94 ############################################################################
   95 
   96 if [ -n "$backup_progdump_path" ]; then
   97     backup_progdump_path="$backup_progdump_path/"
   98 fi
   99 
  100 #-------------------------------------------------------------------------
  101 # Полный бэкап для Postgresql
  102 if [ "_$backup_method" = "_full" ]; then
  103     echo "Creating full backup of all PostgreSQL databases."
  104 #    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
  105     ${backup_progdump_path}pg_dumpall $extra_pg_dump_flag|gzip > $backup_path/$backup_name-pgsql.gz
  106     exit
  107 
  108 fi
  109 
  110 #-------------------------------------------------------------------------
  111 # Бэкап указанных баз для Postgresql
  112 if [ "_$backup_method" = "_db" ]; then
  113     echo "Creating full backup of $backup_db_list PostgreSQL databases."
  114 #    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
  115     cat /dev/null > $backup_path/$backup_name-pgsql
  116 
  117     for cur_db in $backup_db_list; do
  118     echo "Dumping $cur_db..."
  119     cur_db=`echo "$cur_db" | awk -F':' '{if (\$2 != ""){print "-t", \$2, \$1}else{print \$1}}'`
  120     ${backup_progdump_path}pg_dump $extra_pg_dump_flag $cur_db >> $backup_path/$backup_name-pgsql
  121     done
  122     gzip -f $backup_path/$backup_name-pgsql
  123 
  124     exit
  125 
  126 fi
  127 
  128 #-------------------------------------------------------------------------
  129 # Бэкап всех баз кроме указанных для Postgresql
  130 if [ "_$backup_method" = "_notdb" ]; then
  131     echo "Creating full backup of all PostgreSQL databases except databases $backup_db_list."
  132 #    ${backup_progdump_path}pg_dumpall -s > $backup_path/$backup_name-struct-pgsql
  133     cat /dev/null > $backup_path/$backup_name-pgsql
  134 
  135     for cur_db in `${backup_progdump_path}psql -A -q -t -c "select datname from pg_database" template1 | grep -v '^template[01]$' `; do
  136 
  137     grep_flag=`echo " $backup_db_list"| grep " $cur_db:"`
  138     if [ -n "$grep_flag" ]; then
  139 # Исключение таблиц для данной базы
  140         for cur_db_table in `${backup_progdump_path}psql -A -q -t -c "select tablename from pg_tables WHERE tablename NOT LIKE 'pg\_%' AND tablename NOT LIKE 'sql\_%';" $cur_db`; do
  141 
  142         flag=1
  143         for cur_ignore in $backup_db_list; do
  144             if [ "_$cur_ignore" = "_$cur_db:$cur_db_table" ]; then
  145             flag=0
  146             fi
  147             done
  148 
  149         if [ $flag -gt 0 ]; then
  150             echo "Dumping $cur_db:$cur_db_table..."
  151             ${backup_progdump_path}pg_dump $extra_pg_dump_flag -t $cur_db_table $cur_db >> $backup_path/$backup_name-pgsql
  152         else
  153             echo "Skiping $cur_db:$cur_db_table..."
  154         fi
  155         done
  156     else
  157 # Исключение базы
  158         flag=1
  159         for cur_ignore in $backup_db_list; do
  160         if [ "_$cur_ignore" = "_$cur_db" ]; then
  161             flag=0
  162         fi
  163             done
  164 
  165         if [ $flag -gt 0 ]; then
  166         echo "Dumping $cur_db..."
  167         ${backup_progdump_path}pg_dump $extra_pg_dump_flag $cur_db >> $backup_path/$backup_name-pgsql
  168         else
  169         echo "Skiping $cur_db..."
  170         fi
  171     fi
  172     done
  173     gzip -f $backup_path/$backup_name-pgsql
  174     exit
  175 fi
  176 
  177 echo "Configuration error. Not valid parameters in backup_method or backup_sqltype."
  178 
  179