Задать вопрос
  • Какой язык программирования учить системному администратору?

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

    Shell scripting - обязательно.
    А также любые другие языки, входящие в штатную поставку обслуживаемых ОС и ПО, включая встроенное ПО оборудования - по возможности и желанию. Но минимальное понимание - обязательно.

    К примеру написать бота в телеграмм, организовать вывод показателей с серверов на сайт, и запилить минимальное приложение для мониторинга под windows/android, не заморачиваясь над фронт-ендом.

    Вообще-то системный (тем более сетевой) администратор такой фигнёй не занимается.
    Ответ написан
    Комментировать
  • На картинке изображен пример "офиса",из 1 офиса нет интернета,не понимаю почему?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Есть ли физический линк?

    Смотреть глаза на портах в офисах 1 и 3, подключённых к свичу в офисе 2.

    2. Есть ли L2-линк?

    Смотреть статистику указанных выше портов на предмет входящих-исходящих-ошибочных пакетов.
    Смотреть MAC-таблицу коммутаторов по этим портам.

    3. Настроен ли свич на использование VLAN? Как вообще он настроен?

    Спросить того, кто настраивал коммутатор в офисе 2. В существование у вас документации о настройке оборудования я не верю.

    =============

    Это для начала...
    Ответ написан
    2 комментария
  • Как получить нужные данные?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Может, требуется тривиальное
    SELECT *
    FROM tablename
    ORDER BY client_id IS NULL, hub_id IS NULL
    LIMIT 1

    ?
    Ответ написан
    1 комментарий
  • Как указать все необходимые адреса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Мне надо вбить в программу все подсети, кроме 172.17.170.0/24

    Вроде бы так:

    0.0.0.0/1
    128.0.0.0/3
    160.0.0.0/5
    168.0.0.0/6
    172.0.0.0/12
    172.16.0.0/16
    172.17.0.0/17
    172.17.128.0/19
    172.17.160.0/21
    172.17.168.0/23
    172.17.170.0/24
    172.17.171.0/24
    172.17.172.0/22
    172.17.176.0/20
    172.17.192.0/18
    172.18.0.0/15
    172.20.0.0/14
    172.24.0.0/13
    172.32.0.0/11
    172.64.0.0/10
    172.128.0.0/9
    173.0.0.0/7
    174.0.0.0/6
    176.0.0.0/4
    192.0.0.0/2

    Не забудь проверить.
    Ответ написан
  • Поле json в MySQL 5.7 содержит массив типа '[1,3,5]' - как оптимально сделать выборку записей, в которых есть значения x || y || z?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT DISTINCT data.*
    FROM data
    JOIN ( 
        SELECT 2 value 
        UNION ALL 
        SELECT 5 
        UNION ALL 
        SELECT 7
        ) criteria ON JSON_CONTAINS(data.jsonarray, CAST(criteria.value AS JSON))
    Ответ написан
    2 комментария
  • Как раздавать уникальные записи таблицы во многопоточном парсере?

    @Akina
    Сетевой и системный админ, SQL-программист.
    parsed - 0 - страница еще не спаршена, 1 - страница спаршена.

    Не так.

    NULL - не парсилась.
    0 - парсинг выполнен.
    >0 - взято на парсинг соединением (функция CONNECTION_ID()) номер N.

    Соответственно попробовать зарезервировать запись на парсинг:
    UPDATE urls 
    SET parsed = CONNECTION_ID()
    WHERE parsed IS NULL
    ORDER BY datetime_added LIMIT 1;

    Получить зарезервированную запись и начать её парсинг:
    SELECT *
    FROM urls
    WHERE parsed = CONNECTION_ID();

    Если вернётся более одной записи - в системе большие проблемы, надо звать администратора задачи. Если пустой набор - значит, запись перехватили, пробуем резервировать заново (тоже, кстати, повод позвать админа задачи - так не должно быть). Иначе - парсим полученную запись.

    По окончании парсинга соответственно
    UPDATE urls 
    SET parsed = 0
    WHERE parsed = CONNECTION_ID();

    Ну и периодически выполняется event procedure, который находит записи, формально помеченные как обрабатываемые, но, судя по времени, обработчик подвис. Такие записи возвращаются на обработку
    CREATE EVENT clear_parsing_flag
    ON SCHEDULE EVERY 1 MINUTE
    DO
    UPDATE urls
    SET parsed = NULL
    WHERE parsed > 0
        -- считаем, что 5 минут более чем достаточно
      AND datetime_start_parsed < CURRENT_TIMESTAMP - INTERVAL 5 MINUTE;


    Само собой никаких пулов соединений, никаких открыть-закрыть - все операции выполняются в рамках одного persistent connection. Автовосстановление соединения при обрыве также запрещено.

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

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Свитч и коммутатор - одно и то же.
    2. Стекированные свичи следует воспринимать как один свич, просто собранный в двух корпусах.
    3. Коммутатор уровня распределения - это просто коммутатор. Попадающий в озвученную категорию по своим характеристикам.


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

    @Akina
    Сетевой и системный админ, SQL-программист.
    Маска подсети занимает 16 бит, но в третьем октете есть бит, который не попадает под неё. Что мне делать с этим битом?

    Задание - конечно, бредовое. 201.111.32.0/16 - это адрес хоста, а не сети, потому что адрес имеет единичные биты в области нулевых битов маски:
    Host 11001001 01101111 00100000 00000000
    Mask 11111111 11111111 00000000 00000000

    Но к тому, что преподаватели сами безграмотны, мы уже привычные... посему попробуем интерпретировать задание так: выделение производить в подсети, в которой находится узел 201.111.32.0/16 (это подсеть 201.111.0.0/16), выделяемые подсети должны располагаться не ранее указанного адреса узла, и допускать количество хостов не менее заданного.

    Начать надо с определения минимальной маски конечной подсети.
    Хостов Маска
     170     /24
     590     /22
    1500     /21
     800     /22
     254     /24

    Далее, чтобы заполнять диапазон оптимальным образом, надо выделять подсети так, чтобы они занимали наиболее широкую возможную подсеть полностью либо по максимуму. Т.е. берём заданную границу host 201.111.32.0 mask /16 и начинаем "откусывать" требуемые подсети. С целью минимизации расхода адресного пространства мы на каждом шагу распределяем самую "широкую" из подсетей, которая укладывается в текущее место.

    Сначала определяем максимальную маску для данного узла. Это будет маска /19:
    Host 11001001 01101111 00100000 00000000
    Mask 11111111 11111111 11100000 00000000

    Значит, с данного адреса мы можем сразу распределить подсеть 3. Она будет иметь адрес 201.111.32.0/21 и занимать диапазон адресов 201.111.32.0 - 201.111.39.255, последний адрес является бродкастом.

    Теперь мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.40.0. Максимальная маска для этого узла - /21. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 2. Она будет иметь адрес 201.111.40.0/22, займёт диапазон адресов 201.111.40.0-201.111.43.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.44.0. Максимальная маска для этого узла - /22. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 4. Она будет иметь адрес 201.111.44.0/22, займёт диапазон адресов 201.111.44.0-201.111.47.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.48.0. Максимальная маска для этого узла - /20. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это подсеть 1. Она будет иметь адрес 201.111.48.0/24, займёт диапазон адресов 201.111.48.0-201.111.48.255.

    Далее мы распределяем оставшиеся подсети с первого свободного после уже выделенной подсети адреса 201.111.49.0. Максимальная маска для этого узла - /24. Соответственно распределяем здесь самую крупную из оставшихся подсетей. Это единственная оставшаяся подсеть 5. Она будет иметь адрес 201.111.49.0/24, займёт диапазон адресов 201.111.49.0-201.111.49.255.
    Ответ написан
    2 комментария
  • Как отключить задания google в планировщике задач?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Они идут я так понял для каждого пк со своим кодом (onedrive Standate Task-S-1-5-21-3362628...) и у каждого ПК свой код и они не дублируются.

    schtasks /query /fo list | find "OneDrive"
    Само собой от имени администратора.
    А дальше очевидно - FOR /F и SCHTASKS /Delete.
    Ответ написан
    2 комментария
  • Как добавить партицию, если уже есть maxvalue?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Да, нужно делать реорганизацию - операция потенциально требует переноса данных между партициями.

    Прмер:
    CREATE TABLE table_name (create_date DATE);
    
    ALTER TABLE table_name 
    PARTITION BY RANGE(create_date + 0) (
        PARTITION p_old VALUES LESS THAN(20111201),
        PARTITION p_1 VALUES LESS THAN(20120201),
        PARTITION p_2 VALUES LESS THAN(MAXVALUE)
    );

    Добавляем партицию (точнее, разделяем партицию на две):
    ALTER TABLE table_name
        REORGANIZE PARTITION p_2 INTO (
            PARTITION p_2 VALUES LESS THAN (20130101),
            PARTITION p_max VALUES LESS THAN (MAXVALUE)
    );

    DEMO
    Ответ написан
    Комментировать
  • IP для VLAN - почему два?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вот какая связь между VLAN и адресом внутреннего интерфейса коммутатора? Никакой, от слова вообще. Данный адрес - именно адрес внутреннего интерфейса коммутатора. Запись просто утверждает, что внутренний интерфейс коммутатора доступен по указанному адресу в указанном VLAN. Т.е. если, находясь в данном VLAN, узел обратится по данному адресу - то он будет обращаться к коммутатору. Ну захотелось человеку, который настраивал сетку, присвоить коммутаторам адреса из разных подсетей, но в одном VLAN - имеет право. Неясно, правда, какой с того профит, но проблем с этого уж точно никаких. У меня в сети, например, для коммутаторов выделены аж три разные подсети в трёх разных management VLAN, различающихся по назначению, и некоторые из коммутаторов имеют адреса в двух, а магистральные даже во всех трёх, VLAN.

    Я понимаю, если бы что-то бы интерферировало - скажем, один и тот же адрес, или один адрес был бродкастом подсети второго адреса. Тогда бы был предмет для беспокойства.

    Если с такой настройки корячит - ну перенастрой.
    Ответ написан
    2 комментария
  • Как получить среднее значение с начала года на каждый день SQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *, AVG(RT) OVER (PARTITION BY Curr, YEAR(Dates) ORDER BY Dates) AS example
    FROM src_table
    Ответ написан
    Комментировать
  • Как работает link-local подсеть 169.254.0.0/16?

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT SUM(some), SUM(some * noone)
    FROM table

    ?
    Ответ написан
    1 комментарий
  • Как оптимизировать запрос с подзапросами с COUNT?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT ebids.*
         , SUM(comment_system.itemtype='qqq') AS has_qqq_comment 
         , SUM(comment_system.itemtype='www') AS has_www_comment 
         , SUM(comment_system.itemtype='eee') AS has_eee_comment 
    FROM ebids
    JOIN comment_system ON comment_system.item_id = ebids.id
    WHERE ebids.status != 'auto'
    GROUP BY ebids.id
    ORDER BY ebids.id DESC
    LIMIT 0, 100
    Ответ написан
    Комментировать
  • Как держать в таблице только последние 10 записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Создать сразу 10 записей с достаточно древней датой.
    2. Вместо вставки записи обновлять самую старую:
    UPDATE table
    SET {columns} = {values}
    ORDER BY created_at ASC LIMIT 1;

    Само собой created_at - ON UPDATE CURRENT_TIMESTAMP. Ну или обновлять вручную, если больше заняться нечем.

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

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

    Используйте браузерный плагин избирательного использования VPN. Который только для сайтов из списка использует подключение через VPN, а остальные пропускает напрямую.
    Ответ написан
  • Что быстрее поиск по файлу JSON в PHP или в базе посредством MySQL?

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

    Определитесь. Или в приоритете скорость, или нагрузка. Но не то и другое одновременно.

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

    Если приоритетна нагрузка - то поиск следует производить средствами СУБД.
    Ответ написан
    Комментировать
  • Как оптимизировать INSERT запросы в PDO(phpmyadmin)?

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

    На стороне PHP имеется массив строк:

    aaa
    bbb
    ccc

    Необходимо записать его в таблицу. Причём уложиться в один запрос. Длина списка, понятно, не фиксирована.

    Первое - объединяем/сериализуем этот массив в одно значение. Допустим, выбрали JSON массив. То есть ["aaa", "bbb", "ccc"]
    И именно этот JSON мы передадим в запрос.

    Далее на стороне MySQL надо разобрать JSON на элементы и вставить в таблицу. Это делается одним запросом.
    INSERT INTO destination_table (single_value)
    SELECT single_value
    FROM JSON_TABLE( ? ,
                     '$[*]' COLUMNS ( single_value VARCHAR(255) PATH '$' )) jsontable;

    И... а, собственно, всё.

    Осталось только убедиться, что размер строкового представления данных не превышает установленный в MySQL размер входящего пакета, и, если превышает, то соответствующим образом подрихтовать сессионную переменную max_allowed_packet. Впрочем, дефолтно там 67108864 байтов, это порядка 1480 байтов на элемент - должно хватить.
    Ответ написан
    Комментировать
  • Как пробросить компьютер в другую сеть?

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

    Именно из Интернета? или из сетки 192.168.1.0/24?

    У меня только такая идея: вставить в нужный компьютер в сети Б(которая без интернета) вторую сетевую карту и подключить её к сети А(с интернетом), выдать адрес из диапазона 192.168.1.1-254, дальше как-нибудь настроить одновременную работу обеих карт, метрики там, всё такое.

    Ну правильная идея. Причём карты будут работать одновременно, и ничего настраивать не нужно. Ведь, как я понимаю, в 198.148.46.0/24 ни дефолтного шлюза, ни статических маршрутов нет.

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