Задать вопрос
  • Проблема миграции базы данных с mysql 8 на mariaDB 10?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Проблема миграции базы данных с mysql 8 на mariaDB 10?

    Проблемы ОБЯЗАНЫ БЫТЬ. MySQL и MariaDB расфоркнулись достаточно давно, изменения и дополнения в синтаксисе они не синхронизируют, так что неудивительно, что чем дальше, тем меньше они совместимы. И соответственно всё меньше шансов. что дамп одной СУБД беспроблемно натянется на другую.

    Такой перенос надо делать руками.

    1. Выгружаем дамп структуры (без данных) из MySQL.
    2. Экспортируем данные из MySQL-таблиц в CSV.
    3. Правим дамп структуры руками, приводим к требованиям синтаксиса MariaDB.
    4. Загружаем структуру в MariaDB, убеждаемся, что работает. Дропаем.
    5. Делим дамп на 2 части - в одной только таблицы (и другие критично необходимые для создания таблиц объекты), в другой всё остальное (индексы, представления, триггеры-функции и прочая тряхомудия).
    6. Грузим первую часть дампа структуры.
    7. Импортируем данные из CSV в таблицы MariaDB.
    8. Грузим вторую часть дампа структуры.
    Ответ написан
  • Как оконнной функцией вытащить последнее значение для предыдущего года?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Будет что-то вроде
    SELECT *,
           ( SELECT value
             FROM tablename t2
             WHERE t1.year - 1 = t2.year
             ORDER BY created_at DESC LIMIT 1 
             ) AS prev_value
    FROM tablename t1;
    Ответ написан
    2 комментария
  • Как работают права на файловом сервере?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как в серверной винде с ролью "Файловый сервер" работает разграничение прав?

    Так же, как и везде. Есть права - есть доступ, нет - значит нет.

    Разве может быть доступ в конечную папку, если на среднюю отсутствует доступ на просмотр?

    Для доступа в подпапку не требуется доступ к её родителю. Папку тебе отдаёт сервер - а у него проблем с доступом к файловой системе нет. "Папку я прочитал, но я её тебе не отдам, потому что у тебя прав нету.."

    Но если я захожу на \\share1 и пытаюсь зайти в "Папка1" то выдается ошибка доступа.

    Попробуй из \\share1\Папка1\Папка2 подняться вверх по дереву каталогов - точно так же будет ошибка доступа.
    Ответ написан
    3 комментария
  • В чем нарушение синтаксиса в данном запросе? Как его исправить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    дана вот такая задача
    "Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу "11218, Friel Place, New York", от имени "George Clooney""

    Это должно быть вот так:
    INSERT INTO Reviews (user_id, reservation_id, rating)
    SELECT Users.id, Rooms.id, 5
    FROM Users
    CROSS JOIN Rooms
    WHERE users.name = 'George Clooney'
      AND Rooms.address = '11218, Friel Place, New York';

    А за каким рожном тут таблица Reservations, я вообще не понял. Задание про необходимость резервирования этого жилья за этим юзером не говорит ничего - то есть такого резервирования может и не быть.
    Ответ написан
    2 комментария
  • Как проранжировать числа в столбце на группы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну если совсем влоб, то
    WITH cte AS (
      SELECT id, 
             num, 
             LAG(num) OVER (ORDER BY id) lag_num
      FROM test
    )
    SELECT id, 
           num,
           CASE WHEN num <> 0
                THEN SUM(CASE WHEN num <> 0 AND lag_num = 0 THEN 1 ELSE 0 END) OVER (ORDER BY id) 
                ELSE 0
                END [group]
    FROM cte

    Сработает неправильно, если самая первая запись ненулевая... ну это как-нить сам поправь. Мне лень.
    Ответ написан
  • Получение статьи и комментариев к ней: одним запросом или двумя?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для меня показанный результат как-то неочевидно пригоден к использованию. Куда как симпатичнее смотрится
    SELECT 'original post' AS type, content
    FROM   posts
    WHERE  id = 1
    
    UNION ALL
    
    SELECT 'comment', content
    FROM   comments
    WHERE  post = 1
    
    ORDER BY type = 'comment'

    И один запрос, и никакого дублирования.
    Ответ написан
    Комментировать
  • MySQL Command Line закрывается после ввода пароля?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запустите ярлык на CLI из окна CMD и смотрите сообщения. Больше всего похоже на сбой аутентификации.
    Ответ написан
    2 комментария
  • Как настроить доступ между устройствами сети, dhcp сервер которой находится на pfsense и сети, dhcp сервер которой находится на коммутаторе tp-link?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Навскидку как-то так:

    1. На коммутаторе для VLAN интерфейса к pfSense прописываете статический (и не входящий в диапазон выделения на pfSense) адрес из 192.168.1.0.
    2. На коммутаторе указываете адрес pfSense дефолтным шлюзом. Проверяете наличие связи коммутатора и pfSense в обе стороны, а также коммутатора к внешним адресам в Инете.
    3. Для VLAN клиентских портов прописываете статический адрес из 192.168.2.0 и включаете на нём DHCP-сервер. Проверяете факт раздачи адресов и коннект коммутатора и клиента в обе стороны.
    4. Включаете на коммутаторе маршрутизацию между подсетями.
    5. Прописываете раздачу DHCP-сервером коммутатора своего адреса как адреса шлюза по умолчанию.
    6. На pfSense в настройках его DHCP настраиваете раздачу адреса коммутатора из 192.168.1.0 как шлюза в подсеть 192.168.2.0/24. Проверяете. что всё работает.


    Ну и это вроде бы всё...

    Да, часть этих пунктов может, скорее всего, выполниться автоматически по факту настройки этого или предыдущих пунктов. Пункт 5 - почти наверняка.
    Ответ написан
  • Как настроить доступ между vlan?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как обычно - берём двухинтерфейсный маршрутизатор, один к порту в одном VLAN, другой к другому, адреса из соотв. подсетей, маршрутизация, и его на узлах как шлюз в другую подсеть.
    Если коммутатор уровня L2+ (а раз на нём есть DHCP-сервер, то это так), то он сам может работать маршрутизатором - прописываешь соотв. адреса внутреннего интерфейса в соотв. VLAN (один уже не надо, на нём DHCP-сервер), и указываешь их шлюзом.
    Да, подсети в разных VLAN не должны пересекаться, ессно.
    Ответ написан
    Комментировать
  • Как разобраться в VLAN что тут происходит?

    @Akina
    Сетевой и системный админ, SQL-программист.
    не до конца наверное понимаю работу vlan


    VLAN в первом приближении - это не просто, а очень просто.

    Первый шаг - это разделение по отдельным VLAN. Мысленно представляешь, что у тебя не один коммутатор, а несколько. Вот прям вместо коммутатора стоИт стопка один на другом. В первом - только VLANID=1, во втором VLANID=2, и так далее. Каждый коммутатор обслуживает строго один VLAN, а все остальные порты, на которых текущий VLAN отсутствует, тупо залиты цементом. Если коммутаторов несколько - то каждый в схеме размножается таким образом, а соединения между портами коммутаторов ещё и раскрашиваются, например, тегованный кабель синий, а нетегованный красный. Соответственно если у тебя есть транковая связь (гибридный или транковый порт) с каждой из сторон) - то в преобразованной схеме один кабель между такими коммутаторами размножается на несколько, каждый в схеме для своего VLAN. А если попадается случай, когда с одной стороны провода VLANID есть, а с другой стороны его нет - получается кабель, с одной стороны вставленный в порт, а с другой нет. И соответственно в схеме для именно этого VLAN связи между коммутаторами нет. Аналогично для случаев соединения "tag на untag" с одной стороны красный кабель, с другой синий, у обоих вторые концы "в воздухе", а связи нет.

    Второй, дополнительный, шаг - это соединение меж собой нетегованных портов разных VLAN в преобразованной схеме, если такие соединения исходно существуют, невзирая на номера VLAN. Скажем, если на порте есть нетегованный VLANID=2 (возможно, с другими VLANID, но тегованными), и порт соединён кабелем с другим портом того же или другого коммутатора, на котором есть нетегованный VLANID=3, то в преобразованной схеме ты соединяешь соотв. порты коммутаторов разных слоёв, соответствующих этим VLAN.

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

    После такого разделения ты можешь смело анализировать поведение одного VLAN, не обращая внимания на существование остальных.
    Ответ написан
    Комментировать
  • Заполнение столбца с данными по предыдущему столбцу excel/notepad/emeditor?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Только и исключительно VBA-макросом.
    Например, так:
    Public Sub process_data(index_range As Range, values_range As Range)
    Dim values()
    Dim i As Integer
    Dim coll As New Collection
    Dim onecell As Range
    values = values_range.Value
    For i = LBound(values, 1) To UBound(values, 1)
        coll.Add Item:=values(i, 1), Key:=Left(values(i, 1), 1)
    Next
    For Each onecell In index_range
        onecell.Offset(0, 1).Value = coll(onecell.Value)
    Next
    End Sub
    
    Sub test()
    Call process_data(ThisWorkbook.Sheets(1).Range("A1:A26"), ThisWorkbook.Sheets(1).Range("B1:B3"))
    End Sub
    Ответ написан
    Комментировать
  • Как сделать проверку на три условия?

    @Akina
    Сетевой и системный админ, SQL-программист.
    =ВЫБОР(2 * ЕПУСТО(A1) +  (A1 <> 0) + 1;"false";"publish";"")
    Ответ написан
    Комментировать
  • Нужна формула: узнать для приобретения скольких товаров хватит имеющейся суммы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вот не вижу проблем.
    1. Есть количество товаров, приобретённых юзером. То есть, грубо говоря, известно, что пропустить и откуда считать.
    2. Если надо набрать указанную сумму, то по имеющимся товарам нужна сумма с накоплением. А чтобы не учитывать уже купленное - домножать на признак "ещё не куплено", являющийся результатом сравнения текущего номера товара и количества приобретённых товаров.
    3. Отдельно вспомним, что стоимость - штука сугубо положительная. А после домножения на признак - неотрицательная. И, значит, сумма с накоплением строго неубывающая на начальных нулях, а дальше так и вообще строго возрастающая. Иными словами - сортированная.
    4. Осталось вовремя остановиться. Но именно так работает ВПР()/ГПР() на сортированном списке при поиске ближайшего/неточного значения.
    Ответ написан
    5 комментариев
  • Как настроить mikrotik с коммутатором Cisco?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как мне объяснить микротику, что на одном из портов стоит коммутатор?

    Ему вообще-то похрен.
    А циска пусть работает как тупой свитч. То есть абсолютно всё, кроме коммутирования - нахрен.

    я докупил Cisco Catalyst WS-C2960-24TC-L

    Можно было обойтись любым неуправляемым коммутатором на нужное число портов.
    Ответ написан
    Комментировать
  • Есть ли программа, которая при отправке запроса проверяет через какие маршрутизаторы и роутеры проходит запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    программа которая видит через какие маршрутизаторы и роутеры и т.д проходит отправляемый запрос

    В общем случае получение полного маршрута - вообще без шансов.

    Дело в том, что любой маршрутизатор в принципе-то может делать с маршрутизируемым пакетом что угодно. В том числе он запросто может и спрятаться - он просто увеличит TTL на единичку (точнее, не станет его уменьшать) и отправит дальше. Такой маршрутизатор мы в трассе просто не увидим, равно как и не увидим в этой трассе никаких иных ненормальностей.

    на работе в серверной куча лапши из проводов и свичей

    Ну значит надо просто медленно и планомерно эту "лапшу" разбирать, описывать и маркировать. Начать с пассивного оборудования, затем перейти к управляемым коммутаторам, затем к маршрутизаторам... сбор информации по соединениям и ARP, конфигурациям и пр... чтобы в конце прийти к полной схеме.

    Я, когда пришёл на свою нынешнюю работу, угрохал на такое разбирательство почти два месяца.
    Ответ написан
    Комментировать
  • Объясните CASE WHEN THEN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ...
    SET view = CASE ad_id WHEN 34 THEN 0
                          WHEN 35 THEN 1 
                          WHEN 36 THEN 2
                          END,
        amount = CASE WHEN ad_id = 36 
                      THEN 466
                      ELSE amount
                      END
    WHERE ad_id  IN (34, 35, 36);
    Ответ написан
    3 комментария
  • Как динамически делать выборку по дням, неделям или месяцам?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как вы видите, тут идёт выборка за 2 дня: 2024-04-09 и 2024-04-10. Но проблема в том, что количество дней указывает пользователь и их может быть сколько угодно. Подскажите, как правильно сделать, что если пользователь указал, например, 10 дней, то выборку сделать за 10 дней (начиная от сегодня)?

    Я вижу, что количество выходных полей зависит от внешних условий. То есть структура выходного набора динамическая, а всё вместе это по сути сводная таблица. То есть штука совсем даже не реляционная.
    Да, некоторые СУБД имеют встроенные средства для формирования PIVOT TABLE. Yо вот у MariaDB с этим не очень.

    Рекомендую - на стороне СУБД получать нормализованный набор записей (country_id, ts, MAX(hangup_rate), MAX(all_answered)), а сводную строить уже на клиенте.
    Ответ написан
    Комментировать
  • Есть ли в excel формула вставки строк?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Функция, встроенная или определённая пользователем, при использовании в формуле ячейки НЕ МОЖЕТ ИЗМЕНЯТЬ ЗНАЧЕНИЯ ЯЧЕЕК. В принципе не может. А любая такая попытка в определённой пользователем функции немедленно приводит к ошибке и аварийному завершению работы функции.
    Ответ написан
    Комментировать
  • Как показать 'соседние' записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Схематично:

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn
        FROM tablename
        WHERE type = @type
        )
    SELECT /* DISTINCT */ t2.*
    FROM cte t1
    JOIN cte t2 ON t2.rn IN (t1.rn - 1, t1.rn, t1.rn + 1)
    WHERE t1.status = @status
    ORDER BY t2.rn
    Ответ написан
    Комментировать