<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US"> <head> <title> GmManualDatabaseBackupRestore < Gnumed < Foswiki</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="robots" content="noindex" /> <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="WebRss.html" /> <link rel="icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="../rsrc/System/ProjectLogos/favicon.ico" type="image/x-icon" /> <link rel="alternate" href="http://wiki.gnumed.de/bin/edit/Gnumed/GmManualDatabaseBackupRestore?t=1362919415" type="application/x-wiki" title="edit GmManualDatabaseBackupRestore" /> <meta name="description" content="GmManualDatabaseBackupRestore" /> <!--[if IE]></base><![endif]--> <style type="text/css" media="all"> @import url('../rsrc/System/SkinTemplates/base.css'); </style> <style type="text/css" media="all"> @import url('../rsrc/System/SkinTemplates/default.css'); </style> <!--[if IE]><style type="text/css" media="screen"> pre { overflow-x:auto; padding-bottom:expression(this.scrollWidth > this.offsetWidth ? 16 : 0); } </style> <![endif]--> <meta name="foswiki.PUBURL" content="http://wiki.gnumed.de/pub" /> <!-- PUBURL --> <meta name="foswiki.PUBURLPATH" content="/pub" /> <!-- PUBURLPATH --> <meta name="foswiki.SCRIPTSUFFIX" content="" /> <!-- SCRIPTSUFFIX --> <meta name="foswiki.SCRIPTURL" content="http://wiki.gnumed.de/bin" /> <!-- SCRIPTURL --> <meta name="foswiki.SCRIPTURLPATH" content="/bin" /> <!-- SCRIPTURLPATH --> <meta name="foswiki.SERVERTIME" content="10%20Mar%202013%20-%2013:43" /> <!-- SERVERTIME --> <meta name="foswiki.SKIN" content="twikinet%2c%20pattern" /> <!-- SKIN --> <meta name="foswiki.SYSTEMWEB" content="System" /> <!-- SYSTEMWEB --> <meta name="foswiki.TOPIC" content="GmManualDatabaseBackupRestore" /> <!-- TOPIC --> <meta name="foswiki.USERNAME" content="KarstenHilbert" /> <!-- USERNAME --> <meta name="foswiki.USERSWEB" content="Main" /> <!-- USERSWEB --> <meta name="foswiki.WEB" content="Gnumed" /> <!-- WEB --> <meta name="foswiki.WIKINAME" content="KarstenHilbert" /> <!-- WIKINAME --> <meta name="foswiki.WIKIUSERNAME" content="Main.KarstenHilbert" /> <!-- WIKIUSERNAME --> <meta name="foswiki.NAMEFILTER" content="%5b%5cs%5c*%3f~%5e%5c%24%40%25%60%22'%26%3b%7c%3c%3e%5c%5b%5c%5d%23%5cx00-%5cx1f%5d" /> <!-- NAMEFILTER --><!--JQUERYPLUGIN::FOSWIKI::META--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/jquery-1.4.3.js'></script><!--JQUERYPLUGIN--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/livequery/jquery.livequery.js'></script><!--JQUERYPLUGIN::LIVEQUERY--> <script type='text/javascript' src='../rsrc/System/JQueryPlugin/plugins/foswiki/jquery.foswiki.js'></script><!--JQUERYPLUGIN::FOSWIKI--> <script type='text/javascript' src='../rsrc/System/JSTreeContrib/jquery.jstree.js'></script><!--JQUERYPLUGIN::JSTREE--> </head> <body class=""><div class="foswikiPage"> <a name="PageTop"></a> <p></p> <p></p> <h1><a name="A_"></a> Процедуры резервного копирования и восстановления базы данных </h1> <p></p> GNUmed принимает все меры для защиты медицинских данных в процессе обновления и эксплуатации: <p></p> <ul> <li> обновления осуществляются недеструктивно через клонирование баз данных </li> <li> множество внешних ключей, триггеров, правил и ограничений обеспечивают целостность данных </li> <li> чаще всего доступ к базе данных только на чтение </li> <li> используется семантика полной транзакции (сериализуемая) </li> <li> конфликтующие параллельные изменения данных обнаруживаемы </li> <li> изменения данных журналируемы аудитом </li></ul> <p></p> Однако, беда поражает, когда меньше всего ожидаема и имеется целый мир проблем, с которыми GNUmed не может сделать ничего. Существует несколько правил разумного поведения: <p></p> <ul> <li> используйте <a href="http://en.wikipedia.org/wiki/RAID" target="_top">RAID</a> для дисков базы данных </li> <li> используйте мониторинг <a href="http://en.wikipedia.org/wiki/S.M.A.R.T." target="_top">S.M.A.R.T.</a> дисков базы данных </li> <li> <a href="http://en.wikipedia.org/wiki/Replication_(computer_science)" target="_top">ре</a><a href="http://rsync.samba.org/" target="_top">пли</a><a href="http://slony.info/" target="_top">цируйте</a> на резервной машине </li> <li> предусмотрите <a href="http://en.wikipedia.org/wiki/Disk_cloning" target="_top">клонирование</a> физической машины на виртуальную (например, с <a href="http://www.vmware.com/products/converter/get.html" target="_top">конвертером VMware</a>) </li> <li> пользуйтесь <a href="http://en.wikipedia.org/wiki/Backup" target="_top">резервными копиями</a> </li> <li> <a href="http://en.wikipedia.org/wiki/Cron" target="_top">автоматизируйте</a> создание резервных копий </li> <li> держите несколько поколений резервных копий </li> <li> храните дубликаты резервных копий и на- и <a href="http://en.wikipedia.org/wiki/Rsync" target="_top">вне</a> </li> <li> <strong>Проверяйте</strong> резервные копии! </li> <li> <strong>Тестируйте</strong> процедуры восстановления! </li></ul> <p></p> Если вы последуете советам выше, вы сделаете совсем немного, чтобы быть на безопасной стороне. <a href="http://www.postgresql.org/docs/8.3/static/admin.html" target="_top">Руководство PostgreSQL</a> имеет отличные главы по <a href="http://www.postgresql.org/docs/8.4/static/backup.html" target="_top">резервному копированию и восстановлению</a>, а также по <a href="http://www.postgresql.org/docs/8.4/static/high-availability.html" target="_top">репликации и совместимости</a>. Не забудьте прочитать его. <p></p> GNUmed предоставляет некоторые сценарии и файлы настройки под *nix, готовые к интеграции с cron/anacron. Их можно найти: <p></p> <ul> <li> в релизах сервера, доступных <a href="http://www.gnumed.de/downloads/server/" target="_top">здесь</a>, где сценарии находятся на том же уровне, как каталог <code>bootstrap</code> и файлы .conf, находящиеся в подкаталоге <code>/etc/gnumed</code>, на том же уровне </li></ul> <p></p> <ul> <li> в репозитории gitorious GNUmed со скриптами на <a href="http://gitorious.org/gnumed/gnumed/trees/master/gnumed/gnumed/server" target="_top">этом уровне</a> и файлами .conf на <a href="http://gitorious.org/gnumed/gnumed/trees/master/gnumed/gnumed/client/etc/gnumed" target="_top">этом уровне</a>. </li></ul> <p></p> В следующих разделах содержится общий обзор файлов конфигурации и сценариев. Для получения дополнительной информации обратитесь к строковым комментариям внутри соответствующих файлов. <p></p> <h2><a name="A_40.conf_41"></a> Настройка файлов конфигурации (.conf) </h2> <p></p> Расположение и имена файлов .conf должны быть правильно отражены в зависимых файлах сценариев. По умолчанию, сценарии ожидают найти файлы .conf в директории <code>/etc/gnumed</code> с именами <code>gnumed-backup.conf</code> и <code>gnumed-restore.conf</code>. <p></p> Кроме того, каждый файл .conf содержит ряд опций, которые почти всегда должны быть изменены. К ним относятся <ul> <li> некоторое подходящее имя, представляющее практику, которое станет <code>INSTANCE_OWNER</code> </li> <li> где, в конечном итоге, хранится резервная копия, по умолчанию являющееся <code>BACKUP_DIR="${HOME}/.gnumed/backup/"</code> и которое, если не изменено, приведет к записи резервной копии в каталог, принадлежащий root. Под Mac OS 10.x оно будет <code>/var/root/.gnumed/backup</code> </li> <li> чья база данных для резервного копирования, например <code>GM_DATABASE="gnumed_v15"</code> </li> <li> пользователь/группа, чья резервная копия, в конечном счете, принадлежит <code>BACKUP_OWNER="$USER:$USER"</code> </li> <li> дополнительные опции, например, для offsiting и использования gnotary </li></ul> <p></p> <h2><a name="A_40.sh_41"></a> Настройка файлов скриптов (.sh) </h2> <p></p> Сценарии <code>gm-backup_database.sh</code> и <code>gm-restore_database.sh</code> могут быть запущены без изменений, за исключением дополнительных ограничений Mac OS. <p></p> Обратите также внимание, что при выполнении резервного копирования или восстановлении вручную – когда вы еще не настроили pg_hba.conf для доступа root к базе данных GNUmed, как "gm-dbo", и когда вы не создали файл .pgpass – сработает вот это <p></p> <ul> <li> sudo -i to root </li> <li> cd в соответствующую директорию, где находятся сценарии shell </li> <li> выполните сценарий <code>sh gm-backup_database.sh</code> </li> <li> предоставьте пароль для пользователя базы данных postgres (дважды) и пароль для gm-dbo (дважды) </li> <li> проверьте, любая ли база данных, новее, чем база данных, указанная в вашем файле conf, должна быть, возможно, той, которой на самом деле нужно резервное копирование. Это будет зависеть от того, имели ли вы после обновления рабочую базу данных, или более новые версии просто для испытания. </li></ul> <p></p> Ограничения Mac OS: <p></p> <ul> <li> воизбежание неприятностей в Mac OS, для поддержки командной строки (или сценария shell) <code>su -c</code>, необходимо под Mac OS закомментировать с <code>#</code> 'sanity check' (проверка вменяемости - пер.) скрипта резервного копирования, который под linux может проверить, существует ли база данных. </li> <li> так как Mac OS не поддерживает -W (проверку), пользователи Mac должны настроить VERIFY_TAR на пустую строку "" в gnumed-backup.conf, который затем сделает то, что нужно </li></ul> <p></p> Архивные электронные сообщения: <ul> <li> <a href="http://lists.gnu.org/archive/html/gnumed-devel/2008-10/msg00001.html" target="_top">здесь</a> </li> <li> <a href="http://lists.gnu.org/archive/html/gnumed-devel/2009-07/msg00371.html" target="_top">последняя электронная почта (устранение неполадок)</a>. </li></ul> <p></p> <em>Дополнительную загадочную и редко необходимую информацию можно найти на</em> <a href="DatabaseBackupRestoreArchive.html"><em>этой странице</em></a> <p></p> <a name="TopicEnd"></a> <p></p> <p></p> <p></p> <p></p> </div> </body></html>