
Yevhen
17.01.2018
19:30:32

Anton
17.01.2018
20:32:31
Никто не хочет подсказать заблудшей душе по синхронизации структуры??

Alexey
17.01.2018
21:05:04

Anton
17.01.2018
21:05:58
из бинлога чуть тяжелее. + у аудита есть такая прекрасная плюшка, как известный источник БД. Но тоже вариант, спасибо))))

Google

Alexey
17.01.2018
21:06:23
подсоединяться как реплика к мастеру (таких готовых библиотек уже вагон на любом языке), парсить изменения, прикладывать ddl, выбрасывать всё остальное

Anton
17.01.2018
21:07:46
Извиняюсь, не дописал. Источни изменений БД. Конкретное лицо, которое изменило структуру или код и которое потом можно за это изменение слегка подкорректировать))))
Это не относится к самой задаче, просто как бонус.

Alexey
17.01.2018
21:08:39
а, ну если нужно именно это, то это аудит и называется

Anton
17.01.2018
21:08:47
Я от devart смотрел синхронизатор схем. Даже по расписанию умеет, но такой тормозной, что просто жуть.

Yevhen
17.01.2018
21:09:18
Slow/general logs?

Alexey
17.01.2018
21:09:24
так он наверное сравнивает каждый раз все таблицы?

Anton
17.01.2018
21:10:17
И делает это ужасно убого. До абсурда убого я бы даже сказал
так он наверное сравнивает каждый раз все таблицы?

Alexey
17.01.2018
21:10:45
так для этого https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqldbcompare.html есть

Anton
17.01.2018
21:11:17
Slow/general logs?
slow в таблице.. Тоже классный вариант может быть, если посттоянно грепать. Но не будет ли от этого большой оверхед?

Alexey
17.01.2018
21:11:37
я правда сам не пользовался. но тут суть в том, что если нужны не разовые (редкие) синхронизации, а непрерывные, то тогда репликация

Google

Anton
17.01.2018
21:12:34
Реплика и данныые тянетт, что неприемлемо. Я рассматтривал вариант с dev-сервером, на котором нет данных, но с него льются изменения везде, но это организационно даёт много проблем.

Alexey
17.01.2018
21:13:19
"реплика" не обязательно должна быть на целевом хосте
она может быть на мастере, а к целевому хосту коннектиться как обычный клиент и уже туда скармлиать распарсенные ddl
так gh-ost, например делает

Anton
17.01.2018
21:14:22
Сейчас работаем в подобном направлении, может и получится))))

Alexey
17.01.2018
21:14:38
собственно, вам нужен gh-ost за вычетом синхронизации данных. может даже там есть такой режим. или его просто добавить

Yevhen
17.01.2018
21:14:58

Anton
17.01.2018
21:15:22
с каких пор в мускуле можно повесить триггер на служебную таблицу?
Я вообще это как в итоге хочу видеть - каждое изменение прикрреплено к сотруднику. Соттрудник периодически открывает список своих изменений и доразливает то, что недорпазлил сразу. Но это конечно в идеале.
но это в идеальном мире с розовыми пони)))) А так хоть бы как-нибудь сделать?

Alexey
17.01.2018
21:18:24
нет, ну можно и так конечно. но тогда аудит плагин. или взять готовый, а потом парсить вывод, а лучше вообще свой написать
там несложно

Anton
17.01.2018
21:20:57
Написать свой аудит плагин?

Yevhen
17.01.2018
21:21:09

Anton
17.01.2018
21:21:21
были б триггеры - горя бы не знал)))))
но низя, ибо часть из этих служебных таблиц - не совсем таблицы
видимо, копну в эту сторону. Тем более, у нас был где-то черновик, который грепает аудит плагин и тащит всё в гитхаб. НА проде правда не пробовали, но на тесте взлетело душевно?
Хочу убить двух зайцев сразу - и решить задачу и смотреть, что кто понакодил за день. Дальше соответственно принимать меры карательного характера

Alexey
17.01.2018
21:25:46
а на системные таблицы триггеры нигде нельзя. но даже не в этом дело. во-первых пока триггер не отработает, клиентский запрос не завершится (с перформансом беда будет), а во-вторых проблемы с распуханием и ротацией

Anton
17.01.2018
21:31:04
Эх, вроде и задача вроде такая, с которой столкнулось много людей. А красивого решения нет и вряд ли будет. Это какой-то крест ДБА, ни IDE безглючной, ни отладчика хорошего, ни контроля версий. Одно сплошное "ничего"?

Google

Alexey
17.01.2018
21:39:32
много людей столкнулось, много и решений ? https://github.com/wushujames/mysql-cdc-projects/wiki

Anton
17.01.2018
21:44:21
В целом половину из них видел. Но велосипеды же всё, согласись?))))) Да и решают только задачу "вытянуть запрос". Но это же самое простое из того, что сделать надо. Вот например, изменение кода - это удаление и создание заново. Отлично, я, кретин такой, сохранял чтто-то не то и за 5 минут сделал 5-10 сохранениий процедуры. Вопрос - зачем их синкать все? А ведь незачем. Посему будем строить свой велосипед, пока это вижу запихиванием в гитхаб, а там посмотрим?

Alexey
17.01.2018
21:51:08
ну тут какая-то специфисская задача. хорошо, за 5 минут все изменения не надо синкать. а за час надо? а за сутки? потому что в зависимости от частоты и объёмов, может действительно ну его, и mysqldbcompare вполне подойдёт?

Anton
17.01.2018
21:52:48
А вот в том и фишка, что выбирать приориттеттность должен ДБА. А вдруг это мега-крутой альтер тейбл, под который надо останавливать всю систему? Значит, надо оттложить синк именно этой фичи

Alexey
17.01.2018
21:54:42
ну тогда тут явно не репликация и не аудит. тут что-то явно ручное, тёплое и ламповое просится

Anton
17.01.2018
21:57:26
аудит+гит+какая-нибудь красивая кнопочка "разлей" кастомная. Пока как-то так

Alexander
18.01.2018
05:20:10
Доброго утра, товарищи. Подскажите, это нормальное поведение или нет? Процесс mysqld (CentOS) использует порядка 3 гигов памяти, но размер виртуальной у него почти 10 гиг. Может быть недокручего чего?

Alexander
18.01.2018
06:58:14
День добрый. Может кто подскажет? Как организовать вывод таблиц(ы) в консоль без разделителя полей "|"?

Ivan
18.01.2018
07:08:28
--batch, -B
Print results using tab as the column separator, with each row on a new line. With this option, mysql does not use the history file.
Batch mode results in nontabular output format and escaping of special characters. Escaping may be disabled by using raw mode; see the description for the --raw
option.


Ivan
18.01.2018
07:37:04
Всем доброго времени суток!
Есть mysql база. На данный момент просто бэкапится. Планирую настроить master-slave репликацию для резервирования.
Подскажите, какими средствами можно обеспечить проксирование, чтобы в случае падения мастера все запросы перенаправлялись на слэйв. И есть ли возможность настроить систему так, чтобы при поднятии мастера, мастер и слэйв менялись ролями, пока мастер не "догонит" слэйв, а потом переключались в исходное состояние(эти манипуляции нужны потому что slave сервер менее производительный чем master)?
Я не уверен, что моё виденье системы верное, по этому, буду рад, если подскажите какие-нибудь бэст практис на этот счёт. Смысл затеи в том, чтобы обеспечить доступность базы при падении одной из нод репликации.


Alexey
18.01.2018
07:51:25
Всем доброго времени суток!
Есть mysql база. На данный момент просто бэкапится. Планирую настроить master-slave репликацию для резервирования.
Подскажите, какими средствами можно обеспечить проксирование, чтобы в случае падения мастера все запросы перенаправлялись на слэйв. И есть ли возможность настроить систему так, чтобы при поднятии мастера, мастер и слэйв менялись ролями, пока мастер не "догонит" слэйв, а потом переключались в исходное состояние(эти манипуляции нужны потому что slave сервер менее производительный чем master)?
Я не уверен, что моё виденье системы верное, по этому, буду рад, если подскажите какие-нибудь бэст практис на этот счёт. Смысл затеи в том, чтобы обеспечить доступность базы при падении одной из нод репликации.
общее видение правильное, да. но тема очень обширная. тут вот Петя даёт краткий обзор доступных решений: https://youtu.be/eDh9x5PuhxQ

Ivan
18.01.2018
07:52:14
Ага, спасибо, посмотрю.

Anton
18.01.2018
07:53:02
Тебе тогда не мастер-слей, а мастер-мастер нужен

Nikolay
18.01.2018
07:55:02
https://t.me/oracle_ru

Ivan
18.01.2018
07:56:16
Памяти всё равно жрёт больше чем должна по калькулятору, но хотя бы oom killer детей в жертву не приносит, пока что)

Alexey
18.01.2018
07:57:52
ok! хотя вот выбор параметров интересный
а что, вот была ощутимая разница между vm.swappiness=5 и 1?

Ivan
18.01.2018
07:58:50

Google

Anton
18.01.2018
07:59:48
А как ты догонять собираешься?
Если у тебя мастер будет в ауте
РУками тока если, но это же больно))))

Ivan
18.01.2018
08:00:24

Alexey
18.01.2018
08:01:28
кстати, хорошая статья про swap попалась недавно: https://chrisdown.name/2018/01/02/in-defence-of-swap.html

Ivan
18.01.2018
08:01:29

Anton
18.01.2018
08:01:47
ну, одно дело - балансир, другое - консистентность
У тебя ушёл мастер, все пишут на слейв
А как потом жданные вернуть?
Реплика мастер-мастер должна быть

Alexey
18.01.2018
08:02:39
ну необязательно. есть же semi-synchronous реплкикация
её в общем как раз для этого и сделали

Ivan
18.01.2018
08:03:41
Читал ещё про репликацию внешними средствами, чтобы в 2 базы сразу отправлять запросы. Есть мысль чтение делать из той, что находится на более мощной железки, а запись вести в обе одновременно.

Alexey
18.01.2018
08:03:58
от мастер-мастер для данного конкретного случая только и требуется, что синхронность. а в остальном это overkill

Anton
18.01.2018
08:05:17
" а запись вести в обе одновременно." - опасно это. Например, с инкрементами ошибся или ещё что. И рассинхрон полный

Ivan
18.01.2018
08:06:27
А распараллелить через какой-нибудь прокси не получится?

Anton
18.01.2018
08:06:53
А зачем?
Имеешь ту же ситуацию. НА одном выполнилось, на втором условно дедлок. И ищи их потом...

Ivan
18.01.2018
08:18:32

Google

Ivan
18.01.2018
08:19:38

Alexey
18.01.2018
08:22:42
А скорость сильно проседает?
в каждый комит добавляется время на то, чтобы: 1) передать соответствующую запись в бинлоге на реплику 2) сохранить запись в relay log на реплике и 3) передать подтверждение от реплики обратно на мастер
то есть + 1 network round trip + 1 fsync. сколько это в абсолютных величинах зависит от оборудования

Ivan
18.01.2018
08:26:23
Ну да, я прочитал, что мастер ждёт acknowledge от слэйва, но не ждёт подтверждения коммита. То есть вопрос по большей части в задержке сети.

Alexey
18.01.2018
08:27:45
и fsync на relay log на слейве. то есть, производительность диска на слейве тоже имеет значение
комиты транзакций из relay log потом происходят асинхронно, поэтому да, подтверждения коммита на слейве не ждём

Ivan
18.01.2018
08:30:36
а, окей
ну я вот отсюда читаю
http://highload.guide/blog/mysql_replication_2015.html

Alexey
18.01.2018
08:35:03
ну там несколько упрощённо всё
например, sync — это необязательно "local + remote commit"
а semi — это не только "local + remote ack"
но в целом хороший ликбез, одобряю

Brusе
18.01.2018
11:26:53
Всем привет, подкиньте идей для хранимых процедур, попрактиковаться в написании хочется, только прошу чтобы задачу она выполняла нужную, ну т.е. для этой задачи лучше всего подходит хранимая процедура, а не триггер, представление или что-нибудь. Спасибо.

lost
18.01.2018
11:34:06
А сам себе поставить задачу ты не в состоянии?)

Anton
18.01.2018
11:35:20
да не видя базы, кто тебе что поставит? Любая бизнес-логика с циклами/курсорами например
дай тому виртуальных монет, а если у него осталось много, у другого отбери. Всё это в транзакции и в курсоре по пользователям сайта