Архив рубрики: Базы данных

[mysql] Fast shutdown

Если нужно быстро перезагрузить базу, можно воспользоваться хаком: сбросить грязный кешь (на самом деле мы просто выставляем лимит грязного кеша в 0) и потом просто restart. И так:

mysql>set global innodb_max_dirty_pages_pct=0;

Теперь дожидаемся, пока весь кеш сбросится (раз в 10 секунд проверяем размер грязного кеша):

Читать далее

[mysql] Multi source replication

И так, представим себе ситуацию: есть GTID репликация и нужно подключить ещё один канал с другого мастера. Вроде бы и тривиальная задача: change master to … channel master2, но при запуске репликации на новом канале master2 она свалится с ошибкой:

The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.', Error_code: 1236

Как же быть? Опишу по шагам, как это исправить.

Читать далее

[mysql] skip replication with GTID

Смотрим в

mysql>show slave status\G;
...
Executed_Gtid_Set: 1136d9c4-0ecf-11e5-be7e-28d2445d8ed0:1-373587249,
53d58b0f-eb6f-11e6-9215-392e3ca483a1:1-1081544,
bcdd5c11-9d7b-11e2-8070-49715e847bda:1-40596661
...

В данном случае ID-шник непосредственного мастера bcdd5c11-9d7b-11e2-8070-49715e847bda. Значит увеличим его счётчик транзакций на 1 (40596661, стало 40596662, обратите внимание, что gtid_next задаётся в формате ID:position, а в executed_gtid_set оно выглядит как ID:1-position, то есть отличаются на ‘-1’):

Читать далее

[postgresql] pglogical — логическая репликация

pglogical — это логическая репликация, реализованная в виде дополнения к PostgreSQL (доступна начиная с 9.4). Это альтернатива физической репликации, в которой, например, есть ограничения (в pglogical такого ограничения нет) репликации только в пределах одной минорной ветки.

Официальный сайт https://2ndquadrant.com/en/resources/pglogical/

[mysql] Got fatal error 1236 from master when reading data from binary log

Got fatal error 1236 from master when reading data from binary log: 'Cannot replicate anonymous transaction when AUTO_POSITION = 1, at file /database/mysql/mysql-bin.030053, position 154.; the first event '' at 4, the last event read from 'mysql-bin.030053' at 219, the last byte read from '/database/mysql/mysql-bin.030053' at 219.'

Такую ошибку получили при попытке переключиться по инструкции online migration to GTID replication. Решение не очевидное и нашлось методом гугления, проб.

Читать далее

[mysql] Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used

ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used

Такая ошибка появляется, когда вы пытаетесь дать права на объект, на который права не могут распространяться. К примеру, нельзя дать права execute, create temporary table на конкретную таблицу. То есть, сначала сверяемся с мануалом , и, если всё правильно, пробуем по одному удалять «гранты» в надежде найти проблемный.

[mysql] Некоторые особенности работы и установки MEM

MEM mysql enterprice monitor. Это такая веб-админка, где можно посмотреть за работой базы mysql и понять, почему она тормозит или посмотреть другую статистику. По большому счёту это приложение на java, которое выгребает статистику из баз perfomance scheme и information scheme и предоставляют её в удобном виде. Так же, время от времени парсится и вывод show engine innodb status на предмет полезной информации.

Читать далее

[mysql] 5.7 и optimizer_switch

Для тех, кто решил обновится с 5.6 на 5.7 ждут «сюрпризы» в виде переработанного оптимизатора запросов. Что такое оптимизатор? Это «помощник», который перед каждым выполнением запросов ищет путь «наилучшего» выполнения запроса. Все есть больше 10-ка различных параметров оптимизатора, которые можно включать/выключать, тем самым меняя логику исполнения запросов. Подробнее о них можно прочесть здесь.

Читать далее

[mysql] Правильно выставляем sql_mode в my.cnf

Сразу замечу, что официальной документации я не нашёл ни единого упоминания  о таком поведении. А оно заключается в следующем: что бы правильно выставить значение sql_mode в my.cnf, нужно поискать, ни где ли в других стандартных конфигах не упоминается ли? В моём случае главный конфиг был в /etc/my.cnf, и базу я стартовал именно с указанием этого конфига. Но! в папке с установленным дистрибутивом mysql был ещё один my.cnf (лежал он в /opt/mysql/mysql/my.cnf, то есть $MYSQL_HOME/my.cnf) в котором и была эта строка, которая перетирала любые правки, внесённые в /etc/my.cnf касательно sql_mode. Возможно это так же влияет и на другие переменные.

После комментирования строки, и выставление нужного значения в /etc/my.cnf (мне нужно было полностью отключить его), всё заработало как надо. Правильно нужно указать так:

sql_mode=

[postgresql] Включаем поддержку mysql через mysql_fdw

Это расширение, которое позволяет использовать таблицы из mysql в postgresql. Подробнее о самом плагине, а так же установке/использованию можно прочесть на официальной страничке проекта

В моём же случае, был апгрейд postgresql с 9.3 до 9.4 с некими «сюрпризами». А сюрпризы заключались в том, что на 9.3 была старая версия mysql_fdw в которой были опции address/query, которых нет в новой. И понятно, что при выполнении pg_upgrade получаем ругань на это. Как быть? А план такой (подсказали на одном из форумов):

1) подсунуть новый модуль mysql_fdw в 9.3.
2) заменить/удалить deprecated опции
3) собственно upgrade.

Читать далее