<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mihalytch personal blog &#187; Copy</title>
	<atom:link href="http://mihalytch.org.ua/tag/copy/feed" rel="self" type="application/rss+xml" />
	<link>http://mihalytch.org.ua</link>
	<description>Все о высоких технологиях</description>
	<lastBuildDate>Mon, 05 Dec 2011 16:05:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Резервное копирование баз данных MySQL</title>
		<link>http://mihalytch.org.ua/mysql/copy-mysql.html</link>
		<comments>http://mihalytch.org.ua/mysql/copy-mysql.html#comments</comments>
		<pubDate>Fri, 22 Feb 2008 16:46:20 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Copy]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/news/7.html</guid>
		<description><![CDATA[Для того чтобы резервная копия была согласованной, необходимо выполнить для выбранных таблиц команду LOCK TABLES, а затем FLUSH TABLES. Команда [...]]]></description>
			<content:encoded><![CDATA[<p>Для того чтобы резервная копия была согласованной, необходимо выполнить для выбранных таблиц команду <strong>LOCK TABLES</strong>, а затем <strong>FLUSH TABLES</strong>.<span id="more-7"></span></p>
<p align="justify">Команда <strong>LOCK TABLES</strong> блокирует указанные в ней таблицы для данного потока. Команда <strong>UNLOCK TABLES</strong> снимает любые блокировки, удерживаемые данным потоком. Все таблицы, заблокированные текущим потоком, автоматически разблокируются при появлении в потоке иной команды <strong>LOCK TABLES</strong> или при прекращении соединения с сервером.<br />
Команда <strong>FLUSH TABLE</strong> обеспечивает гарантию того, что все активные индексные страницы будут записаны на диск прежде, чем начнется резервное копирование. Команда <strong>FLUSH</strong> применяется для очистки части кэша, используемого <strong>MySQL</strong>. Для запуска <strong>FLUSH</strong> необходимо обладать привилегиями <strong>RELOAD</strong>.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Для того чтобы провести резервное копирование на уровне <strong>SQL</strong>, следует воспользоваться командами <strong>SELECT INTO OUTFILE</strong> или <strong>BACKUP TABLE. SELECT</strong> применяется для извлечения строк, выбранных из одной или нескольких таблиц.<br />
<strong>BACKUP TABLE</strong> копирует в каталог резервного копирования тот минимум табличных файлов, который достаточен для восстановления таблицы после сброса на диск всех изменений. На данный момент работает только для таблиц <strong>MyISAM</strong>. Для таблиц <strong>MyISAM</strong> копирует файлы .frm (определений) и .MYD (данных). Индексные файлы могут быть реконструированы по этим двум.<br />
Существует еще один способ создать резервную копию базы данных &#8211; использовать программу <strong>mysqldump</strong> или сценарий <strong>mysqlhotcopy</strong>.<br />
mysqldump позволяет получить дамп содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных. Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.<br />
Утилита <strong>mysqlhotcopy</strong> представляет собой Perl-сценарий, использующий SQL-команды <strong>LOCK TABLES</strong>, <strong>FLUSH TABLES</strong> и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. Пожалуй, это наиболее быстрый способ копирования баз данных или таблиц, но он может работать только на том же компьютере, где расположены каталоги копируемой базы данных.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Для того чтобы сделать полное резервное копирование баз данных необходимо выполнить команду:</p>
<p align="justify">&nbsp;</p>
<address>shell&gt; mysqldump &#8211;tab=/path/to/some/dir &#8211;opt &#8211;all</address>
<p align="justify">либо</p>
<p align="justify">&nbsp;</p>
<address>shell&gt; mysqlhotcopy database /path/to/some/dir</address>
<p align="justify">Также можно скопировать табличные файлы (файлы *.frm, *.MYD и *.MYI) в тот момент, когда сервер не проводит никаких обновлений. Этот метод используется в сценарии <strong>mysqlhotcopy</strong>.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Если mysqld выполняется, необходимо остановить его, а затем запустить с опцией <em>&#8211;log-update[=file_name]</em>. В файлах журнала обновлений находится информация, необходимая для того, чтобы повторить в базе данных последовательность изменений, внесенных с момента выполнения mysqldump.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Чтобы восстановить данные, сначала нужно попытаться восстановить таблицы с помощью <strong>REPAIR TABLE</strong> или <strong>myisamchk -r</strong>. В том случае если <strong>myisamchk</strong> не даст результата, попробуйте применить следующую процедуру:<br />
Восстановите исходный вариант по копии, сделанной в <strong>mysqldump</strong>.<br />
Выполните следующую команду, чтобы повторить обновления из бинарного журнала:</p>
<p align="justify">&nbsp;</p>
<address>shell&gt; mysqlbinlog hostname-bin.[0-9]* | mysql</address>
<p align="justify">Если используется журнал обновлений, то можно применить:</p>
<p align="justify">&nbsp;</p>
<address>shell&gt; ls -1 -t -r hostname.[0-9]* | xargs cat | mysql</address>
<p align="justify"><strong>ls</strong> используется для того, чтобы расположить все файлы журнала обновлений в правильном порядке.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Также допустимо проводить избирательное резервное копирование посредством <strong>SELECT * INTO OUTFILE &#8216;file_name&#8217; FROM tbl_name</strong>, а восстановление &#8211; при помощи <strong>LOAD DATA INFILE &#8216;file_name&#8217; REPLACE</strong> &#8230; Чтобы избежать повторения записей, в таблице должен быть первичный или уникальный ключ. Ключевое слово <strong>REPLACE</strong> задает замену старых записей новыми в случае, когда новая запись в значении уникального ключа повторяет старую.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/mysql/copy-mysql.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

