Поиск

Найдены 9 статей по слову "mysql"

Ошибка InnoDB could not find key

Пример ошибки (получил ее от Nextcloud у MariaDB, когда закончилось место):

InnoDB could not find key no 1 with name mounts_user_root_index from dict cache for table nextcloud/oc_mounts

Как исправить.

  1. Заходим в консоль mysql
mysql -uLOGIN -p DATABASE
  1. Исправляем ошибки :)
mysql> ALTER TABLE oc_mounts FORCE;

Все, перезагрузка сервиса MariaDB не потребовалось, все заработало.

devops mysql

Какие самые большие таблицы в MySQL?

SELECT CONCAT(table_schema, '.', table_name),
CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows,
CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G') data,
CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G') idx,
CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
ROUND(index_length / data_length, 2) idxfrac
FROM information_schema.TABLES
ORDER BY data_length + index_length DESC
LIMIT 50;

Источник: https://highload.today/vybor-samykh-bolshikh-tablits-iz-mysql/

mysql

Битрикс редиректит на старый домен

После переноса сайта на другой домен или ip-адрес он может начать редиректить, при заходе на него, на старый сайт.

Ситуация может быть в конструкции кода редиректа, например:

<?php
header('Location: http://oldsite.example')

Но, возможно, что это не привязано к коду. И в коде решение найти будет проблематично. Тогда, скорее всего, дело в системе безопасности битрикса. Для того, чтобы ее убрать, необходимо зайти в консоль MySQL и выполнить следующую команду:

> DELETE FROM b_module WHERE `ID`='security';

Query OK, 1 row affected (0.001 sec)

Источник: http://blog.ispsystem.info/2019/05/bitrix.html

bitrix

Что такое Docker и что делать, если ваша команда его уже использует?

Что такое вообще этот docker и зачем он нужен?

Он обеспечивает изоляцию выполняемых программ в нем от окружения (программного обеспечения и настроек) вашей операционной системы.

Например, вы работаете над проектом, который использует PHP версии 7. И вдруг к вам на техподдержку приходит проект, который работает максимум на PHP 5.3. Что делать? Если не использовать Docker (или подобное ПО), то вам придется иметь на вашей рабочей машине две версии PHP и разруливать их. Учитывая остальное необходимое для работы приложения ПО, система довольно быстро замусоривается и вполне могут начаться конфликты между ПО, который необходим для одного проекта и неприемлим для другого.

Вы можете рассматривать контейнер docker’а как легковесную виртуальную машину (аналог vmware, virtualbox и т.п.). Только без графического интерфейса и выполняющую определенную программу.

Некоторые термины

Проект - исходный код и конфигурации проекта, над которым вы работаете, обычно находится в одном git-репозитории.

Образ - операционная система и набор программ, которые можно использовать для создания контейнера (программистам проще представлять его как “Класс”). Примеры - Ubuntu 18.04 с установленным PHP 7.1; Debian с установленным nginx; CentOS с установленным MySQL 5.7.

Контейнер - созданный на основе образа экземпляр, может накапливать внутри себя изменения (программистам проще представлять его как “Объект, экземпляр класса”).

Какая разница между командами docker и docker-compose?

Команда docker просто выполняет команду, которая следует в параметрах, например docker run hello-world запустит образ hello-world и покажет результат его выполнения.

Команда docker-compose работет с конфигурациями (файлы формата *.yml), которые содержат инструкции для сборки проекта. Также, он может запускать несколько контейнеров сразу, а не только один как команда docker.

Для разработки обычно используется docker-compose, т.к. он позволяет удобно передавать конфигурацию сборки между разработчиками.

Я только получил проект, что делать?

Для начала надо поднять проект локально. Для этого выполняется команда:

docker-compose up

Параметр up создает необходимые для работы проекта контейнеры. Если контейнеры уже были созданы, то он запускает их.

В самом простом случае этого должно быть достаточно чтобы запустить проект и начать работу.

Что за параметр -f?

Вам могла попадаться команда вида:

docker-compose -f docker-compose-dev.yml up

Параметр -f <путь_к_файлу_yml> позволяет указать путь к файлу конфигурации для запуска проекта.

Дело в том, что когда мы не указываем этот параметр, то это равнозначно -f docker-compose.yml - т.е. это стандартный путь к файлу конфигурации.

Т.е., две следующие команды - равнозначны (делают одно и то же):

docker-compose up
docker-compose -f docker-compose.yml up

Но, возможно есть несколько файлов конфигурации (например, один запускает только базу данных - docker-compose-db.yml, другой целиком бекенд - docker-compose-backend.yml, третий проект в продакшн режиме - docker-compose-production.yml), тогда и пригождается эта команда. В ней можно указать полный путь, например, /home/user/myproject/myconfigs/my-docker-compose.yml. Его можно применять для любого из параметров (up, down, start, stop, build и т.п.). Ставится всегда перед параметром, т.е. docker-compose -f <путь> <параметр start|stop|down|up|build>.

Что за параметр -d?

Это запуск проекта в фоновом режиме.

Например:

docker-compose up -d

Поднимает проект в фоне, т.е. вы не увидите логов приложения без особых команд. Ставится всегда после параметра, т.е. docker-compose <параметр> -d.

Я закончил работу с проектом, что делать?

Можно выполнить одну из двух команд.

Эта команда просто остановит контейнеры, то есть вы сможете быстро их запустить позже (командой docker-compose start):

docker-compose stop

А эта команда остановит и удалит контейнеры проекта, то есть вы освободите место на жестком диске, но запуск контейнеров будет производится дольше:

docker-compose down

Помните, что если вы использовали особую конфигурацию для поднятия проекта (параметр -f), то его же надо использовать и для этих команд, например, docker-compose -f docker-compose-db.yml stop.

Как посмотреть, какие контейнеры сейчас запущены?

Эта команда покажет запущенные контейнеры:

docker ps

А эта все созданные контейнеры:

docker ps -a

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

devops docker

Починить все базы данных и таблицы MySQL

В терминале (не в консоли mysql) выполните следующую команду:

$ mysqlcheck -u root -p -A --auto-repair

Пример ответа:

...
website.b_adv_banner_2_country                     OK
website.b_adv_banner_2_day                         OK
website.b_adv_banner_2_group                       OK
website.b_adv_banner_2_page                        OK
website.b_adv_banner_2_site                        OK
website.b_adv_banner_2_stat_adv                    OK
website.b_adv_banner_2_weekday                     OK
...

Для поиска: repair database, repair table.

bash bitrix mysql sql

Создание бекапов в Яндекс.Диск (Ubuntu)

Описание

Скрипт умеет:
- Делать бекапы директорий, например, /etc.
- Делать бекапы поддиректорий (разделяя их), например, /var/www/*.
- Делать дампы MySQL.
- Делать дампы PostgreSQL.
- Загружать все это дело в Яндекс.Диск.

Подготовка

Для начала необходимо получить токен для Яндекс.Диска.

Для этого:
1. Перейдите по этому URL https://oauth.yandex.ru/client/new.
2. Название введите любое, например, “server_backup” без кавычек.
3. Права выберите пункт “Яндекс.Диск REST API” и в нем “Доступ к папке приложения на Диске”.
4. Снизу нажмите “Подставить URL для разработки”.
5. Сохраните.

Вам выдаст подобные результаты:

ID: 61bf56f1e72a4112b83e1db9e44dbe9c
Пароль: 74087cd13d2247c48661c75617916b75
Callback URL: https://oauth.yandex.ru/verification_code
  1. Переходим по URL https://oauth.yandex.ru/authorize?response_type=token&display=popup&client_id=%ID%
    Обратите внимание. Замените в URL выше %ID% на то, что получили выше, т.е. в моем примере - “61bf56f1e72a4112b83e1db9e44dbe9c”.
  2. Нажимаем кнопку “Разрешить”.
  3. Копируем полученный токен и вставляем его в скрипт в YD_TOKEN (см. ниже).

Настройка

Скачайте файл backup_yd.sh и сохраните его на сервере.

Далее, вам необходимо изменить переменные в блоке “Init variables”:

# Базовый путь для сохранения бекапов.
BASE_BACKUP_DIR="/home/user/backups"

# Токен Yandex.Disk.
YD_TOKEN=""

# Пароль от пользователя root СУБД MySQL. Если она не используется, оставьте пустым.
MYSQL_ROOT_PASSWORD=""

# Делать дампы СУБД PostgreSQL?
# Пустая строка - нет
# "1" - да
USE_POSTGRESQL=""

# Список директорий, которые необходимо бекапить.
# В данном примере будет забекаплена директория /etc как архив etc.tar.gz и
# все поддиректории /var/www с соответствующими именами.
declare -a DIRS_FOR_BACKUP=('/etc' '/var/www/*');

# Размеры чанков (т.к. максимальный размер файлов ограничен, то необходимо
# разрезать архив на несколько частей. Чанк - и есть эта часть).
SPLIT_BY="200MiB"

Также, необходимо дать права на запуск:

chmod +x ./backup_yd.sh

Проверяем

Для проверки запустим скрипт:

./backup_yd.sh

В директории %BASE_BACKUP_DIR% будет создана директория с текущей датой, в ней поддиректории для файлов и дампов баз данных.
Все файлы бекапов разрезаются на чанки.

Затем будет произведена загрузка на Яндекс.Диск и директория будет удалена.

Примечание: Чтобы собрать бекап из чанков, используйте команду cat:

cat mybackup.tgz_* > mybackup.tgz

Настраиваем ежедневные бекапы по времени

Запускаем cron:

crontab -e

Добавляем следующую строку (впишите правильный путь до файла backup_yd.sh)

0 3 * * * /bin/bash /home/user/backups/backup_yd.sh

После этого сохраняйте и выходите из редактирования cron.

Все, теперь каждый день в 3 часа ночи будет создаваться новый бекап и загружаться в ваш Яндекс.Диск.

bash

UMongo

UMongo - аналог MySQL Workbench для MongoDB.

http://mongodb-tools.com/tool/umongo/

mongo

Как сделать дамп mysql и развернуть базу из дампа в консоли?

Дамп БД - это резервная копия базы данных.

Делаем дамп:

$ mysqldump -uLOGIN -pPASSWORD DATABASENAME > dump.sql

Разворачиваем из дампа:

$ mysql -uLOGIN -pPASSWORD DATABASENAME < dump.sql
bash

Table X is marked as crashed and should be repaired

Это ошибка обычно возникает из-за неожиданной перезагрузки СУБД.

В PhpMyAdmin или MySQL-консоли выполните следующий запрос:

REPAIR TABLE `mytable`

где mytable - таблица, указанная в ошибке.

sql