<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>timsa.ru: заметки с тегом mysql</title>
<link>https://timsa.ru/tags/mysql/</link>
<description>Моя записная книжка. Комментарии отключены из-за спама. Для вопросов используйте эту страничку</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079)</generator>

<itunes:subtitle>Моя записная книжка. Комментарии отключены из-за спама. Для вопросов используйте эту страничку</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Mysql hints</title>
<guid isPermaLink="false">55</guid>
<link>https://timsa.ru/all/mysql-hints/</link>
<pubDate>Fri, 11 Aug 2017 19:49:56 +0500</pubDate>
<author></author>
<comments>https://timsa.ru/all/mysql-hints/</comments>
<description>
&lt;p&gt;&lt;a href="https://habrahabr.ru/post/105954/"&gt;https://habrahabr.ru/post/105954/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Работа с бекапами&lt;/p&gt;
&lt;p&gt;Делаем бекап&lt;br /&gt;
mysqldump -u USER -pPASSWORD DATABASE &gt; /path/to/file/dump.sql&lt;/p&gt;
&lt;p&gt;Создаём структуру базы без данных&lt;br /&gt;
mysqldump —no-data — u USER -pPASSWORD DATABASE &gt; /path/to/file/schema.sql&lt;/p&gt;
&lt;p&gt;Если нужно сделать дамп только одной или нескольких таблиц&lt;br /&gt;
mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 &gt; /path/to/file/dump_table.sql&lt;/p&gt;
&lt;p&gt;Создаём бекап и сразу его архивируем&lt;br /&gt;
mysqldump -u USER -pPASSWORD DATABASE | gzip &gt; /path/to/outputfile.sql.gz&lt;/p&gt;
&lt;p&gt;Создание бекапа с указанием его даты&lt;br /&gt;
mysqldump -u USER -pPASSWORD DATABASE | gzip &gt; `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`&lt;/p&gt;
&lt;p&gt;Заливаем бекап в базу данных&lt;br /&gt;
mysql -u USER -pPASSWORD DATABASE &lt; /path/to/dump.sql&lt;/p&gt;
&lt;p&gt;Заливаем архив бекапа в базу&lt;br /&gt;
gunzip &lt; /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE&lt;br /&gt;
или так&lt;br /&gt;
zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE&lt;/p&gt;
&lt;p&gt;Создаём новую базу данных&lt;br /&gt;
mysqladmin -u USER -pPASSWORD create NEWDATABASE&lt;/p&gt;
&lt;p&gt;Удобно использовать бекап с дополнительными опциями -Q -c -e, т. е.&lt;br /&gt;
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE &gt; /path/to/file/dump.sql, где:&lt;br /&gt;
-Q оборачивает имена обратными кавычками&lt;br /&gt;
-c делает полную вставку, включая имена колонок&lt;br /&gt;
-e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее&lt;/p&gt;
&lt;p&gt;Для просмотра списка баз данных можно использовать команду:&lt;br /&gt;
mysqlshow -u USER -pPASSWORD&lt;/p&gt;
&lt;p&gt;А так же можно посмотреть список таблиц базы:&lt;br /&gt;
mysqlshow -u USER -pPASSWORD DATABASE&lt;/p&gt;
&lt;p&gt;Для таблиц InnoDB надо добавлять —single-transaction, это гарантирует целостность данных бекапа.&lt;br /&gt;
Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.&lt;/p&gt;
&lt;p&gt;Общие факты&lt;/p&gt;
&lt;p&gt;Полезно под каждую базу на боевом сервере создавать своего пользователя&lt;br /&gt;
Кодировка базы может быть любой, если она UTF8&lt;br /&gt;
В большинстве случаев лучше использовать движок InnoDB&lt;br /&gt;
В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli&lt;br /&gt;
Новую копию MySQL всегда можно настроить и оптимизировать&lt;br /&gt;
Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов&lt;br /&gt;
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST&lt;/p&gt;
&lt;p&gt;Работа с данными&lt;/p&gt;
&lt;p&gt;Числа&lt;/p&gt;
&lt;p&gt;На 32-битных системах практически нет смысла ставить для типа INTEGER свойство UNSIGNED, так как такие большие числа в php не поддерживаются.&lt;br /&gt;
На 64-битных системах, php поддерживает большие числа, вплоть до MySQL BIGINT со знаком.&lt;br /&gt;
Связанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т. е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогично&lt;br /&gt;
Для хранения булевых значений, нужно использовать TINYINT(1)&lt;br /&gt;
А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой. Итого, у нас получится что DECIMAL(10,2) может сохранить 9999999,99&lt;/p&gt;
&lt;p&gt;Строки&lt;/p&gt;
&lt;p&gt;В старых версиях (до 5.0.3) VARCHAR была ограничена 255 символами, но сейчас можно указывать до 65535 символов&lt;br /&gt;
Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»&lt;br /&gt;
Самая правильная кодировка для вашей БД UTF8&lt;/p&gt;
&lt;p&gt;Даты&lt;/p&gt;
&lt;p&gt;Не забывайте, что&lt;br /&gt;
DATE, TIME, DATETIME — выводятся в виде строк, поэтому поиск и сравнение дат происходит через преобразование&lt;br /&gt;
TIMESTAMP — хранится в виде UNIX_TIMESTAMP, и можно указать автоматически обновлять колонку&lt;br /&gt;
Сравнивая типы данных DATETIME и TIMESTAMP, не забывайте делать преобразование типов, например:&lt;br /&gt;
SELECT * FROM table WHERE `datetime` = DATE(`timestamp`)&lt;/p&gt;
&lt;p&gt;Перечисления&lt;/p&gt;
&lt;p&gt;Для перечислений правильно использовать тип ENUM&lt;br /&gt;
Правильно пишется так: ENUM(’мама’, ’мыла’, ’раму’)&lt;br /&gt;
Можно ставить значение по-умолчанию, как и для любой строки&lt;br /&gt;
В базе поле с перечислением хранится как число, поэтому скорость работы — потрясающе высокая&lt;br /&gt;
Количество перечислений ~ 65 тысяч&lt;/p&gt;
&lt;p&gt;dev.mysql.com/doc/refman/4.1/en/storage-requirements.html&lt;br /&gt;
help.scibit.com/mascon/masconMySQL_Field_Types.html&lt;/p&gt;
&lt;p&gt;Отладка&lt;/p&gt;
&lt;p&gt;Если запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnf&lt;br /&gt;
А потом оптимизировать запросы через EXPLAIN&lt;br /&gt;
И наблюдать за запросами удобно через программу mytop&lt;/p&gt;
</description>
</item>


</channel>
</rss>