<?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>Serov.eu &#187; mysql</title>
	<atom:link href="https://serov.eu/?feed=rss2&#038;tag=mysql" rel="self" type="application/rss+xml" />
	<link>https://serov.eu</link>
	<description>Блог программиста</description>
	<lastBuildDate>Thu, 30 Apr 2026 12:31:53 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.15</generator>
	<item>
		<title>docker mysqldump</title>
		<link>https://serov.eu/?p=719</link>
		<comments>https://serov.eu/?p=719#comments</comments>
		<pubDate>Thu, 01 Jul 2021 21:07:35 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=719</guid>
		<description><![CDATA[Рецепт бекапа mysql  БД, если она работает в докере: Создаем скрипт: #!/bin/bash DATA=`date +"%Y-%m-%d_%H-%M"` docker exec app-mysql /usr/bin/mysqldump -u bitrix --triggers --events --routines --password=PASS1234 bitrix &#124; gzip -9 &#62; "$DATA"-backup.sql.gz &#160; Если надо исключить таблицы, которые не нужны, то добавляем флаг --ignore-table=БД.Таблица &#160; Для bitrix актуально следующее: --ignore-table=bitrix.b_stat_referer_list --ignore-table=bitrix.b_stat_path --ignore-table=bitrix.b_event_log --ignore-table=bitrix.b_stat_guest --ignore-table=bitrix.b_stat_session --ignore-table=bitrix.b_stat_hit --ignore-table=bitrix.b_stat_page --ignore-table=bitrix.b_stat_referer &#8230; <a href="https://serov.eu/?p=719" class="more-link">Читать далее <span class="screen-reader-text">docker mysqldump</span></a>]]></description>
				<content:encoded><![CDATA[<p>Рецепт бекапа mysql  БД, если она работает в докере:<br />
Создаем скрипт:</p>
<pre>#!/bin/bash

DATA=`date +"%Y-%m-%d_%H-%M"`

docker exec app-mysql /usr/bin/mysqldump -u bitrix  --triggers  --events --routines --password=PASS1234 bitrix | gzip -9 &gt; "$DATA"-backup.sql.gz

</pre>
<p>&nbsp;</p>
<p>Если надо исключить таблицы, которые не нужны, то добавляем флаг <code>--ignore-table=БД.Таблица</code></p>
<p>&nbsp;</p>
<p>Для bitrix актуально следующее:</p>
<pre>
--ignore-table=bitrix.b_stat_referer_list  --ignore-table=bitrix.b_stat_path  --ignore-table=bitrix.b_event_log  --ignore-table=bitrix.b_stat_guest  --ignore-table=bitrix.b_stat_session  --ignore-table=bitrix.b_stat_hit  --ignore-table=bitrix.b_stat_page  --ignore-table=bitrix.b_stat_referer  --ignore-table=bitrix.b_stat_path_cache
</pre>
<p>От потерь этих таблиц, которые содержат статистику по сайту, никто сильно не пострадает, а бекап с 5гб может уменьшиться до 30мб </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=719</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Партиции mysql</title>
		<link>https://serov.eu/?p=705</link>
		<comments>https://serov.eu/?p=705#comments</comments>
		<pubDate>Sun, 30 May 2021 11:52:03 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=705</guid>
		<description><![CDATA[С версии MySQL 5.1 поддерживается партиция, позволяя Вам распределить части индивидуальных таблиц по файловым системам согласно правилам, которые Вы можете устанавливать в значительной степени так, как необходимо. Типы Разбиения RANGE partitioning: назначает строки разделам, основанным на значениях столбца, попадающих внутрь заданного диапазона. LIST partitioning: подобно выделению разделов диапазоном, за исключением того, что раздел выбран основанным &#8230; <a href="https://serov.eu/?p=705" class="more-link">Читать далее <span class="screen-reader-text">Партиции mysql</span></a>]]></description>
				<content:encoded><![CDATA[<pre>С версии MySQL 5.1 поддерживается партиция, позволяя Вам распределить части индивидуальных таблиц по файловым системам согласно правилам, которые Вы можете устанавливать в значительной степени так, как необходимо.


Типы Разбиения
 
RANGE partitioning: назначает строки разделам, основанным на значениях столбца, попадающих внутрь заданного диапазона.
LIST partitioning: подобно выделению разделов диапазоном, за исключением того, что раздел выбран основанным на столбцах, соответствующих одному из набора дискретных значений.
HASH partitioning: раздел выбран основанным на значении, возвращенном определяемым пользователем выражением, которое функционирует на значениях столбца в строках, которые будут вставлены в таблицу. Функция может состоять из любого выражения, допустимого в MySQL, которое выдает не отрицательное целочисленное значение.
KEY partitioning: подобно выделению разделов hash, за исключением того, что обеспечены только один или большее количество столбцов, которые будут оценены, и сервер MySQL обеспечивает собственную хэш-функцию. Эти столбцы могут содержать не целочисленные значения, так как хэш-функция, обеспеченная MySQL, гарантирует целочисленный результат, независимо от типа данных столбца.


От слов к практике. На примере Таблица разбитая на 2 раздела с типом LIST



CREATE TABLE 'contact` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`created` DATETIME NOT NULL,
	`text1` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	`text2` VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
	`file_name` VARCHAR(40) NOT NULL COLLATE 'utf8mb4_unicode_ci',
	`pn` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
	PRIMARY KEY (`id`,`pn`) USING BTREE,
	INDEX `file_name_idx` (`file_name`) USING BTREE
)

				 
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3794499

/*!50100 PARTITION BY LIST (pn)
(PARTITION p0 VALUES IN (0) ENGINE = InnoDB,
 PARTITION p1 VALUES IN (1) ENGINE = InnoDB)  */;


Тут стоит обратить внимание  на строчку PRIMARY KEY (`id`,`pn`) USING BTREE,
Если не добавить в PRIMARY KEY столбец pn то ничего не выйдет.


Для меня в данном случае, разбиение на партиции была нужна для того, чтобы быстро удалять данные относящиеся к 0 или к 1 партиции. Делается это командой 

ALTER TABLE  contact TRUNCATE PARTITION p0;

Которая за 1 сек может удалить миллионы строк (по сути удаляет файл) из партиции p0


На физ уровне будет два файла таблицы:
contact#P#p0.ibd
contact#P#p1.ibd


Хорошая документация тут http://www.rldp.ru/mysql/mysqlpro/parts.htm


Кстати, update по столбцу  pn происходит очень долго, и после такого апдейта команда 
ALTER TABLE  contact TRUNCATE PARTITION p0;
тоже происходит не мгновенно



</pre>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=705</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Подсчет количества по дате</title>
		<link>https://serov.eu/?p=350</link>
		<comments>https://serov.eu/?p=350#comments</comments>
		<pubDate>Mon, 19 Nov 2018 10:00:48 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=350</guid>
		<description><![CDATA[SELECT COUNT(id) AS count_id, DATE_FORMAT(`date`, '%Y %m %d %H') AS d, header, anons FROM cms_news GROUP BY d ORDER BY id]]></description>
				<content:encoded><![CDATA[<pre>
SELECT COUNT(id) AS count_id, DATE_FORMAT(`date`, '%Y %m %d %H') AS d, header, anons FROM cms_news GROUP BY d ORDER BY id
</pre>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=350</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql trigger history table</title>
		<link>https://serov.eu/?p=345</link>
		<comments>https://serov.eu/?p=345#comments</comments>
		<pubDate>Sat, 20 Oct 2018 20:21:23 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=345</guid>
		<description><![CDATA[Поддержка для триггеров включена, начиная с MySQL 5.0.2. Когда нужно историчность данных CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NULL DEFAULT NULL, `password` CHAR(32) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=0 ; CREATE TABLE `user_history` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INT(11) NULL DEFAULT NULL, `name` VARCHAR(255) &#8230; <a href="https://serov.eu/?p=345" class="more-link">Читать далее <span class="screen-reader-text">mysql trigger history table</span></a>]]></description>
				<content:encoded><![CDATA[<p>Поддержка для триггеров включена, начиная с MySQL 5.0.2.<br />
 </p>
<p>Когда нужно историчность данных</p>
<pre>


CREATE TABLE `user` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) NULL DEFAULT NULL,
	`password` CHAR(32) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0
;





CREATE TABLE `user_history` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`user_id` INT(11) NULL DEFAULT NULL,
	`name` VARCHAR(255) NULL DEFAULT NULL,
	`password` CHAR(32) NULL DEFAULT NULL,
	`date_changed` DATETIME NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0
;






CREATE DEFINER=`root`@`%` TRIGGER `history` BEFORE UPDATE ON `user` FOR EACH ROW BEGIN

INSERT INTO user_history 
SELECT NULL, h.*, NOW() FROM user h WHERE id = OLD.id;


END




</pre>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=345</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql joins</title>
		<link>https://serov.eu/?p=272</link>
		<comments>https://serov.eu/?p=272#comments</comments>
		<pubDate>Thu, 29 Mar 2018 19:05:31 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=272</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><a href="https://serov.eu/wp-content/uploads/2018/03/sql-join.jpg"><img class="alignnone size-large wp-image-273" src="https://serov.eu/wp-content/uploads/2018/03/sql-join-1024x806.jpg" alt="sql-join" width="660" height="519" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=272</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как включить логирование в MySQL</title>
		<link>https://serov.eu/?p=247</link>
		<comments>https://serov.eu/?p=247#comments</comments>
		<pubDate>Tue, 27 Feb 2018 18:12:39 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=247</guid>
		<description><![CDATA[set global general_log='on'; set global log_output='table'; В файл /etc/my.cf добавляем следующие строки [mysqld] ... log-queries-not-using-indexes log=/var/log/mysql-queries.log log-error=/var/log/mysql-errors.log log-slow-queries=/var/log/mysql-slow-queries.log ... Создаем файлы и назначаем права, MySQL почему-то см этого не делает в CentOS 5: touch /var/log/mysql-queries.log touch /var/log/mysql-errors.log touch /var/log/mysql-slow-queries.log chown mysql:mysql /var/log/mysql* chmod 640 /var/log/mysql* Перезапускаем сервис: service mysqld restart]]></description>
				<content:encoded><![CDATA[<p><code><br />
set global general_log='on';<br />
set global log_output='table';<br />
</code><br />
В файл /etc/my.cf добавляем следующие строки</p>
<p><code><br />
[mysqld]<br />
...<br />
log-queries-not-using-indexes<br />
log=/var/log/mysql-queries.log<br />
log-error=/var/log/mysql-errors.log<br />
log-slow-queries=/var/log/mysql-slow-queries.log<br />
...<br />
</code><br />
Создаем файлы и назначаем права, MySQL почему-то см этого не делает в CentOS 5:</p>
<p><code><br />
touch /var/log/mysql-queries.log<br />
touch /var/log/mysql-errors.log<br />
touch /var/log/mysql-slow-queries.log<br />
chown mysql:mysql /var/log/mysql*<br />
chmod 640 /var/log/mysql*<br />
</code><br />
Перезапускаем сервис:</p>
<p><code><br />
service mysqld restart<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=247</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бекап mysql routines</title>
		<link>https://serov.eu/?p=15</link>
		<comments>https://serov.eu/?p=15#comments</comments>
		<pubDate>Wed, 22 Apr 2015 08:33:35 +0000</pubDate>
		<dc:creator><![CDATA[Evgen]]></dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[routines]]></category>
		<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">https://serov.eu/?p=15</guid>
		<description><![CDATA[Недавно столкнулся с такой проблемой. Развернул бекап mysql базы в среде разработке, и не нашел хранимые процедуры. Бекап я делаю через штатную програмку mysqldump. Она хороша тем, что это официальный инструмент для бекапа, он входит в пакет mysql. Итак, чтобы mysqldump сохранял процедуры, нужно добавить ключ --routines Полностью команда: #!/bin/sh data=`/bin/date +%d.%m.%Y_%H-%M-%S` /usr/bin/mysqldump --user=root --password=pass --routines name_db &#8230; <a href="https://serov.eu/?p=15" class="more-link">Читать далее <span class="screen-reader-text">Бекап mysql routines</span></a>]]></description>
				<content:encoded><![CDATA[<p class="">Недавно столкнулся с такой проблемой. Развернул бекап mysql базы в среде разработке, и не нашел хранимые процедуры. Бекап я делаю через штатную програмку mysqldump. Она хороша тем, что это официальный инструмент для бекапа, он входит в пакет mysql.</p>
<p class="">Итак, чтобы mysqldump сохранял процедуры, нужно добавить ключ</p>
<pre class="c-ext-Select-like-a-Boss">--routines</pre>
<p class="">Полностью команда:</p>
<pre class="">#!/bin/sh
data=`/bin/date +%d.%m.%Y_%H-%M-%S`
/usr/bin/mysqldump --user=root --password=pass --routines name_db &gt; /root/sql/sql-dump_${data}.sql</pre>
<p class="">mysqldump есть еще много нюансов работы. Один из важным моментов &#8212; она блокирует БД, на время работы, так что, если ваше БД больше гига, лучше это делать на слейв сервере.</p>
<p class="">А так можно всю БД забекапить</p>
<pre class="">/usr/local/bin/mysqldump --all-databases --default-character-set=utf8 --user=root --password=passroot &gt; /home/webmaster/sql-dump.sql</pre>
<p class="">
<p class="">Путь до mysqldump  может быть другой.</p>
<p class="">Узнать его можно командой</p>
<p class="">which</p>
<pre class="">which mysqldump</pre>
]]></content:encoded>
			<wfw:commentRss>https://serov.eu/?feed=rss2&#038;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
