11:12 AM
0
Q: Лог ошибочных запросов и транзакций в MySQL, существует ли вообще? или как его получить

ArtemСуть в том, что у меня в коде формируется огромная транзакция из десятков таблиц. Естественно в какой-то из них происходит ошибка и транзакция завершается с ошибкой. При этом логи MySQL в принципе фиксируют только изменения, которые были произведены по факту, и никаких ошибок. Во всяком случае об...

 
все мануалы только про обычные логи Гм... а бывают необычные? Вообще-то есть только один Reference Manual, всё остальное - это сочинения по мотивам. Вот глава о логах: MySQL Server Logs. General Log + Error Log + знание того, что и в каком порядке выполняется из приложения - вполне достаточно для анализа ситуации.
 
Ну я не знаю.... у меня в логах только успешные запросы. Возможно в бинарных логах есть все подробности, но я не вкурсе чем их открывать и потом, может есть какой-то способ получить их более простым путем - например через консоль или что-то типо того
Вот пытаюсь использовать встроенную утилиту mysqlbinlog по мануалам, получаю пустой результат, хотя логи пишутся. Щас буду ковырять. Хоть бы написали что именно в тех логах
В итоге в любом исходе получаю пустой файл
cd C:\Program Files\MySQL\MySQL Server 8.0\bin start mysqlbinlog.exe "C:\ProgramData\MySQL\MySQL Server 8.0\Data\LAPTOP-G00F4811-bin.000090" > out.txt pause
Попробовал включить в консоле ECHO ON - совершаю операции - ничего не пишет
Я просто недоумеваю, неужели только мне интересно прочитать ответ MySQL на запрос и это нигде не реализовано? Я так понял ECHO работает только если его прописать в запросе. Логи показывают только изменения в базе данных (если транзакция не выполнена - то и логов нету)
 
у меня в коде формируется огромная транзакция из десятков таблиц Транзакция - в коде на шарпе, что ли? тогда поневоле вопрос - а какие претензии к MySQL? То, что ошибка с точки зрения шарпа, вовсе необязательно ошибка и с точки зрения СУБД. И да, транзакция состоит не из таблиц, а из выполняемых операторов (statement), таблицы в транзакции могут использоваться и/или модифицироваться.
у меня в коде формируется огромная транзакция из десятков таблиц. Естественно в какой-то из них происходит ошибка и транзакция завершается с ошибкой. При этом в логах ничего не пишется кроме факта коммита. Никаких ошибок. Вообще ничего не понять... в чём происходит ошибка - в таблице? Что за бред? Как транзакция, завершённая с ошибкой, может завершиться коммитом??? Вообще дважды бред.
 
Коммиты с прошлых транзакций, в программе их тьма
 
А каким боком тут коммиты других транзакций? какое они имеют отношение к проблеме, зачем вообще о них упоминать? И так-то ничего не ясно.. что происходит, где происходит, что собственно мешает контролировать состояние по мере выполнения транзакции (кстати, организованной где и какими средствами?) и записывать нужную для рассмотрения, анализа и отладки информации в нетранзакционную отладочную таблицу...
 
11:12 AM
Не хочешь помогать - не помогай. Я описал то как работают логи в MySQL в противовес текущей ситуации
Что мешает? Мешает не знание. Поэтому и спрашиваю как это делают нормальные люди, которые сьели на этом собаку
Кроме того, суть транзакции в том, что она выполняется залпом, как ее можно разделить на отдельные транзакции и контролировать их выполнение?
 
Ещё раз повторю вопрос - транзакция организована в программе на шарпе, средствами шарпа, или в исполняемом SQL-сервером наборе запросов, средствами SQL?
 
Кажется вы не с той стороны пытаетесь решать проблему. Если вы в своем приложении получаете статус, что запрос к базе был не удачным, то значит там же в приложении вы можете получить и последнюю ошибку от базы. И дальше ее либо выводить на экран или писать в лог.
 
Транзакция создана в обвертке - классе, который использует MySQLConnector. Наверное вы правы, но сложность в том, что код написан не мной, я работаю над имеющимся кодом. И там организовано все через TaskCompletionSource для работы с асинхронными запросами. У меня там callback который принимает лишь bool переменную о факте выполнения запроса. Я просто думаю что с моими знаниями я не осилю это переписывать и надеялся что найду инфу в логах (( Могу скинуть ссылку на код, но это уже наглость. Любой совет приветствуется и не бейте, стараюсь как могу
Почему там именно bool - понятия не имею, и не понимаю где источник такого требования, чтобы изменить тип, к примеру на какую-то структуру с подробными данными
Спасибо! Все там реализовано, и сообщения об ошибках тоже, просто там какой-то глюк в коде и описание statement соответствует толи предыдущему по списку, то ли последующему, а само сообщение об ошибке относится к текущему statement . Из-за этого я думал что это сообщение после какого-то другого запроса или вообще ко мне не относится, потому как в сообщении об ошибке указан столбец, которого вообще нет в указанном statement. Буду разбираться! У меня в коде просто есть и обычные прямые запросы и я думал что логируются только такие простые запросы.
Я просто от незнания не знал где копать. Вы меня убедили что можно только так и я начал анализировать этот бредовый лог, который показывал чушь.