Запись с метками ‘mysql

3e15d-11372412_1663853267167421_128479559_n
Спойлер: никак!

Кластеризация в связке с контейнерами в последние годы обрела ту самую невыносимую легкость бытия, когда мы можем взять несколько серверов, поднять на них кластер докера, скомандовать поднять пару десятков контейнеров и идти дальше пить смузи – потому что docker swarm (или kubernetes) сам раскидывает контейнеры по нодам, сам следит за их работоспособностью, сам всё балансирует и вообще делать ничего не надо – только железо по мере необходимости добавляй да новую жижку для вейпа докупать не забывай.

Но жизнь, как обычно, оказалась злобной сукой и шоколадная жижка для вейпа оказалась с привкусом говнеца. Читать полностью »

fd81b742d27197e13eca20e68507cd2a914329c8_hq

Даже не знаю, можно ли это назвать багом, или, скорее, ошибкой проектирования, но эта “багофича” может стоить вам нескольких часов жизни, наполненных недоуменными возгласами и крепкими матюгами.

Итак, в чем суть:

В миграциях в Laravel все изменения в схеме таблицы оборачиваются в замыкание, которое передается в метод фасада Schema (table или create, неважно). Выглядит это примерно так:

Schema::table('mytable', function(Blueprint $table)
{
    $table->integer('test');
    $table->boolean('test2')->default(false);
});

Суть в том, что на момент вызова методов Schema Builder (integer(), boolean(), index()…), никаких действий над схемой ещё не происходит – соответствующие задачи просто записываются в очередь, а потом, уже после завершения выполнения замыкания, последовательно выполняются.
Но на самом планируемые изменения схемы пишутся не в одну, а в две очереди: отдельная очередь на действия с колонками (добавление, редактирование, удаление) и отдельно на всё остальное (индексы, внешние ключи, и т.д). Вот это то и есть багофича, потому что одна последовательность действий разделяется на две и выполняется сначала одна, а потом вторая (сначала выполняются все действия над колонками, а потом действия над индексами и прочее). Читать полностью »

В то время, как прогрессивное человечество борется с африканской чумой свиней, гомофобией и комплексами, нормальные DBA-шники, как всегда, борются с дэдлоками. И есть у дэдлоков одна интересная особенность, которая является их причиной в 90% случаев, но нигде в этих ваших интернетиках этого не написано. Сейчас мы восполним это упущение. Когда вы в следующий раз поймаете дэдлок – сначала вспомните, что здесь написано – это сэкономит вам кучу времени.

Читать полностью »

vlcsnap-2018-06-08-00h11m21s538

Итак, на дворе 2018 год, вышла новая версия мускула, вы наслушались песен о том, как там все круто и решили это дело затестить. Скорее всего вы, как и я, быстренько проскочили установку и после попытки подключитсья к базе начали получать вышеозначеную ошибку.

Почему она возникает, можно почитать в инете (если коротко – нечего было щелкать клювом во время установки, вместо дефолтного типа авторизации надо было выставлять старый, потому что новый никакие библиотеки ещё не поддерживают, только через консоль можно войти).

Как же порешать этот вопрос? Лехко! Читать полностью »

The.Matrix.1999.Bdrip.mkv_snapshot_00.07.46_[2018.03.26_23.34.09]

Итак. Предположим по каким-то причинам вам нужно выбрать два набора данных объединив их во всех возможных комбинациях, т.е. каждый с каждым. Например, у нас есть выборка болтиков и выборка гаечек и мы хотим получить все потенциально возможные пары. Опустим, на хер вам это понадобилось – может нужно некоему пулу пользователей добавить одним махом десяток прав и вы хотите уложить все это в один insert select, может вы считаете потенциальную скорость распространения сифилиса в каком-то замкнутом сообществе и нужны все возможные комбинации пар, а может ни для чего, просто душа просит и тело жаждет.

Короче, бля. Читать полностью »