<?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; MySQL</title>
	<atom:link href="http://mihalytch.org.ua/tag/mysql/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>M/Monit: Мониторинг нескольких серверов с использованием графического интерфейса.</title>
		<link>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.html</link>
		<comments>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 20:46:26 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=217</guid>
		<description><![CDATA[Приветствую тебя уважаемый читатель. Как и обещал в предыдущей статье об использовании MonIT, я расскажу как с помощью M/Monit можно [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую тебя уважаемый читатель. Как и обещал в предыдущей <a href="http://mihalytch.org.ua/administration/monitoring-serverov-1.html" >статье об использовании MonIT</a>, я расскажу как с помощью M/Monit можно следить за состоянием нескольких серверов с одного графического интерфейса.</p>
<p>На самом деле M/Monit в отличии от Monit утилита платная, но на официальном сайте доступна <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://mmonit.com/download/" >бесплатная версия с ограниченным функционалом</a>.<br />
Давайте теперь подробно рассмотрим ее установку и настройку. Для этого создадим временную папку, скачаем архив с нужной нам версией, распакуем и скопируем в рабочую директорию (актуальную версию можно найти здесь: <a target="_blank" rel="nofollow" href="http://mihalytch.org.ua/goto//go/http://mmonit.com/dist/"  target="_blank">http://mmonit.com/dist/</a>):<br />
<span id="more-217"></span></p>
<pre class="brush: bash; title: ; notranslate">
# mkdir ~/distr/mmonit
# cd ~/distr/mmonit
# wget http://mmonit.com/dist/mmonit-2.1.1-linux-x86.tar.gz
# tar -xvf mmonit-2.1.1-linux-x86.tar.gz
# cd mmonit-2.0.3
# ls
bin  CHANGES  conf  db  doc  docroot  lib  logs  README  upgrade
# mkdir /usr/local/mmonit
# cp -R * /usr/local/mmonit
# chmod -R 0700 /usr/local/mmonit
</pre>
<p>Теперь нам необходимо создать базу данных и импортировать туда необходимые приложению данные. В папке /usr/local/mmonit/db/ лежат дампы для четырех типов баз данных. Мы рассмотрим случай с MySQL.<br />
Итак, создадим таблицу и выполним команды из дампа:</p>
<pre class="brush: bash; title: ; notranslate">
# mysql -u yore_username -p
mysql&gt; CREATE DATABASE `mmonit`;
mysql&gt; use mmonit
mysql&gt; source /usr/local/mmonit/db/mmonit-schema.mysql
mysql&gt; quit
</pre>
<p>После того как мы подготовили к использованию базу данных перейдем к редактированию конфигурационного файла M/Monit /usr/local/mmonit/conf/server.xml .</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Service&gt;
    &lt;!-- IP адрес интерфейса, на котором мы сможем получить доступ к админке --&gt;
    &lt;Connector address=&quot;IP.FROM.ALLOW.ACCESS&quot; port=&quot;8080&quot; processors=&quot;10&quot; /&gt;
    &lt;Engine name=&quot;mmonit&quot; defaultHost=&quot;localhost&quot; fileCache=&quot;10MB&quot;&gt;
        &lt;!-- настраиваем подключение к базе --&gt;
        &lt;Realm url=&quot;mysql://DB_USER:DB_PASSWORD@DB_HOST/DB_NAME&quot;
             minConnections=&quot;5&quot;
             maxConnections=&quot;25&quot;
             reapConnections=&quot;300&quot; /&gt;
</pre>
<p>Сохраняем конфиг и запускаем /usr/local/mmonit/bin/mmonit, заходим по адресу http://IP.FROM.ALLOW.ACCESS:8080 . По умолчанию логин/пароль &#8211; admin/swordfish (настоятельно рекомендуется изменить пароль сразу после первого входа в систему;) ).</p>
<p>Теперь нам обязательно нужно настроить сервис Monit хотя бы на одном сервере, чтобы было с чего собирать статистику. Для этого открываем файл конфигурации Monit: /usr/local/etc/monitrc.d/main.conf вашим любимым редактором и дописываем в начало следующие две строчки:</p>
<p><em>set httpd port 2812 and use address XXX.XXX.XXX.XXX # где XXX.XXX.XXX.XXX &#8211; адрес интерфейса, через который MMonit будет осуществлять доступ к monit.<br />
allow monit:your_strong_password</em></p>
<p>Сохраняем конфиг, перезапускаем monit. Входим под админом в web-интерфейс M/Monit, открываем страницу Admin-&gt;Hosts-&gt;&#8221;Add a new host&#8221;. Заполняем информацию о сервере, состояние которого будем мониторить:<br />
Host Name &#8211; название сервера (выбираем имя для нашего удобства),<br />
IP-address, Monit Port &#8211; XXX.XXX.XXX.XXX и 2812 указанные в /usr/local/etc/monitrc.d/main.con,<br />
Monit user name, Monit password из того же конфига.<br />
Сохраняем изменения.</p>
<p>Чтобы увидеть информацию о состоянии сервера, нужно всего-лишь кликнуть по его имени в списке серверов на странице Admin-&gt;Hosts.</p>
<p>В следующей статье я более детально опишу, как сконфигурировать отчеты о состоянии серверов и как создать файлы для запуска/остановки/перезапуска/проверки статуса сервисов Monit и M/Monit.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/administration/monitoring-serverov-2-html.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL операторы выбора и условные операторы (IF, CASE, IFNULL, NULLIF)</title>
		<link>http://mihalytch.org.ua/mysql/conditionals-in-mysql.html</link>
		<comments>http://mihalytch.org.ua/mysql/conditionals-in-mysql.html#comments</comments>
		<pubDate>Tue, 14 Oct 2008 09:13:57 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[CASE]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/mysql/conditionals-in-mysql.html</guid>
		<description><![CDATA[Если вы читаете эту статью, значит, у вас возникла надобность в использовании условных инструкций (операторов выбора) при написании запросов к [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы читаете эту статью, значит, у вас возникла надобность в использовании условных инструкций (операторов выбора) при написании запросов к базе данных на языке MySQL.<span id="more-60"></span></p>
<p><strong>Условный оператор IF</strong><br />
Синтаксис:</p>
<pre class="brush: sql">IF (EXP1, EXP2, EXP3)</pre>
<p>Если <em>EXP1 </em>истина, то <em>IF </em>возвращает <em>EXP2</em>, если <em>EXP1=0</em> или <em>EXP1=NULL,</em> то оператор <em>IF </em>возвращает  <em>EXP3</em>.</p>
<p><strong>Оператор  выбора CASE</strong><br />
Синтаксис:</p>
<pre class="brush: sql; title: ; notranslate">
CASE value
     WHEN [compare-value1] THEN result1
    [WHEN [compare-value2] THEN result2]
...
    [WHEN [compare-valueN] THEN resultN]
    [ELSE default-result]
END
</pre>
<p>В данном случае <code><em>value </em>сравнивается с</code> <code><em>compare-valueX</em> (где <em>X=1..n</em>), если нет совпадений, тогда оператор выбора возвращает </code><code><em>default-result</em>, если же инструкция</code> <code><em>ELSE </em>отсутствует, тогда возвращается <em>NULL</em>.</code></p>
<p><strong>IFNULL</strong><br />
Синтаксис:</p>
<pre class="brush: sql; title: ; notranslate">
IFNULL (EXP1, EXP2)
</pre>
<p>если <em>EXP1&lt;&gt;NULL,</em> то <em>IFNULL </em>возвращает <em>EXP1, </em>в противном случае возвращает <em>EXP2</em>.</p>
<p><strong>NULLIF</strong><br />
Синтаксис:</p>
<pre class="brush: sql; title: ; notranslate">
NULLIF(EXP1, EXP2)
</pre>
<p>если <em>EXP1=EXP2</em> возвращает <em>NULL, </em>в другом случае &#8211; <em>EXP1</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/mysql/conditionals-in-mysql.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Постраничный вывод</title>
		<link>http://mihalytch.org.ua/programming/php/paginal-conclusion.html</link>
		<comments>http://mihalytch.org.ua/programming/php/paginal-conclusion.html#comments</comments>
		<pubDate>Thu, 24 Jul 2008 12:41:05 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/paginal-conclusion.html</guid>
		<description><![CDATA[Начнем по обыкновению с постановки задачи. Необходимо организовать постраничный вывод любого рода контента. Поле деятельности &#8211; движок, написаный на PHP, [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем по обыкновению с постановки задачи. Необходимо организовать постраничный вывод любого рода контента. Поле деятельности &#8211; движок, написаный на PHP, и данные, которые хранятся в базе MySQL.<span id="more-44"></span></p>
<p>Разобьем нашу задачу на два подпункта. Нам необходимо организовать выбор из базы необходимой нам части информации (иными словами &#8211; страницы), а также сгенерировать меню навигации по страницам.</p>
<p>Я считаю наиболее удобной следующего вида схему навигации по страницам:</p>
<p>&lt;&lt; &#8230; n-1 n n+1 &#8230; &gt;&gt;,</p>
<p>где &#8220;&lt;&lt;&#8221; переход на первую страницу (&#8220;&lt;&lt; &#8230; &#8221; не отображаются когда текущая страница первая), &#8221; n &#8221; &#8211; номер текущей страницы, &#8220;n-1&#8243;и &#8220;n+1&#8243; &#8211; ссылки на предыдущую и следующую страницы соответственно, &#8220;&#8230;&#8221; просто три точки. =)</p>
<p>Теперь приступим непосредственно к делу. Для начала определим константу, которой присвоим максимально допустимое значение единиц контента на страницу.</p>
<pre class="brush: php; title: ; notranslate">DEFINE('ITEM_PER_PAGE', 4);</pre>
<p>Следующим шагом необходимо узнать количество всех доступных элементов. Например:</p>
<pre class="brush: php; title: ; notranslate">
$items_cnt_arr = $this-&gt;db-&gt;GetRow(&quot;SELECT COUNT(`id`) as `all` FROM `content` &quot;);
# в этой переменно уже храниться общее кол-во элементов.
$items_cnt = $items_cnt_arr['all'];
#делим кол-во всех элементов на кол-во элементов на странице и округляем до большего
$max_pages = ceil($items_cnt/ITEM_PER_PAGE);
</pre>
<p>Теперь определить какой передаваемый параметр будет отвечать за запрашиваемую страницу и проверить допустимо ли значение, которое он принимает.</p>
<pre class="brush: php; title: ; notranslate">
if ( empty($_GET['page']) || !is_numeric($_GET['page'])) {
    # если передаваемое значение пусто или не число
    $curr_page = 0;
} elseif ($_GET['page']&gt;=$max_pages){
    # если не превышает максимально допустимого числа страниц
    $curr_page = ($max_pages-1);
} else {
    # если входит в область допустимых значений
    $curr_page = $_GET['page'];
}
</pre>
<p>Для того чтобы выбрать необходимые элементы для вывода на страницу теперь достаточно выполнить следующего рода запрос:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT *
FROM `content`
LIMIT &quot;.($curr_page*ITEM_PER_PAGE).&quot;, &quot;.ITEM_PER_PAGE;
</pre>
<p>(выделенная жирным часть обязательно должна присутствовать <img src='http://mihalytch.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Теперь организуем генерацию меню навигации.</p>
<pre class="brush: php; title: ; notranslate">
$_nav_text = '';
# ссылка на первую страницу
if ($curr_page&gt;0) {
    # если текущая страница не первая
    $_nav_text .= '&lt;a href=&quot;/phone/0&quot; mce_href=&quot;/phone/0&quot;&gt;«&lt;/a&gt;  ...';
} 

for ($k=0;$k&amp;lt;3;$k++) {
    # номер страницы, содержащейся в ссылке
    $_link_id = $curr_page+($k-1);

    if (($_link_id &lt; $max_pages) &amp;&amp; ($_link_id&gt;=0)) {
        if ($_link_id != $curr_page) {
            # выводим ссылки на предыдущие и следующие страницы
            $_nav_text .= ' &lt;a href=&quot;index.php?page='.$_link_id.'&quot; mce_href=&quot;index.php? page='.$_link_id.'&quot;&gt;'.($_link_id+1).'&lt;/a&gt; ';
        } else {
            # выводим номер текущей страницы
            $_nav_text .= ' &lt;b&gt;'.($_link_id+1).'&lt;/b&gt;';
        }
    }
}

// ссылка на последнюю страницу
if ($curr_page &lt; ($max_pages-1)) {
    # если текущая страница не последняя
    $_nav_text .= '  ...  &lt;a href=&quot;index.php?page='.($max_pages-1).'&quot; mce_href=&quot;index.php?page='.($max_pages-1).'&quot;&gt;»&lt;/a&gt;; ';
}
</pre>
<p>Теперь в переменной $_nav_text содержится код ссылок меню навигации.<br />
<strong>UPD.1.</strong> В данной статье принято считать страницы с нуля. Чтобы получить человеко понятную нумерацию, нужно изменить <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">$curr_page = $_GET['page']; на $curr_page = $_GET['page']-1; .</span></p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/paginal-conclusion.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Сравнение дат</title>
		<link>http://mihalytch.org.ua/programming/php/comparison-of-dates.html</link>
		<comments>http://mihalytch.org.ua/programming/php/comparison-of-dates.html#comments</comments>
		<pubDate>Fri, 14 Mar 2008 10:24:41 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DATE]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/php/comparison-of-dates.html</guid>
		<description><![CDATA[Задача: сравнить две даты. Первая &#8211; текущая, вторая полученная из MySQL формата DATE средствами PHP. Всего доступно множество вариантов. Приведу [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Задача</strong>: сравнить две даты. Первая &#8211; текущая, вторая полученная из MySQL формата DATE средствами PHP.</p>
<p>Всего доступно множество вариантов. Приведу самый простой из них:</p>
<p><span id="more-21"></span></p>
<pre>// $date_from_mysql - заведомо известная переменная
//(взято из базы в формате ГГГГ-ММ-ДД)
$current_date = date("Y-m-d");   

if ($current_date &gt; $date_from_mysql)  {
    echo 'current_date &gt; date_from_mysql';
}  else  {
    echo 'date_from_mysql &gt; current_date';
}</pre>
<p>Сравнить можно как дату, так и время (также DATETIME). Главное чтобы обе строки были в одинаковом формате.</p>
<p>Можно воспользоваться стандартными средствами MySQL:</p>
<pre>SELECT NOW() BETWEEN DATE_CURRENT AND DATE_END AS isBetween FROM MY_TABLE</pre>
<p>В данном случае доступны такие операторы для сравнения:</p>
<pre>=, &lt;, &gt;, &lt;=, &gt;=, BETWEEN;</pre>
<p>Также можно воспользоваться оператором сравнения массивов:</p>
<pre>// $date_from_mysql - заведомо известная переменная
// (взято из базы в формате ГГГГ-ММ-ДД)
$current_date = date("Y-m-d");
$date1 = explode("-", $date_from_mysql);
$date2 = explode("-", $current_date);   

if ($date1&gt;$date2)  {
   echo 'current_date &gt; date_from_mysql'
} else {
   echo 'date_from_mysql &gt; current_date';
}</pre>
<p>Следующий способ: удалить все символы кроме цифр из строковых переменных, в которых хранятся даты, и сравнить их как числа.</p>
<p><strong>Вывод</strong>: лично я нахожу первый описанный вариант сравнения дат наиболее простым и приемлемым.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/php/comparison-of-dates.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<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>

