Ответы пользователя по тегу MySQL
  • Как передать данные без кавычек в execute() безопасно, чтобы предотвратить SQL-инъекции (PyMySql)?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    sql escape string для твоего языка программирования

    например для php
    https://www.php.net/manual/en/function.mysql-real-...

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    я бы сделал зеркало для системы
    и там уже 5-й рейд для всего остального.
    Или просто зеркало для всего - более чем достаточно, при наличии регулярных бэкапов.
    мутить более сложные рейды - обычно нужно только если совсем не хватает денег.
    Ответ написан
    Комментировать
  • Как правильно деплоить mysql базу/миграции?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Обычно в таких случаях я лезу на сервер и делаю `pt-online-schema-change`, но что делать для "правильного" CI/CD?


    В правильном CI/CD таких изменений быть не должно. Задача архитектора - создать приложение, которое легковесно и без проблем как деплоится, так и откатывается.
    Задача девопс инженера - автоматизировать деплой и откат разными инструментами.
    Понятно, что все могут работать вместе и разрабатывать какой-то флоу, но если разработчики приходят с такими процессами, тут нет волшебных ci/cd инструментов которые сделают тяжелую задачу мгновенной.

    Если вы не можете повлиять на решение девелоперов и архитекторов, то не важно - любое рабочее решение, которое вы придумаете в пределах вашей инфраструктуры будет норм. И две базы, и релиз по ночам и что-нибудь еще.
    Но DevOps как культура как раз и говорит, что надо менять подход к работе, а не взять крутого человека, который возьмет весь бардак, засунет его в какой-нить ансибл/дженкинс, подключит плагин с AI и все порешается без изменений.
    Ответ написан
    6 комментариев
  • Как переносятся базы данных Postgresql и Mysql?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Много вариантов

    Сделать дамп и развернуть его на другой базе.

    Поднять репликацию, подождать пока базы синхронизируются, убрать старую

    Если базы одинаковой версии, можно конечно и файлы тупо скопировать, но это редко практикуется.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    ОС FreeBSD 7.2
    Lighttpd 1.4.25
    PHP 4.4.9
    MySQL 4.1.25

    Уверен, что все это также легко поднимется на Линуксе. Возможно придется поставить не самую свежую версию, а попробовать ставить свежий, пробовать ставить эти версии, если не прокатило, ставить более старую версию И так пока не заведется.
    Линукс заводить и поддерживать в виртуалке будет проще, чем FreeBSD.

    А вообще, если есть навыки программирования хотя бы минимальные, скопировать весь сайт и попробовать переписать под новые версии php, гугля ошибки и их решение. Очень много разных продуктов в мире приходилось апгрейдить. Можно вообще не знать php и с гугл-девелоп или stackoverfow-девелопментом можно все завести и на современных версиях.
    Ответ написан
    1 комментарий
  • Как быстро развернуть 5гб mysql дамп в Windows?

    saboteur_kiev
    @saboteur_kiev Куратор тега Windows
    software engineer
    Ускорить работу с дисковой системой можно, если у тебя в дампе множество инсертов.
    Подели их на куски и оберни скажем каждые тысячу инсертов транзакцией:
    START TRANSACTION;
       INSERT ...
       INSERT ...
       ...
       COMMIT;


    Отключи проверку уникальности ключей перед восстановлением
    SET FOREIGN_KEY_CHECKS = 0;
       SET UNIQUE_CHECKS = 0;

    после включи ее назад
    SET UNIQUE_CHECKS = 1;
      SET FOREIGN_KEY_CHECKS = 1;


    Это то, что навскидку.
    А так - сам mysql достаточно хорошо оптимизирован и под Линукс и под Виндовс. Думаю у тебя все же винда и линукс имеют либо разные спецификации железа либо настройки самой mysql..
    Ответ написан
    2 комментария
  • Terminal close -- query aborted при заливке дампа как победить?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    А что с лимитами в mysqld?

    net_read_timeout = ???
    net_write_timeout = ???

    max_allowed_packet= ???
    bulk_insert_buffer_size= ???
    Ответ написан
  • Как ускорить mysql?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Не так важно сколько строк в таблице, сколько их размер, чтобы говорить про оперативку.

    500 млн строк длинной в 10 символов может быть всего лишь 5 гб, и полностью влезать в оперативку почти любого домашнего компа. Можно посмотреть размер базы, поправить настройки mysql.

    Но правильнее будет проанализировать запрос, возможно построить правильные индексы руками.
    Ответ написан
    Комментировать
  • Как выполнить backup базы данных mysql запросом?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Заходишь в mysql и там

    mysql> system  mysqldump -u USER -p PASSWORD DATABASE > /path/to/file/dump.sql
    Ответ написан
  • Что быстрее отрабатывает — запрос к файлу или в БД?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В нормальной системе, и файл и база размером в 1000-5000 строк после первого чтения будет висеть в кеше оперативки, и доступ будет примерно одинаковый.

    Вот уже в зависимости от сложности запроса, может быть разница в том, как долго обрабатывать запрос.
    При этом при работе с базой, которая крутится отдельным процессом и скорее всего запрос в нее будет выполняться на другом ядре, может дать прирост производительности. А может и не дать.

    В общем в вашем случае нет смысла заниматься преждевременной оптимизацией. Либо делаете как удобно, либо пишете нагрузочный тест, и меряете на конкретном примере.
    Ответ написан
    Комментировать
  • Как настроить сервер и код на многочисленные одновременные запросы?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    А почему бы при нажатии на кнопку не создавать транзакцию, а делать запись в отдельную таблицу с задачей?

    А на бэкенде просто в цикле или триггером проверять наличие записей в этой таблице, и выполнять транзакции по очереди?

    Ну то есть собсвтенно организовать очередь
    Ответ написан
    2 комментария
  • Изменения прав пользователя бд через ssh?

    saboteur_kiev
    @saboteur_kiev Куратор тега SSH
    software engineer
    Бд настроена так, что подключиться к ней можно только с одного ip. А я с любого другого ip не могу подключится, тем более локально. И через ssh к mysql тоже не могу, чтобы разрешить доступ с любого ip к бд. Как дать доступ к бд с любого ip?


    Открыть доступ для любого IP
    Ответ написан
    Комментировать
  • Шардинг и резервное копирование/восстановление?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    например шарды одной большой таблицы будут разнесены на 2 и более физических сервера

    А это зачем?
    Так не делают. Горизонтально делают для увеличения скорости отдачи.
    Можно конечно данные разнести на разные сервера, но это делается на уровне архитектуры бизнес-логики, а не на уровне одной таблицы.
    Ответ написан
  • Как в minikube настроить работу приложения с Mysql?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    База отдельно, приложение отдельно.
    Да, можно базу запустить в контейнере, примаунтить к контейнеру какой-то сетевой диск где будут хранится датафайлы.
    Но если предполагается использование облака, то там есть готовые сервисы баз данных, для которых вообще не нужно думать о контейнерах, о ручном управлении.
    Ответ написан
  • Ограничение подключений к базе данных?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    прописать ограничение на подключение у mysql юзеров командой:

    ALTER USER 'user1'@'localhost' WITH MAX_USER_CONNECTIONS 1;
    Ответ написан
    1 комментарий
  • Как лучше хранить атрибуты JSON или MSQL?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Так а откуда мы знаем как часто какие запросы нужно делать.
    Для выборке по разны поля, понятно что удобнее раскидать по полям или даже таблица, для упрощения индексации.
    Если же вынимать весь json по id, то может быть быстрее будет хранить json
    Ответ написан
    Комментировать
  • Как лучше сохранять игровой прогресс в MySql?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    50 тысяч строк это вообще не проблема.
    Если состояние каждого уровня хранить как байт, то это всего 50 кбайт.
    Даже если хранить как строки, с учетом накладных расходов mysql, займет ну пару мегабайт.
    На данном этапе можно вообще не париться.

    Инвентарь - тоже, каждый предмет в отдельной строке с указанием владельца и места, и всех параметров предмета.

    Базы данных были для того и созданы, что подобного уровня объемы это мелочи.
    Ответ написан
    3 комментария
  • Что если несколько пользователей одновременно обратятся к скрипту?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1) разные пользователи одновременно обращаются к разным php-скриптам на nginx или apache сервере?

    Не очень понятен вопрос. Каким образом разные пользователи обращаются к разным php скриптам ?
    Пользователи обращаются к веб серверу (apache/nginx), и к скриптам (с точки зрения скрипта) обращается только один пользователь, от имени которого запущен собственно apache/nginx.
    Как работает многозадачность в apache/nginx можно читать спецификации. Но парралельная обработка одного и того же скрипта не проблема.

    2) а если одновременно и к одному скрипту?

    Тоже самое

    3) несколько пользователей по средством скрипта одновременно запросили данные из БД (MySQL), например, для рендера динамической страницы (и если эта самая страница не закеширована не сервере)?

    Опять таки, запрос идет от одного пользователя, от имени которого запущен веб-сервер, который запускает php скрипт, который делает запрос. Нормальная база данных написана так, чтобы обрабатывать много парралельных запросов. Поэтому подобный вопрос имеет смысл поднимать только для очень нагруженных серверов, когда скорости не хватает, и нужно идти в оптимизацию/кластеризацию.

    4) нужно одновременно записать в одну таблицу (MySQL) данные от нескольких пользователей? Например, они одновременно отправили комментарий?

    Mysql обработает запросы по очереди, в порядке их поступления. Именно потому, что в базу пишут не разные скрипты одновременно, а сам сервер базы - параллельные запросы он поставит в очередь и выполнит.
    Ответ написан
    2 комментария
  • При какой посещаемости сайта веб-сервер может сбоить?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Ну а в случае с VPS хостингом, сколько запросов может обрабатывать БД в секунду, и от чего это зависит?


    Зависит от разных вещей. Например сколько ваш сайт делает обращений в базу на каждую активность пользователей, используется ли кеширование, насколько тяжелые запросы.
    Ну а так - вы когда VPS заказываете, характеристики видно - сколько ядер, сколько оперативки, какая дисковая система используется (ssd?)

    P.S. Обычно, среднестатистический VPS не слабее shared хостинга.
    Ответ написан
    Комментировать
  • Как выполнить INSERT в таблицу со спец символами через bash скрипт?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    В одинарных кавычках можно передавать символы как есть
    В двойных - некоторые сохраняют специальное значение ($, \)
    бэкслеш экранирует один следующий символ, если это спецсимвол.

    Вы не привели примера строки, которая у вас не работает, но на самом деле там несложно.
    Можно выносить в отдельный файл, можно делать перенаправление через <
    Ответ написан