MariaDB тратит много времени на восстановление резервной копии

Итак, я сделал mysqldump довольно огромной базы данных и сейчас пытаюсь восстановить ее, используя:

mysql db_test

но похоже, что это не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому я боюсь, что происходит что-то плохое.

На данный момент:

  • Я проверил, что mysqld потребляет мой процессор (иногда до 80%) .
  • В журналах нет ничего важного.
  • Я вижу базу данных, созданную и заполненную множеством таблиц (не не закончится к концу этого года. Прошло около часа ...

    Итак, я сделал mysqldump довольно огромной базы данных и сейчас пытаюсь восстановить ее, используя:

    mysql db_test

    но похоже, что это не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому я боюсь, что происходит что-то плохое.

    На данный момент:

    • Я проверил, что mysqld потребляет мой процессор (иногда до 80%) .
    • В журналах нет ничего важного.
    • Я вижу базу данных, созданную и заполненную множеством таблиц (не не закончится к концу этого года. Прошло около часа ...

      Итак, я сделал mysqldump довольно огромной базы данных и сейчас пытаюсь восстановить ее, используя:

      mysql db_test

      но похоже, что это не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому я боюсь, что происходит что-то плохое.

      На данный момент:

      • Я проверил, что mysqld потребляет мой процессор (иногда до 80%) .
      • В журналах нет ничего важного.
      • Я вижу базу данных, созданную и заполненную множеством таблиц (не m пытается восстановить его сейчас, используя:

        mysql db_test

        , но похоже, что он не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому я боюсь, что происходит что-то плохое.

        На данный момент:

        • Я проверил, что mysqld потребляет мой процессор (иногда до 80%) .
        • В журналах нет ничего важного.
        • Я вижу базу данных, созданную и заполненную множеством таблиц (не m пытается восстановить его сейчас, используя:

          mysql db_test

          , но похоже, что он не закончится к концу этого года. Прошло около часа, а все еще «восстанавливается». Создание резервной копии заняло около 10 минут, поэтому я боюсь, что происходит что-то плохое.

          На данный момент:

          • Я проверил, что mysqld потребляет мой процессор (иногда до 80%) .
          • В журналах нет ничего важного.
          • Я вижу базу данных, созданную и заполненную множеством таблиц (не все хотя). Кроме того, когда я выполняю use db_test; , я получаю следующее сообщение:

            Чтение информации таблицы для завершения имен таблиц и столбцов Вы можно отключить эту функцию, чтобы ускорить запуск с помощью -A

          • Исходные файлы db, где около 25 ГБ, после целого часа df -h возвращает то же свободное пространство, что и раньше. Так что я полагаю, что он ничего не делает на диске.

          Что-то странное в том, что при проверке top я обнаружил, что kworker иногда потребляет до 100% процессора, чего не должно происходить


          Любая идея или что-нибудь, что я мог бы сделать, чтобы увидеть, что происходит?

1
задан 9 May 2016 в 17:44
2 ответа

Похоже, что базовые диски заняты. Проблема при восстановлении большой базы данных заключается в том, что для каждой (группы) INSERT требуется операция сброса / синхронизации, которая очень медленная на механических дисках (диск со скоростью 7200 об / мин составляет порядка ~ 100 операций ввода-вывода в секунду).

восстановления, вам пришлось временно указать MySQL / MariaDB на , а не на сбрасывать / синхронизировать проблемы. Для этого прервите восстановление и отредактируйте ваш /etc/my.ini следующими двумя строками:

  • innodb_flush_method = nosync
  • innodb_flush_log_at_trx_commit = 2

Затем перезапустите MariaDB и повторите попытку восстановления. . Теперь все должно идти намного быстрее.

После восстановления УДАЛИТЬ ВЫШЕ СТРОКИ вашей базы данных будет иметь короткую и плохую жизнь: операции сброса / синхронизации существуют по очень важным причинам. Хотя их можно отключить для восстановления, производственная база данных не должна никогда работать без них.

3
ответ дан 3 December 2019 в 17:04

Если ваше основное хранилище представляет собой простые старые диски, для базы данных MySQL на 25 ГБ на диске вполне нормально провести многочасовое восстановление -особенно для некоторых плохо структурированных баз данных (много кортежей, индексов и т. д.).

Для начала сожмите дамп, что сэкономит массу операций ввода-вывода и снизит нагрузку на кэш-память:

mysqldump foo |gzip >foo.sql.gz
zcat foo.sql.gz |mysql foo

В вашем случае, поскольку вы уже выполнили mysqldump:

gzip db_test.sql
zcat db_test.sql.gz |mysql db_test

Помимо производительности вашей системы (хранилище, ОЗУ и т. д.), настройки MySQL могут иметь огромное влияние. Но это целый опыт, ничего, кроме проблемы с ServerFault ...

2
ответ дан 3 December 2019 в 17:04

Теги

Похожие вопросы