Ответы пользователя по тегу MySQL
  • Можно ли восстановить удалённую mysql базу?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Шансов восстановить удалённую таблицу обычно мало, а перезатёртую - практически нет.

    Есть пара иногда работающих практик:

    Восстановление через файловую систему:
    Некоторое время после удаления таблицы, она может оставаться на жёстком диске.

    Нужно как можно скорее предотвратить дальнейшую запись на диск: остановить MySQL, отмонтировать раздел с базой данных и примонтировать его в режиме read-only, или в принципе снять образ диска (не копию файлов) и исследовать его только в режиме read-only.

    Затем можно исследовать раздел с базой на наличие удалённых таблиц/баз с помощью общих инструментов, вроде extundelete, или специализированных, вроде undrop-for-innodb.

    Восстановление через binlog:
    Можно попытаться восстановить все запросы (CREATE TABLE, INSERT и т.д.) к базе за весь настроенный срок существования binlog.
    Если нужные данные в движок были добавлены в пределах этого срока, вы сможете восстановить их полностью. Если нет - только те данные, что попали в срок жизни binlog.
    Ответ написан
    1 комментарий
  • Как хранить статистику просмотров в MySQL и выбирать наиболее просматриваемое?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Подскажите, все ли правильно я вижу

    Да, по-моему подход работающий.

    Для того, чтобы не блокировать таблицу/не замедлять работу приложения инсертом с каждого посещения, некоторые приложения делают INSERT во временную MEMORY-таблицу (предполагается, что у них более быстрый INSERT), а оттуда раз в, например, 10 минут добавляют все накопившееся в основную таблицу. Правда MEMORY-таблицы не хранятся на диске, и если вы перезапустите службу в момент, когда какие-то просмотры будут в этой временной таблице, то эти незаписавшиеся в основную таблицу просмотры потеряются.
    Ответ написан
    Комментировать
  • Как избежать дублирования контента при подгрузке?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    1. Скрывать дублируемую новость с помощью JS, подгружая вместо неё ещё +1.
    2. Подгружать новости не по offset, а по < ID загрузившихся новостей (из колонки ID).
    Ответ написан
    2 комментария
  • После переезда на MySQL 5.7.12 с MariaDB 5.5.46 перестали кешироваться запросы. В чем может быть дело?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Qcache "разогревается" в течение некоторого времени работы сервиса.
    Может быть, проходит недостаточно времени между рестартами?
    Может, пользователи пока не успели спровоцировать запросы для кеша?

    Спустя сколько времени аптайма ранее набирался кеш, и сколько по времени с запуска службы вы смотрите его сейчас?

    Ещё вариант:
    По умолчанию query_cache_size = 0.
    Нужно указать ему доступную память, чтобы он начал работать.

    https://mariadb.com/kb/en/mariadb/query-cache/#set...
    Он выключен по умолчанию из-за ограничений в некоторых средах: https://mariadb.com/kb/en/mariadb/query-cache/#lim...

    Ещё вариант:
    Может на новом сервере значительно более медлительные диски?
    Можно включить slow query log и посмотреть, на чём именно захлёбывается приложение или померить IOPS новых дисков. =) Или посмотреть iowait хранилища для БД с помощью инструмента "ioping".
    Ответ написан
  • MySQL как понять где проблема?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Использование "localhost" в качестве адреса воспринимается клиентской библиотекой MySQL, как подключение к unix socket.
    Укажите "127.0.0.1" для подключения по TCP/IP.

    Тоже самое происходит даже при использовании консольной утилиты "mysql". Если подключаться по "localhost", то она всегда будет пытаться подключиться к unix socket, пока вы не укажете опцию --protocol=tcp, или не укажете 127.0.0.1 вместо localhost.
    Ответ написан
    Комментировать