Database backup - История изменений http://wiki.bitel.ru/index.php?title=Database_backup&action=history История изменений этой страницы в вики ru MediaWiki 1.15.1 Thu, 28 Mar 2024 16:50:59 GMT Admin в 08:32, 15 января 2009 http://wiki.bitel.ru/index.php?title=Database_backup&diff=744&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 08:32, 15 января 2009</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 117:</td> <td colspan="2" class="diff-lineno">Строка 117:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Я ограничиваю скорость копирования опцией bwlimit. Это необходимо для того, чтобы не нарушать нормальную работу базы</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Я ограничиваю скорость копирования опцией bwlimit. Это необходимо для того, чтобы не нарушать нормальную работу базы</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Нас не заботит консистентность базы. Все равно очередной бекап &quot;доведет&quot; ее до состояния консистентности благодаря возможностям rsync</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Нас не заботит консистентность базы. Все равно очередной бекап &quot;доведет&quot; ее до состояния консистентности благодаря возможностям rsync</div></td></tr> <tr><td colspan="2">&nbsp;</td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"># При использования хранилица InnoDB реализация данной схемы возможна при запуске mysqld с ключем --innodb_file_per_table, что заставит MySQL хранить каждую InnoDB таблицу в отдельном файле. См.: http://dev.mysql.com/doc/refman/5.0/en/multiple-tablespaces.html</ins></div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>--[[Участник:Boco|boco]] 10:36, 10 июня 2008 (UTC)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>--[[Участник:Boco|boco]] 10:36, 10 июня 2008 (UTC)</div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Thu, 15 Jan 2009 08:32:25 GMT Admin http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:50, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=377&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:50, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 38:</td> <td colspan="2" class="diff-lineno">Строка 38:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>mount=/bin/mount</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>mount=/bin/mount</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>umount=/bin/umount</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>umount=/bin/umount</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">mysqladmin=/usr/bin/mysqladmin</del></div></td><td colspan="2">&nbsp;</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>rsync=/usr/bin/rsync</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>rsync=/usr/bin/rsync</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">myisamchk=/usr/bin/myisamchk</del></div></td><td colspan="2">&nbsp;</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>snapscript=/usr/local/libexec/backupdb/makesnap.sh</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>snapscript=/usr/local/libexec/backupdb/makesnap.sh</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>nice=/bin/nice</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>nice=/bin/nice</div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:50:35 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:48, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=376&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:48, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 91:</td> <td colspan="2" class="diff-lineno">Строка 91:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Здесь:</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /dev/vg1 : volume group, на которой у меня располагается logical volume &quot;storage&quot; (хранилище базы данных)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /dev/vg1 : volume group, на которой у меня располагается logical volume &quot;storage&quot; (хранилище базы данных)</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>; /dev/<del class="diffchange diffchange-inline">vg/1</del>/storage : собственно логический том &quot;storage&quot;</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>; /dev/<ins class="diffchange diffchange-inline">vg1</ins>/storage : собственно логический том &quot;storage&quot;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /dev/vg1/snap : снапшот этого логического тома</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /dev/vg1/snap : снапшот этого логического тома</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /backup/ : раздел, где располагается копия базы данных, для простоты я внес раздел в /etc/fstab с опцией noauto</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>; /backup/ : раздел, где располагается копия базы данных, для простоты я внес раздел в /etc/fstab с опцией noauto</div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:48:41 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:40, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=375&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:40, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 1:</td> <td colspan="2" class="diff-lineno">Строка 1:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Проблема''': резервирвание базы данных объемом несколько десятков или сотен гигабайт без остановки сервиса.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''Проблема''': резервирвание базы данных объемом несколько десятков или сотен гигабайт без остановки сервиса.</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Можно использовать &quot;взрослые&quot; накопители типа NAS/SAN, которые имеют встроенную поддержку снапшотов и резервного копирования информации, но это решения дорогостоящие (хотя, что может быть ценнее информации, которая является основой для расчетов с абонентами? вопрос риторический). Поэтому мы пойдем &quot;пионерским&quot; путем. Нам потребуется обычный linux с поддержкой lvm/lvm2. О том, как подготовить дисковое хранилище для размещения базы, я тут особо распространяться не буду. Желающие всегда могут почитать man'ы (pvcreate/vgcreate/lvcreate сотоварищи). Замечу только, что при <del class="diffchange diffchange-inline">создание </del>logical volume для хранения базы '''необходимо''' оставлять порядка 2-4% нераспределенных physical extents для того, чтобы lvm было куда писать измененные данные во время бекапа. Пример:</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Можно использовать &quot;взрослые&quot; накопители типа NAS/SAN, которые имеют встроенную поддержку снапшотов и резервного копирования информации, но это решения дорогостоящие (хотя, что может быть ценнее информации, которая является основой для расчетов с абонентами? вопрос риторический). Поэтому мы пойдем &quot;пионерским&quot; путем. Нам потребуется обычный linux с поддержкой lvm/lvm2. О том, как подготовить дисковое хранилище для размещения базы, я тут особо распространяться не буду. Желающие всегда могут почитать man'ы (pvcreate/vgcreate/lvcreate сотоварищи). Замечу только, что при <ins class="diffchange diffchange-inline">создании </ins>logical volume для хранения базы '''необходимо''' оставлять порядка 2-4% нераспределенных physical extents для того, чтобы lvm было куда писать измененные данные во время бекапа. Пример:</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>&lt;pre&gt;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>&lt;pre&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># vgdisplay vg1</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># vgdisplay vg1</div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:40:36 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:40, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=374&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:40, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 113:</td> <td colspan="2" class="diff-lineno">Строка 113:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># mount /backup</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># mount /backup</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># rsync -aH --bwlimit=10000 /storage/ /backup/</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># rsync -aH --bwlimit=10000 /storage/ /backup/</div></td></tr> <tr><td colspan="2">&nbsp;</td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"># umount /backup</ins></div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>&lt;/pre&gt;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>&lt;/pre&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:40:04 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:37, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=373&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:37, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 105:</td> <td colspan="2" class="diff-lineno">Строка 105:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>После этого делаем примерно так:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>После этого делаем примерно так:</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>&lt;<del class="diffchange diffchange-inline">source lang=bash</del>&gt;</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>&lt;<ins class="diffchange diffchange-inline">pre</ins>&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># ln -s /usr/local/libexec/backupdb/backup.sh /etc/cron.daily/backupdb</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># ln -s /usr/local/libexec/backupdb/backup.sh /etc/cron.daily/backupdb</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>&lt;/<del class="diffchange diffchange-inline">source</del>&gt;</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>&lt;/<ins class="diffchange diffchange-inline">pre</ins>&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>И еще нам нужно подготовить первичную копию базы для последующего бекапа. Это можно сделать все тем же rsync'ом:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>И еще нам нужно подготовить первичную копию базы для последующего бекапа. Это можно сделать все тем же rsync'ом:</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>&lt;<del class="diffchange diffchange-inline">source lang=bash</del>&gt;</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>&lt;<ins class="diffchange diffchange-inline">pre</ins>&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># mount /backup</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># mount /backup</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># rsync -aH --bwlimit=10000 /storage/ /backup/</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># rsync -aH --bwlimit=10000 /storage/ /backup/</div></td></tr> <tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>&lt;/<del class="diffchange diffchange-inline">source</del>&gt;</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>&lt;/<ins class="diffchange diffchange-inline">pre</ins>&gt;</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Обратите внимание на два момента:</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Обратите внимание на два момента:</div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:37:34 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco в 10:36, 10 июня 2008 http://wiki.bitel.ru/index.php?title=Database_backup&diff=372&oldid=prev <p></p> <table style="background-color: white; color:black;"> <col class='diff-marker' /> <col class='diff-content' /> <col class='diff-marker' /> <col class='diff-content' /> <tr valign='top'> <td colspan='2' style="background-color: white; color:black;">← Предыдущая</td> <td colspan='2' style="background-color: white; color:black;">Версия 10:36, 10 июня 2008</td> </tr> <tr><td colspan="2" class="diff-lineno">Строка 118:</td> <td colspan="2" class="diff-lineno">Строка 118:</td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Я ограничиваю скорость копирования опцией bwlimit. Это необходимо для того, чтобы не нарушать нормальную работу базы</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Я ограничиваю скорость копирования опцией bwlimit. Это необходимо для того, чтобы не нарушать нормальную работу базы</div></td></tr> <tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Нас не заботит консистентность базы. Все равно очередной бекап &quot;доведет&quot; ее до состояния консистентности благодаря возможностям rsync</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div># Нас не заботит консистентность базы. Все равно очередной бекап &quot;доведет&quot; ее до состояния консистентности благодаря возможностям rsync</div></td></tr> <tr><td colspan="2">&nbsp;</td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr> <tr><td colspan="2">&nbsp;</td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">--[[Участник:Boco|boco]] 10:36, 10 июня 2008 (UTC)</ins></div></td></tr> <!-- diff generator: internal 2024-03-28 16:50:59 --> </table> Tue, 10 Jun 2008 10:36:30 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup Boco:&#32;Новая: '''Проблема''': резервирвание базы данных объемом несколько десятков или сотен гигабайт без остановки ... http://wiki.bitel.ru/index.php?title=Database_backup&diff=371&oldid=prev <p>Новая: &#39;&#39;&#39;Проблема&#39;&#39;&#39;: резервирвание базы данных объемом несколько десятков или сотен гигабайт без остановки ...</p> <p><b>Новая страница</b></p><div>'''Проблема''': резервирвание базы данных объемом несколько десятков или сотен гигабайт без остановки сервиса.<br /> <br /> Можно использовать &quot;взрослые&quot; накопители типа NAS/SAN, которые имеют встроенную поддержку снапшотов и резервного копирования информации, но это решения дорогостоящие (хотя, что может быть ценнее информации, которая является основой для расчетов с абонентами? вопрос риторический). Поэтому мы пойдем &quot;пионерским&quot; путем. Нам потребуется обычный linux с поддержкой lvm/lvm2. О том, как подготовить дисковое хранилище для размещения базы, я тут особо распространяться не буду. Желающие всегда могут почитать man'ы (pvcreate/vgcreate/lvcreate сотоварищи). Замечу только, что при создание logical volume для хранения базы '''необходимо''' оставлять порядка 2-4% нераспределенных physical extents для того, чтобы lvm было куда писать измененные данные во время бекапа. Пример:<br /> &lt;pre&gt;<br /> # vgdisplay vg1<br /> --- Volume group ---<br /> VG Name vg1<br /> System ID <br /> Format lvm2<br /> Metadata Areas 1<br /> Metadata Sequence No 3201<br /> VG Access read/write<br /> VG Status resizable<br /> MAX LV 0<br /> Cur LV 1<br /> Open LV 1<br /> Max PV 0<br /> Cur PV 1<br /> Act PV 1<br /> VG Size 271.94 GB<br /> PE Size 32.00 MB<br /> Total PE 8702<br /> Alloc PE / Size 8650 / 270.31 GB<br /> Free PE / Size 52 / 1.62 GB<br /> VG UUID LgXAR3-SPn6-skB8-O0Y0-HI8N-o6gh-0Zy7qc<br /> &lt;/pre&gt;<br /> Здесь я оставил нераспределенными 52 extent'а, что в сумме дает 1.6 гигабайт. Этого вполне хватает для работы базы в течение получаса. Если не хочется рисковать - можно увеличить процент нераспределенных extent'ов.<br /> <br /> Итак, предположим, что хранилище под базу соответствует соглашению: оно находится на logical volume, и volume group имеет достаточно нераспределенных extent'ов. Далее все, что нам нужно - это написать пару скриптов, которые будут создавать снапшот и копировать информацию. Кроме штатных средств (lvcreate, lvremove) нам потребуется пакет rsync. Хочется сразу отметить, что '''полный''' бекап базы объемом пару десятков гигабайт может занять несколько часов, поэтому мы будем использовать для копирования rsync, который позволяет копировать только измененные файлы (и даже только части измененных файлов). Это означает, что на момент бекапа где-то (там, куда мы копируем текущую базу) уже должна быть хотя бы частично скопированная база, актуальная на какой-то момент в прошлом. Это также означает, что мы имеем всего лишь один бекап - по состоянию на момент последнего резервирования (то есть, если бекап производится раз в сутки - бекап за прошлые сутки). Эту схему, конечно, можно модифицировать, но упражнение по модификации пусть будет вашим домашним заданием. Мы же решаем вполне конкретную задачу: получить '''консистентную''' копию базы без прерывания сервиса.<br /> <br /> Итак, скрипт №1 (/usr/local/libexec/backupdb/backup.sh):<br /> &lt;source lang=bash&gt;<br /> #!/bin/sh<br /> <br /> lvcreate=/usr/sbin/lvcreate<br /> lvremove=/usr/sbin/lvremove<br /> mysql=/usr/bin/mysql<br /> mount=/bin/mount<br /> umount=/bin/umount<br /> mysqladmin=/usr/bin/mysqladmin<br /> rsync=/usr/bin/rsync<br /> myisamchk=/usr/bin/myisamchk<br /> snapscript=/usr/local/libexec/backupdb/makesnap.sh<br /> nice=/bin/nice<br /> date=/bin/date<br /> <br /> created=0<br /> <br /> echo $($date '+%Y-%m-%d %H:%M:%S') creating snapshot<br /> $mysql &lt;&lt;-LCK<br /> FLUSH TABLES WITH READ LOCK;<br /> system /bin/sh $snapscript<br /> UNLOCK TABLES;<br /> LCK<br /> echo $($date '+%Y-%m-%d %H:%M:%S') mounting snapshot<br /> $mount -r /dev/vg1/snap /snapshot<br /> echo $($date '+%Y-%m-%d %H:%M:%S') mounting backup storage<br /> $mount /backup<br /> echo $($date '+%Y-%m-%d %H:%M:%S') rsyncing...<br /> $nice -n 19 $rsync -aH --bwlimit=25000 --delete /snapshot/ /backup/<br /> echo $($date '+%Y-%m-%d %H:%M:%S') unmounting snapshot<br /> $umount /snapshot<br /> echo $($date '+%Y-%m-%d %H:%M:%S') removing snapshot<br /> $lvremove -f vg1/snap &gt;/dev/null 2&gt;&amp;1<br /> echo $($date '+%Y-%m-%d %H:%M:%S') unmounting backup storage<br /> $umount /backup<br /> &lt;/source&gt;<br /> Скрипт №2 (/usr/local/libexec/backupdb/makesnap.sh):<br /> &lt;source lang=bash&gt;<br /> #!/bin/sh<br /> <br /> lvcreate=/usr/sbin/lvcreate<br /> lvremove=/usr/sbin/lvremove<br /> sleep=/bin/sleep<br /> sync=/bin/sync<br /> <br /> created=0<br /> <br /> while [ $created -eq 0 ] ; do<br /> $sync ; $sync<br /> $lvcreate -s -l 52 -Mn -n snap vg1/storage &gt;/dev/null 2&gt;&amp;1<br /> if [ $? -eq 0 ] ; then<br /> created=1<br /> else<br /> $lvremove -f vg1/snap &gt;/dev/null 2&gt;&amp;1<br /> fi<br /> $sleep 1<br /> done<br /> &lt;/source&gt;<br /> <br /> Здесь:<br /> ; /dev/vg1 : volume group, на которой у меня располагается logical volume &quot;storage&quot; (хранилище базы данных)<br /> ; /dev/vg/1/storage : собственно логический том &quot;storage&quot;<br /> ; /dev/vg1/snap : снапшот этого логического тома<br /> ; /backup/ : раздел, где располагается копия базы данных, для простоты я внес раздел в /etc/fstab с опцией noauto<br /> <br /> Зачем так сложно, в два скрипта? Почему не сделать один? Все просто: база должна быть консистентной. Этого можно добиться только временно заблокировав все таблицы на момент снятия снапшота, чем и занимается скрипт №2.<br /> &lt;blockquote&gt;<br /> Кстати, хозяйке на заметку. Если по какой-то причине скрипт №2 не сможет сделать снапшот, он заблокирует работу MySQL перманентно, до прерывания. В качестве домашнего задания модифицируйте скрипты так, чтобы скрипт №2 выполнял не более, скажем, 30 попыток сделать снапшот и в случае неудачи всех попыток скрипт №1 вместо удаления копии базы завершал работу с корректной диагностикой.<br /> <br /> Правда, я столкнулся с такой ситуацией всего один раз, но это не значит, что креститься надо строго после того как грянет гром. =)<br /> &lt;/blockquote&gt;<br /> <br /> Обратите внимание на строчку создания снапшота в скриипте №2. Я задействовал все свободные PE из группы (52 штуки). Как говорится, YMMV.<br /> <br /> После этого делаем примерно так:<br /> &lt;source lang=bash&gt;<br /> # ln -s /usr/local/libexec/backupdb/backup.sh /etc/cron.daily/backupdb<br /> &lt;/source&gt;<br /> <br /> И еще нам нужно подготовить первичную копию базы для последующего бекапа. Это можно сделать все тем же rsync'ом:<br /> &lt;source lang=bash&gt;<br /> # mount /backup<br /> # rsync -aH --bwlimit=10000 /storage/ /backup/<br /> &lt;/source&gt;<br /> <br /> Обратите внимание на два момента:<br /> # Я ограничиваю скорость копирования опцией bwlimit. Это необходимо для того, чтобы не нарушать нормальную работу базы<br /> # Нас не заботит консистентность базы. Все равно очередной бекап &quot;доведет&quot; ее до состояния консистентности благодаря возможностям rsync</div> Tue, 10 Jun 2008 10:35:58 GMT Boco http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Database_backup