<?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>Perlover&#039;s Blog &#187; mysql</title>
	<atom:link href="http://blog.perlover.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Thu, 12 Aug 2010 11:56:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>rsync &#8211; быстрый резерв + быстрый перенос сайтов</title>
		<link>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/</link>
		<comments>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 05:44:13 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[For AWMs]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Для Webmasters]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=826</guid>
		<description><![CDATA[Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync &#8211; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давно, для резервирования, я использовал такие, казалось бы, незаменимые утилиты, как tar или pax. Я слышал в то время про rsync, но не представлял себе, как она в точности работает, поэтому я ощибочно полагал, что rsync &#8211; простая утилита копирования. А раз простая, то вряд ли я получу от нее много толку. Поэтому я продолжал и продолжал пользоваться tar или pax, затем копировал по scp эти архивы, там распаковывал и т.п.. Я даже использовал find затем, чтобы докопировать файлы, которые изменились за последние сутки. <strong>Эх, жаль, что я столько много истратил времени на копирование, ведь была rsync!</strong></p>
<p><span id="more-826"></span>Итак, <strong>что же это за такая rsync?</strong> Это действительно, утилита рекурсивного копирования (копирует все файлы и поддиректории) с одного хоста на другой, или даже внутри одной машины. На этом все ее отличие от, например, утилиты cp заканчивается. И вот тут самое интересное &#8211; она при копировании каждый файл или директории, которые копируем, проходит блоками, и отслеживает только изменения блоков в сравнении с уже скопированными блоками. Грубо говоря, <strong>она копирует только &laquo;дельты&raquo; файлов и директорий!</strong> Что это значит? Это значит, что второй, третий и так далее запуски этой программы на определенную цель (куда копировать) будут занимать гораздо меньше времени, операций копирования и передачи данных по сети при повторном копировании уже изменившихся файлов. Вот несколько примеров ее использования:</p>
<h3>1) Быстрый перенос баз данных (на примере SQL).</h3>
<p>Имеем два сервака &#8211; один рабочий A, второй Б &#8211; куда будем резервировать свои базы данных (там где нет работающего SQL). Тогда для резервирования <strong>можно периодически запускать rsync</strong> на сервере A, <strong>не прекращая работы SQL сервера</strong> (назовем это &laquo;рабочим резервом&raquo;). Но чтобы нам иметь полностью правильные базы в резервной директории сервера Б, нам надо временами останавливать SQL на серваке А, и пока там нет работаюшего SQL, делать повторное копирование (назовем это &laquo;фиксированным резервом&raquo;). Вот тут то rsync и пригождается! Во время &laquo;рабочего резерва&raquo; многие файлы успевают устареть, ведь SQL продолжает работать. Во время &laquo;фиксированного резерва&raquo; копируются только дельты с последнего запуска &laquo;рабочего резерва&raquo;. Если время между этими запусками мало, то дельты копируются очень быстро &#8211; на больших базах это может быть не более минуты, например. Для снижения времени простоя, надо просто выполнить повторный &laquo;рабочий резерв&raquo; прямо перед остановкой MySQL сервера. Плюсы такого способа &#8211; <strong>минимальный даун по времени</strong>, минимум человеческих ошибок, простота. Я не знаю другого способа на данный момент, чтобы сделать быстрый резерв больших баз данных на другую машину, и при этом свести время простоя к минимуму.</p>
<p>Команды (<strong>смотрите не перепутайте!</strong> Тут все как в теории относительности <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )<br />
<strong>На стороне сервера Б </strong>(можно и на стороне А, но тогда надо поменять пути местами), куда копируем, запускаем команды копирования во время &laquo;рабочего резерва&raquo;</p>
<pre class="brush: bash;">cd
nohup /bin/nice -n 20 ionice -c3 rsync --rsync-path='/bin/nice -n 20 ionice -c3 rsync' -avz --delete IP.ADDRESS.SERVER.A:'/path/to/source/folder/' /path/to/target/folder/</pre>
<p><strong>Краткие пояснения (ВАЖНО):</strong><br />
Некоторые утилиты могут отсутствовать, <strong>примеры даны для Linux!</strong> Здесь <a href="http://ru.wikipedia.org/wiki/Nohup" target="_blank">nohup</a> &#8211; &laquo;оторвать&raquo; ввод/вывод от терминала. Это нам потребуется, когда мы захотим оставить запущенный &laquo;резерв&raquo; в фоновом режиме. Сразу мы не можем этого сделать (то есть не ставлю &#8216;&amp;&#8217; в конце), так как rsync при копировании использует ssh, и раз мы копируем на другой сервак, он запросит у нас пароль (если авторизация через openssh ключи + ssh-agent, то можно и поставить &#8216;&amp;&#8217;, но об этом в другой раз, в другой статье). После ввода пароля уже можно будет нажать <em>Ctrl+Z</em> в shell и затем <code>"<strong>%1 &amp;</strong>"</code> для запуска в фоновом режиме первой запущенной задачи (см. <a href="http://linux.die.net/man/1/bash" target="_blank">man bash</a>). Команда <a href="http://ru.wikipedia.org/wiki/Nice" target="_blank">nice</a> &#8211; выставить приоритет для процессора, а <a href="http://linux.die.net/man/1/ionice" target="_blank">ionice</a> &#8211; приоритет для операций при работе с диском &#8211; все приоритеты ставяться на понижение, чтобы продолжалась нормальная работа сервера. Опция <code>--delete</code> для rsync &#8211; удалять все файлы в целевой директории (от слово &laquo;цель&raquo;, target), которых нет в исходной (source). То есть, после копирования получим полностью равную директорию по содержанию.<br />
<strong>Слеш в конце исходной директории (</strong><code>/path/to/source/folder/</code><strong>)  &#8211; важная штука!</strong> Если в конце слеш &#8211; директория рассматривается rsync-ом как комплект директорий и файлов в ней для копирования, а если слеша нет &#8211; как один объект, целая директория со своим именем &#8211; в обоих случаях копирование рекурсивное, но если из примера убрать слеш в конце первого пути (сделать /path/to/source/folder), то в /path/to/target/folder/ будет создана папка folder и туда скопируется ее содержимое! Почитайте man-ы, если хотите понять, как присутствие или отсутствие слешей в конце директории влияет на ход событий <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>2) Перенос сайтов.</h3>
<p>Способом, описанным выше, также можно переносить и сайты вместе с их базами. Для баз мы используем способ выше, а для переноса контента делаем все то же самое, но при работающем apache. Как и в первом способе, apache мы останавливаем только на несколько минут или секунд, быстро запускаем rsync для &laquo;фиксированного резерва&raquo;, а после окончания запускаем apache снова. После остается сменить только DNS на новый IP адрес и все! Для повышения скорости переноса не забудьте за неделю до переноса выставить часовой TTL в вашем DNS для SOA записи зоны и для всех ее остальных записей. Тогда при смене IP весь трафик на сайт переместится за один час! Но это, как говориться, уже другая история. <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2010/06/16/rsync-quickly-reserve-moving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>readline команды (MySQL, bash, rlwrap)</title>
		<link>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/</link>
		<comments>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:21:00 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shortcut keys]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=589</guid>
		<description><![CDATA[Данная статейка уже носит чисто профессиональный характер &#8211; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке. Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не [...]]]></description>
			<content:encoded><![CDATA[<p>Данная статейка уже носит чисто профессиональный характер &#8211; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.</p>
<p><span id="more-589"></span>Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не знать про следующие, но очень удобные команды, которые облегчать вам жизнь под Unix:</p>
<ul>
<li><strong>Ctrl + A</strong> &#8211; переход <strong>в начало</strong> текущей строки;</li>
<li><strong>Ctrl + E</strong> &#8211; переход <strong>в конец</strong> текущей строки;</li>
<li><strong>Стрелка вверх / Стрелка вниз </strong>- <strong>хождение по history </strong>командам соответственно к более старым командам / к более новым (это вы навярняка знаете)</li>
<li><strong>Ctrl + U</strong> &#8211; <strong>стирает все слева </strong>от текущей позиции курсора, то есть чтобы быстро очистить строку, можно сделать Ctrl + E и затем Ctrl + U</li>
<li><strong>Esc -&gt; d</strong> &#8211; стирает слово справа (сначала нажимаем Esc, отпускаем, затем &#8216;d&#8217;)</li>
<li><strong>Tab </strong>- формирует законченный вид не до конца набранной команды, файла или директории. Для MySQL -  еще таблицы, имени колонки. Если нет однозначности, то после повторного нажатия <em>Tab </em>выдаются варианты. Очень ускоряет процесс работы в командной строке, если вы не знали про это <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li><strong>Ctrl + PageDown </strong>- переход <strong>к самой последней</strong> (свежей) команде в history</li>
<li><strong>Ctrl + PageUp </strong>- переход <strong>к самой старой</strong> (первой) команде history</li>
<li><strong>Ctrl + R </strong>- самая ценная команда для меня &#8211; <strong>поиск в history</strong>. Делается так: нажимаем Ctrl + R, появляется приглашение ввести подстроку поиска ( (reverse-i-search)`&#8217;: ), далее мы вводим, например, «mysql» &#8211; видим самую последнюю команду shell-а, где встречалось подстрока «mysql». Если она нас не устраивает, то для повтора поиска тут же надо снова нажать Ctrl + R. Каждое нажатие Ctrl + R перемещает нас к более старым командам с подстрокой «mysql», которые мы когда либо исполняли. Если же нас найденная команда устраивает, нажимаем «Стрелка вправо» или «Стрелка влево» и приступаем к редактированию и исполнению команды. Это очень удобная и нужная команда!</li>
</ul>
<p><strong>Все эти команды &#8211; подмножество</strong> команд библиотеки <strong><a href="http://ru.wikipedia.org/wiki/Readline" target="_blank">readline</a></strong> (man 3 readline). Ее используют и другие программы, например MySQL. Но в MySQL есть то ли баг, то ли так задумано разработчиками. Суть ее в том, что MySQL версий 3.x, например, прекрасно исполнял команду поиска (Ctrl + R), но потом, по каким то причинам, новые релизы &#8211; MySQL 4.x &amp; 5.x перестали работать с поиском. Скорее всего, это связано с тем, что раньше MySQL использовал readline библиотеку, но потом разработчики перешли на <a href="http://linux.die.net/man/5/editrc" target="_blank">editline</a>. И последняя перестала работать с поиском. Я долго мучался, пока не нашел решение. Оно следующее:</p>
<p>Создать файл ~/.editrc &#8211; конфиг для editline. Там мы пишем следующие строки:</p>
<blockquote><p>bind &laquo;\e[3~&raquo; ed-delete-next-char<br />
bind &laquo;^R» em-inc-search-prev</p></blockquote>
<p>После этого в MySQL 4.x &amp; 5.x у нас будет работать Ctrl + R.</p>
<p>Другим решением для MySQL вместо редактирования .editrc будет использовать <strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/" target="_blank">rlwrap</a></strong> программу (установка в Linux Fedora Core, например, такая: <em>yum install rlwrap</em>) &#8211; она «обертывает» stdout запускаемой программы и создает history для вводимых строк (хранит в ~/.commandname_history). У нее есть некоторые недостатки &#8211; на ввод паролей она делает echo, то есть пароль будет виден на экране. Можно с помощью опций отключить это, но это не идеально. Зато можно в нее обернуть любую программу, которая даже не имеет history вообще (<em>rlwrap perl -MCPAN -e shell</em> , например). Итак, второе решение для MySQL может быть таким:</p>
<blockquote><p>alias mysql=&#8217;rlwrap -a mysql&#8217;</p></blockquote>
<p>Это ставиться в ~/.bashrc, например. Или вместо алиаса можно просто запустить:</p>
<blockquote><p>rlwrap -a mysql -uroot -p mysql</p></blockquote>
<p><strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap.html" target="_blank">Man на rlwrap</a></strong> вы можете найти на сайте разработчика.</p>
<p>Вот такие вот тонкости, которые на 100% облегчат вам работу в Unix.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
